avenc_h263p ! rtph263ppay ! application/x-rtp ! udpsink fails to negotiate
@gdesmott
Submitted by Guillaume Desmottes Link to original bug (#729555)
Description
The following pipeline works "gst-launch-1.0 videotestsrc ! avenc_h263p ! rtph263ppay ! udpsink" but this one doesn't:
$ gst-launch-1.0 -v videotestsrc ! avenc_h263p ! rtph263ppay ! application/x-rtp ! udpsink
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0.GstPad:src: caps = video/x-raw, format=(string)I420, width=(int)320, height=(int)240, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive
/GstPipeline:pipeline0/avenc_h263p:avenc_h263p0.GstPad:sink: caps = video/x-raw, format=(string)I420, width=(int)320, height=(int)240, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive
ERROR: from element /GstPipeline:pipeline0/avenc_h263p:avenc_h263p0: GStreamer error: negotiation problem.
Additional debug info:
gstvideoencoder.c(1368): gst_video_encoder_chain (): /GstPipeline:pipeline0/avenc_h263p:avenc_h263p0:
encoder not initialized
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
/GstPipeline:pipeline0/avenc_h263p:avenc_h263p0.GstPad:sink: caps = NULL
/GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0.GstPad:src: caps = NULL
Freeing pipeline ...
In the first pipeline, gst_ffmpeg_caps_with_codecid() is called with "video/x-h263, variant=(string)itu" (1 struct) and so everything works fine.
But in the second one, it's called with "video/x-h263, variant=(string)itu, h263version=(string)h263, annex-f=(boolean)false, annex-i=(boolean)false, annex-j=(boolean)false, annex-t=(boolean)false; video/x-h263, variant=(string)itu, h263version=(string)h263" (2 structs); this function only use the first structure and so it fails to negotiate.