GNOME Bugzilla – Bug 514889
Bogus output from RTP data test
Last modified: 2008-02-13 07:36:32 UTC
This output doesn't cause the test to fail, but it'd be nice to shut it up if it's expected-good behaviour in the absence of an AMR decoder: Running suite(s): rtp_data_test Error from element rtpamrpay0: The stream is in the wrong format. gstrtpamrpay.c(348): gst_rtp_amr_pay_handle_buffer (): /rtpamrpay-rtpamrdepay-pipeline/rtpamrpay0: received incomplete AMR frames Error from element fdsrc0: Internal data flow error. gstbasesrc.c(2165): gst_base_src_loop (): /rtpmp4gpay-rtpmp4gdepay-pipeline/fdsrc0: streaming task paused, reason not-negotiated (-4)
*** Bug 515957 has been marked as a duplicate of this bug. ***
It doesn't seem to be caused by the absence of a AMR decoder, instead the test data that is used are just zeroes which is not accepted as valid AMR data by rtpamrpay. Not sure what's wrong with the mp4g part but I guess it's the same issue. Marking as blocker as we probably should have a) a clean unit test suite for release and b) the tests should actually fail on these errors as nothing worked.
Created attachment 105023 [details] [review] patch to fix the problem - Actually send valid amr data to the payloader instead of 20 zero-bytes - The mp4g payloader expects codec_data on the caps
Works fine for me... but why were the tests not failing before and only those messages were printed? Apart from that it seems to leak buffers: ==13050== ==13050== 280 (80 direct, 200 indirect) bytes in 1 blocks are definitely lost in loss record 5,727 of 5,848 ==13050== at 0x4024AB8: malloc (vg_replace_malloc.c:207) ==13050== by 0x42C994C: g_malloc (in /usr/lib/libglib-2.0.so.0.1505.0) ==13050== by 0x42DEBAD: g_slice_alloc (in /usr/lib/libglib-2.0.so.0.1505.0) ==13050== by 0x42DF3B4: g_slice_alloc0 (in /usr/lib/libglib-2.0.so.0.1505.0) ==13050== by 0x4143C96: g_type_create_instance (in /usr/lib/libgobject-2.0.so.0.1505.0) ==13050== by 0x407C744: gst_mini_object_new (gstminiobject.c:181) ==13050== by 0x405D2F4: gst_buffer_new (gstbuffer.c:291) ==13050== by 0x405D931: gst_buffer_new_and_alloc (gstbuffer.c:320) ==13050== by 0x4A395EF: gst_fd_src_create (gstfdsrc.c:380) ==13050== by 0x4A79174: gst_push_src_create (gstpushsrc.c:117) ==13050== by 0x4A6AD68: gst_base_src_get_range (gstbasesrc.c:1776) ==13050== by 0x4A6EAEE: gst_base_src_loop (gstbasesrc.c:2018) ==13050== by 0x409CB2F: gst_task_func (gsttask.c:192) ==13050== by 0x42EB58A: (within /usr/lib/libglib-2.0.so.0.1505.0) ==13050== by 0x42E98FE: (within /usr/lib/libglib-2.0.so.0.1505.0) ==13050== by 0x433E4FA: start_thread (in /lib/i686/cmov/libpthread-2.7.so) ==13050== by 0x442793D: clone (in /lib/i686/cmov/libc-2.7.so) ==13084== ==13084== 248 (80 direct, 168 indirect) bytes in 1 blocks are definitely lost in loss record 5,660 of 5,846 ==13084== at 0x4024AB8: malloc (vg_replace_malloc.c:207) ==13084== by 0x42C994C: g_malloc (in /usr/lib/libglib-2.0.so.0.1505.0) ==13084== by 0x42DEBAD: g_slice_alloc (in /usr/lib/libglib-2.0.so.0.1505.0) ==13084== by 0x42DF3B4: g_slice_alloc0 (in /usr/lib/libglib-2.0.so.0.1505.0) ==13084== by 0x4143C96: g_type_create_instance (in /usr/lib/libgobject-2.0.so.0.1505.0) ==13084== by 0x407C744: gst_mini_object_new (gstminiobject.c:181) ==13084== by 0x405D2F4: gst_buffer_new (gstbuffer.c:291) ==13084== by 0x405D931: gst_buffer_new_and_alloc (gstbuffer.c:320) ==13084== by 0x4A395EF: gst_fd_src_create (gstfdsrc.c:380) ==13084== by 0x4A79174: gst_push_src_create (gstpushsrc.c:117) ==13084== by 0x4A6AD68: gst_base_src_get_range (gstbasesrc.c:1776) ==13084== by 0x4A6EAEE: gst_base_src_loop (gstbasesrc.c:2018) ==13084== by 0x409CB2F: gst_task_func (gsttask.c:192) ==13084== by 0x42EB58A: (within /usr/lib/libglib-2.0.so.0.1505.0) ==13084== by 0x42E98FE: (within /usr/lib/libglib-2.0.so.0.1505.0) ==13084== by 0x433E4FA: start_thread (in /lib/i686/cmov/libpthread-2.7.so) ==13084== by 0x442793D: clone (in /lib/i686/cmov/libc-2.7.so) ==13104== ==13104== 85 (80 direct, 5 indirect) bytes in 1 blocks are definitely lost in loss record 5,454 of 5,869 ==13104== at 0x4024AB8: malloc (vg_replace_malloc.c:207) ==13104== by 0x42C994C: g_malloc (in /usr/lib/libglib-2.0.so.0.1505.0) ==13104== by 0x42DEBAD: g_slice_alloc (in /usr/lib/libglib-2.0.so.0.1505.0) ==13104== by 0x42DF3B4: g_slice_alloc0 (in /usr/lib/libglib-2.0.so.0.1505.0) ==13104== by 0x4143C96: g_type_create_instance (in /usr/lib/libgobject-2.0.so.0.1505.0) ==13104== by 0x407C744: gst_mini_object_new (gstminiobject.c:181) ==13104== by 0x405D2F4: gst_buffer_new (gstbuffer.c:291) ==13104== by 0x405DDD5: _gst_buffer_copy (gstbuffer.c:249) ==13104== by 0x407C6A0: gst_mini_object_copy (gstminiobject.c:209) ==13104== by 0x4AB4CA1: gst_rtp_mp4g_pay_setcaps (gstrtpmp4gpay.c:398) ==13104== by 0x4AD2BC1: gst_basertppayload_setcaps (gstbasertppayload.c:298) ==13104== by 0x4081267: gst_pad_set_caps (gstpad.c:2383) ==13104== by 0x4082AB9: gst_pad_chain_unchecked (gstpad.c:2437) ==13104== by 0x4082FB5: gst_pad_push (gstpad.c:3691) ==13104== by 0x4A7426D: gst_base_transform_chain (gstbasetransform.c:1610) ==13104== by 0x40828E8: gst_pad_chain_unchecked (gstpad.c:3523) ==13104== by 0x4082FB5: gst_pad_push (gstpad.c:3691) ==13104== by 0x4A6EB80: gst_base_src_loop (gstbasesrc.c:2111) ==13104== by 0x409CB2F: gst_task_func (gsttask.c:192) ==13104== by 0x42EB58A: (within /usr/lib/libglib-2.0.so.0.1505.0) ==13104== ==13104== ==13104== 85 (80 direct, 5 indirect) bytes in 1 blocks are definitely lost in loss record 5,455 of 5,869 ==13104== at 0x4024AB8: malloc (vg_replace_malloc.c:207) ==13104== by 0x42C994C: g_malloc (in /usr/lib/libglib-2.0.so.0.1505.0) ==13104== by 0x42DEBAD: g_slice_alloc (in /usr/lib/libglib-2.0.so.0.1505.0) ==13104== by 0x42DF3B4: g_slice_alloc0 (in /usr/lib/libglib-2.0.so.0.1505.0) ==13104== by 0x4143C96: g_type_create_instance (in /usr/lib/libgobject-2.0.so.0.1505.0) ==13104== by 0x407C744: gst_mini_object_new (gstminiobject.c:181) ==13104== by 0x405D2F4: gst_buffer_new (gstbuffer.c:291) ==13104== by 0x405D931: gst_buffer_new_and_alloc (gstbuffer.c:320) ==13104== by 0x40A82E3: gst_value_deserialize_buffer (gstvalue.c:1411) ==13104== by 0x40ACD72: gst_value_deserialize (gstvalue.c:3309) ==13104== by 0x4AB3E53: gst_rtp_mp4g_depay_setcaps (gstrtpmp4gdepay.c:222) ==13104== by 0x4AD47EC: gst_base_rtp_depayload_setcaps (gstbasertpdepayload.c:236) ==13104== by 0x4081267: gst_pad_set_caps (gstpad.c:2383) ==13104== by 0x4082AB9: gst_pad_chain_unchecked (gstpad.c:2437) ==13104== by 0x4082FB5: gst_pad_push (gstpad.c:3691) ==13104== by 0x4AD1997: gst_basertppayload_push (gstbasertppayload.c:688) ==13104== by 0x4AB49F3: gst_rtp_mp4g_pay_handle_buffer (gstrtpmp4gpay.c:509) ==13104== by 0x4AD29E1: gst_basertppayload_chain (gstbasertppayload.c:397) ==13104== by 0x40828E8: gst_pad_chain_unchecked (gstpad.c:3523) ==13104== by 0x4082FB5: gst_pad_push (gstpad.c:3691) ==13108== ==13108== 248 (80 direct, 168 indirect) bytes in 1 blocks are definitely lost in loss record 5,707 of 5,909 ==13108== at 0x4024AB8: malloc (vg_replace_malloc.c:207) ==13108== by 0x42C994C: g_malloc (in /usr/lib/libglib-2.0.so.0.1505.0) ==13108== by 0x42DEBAD: g_slice_alloc (in /usr/lib/libglib-2.0.so.0.1505.0) ==13108== by 0x42DF3B4: g_slice_alloc0 (in /usr/lib/libglib-2.0.so.0.1505.0) ==13108== by 0x4143C96: g_type_create_instance (in /usr/lib/libgobject-2.0.so.0.1505.0) ==13108== by 0x407C744: gst_mini_object_new (gstminiobject.c:181) ==13108== by 0x405D2F4: gst_buffer_new (gstbuffer.c:291) ==13108== by 0x405D931: gst_buffer_new_and_alloc (gstbuffer.c:320) ==13108== by 0x4A395EF: gst_fd_src_create (gstfdsrc.c:380) ==13108== by 0x4A79174: gst_push_src_create (gstpushsrc.c:117) ==13108== by 0x4A6AD68: gst_base_src_get_range (gstbasesrc.c:1776) ==13108== by 0x4A6EAEE: gst_base_src_loop (gstbasesrc.c:2018) ==13108== by 0x409CB2F: gst_task_func (gsttask.c:192) ==13108== by 0x42EB58A: (within /usr/lib/libglib-2.0.so.0.1505.0) ==13108== by 0x42E98FE: (within /usr/lib/libglib-2.0.so.0.1505.0) ==13108== by 0x433E4FA: start_thread (in /lib/i686/cmov/libpthread-2.7.so) ==13108== by 0x442793D: clone (in /lib/i686/cmov/libc-2.7.so) ==13112== ==13112== 248 (80 direct, 168 indirect) bytes in 1 blocks are definitely lost in loss record 5,707 of 5,909 ==13112== at 0x4024AB8: malloc (vg_replace_malloc.c:207) ==13112== by 0x42C994C: g_malloc (in /usr/lib/libglib-2.0.so.0.1505.0) ==13112== by 0x42DEBAD: g_slice_alloc (in /usr/lib/libglib-2.0.so.0.1505.0) ==13112== by 0x42DF3B4: g_slice_alloc0 (in /usr/lib/libglib-2.0.so.0.1505.0) ==13112== by 0x4143C96: g_type_create_instance (in /usr/lib/libgobject-2.0.so.0.1505.0) ==13112== by 0x407C744: gst_mini_object_new (gstminiobject.c:181) ==13112== by 0x405D2F4: gst_buffer_new (gstbuffer.c:291) ==13112== by 0x405D931: gst_buffer_new_and_alloc (gstbuffer.c:320) ==13112== by 0x4A395EF: gst_fd_src_create (gstfdsrc.c:380) ==13112== by 0x4A79174: gst_push_src_create (gstpushsrc.c:117) ==13112== by 0x4A6AD68: gst_base_src_get_range (gstbasesrc.c:1776) ==13112== by 0x4A6EAEE: gst_base_src_loop (gstbasesrc.c:2018) ==13112== by 0x409CB2F: gst_task_func (gsttask.c:192) ==13112== by 0x42EB58A: (within /usr/lib/libglib-2.0.so.0.1505.0) ==13112== by 0x42E98FE: (within /usr/lib/libglib-2.0.so.0.1505.0) ==13112== by 0x433E4FA: start_thread (in /lib/i686/cmov/libpthread-2.7.so) ==13112== by 0x442793D: clone (in /lib/i686/cmov/libc-2.7.so) 100%: Checks: 15, Failures: 0, Errors: 0
Why didn't it fail before? no idea, the payloader are not changed. The test is a new thing in 0.10.7, though.
The test failed and leaked from the moment it was committed.
Created attachment 105055 [details] [review] patch to fix various leaks - free sprops and buffer in error cases in H264 payloader - fix leak in mp4g depayloader when construction the caps - don't leak config string in the mp4g payloader - don't leak buffers and headers in theora and vorbis payloaders
Will test if this makes all the leaks disappear for me later unless someone else can confirm first. They look fine, from review.
I still see one buffer leaked but that's the fix in -base. Committed: patch by: Wim Taymans <wim.taymans@collabora.co.uk> fixes: #514889 * gst/rtp/gstrtph264pay.c: * gst/rtp/gstrtpmp4gdepay.c: * gst/rtp/gstrtpmp4gpay.c: * gst/rtp/gstrtpmp4gpay.h: * gst/rtp/gstrtptheorapay.c: * gst/rtp/gstrtpvorbispay.c: Fix various leaks shown up in valgrind - free sprops and buffer in error cases in H264 payloader - fix leak in mp4g depayloader when construction the caps - don't leak config string in the mp4g payloader - don't leak buffers and headers in theora and vorbis payloaders * tests/check/elements/rtp-payloading.c: Fix the RTP data test - Actually send valid amr data to the payloader instead of 20 zero-bytes - The mp4g payloader expects codec_data on the caps