After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 680194 - [0.11] mpeg2dec: gst_video_decoder_alloc_output_frame: assertion `frame->output_buffer == NULL' failed with cluttersink and fakesink
[0.11] mpeg2dec: gst_video_decoder_alloc_output_frame: assertion `frame->outp...
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gst-plugins-ugly
0.11.x
Other Linux
: Normal major
: 0.11.x
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on: 679878
Blocks:
 
 
Reported: 2012-07-18 18:38 UTC by Tim-Philipp Müller
Modified: 2012-07-19 08:42 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
mpeg2dec: Store temporary buffers out of the way (5.13 KB, patch)
2012-07-19 08:00 UTC, Edward Hervey
none Details | Review

Description Tim-Philipp Müller 2012-07-18 18:38:34 UTC
+++ This bug was initially created as a clone of Bug #679878 +++

Re-opening, since original issue still remains:

Starting program: /home/tpm/gst/0.11/gstreamer/tools/.libs/lt-gst-launch-1.0 filesrc location=/home/tpm/samples/misc/331301-xgl-gentoo-lycos-mpeg2dec-cropping.avi \! decodebin \! video/x-raw \! fakesink

** (gst-launch-1.0:20833): CRITICAL **: gst_video_decoder_alloc_output_frame: assertion `frame->output_buffer == NULL' failed

Program received signal SIGTRAP, Trace/breakpoint trap.

Thread 140737256408832 (LWP 20838)

  • #0 g_logv
    at /tmp/buildd/glib2.0-2.32.3/./glib/gmessages.h line 101
  • #1 g_log
    at /tmp/buildd/glib2.0-2.32.3/./glib/gmessages.c line 792
  • #2 g_return_if_fail_warning
    at /tmp/buildd/glib2.0-2.32.3/./glib/gmessages.c line 801
  • #3 gst_video_decoder_alloc_output_frame
    at gstvideodecoder.c line 2829
  • #4 gst_mpeg2dec_crop_buffer
    at gstmpeg2dec.c line 332
  • #5 handle_slice
    at gstmpeg2dec.c line 879
  • #6 gst_mpeg2dec_handle_frame
    at gstmpeg2dec.c line 964
  • #7 gst_video_decoder_decode_frame
    at gstvideodecoder.c line 2460
  • #8 gst_video_decoder_chain_forward
    at gstvideodecoder.c line 1616
  • #9 gst_video_decoder_chain
    at gstvideodecoder.c line 1860
  • #10 gst_pad_chain_data_unchecked
    at gstpad.c line 3588
  • #11 gst_pad_push_data
    at gstpad.c line 3801
  • #12 gst_pad_push
    at gstpad.c line 3904
  • #13 gst_base_parse_push_frame
    at gstbaseparse.c line 2080
  • #14 gst_base_parse_handle_and_push_frame
    at gstbaseparse.c line 1905
  • #15 gst_base_parse_finish_frame
    at gstbaseparse.c line 2200
  • #16 gst_mpegv_parse_handle_frame
    at gstmpegvideoparse.c line 602
  • #17 gst_base_parse_handle_buffer
    at gstbaseparse.c line 1770
  • #18 gst_base_parse_chain
    at gstbaseparse.c line 2589
  • #19 gst_pad_chain_data_unchecked
    at gstpad.c line 3588
  • #20 gst_pad_push_data
    at gstpad.c line 3801
  • #21 gst_pad_push
    at gstpad.c line 3904
  • #22 gst_single_queue_push_one
    at gstmultiqueue.c line 1057
  • #23 gst_multi_queue_loop
    at gstmultiqueue.c line 1303
  • #24 gst_task_func
    at gsttask.c line 316
  • #25 g_thread_pool_thread_proxy
    at /tmp/buildd/glib2.0-2.32.3/./glib/gthreadpool.c line 309
  • #26 g_thread_proxy
    at /tmp/buildd/glib2.0-2.32.3/./glib/gthread.c line 801
  • #27 start_thread
    at pthread_create.c line 304
  • #28 clone
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S line 112
  • #29 ??

This works fine now with xvimagesink, but still fails with other videosinks such as cluttersink or fakesink  (that don't support the advanced video shizzle, presumably).

Sample file:
http://samplemedia.linaro.org/MPEG2/big_buck_bunny_1080p_MPEG2_MP2_25fps_6600K_short.MPG

Sample pipeline:
$ gst-launch-1.0 filesrc location= /home/tpm/samples/linaro.org/MPEG2/big_buck_bunny_1080p_MPEG2_MP2_25fps_6600K_short.MPG ! mpegpsdemux ! mpeg2dec ! fakesink -v
Comment 1 Edward Hervey 2012-07-19 08:00:33 UTC
Created attachment 219199 [details] [review]
mpeg2dec: Store temporary buffers out of the way

When mpeg2dec needs to do cropping (because downstream can't handle it),
we need temporary buffers to decode to.

Use the user_data field to store those, and unify the rest of the code
that needs to touch a buffer (regardless of how/where it was allocated).
Comment 2 Edward Hervey 2012-07-19 08:42:03 UTC
commit e0a5d6de601686dfc496b25b0b96c0996f0d202f
Author: Edward Hervey <edward.hervey@collabora.co.uk>
Date:   Thu Jul 19 09:56:17 2012 +0200

    mpeg2dec: Store temporary buffers out of the way
    
    When mpeg2dec needs to do cropping (because downstream can't handle it),
    we need temporary buffers to decode to.
    
    Use the user_data field to store those, and unify the rest of the code
    that needs to touch a buffer (regardless of how/where it was allocated).
    
    https://bugzilla.gnome.org/show_bug.cgi?id=680194