Hi,<br />
<br />
rtph264pay failed to work on my ARM9 target board.<br />
The target board is based on FSL Mx27 and the mfw_vpuencoder plugin is an video encoder based on MX27 VPU accelerator.<br />
<br />
The gstreamer core is 0.10.35, base plugin is 0.10.34, and good plugin is 0.10.30.<br />
<br />
The launching command and the debug message is as below:<br />
<br />
gst-launch-0.10 -v --gst-debug=rtph264pay:5 videotestsrc ! 'video/x-raw-yuv,format=(fourcc)I420,width=176,height=144,framerate=30/1' ! mfw_vpuencoder codec-type=std_avc width=176 height=144 qp=35 gopsize=30 framerate=25 ! rtph264pay ! udpsink host=192.168.1.222 port=5434 <br />
<br />
Setting pipeline to PAUSED ...<br />
Product Info: i.MX27<br />
VPU Version: firmware 2.2.5; libvpu: 3.3.2<br />
MFW_GST_VPU_ENCODER_PLUGIN build on Sep 22 2011 14:05:53.<br />
/GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0 .GstPad:src: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)176, height=(int)144, framerate=(fraction)30/1, color-matrix=(string)sdtv, chroma-site=(string)mpeg2<br />
Pipeline is PREROLLING ...<br />
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.G stPad:src: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)176, height=(int)144, framerate=(fraction)30/1, color-matrix=(string)sdtv, chroma-site=(string)mpeg2<br />
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.G stPad:sink: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)176, height=(int)144, framerate=(fraction)30/1, color-matrix=(string)sdtv, chroma-site=(string)mpeg2<br />
/GstPipeline:pipeline0/Mfw GstVPU_Enc:mfwgstvpu_enc0.GstPad:sink: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)176, height=(int)144, framerate=(fraction)30/1, color-matrix=(string)sdtv, chroma-site=(string)mpeg2<br />
/GstPipeline:pipeline0/Mfw GstVPU_Enc:mfwgstvpu_enc0.GstPad:sink: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)176, height=(int)144, framerate=(fraction)30/1, color-matrix=(string)sdtv, chroma-site=(string)mpeg2<br />
/GstPipeline:pipeline0/MfwGstVPU_Enc:mfwgstvpu_enc0.GstPad:src: caps = video/x-h264, height=(int)144, width=(int)176, framerate=(fraction)25/1<br />
0:00:21.673947217 1759 0xbdb48 DEBUG rtph264pay gstrtph264pay.c:942:gst_rtp_h264_pay_handle_buffer:<rtph264pay0> got 1327 bytes<br />
<br />
0:00:21.675190375 1759 0xbdb48 DEBUG rtph264pay gstrtph264pay.c:1003:gst_rtp_h264_pay_handle_buffer:<rtph264pay0> found first start at 1, bytes left 1326<br />
<br />
0:00:21.675997743 1759 0xbdb48 DEBUG rtph264pay gstrtph264pay.c:1036:gst_rtp_h264_pay_handle_buffer:<rtph264pay0> found next start at 9 of size 9<br />
0:00:21.676328420 1759 0xbdb48 DEBUG rtph264pay gstrtph264pay.c:539:gst_rtp_h264_pay_decode_nal: NAL payload len=9<br />
0:00:21.676657066 1759 0xbdb48 DEBUG rtph264pay gstrtph264pay.c:551:gst_rtp_h264_pay_decode_nal: Found SPS 0 3 7 Len=9<br />
<br />
0:00:21.677548269 1759 0xbdb48 DEBUG rtph264pay gstrtph264pay.c:1036:gst_rtp_h264_pay_handle_buffer:<rtph264pay0> found next start at 5 of size 5<br />
0:00:21.677884961 1759 0xbdb48 DEBUG rtph264pay gstrtph264pay.c:539:gst_rtp_h264_pay_decode_nal: NAL payload len=5<br />
0:00:21.678206164 1759 0xbdb48 DEBUG rtph264pay gstrtph264pay.c:561:gst_rtp_h264_pay_decode_nal: Found PPS 0 3 8 Len = 5<br />
<br />
<br />
0:00:21.679047517 1759 0xbdb48 DEBUG rtph264pay gstrtph264pay.c:521:next_start_code: Cannot find next NAL start code. returning 1303<br />
0:00:21.679530675 1759 0xbdb48 DEBUG rtph264pay gstrtph264pay.c:1036:gst_rtp_h264_pay_handle_buffer:<rtph264pay0> found next start at 1303 of size 1303<br />
0:00:21.679883157 1759 0xbdb48 DEBUG rtph264pay gstrtph264pay.c:539:gst_rtp_h264_pay_decode_nal: NAL payload len=1303<br />
0:00:21.680218269 1759 0xbdb48 DEBUG rtph264pay gstrtph264pay.c:570:gst_rtp_h264_pay_decode_nal: NAL: 0 3 5 Len = 1303<br />
/GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0.GstPad:src: caps = application/x-rtp, media=(string)NULL, <strong>clock-rate=(int)0</strong> , encoding-name=(string)NULL, sprop-parameter-sets=(string)\"Z0IAHqaCxOQA\\,aM44gAA\\=\", payload=(int)96, ssrc=(uint)3064141093, clock-base=(uint)2131484364, seqnum-base=(uint)3426<br />
0:00:21.683859848 1759 0xbdb48 DEBUG rtph264pay gstrtph264pay.c:705:gst_rtp_h264_pay_payload_nal:<rtph264pay0> Processing Buffer with NAL TYPE=7<br />
0:00:21.684295187 1759 0xbdb48 DEBUG rtph264pay gstrtph264pay.c:753:gst_rtp_h264_pay_payload_nal:<rtph264pay0> NAL Unit fit in one packet datasize=8 mtu=1400<br />
0:00:21.684848044 1759 0xbdb48 DEBUG rtph264pay gstrtph264pay.c:801:gst_rtp_h264_pay_payload_nal:<rtph264pay0> Copying 8 bytes to outbuf<br />
ERROR: from element /GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0: Element doesn't implement handling of this stream. Please file a bug.<br />
Additional debug info:<br />
gstbasertppayload.c(843): gst_basertppayload_prepare_push (): /GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0:<br />
<strong>subclass did not specify clock-rate</strong><br />
ERROR: pipeline doesn't want to preroll.<br />
<br />
<br />
Setting pipeline to NULL ...<br />
/GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0.GstPad:src: caps = NULL<br />
<br />
(gst-launch-0.10:1759): GLib-GObject-WARNING **: invalid unclassed pointer in cast to `GstMiniObject'<br />
<br />
(gst-launch-0.10:1759): GStreamer-CRITICAL **: gst_mini_object_unref: assertion `GST_IS_MINI_OBJECT (mini_object)' failed<br />
/GstPipeline:pipeline0/MfwGstVPU_Enc:mfwgstvpu_enc0.GstPad:src: caps = NULL<br />
/GstPipeline:pipeline0/MfwGstVPU_Enc:mfwgstvpu_enc0.GstPad:sink: caps = NULL<br />
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = NULL<br />
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = NULL<br />
/GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0.GstPad:src: caps = NULL<br />
Freeing pipeline ...<br />
<br />
<br />
The debug message "subclass did not specify clock-rate" comes from<br />
gst_basertppayload_prepare_push() in gstbasertppayload.c, when payload->clock_rate is 0.<br />
<br />
In gstrtph264pay.c, there is a function gst_rtp_h264_pay_setcaps() which set the clock_rate field<br />
by calling gst_basertppayload_set_options (basepayload, "video", TRUE, "H264", 90000).<br />
So it seems that function gst_rtp_h264_pay_setcaps() is never called.<br />
<br />
What's the functionality of the "set_caps" field of structure GstBaseRTPPayloadClass?<br />
When it got called?<br />
<br />
Regards,<br />
Robbie