GNOME Bugzilla – Bug 593165
glimagesink bug decoding from ts
Last modified: 2010-05-11 09:19:49 UTC
Just testing this pipe, gstreamer crash: miki@miki-laptop:~/gstreamer/git$ GST_DEBUG=gldisplay:3 gst-launch -v -m filesrc location=../dumps/itv.ts ! mpegtsdemux program-number="8442" ! queue ! mpeg2dec ! glupload ! glimagesink Estableciendo el flujo a PAUSADO ... El flujo se está PRECACHEANDO ... Got message #9 from element "glimagesink0" (state-changed): GstMessageState, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_STATE_VOID_PENDING; Got message #10 from element "glupload0" (state-changed): GstMessageState, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_STATE_VOID_PENDING; Got message #11 from element "mpeg2dec0" (state-changed): GstMessageState, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_STATE_VOID_PENDING; Got message #12 from element "queue0" (state-changed): GstMessageState, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_STATE_VOID_PENDING; Got message #13 from element "mpegtsdemux0" (state-changed): GstMessageState, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_STATE_VOID_PENDING; Got message #14 from element "filesrc0" (state-changed): GstMessageState, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_STATE_VOID_PENDING; Got message #15 from element "pipeline0" (state-changed): GstMessageState, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_STATE_PAUSED; Got message #17 from element "glupload0" (state-changed): GstMessageState, old-state=(GstState)GST_STATE_READY, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)GST_STATE_VOID_PENDING; Got message #18 from element "mpeg2dec0" (state-changed): GstMessageState, old-state=(GstState)GST_STATE_READY, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)GST_STATE_VOID_PENDING; Got message #19 from pad "queue0:src" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)GST_STREAM_STATUS_TYPE_CREATE, owner=(GstElement)"\(GstQueue\)\ queue0", object=(GstTask)"\(GstTask\)\ task0"; Got message #20 from pad "queue0:src" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)GST_STREAM_STATUS_TYPE_ENTER, owner=(GstElement)"\(GstQueue\)\ queue0", object=(GstTask)"\(GstTask\)\ task0"; Got message #21 from element "queue0" (state-changed): GstMessageState, old-state=(GstState)GST_STATE_READY, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)GST_STATE_VOID_PENDING; Got message #22 from element "mpegtsdemux0" (state-changed): GstMessageState, old-state=(GstState)GST_STATE_READY, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)GST_STATE_VOID_PENDING; Got message #25 from pad "filesrc0:src" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)GST_STREAM_STATUS_TYPE_CREATE, owner=(GstElement)"\(GstFileSrc\)\ filesrc0", object=(GstTask)"\(GstTask\)\ task1"; Got message #26 from pad "filesrc0:src" (stream-status): GstMessageStreamStatus, type=(GstStreamStatusType)GST_STREAM_STATUS_TYPE_ENTER, owner=(GstElement)"\(GstFileSrc\)\ filesrc0", object=(GstTask)"\(GstTask\)\ task1"; Got message #27 from element "filesrc0" (state-changed): GstMessageState, old-state=(GstState)GST_STATE_READY, new-state=(GstState)GST_STATE_PAUSED, pending-state=(GstState)GST_STATE_VOID_PENDING; /GstPipeline:pipeline0/GstMpegTSDemux:mpegtsdemux0: pat-info = ((GValueArray*) 0x8fd0890) /GstPipeline:pipeline0/GstMpegTSDemux:mpegtsdemux0: pmt-info = ((MpegTsPmtInfo*) 0x8febcc0) Got message #60 from element "mpegtsdemux0" (tag): taglist, language-code=(string)eng, source-pad=(GstPad)"\(GstPad\)\ audio_024f"; Got message #75 from element "mpegtsdemux0" (tag): taglist, language-code=(string)eng, source-pad=(GstPad)"\(GstPad\)\ audio_0250"; /GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = video/mpeg, mpegversion=(int)2, systemstream=(boolean)false /GstPipeline:pipeline0/GstQueue:queue0.GstPad:src: caps = video/mpeg, mpegversion=(int)2, systemstream=(boolean)false /GstPipeline:pipeline0/GstMpeg2dec:mpeg2dec0.GstPad:sink: caps = video/mpeg, mpegversion=(int)2, systemstream=(boolean)false /GstPipeline:pipeline0/GstMpeg2dec:mpeg2dec0.GstPad:src: caps = video/x-raw-yuv, format=(fourcc)I420, width=(int)544, height=(int)576, pixel-aspect-ratio=(fraction)32/17, framerate=(fraction)25/1, interlaced=(boolean)true Got message #80 from element "filesrc0" (error): GstMessageError, gerror=(GstGError)NULL, debug=(string)"gstbasesrc.c\(2378\):\ gst_base_src_loop\ \(\):\ /GstPipeline:pipeline0/GstFileSrc:filesrc0:\012streaming\ task\ paused\,\ reason\ not-negotiated\ \(-4\)"; ERROR: desde el elemento /GstPipeline:pipeline0/GstFileSrc:filesrc0: Error del flujo interno de datos. Información adicional de depurado: gstbasesrc.c(2378): gst_base_src_loop (): /GstPipeline:pipeline0/GstFileSrc:filesrc0: streaming task paused, reason not-negotiated (-4) ERROR: El flujo no quiere precachearse. Estableciendo pipeline a NULL... /GstPipeline:pipeline0/GstMpeg2dec:mpeg2dec0.GstPad:src: caps = NULL /GstPipeline:pipeline0/GstMpeg2dec:mpeg2dec0.GstPad:sink: caps = NULL /GstPipeline:pipeline0/GstQueue:queue0.GstPad:src: caps = NULL /GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = NULL /GstPipeline:pipeline0/GstMpegTSDemux:mpegtsdemux0.GstPad:video_024e: caps = NULL /GstPipeline:pipeline0/GstMpegTSDemux:mpegtsdemux0.GstPad:audio_0250: caps = NULL /GstPipeline:pipeline0/GstMpegTSDemux:mpegtsdemux0.GstPad:audio_024f: caps = NULL /GstPipeline:pipeline0/GstMpegTSDemux:mpegtsdemux0.GstPad:dsmcc_un_08ba: caps = NULL /GstPipeline:pipeline0/GstMpegTSDemux:mpegtsdemux0.GstPad:dsmcc_un_08b7: caps = NULL /GstPipeline:pipeline0/GstMpegTSDemux:mpegtsdemux0.GstPad:dsmcc_un_08b8: caps = NULL /GstPipeline:pipeline0/GstMpegTSDemux:mpegtsdemux0.GstPad:dsmcc_un_07ee: caps = NULL Freeing pipeline ... miki@miki-laptop:~/gstreamer/git$ Nevertheless, this pipe works: miki@miki-laptop:~/gstreamer/git$ GST_DEBUG=gldisplay:3 gst-launch videotestsrc ! "video/x-raw-yuv, format=(fourcc)I420" ! glupload ! glimagesink Estableciendo el flujo a PAUSADO ... El flujo se está PRECACHEANDO ... 0:00:00.446396028 14494 0x9a00688 INFO gldisplay gstgldisplay.c:555:gst_gl_display_thread_create_context: gl window created 0:00:00.449498466 14494 0x9a00688 INFO gldisplay gstgldisplay.c:574:gst_gl_display_thread_create_context: GL_VERSION: 3.0.0 NVIDIA 180.44 0:00:00.449525634 14494 0x9a00688 INFO gldisplay gstgldisplay.c:575:gst_gl_display_thread_create_context: GLEW_VERSION: 1.5.0 0:00:00.449541209 14494 0x9a00688 INFO gldisplay gstgldisplay.c:578:gst_gl_display_thread_create_context: GL_SHADING_LANGUAGE_VERSION: 1.30 NVIDIA via Cg compiler 0:00:00.449554898 14494 0x9a00688 INFO gldisplay gstgldisplay.c:582:gst_gl_display_thread_create_context: GL_VENDOR: NVIDIA Corporation 0:00:00.449567819 14494 0x9a00688 INFO gldisplay gstgldisplay.c:583:gst_gl_display_thread_create_context: GL_RENDERER: GeForce 8400M GT/PCI/SSE2 0:00:00.449606860 14494 0x9add5d8 INFO gldisplay gstgldisplay.c:2116:gst_gl_display_create_context: gl thread created 0:00:00.449915002 14494 0x9a00688 INFO gldisplay gstgldisplay.c:844:gst_gl_display_thread_init_upload: Context, ARB_fragment_shader supported: yes 0:00:00.449938538 14494 0x9a00688 INFO gldisplay gstgldisplay.c:2428:gst_gl_display_thread_init_upload_fbo: Context, EXT_framebuffer_object supported: yes El flujo está precacheado ... Estableciendo el flujo para REPRODUCCIÓN ... New clock: GstSystemClock 0:00:00.639095587 14494 0x9a00688 INFO gldisplay gstgldisplay.c:2010:gst_gl_display_gldel_texture: one more sub texture pool inserted: 20971760 0:00:00.639187498 14494 0x9a00688 INFO gldisplay gstgldisplay.c:2012:gst_gl_display_gldel_texture: nb sub texture pools: 1 ^CCaught interrupt -- handling interrupt. Interrumpir: parando el conducto ... Execution ended after 14731341399 ns. Estableciendo el flujo a PAUSADO ... Estableciendo pipeline a READY... 0:00:15.338529170 14494 0x99ff070 INFO gldisplay gstgldisplay.c:482:gst_gl_display_finalize: send quit gl window loop 0:00:15.338853655 14494 0x99ff070 INFO gldisplay gstgldisplay.c:487:gst_gl_display_finalize: quit sent to gl window loop 0:00:15.339583291 14494 0x9a00688 INFO gldisplay gstgldisplay.c:740:gst_gl_display_thread_destroy_context: Cleaning texture pool 0:00:15.339637209 14494 0x9a00688 INFO gldisplay gstgldisplay.c:2037:gst_gl_display_texture_pool_func_clean: trying to delete texture id: 4 deleted 0:00:15.339704187 14494 0x9a00688 INFO gldisplay gstgldisplay.c:2039:gst_gl_display_texture_pool_func_clean: texture id: 4 deleted 0:00:15.339741692 14494 0x9a00688 INFO gldisplay gstgldisplay.c:2037:gst_gl_display_texture_pool_func_clean: trying to delete texture id: 5 deleted 0:00:15.339843032 14494 0x9a00688 INFO gldisplay gstgldisplay.c:2039:gst_gl_display_texture_pool_func_clean: texture id: 5 deleted 0:00:15.339882632 14494 0x9a00688 INFO gldisplay gstgldisplay.c:746:gst_gl_display_thread_destroy_context: Context destroyed 0:00:15.339919299 14494 0x9a00688 INFO gldisplay gstgldisplay.c:619:gst_gl_display_thread_create_context: loop exited 0:00:15.367923661 14494 0x99ff070 INFO gldisplay gstgldisplay.c:490:gst_gl_display_finalize: quit received from gl window 0:00:15.368027585 14494 0x99ff070 INFO gldisplay gstgldisplay.c:496:gst_gl_display_finalize: gl thread joined Estableciendo pipeline a NULL... Freeing pipeline ...
(In reply to comment #0) > Just testing this pipe, gstreamer crash: > crash ? > miki@miki-laptop:~/gstreamer/git$ GST_DEBUG=gldisplay:3 gst-launch -v -m > filesrc location=../dumps/itv.ts ! mpegtsdemux program-number="8442" ! queue ! > mpeg2dec ! glupload ! glimagesink > Estableciendo el flujo a PAUSADO ... > El flujo se está PRECACHEANDO ... >... > video/x-raw-yuv, format=(fourcc)I420, width=(int)544, height=(int)576, > pixel-aspect-ratio=(fraction)32/17, framerate=(fraction)25/1, > interlaced=(boolean)true >... >/GstPipeline:pipeline0/GstFileSrc:filesrc0:\012streaming\ task\ paused\,\ reason\ not-negotiated\ \(-4\)"; >... > Freeing pipeline ... > miki@miki-laptop:~/gstreamer/git$ > ok so the problem here is "not-negotiated". This one works ? (If yes I do not need any log) (for me yes) gst-launch-0.10 videotestsrc ! "video/x-raw-yuv, format=(fourcc)I420, width=(int)544, height=(int)576, ixel-aspect-ratio=(fraction)32/17, framerate=(fraction)25/1, interlaced=(boolean)true" ! glupload ! glimagesink Could you provide the ts file (or a sub part) ?
Just uploaded the file, here you have: http://casal.upc.es/~aess/miki/itv.ts
ok lol I forgot a 'p' in 'ixel-aspect-ratio' in comment #1 So I can reproduce the problem without the ts file. (Although I downloaded it ...) This is because gl elements does not supports aspect ratio at input yet. The pipeline was ok with glimagesink but was pixel-aspect-ratio was not taken into account. With glupload ! glimagesink, glupload only output pixel-aspect-ratio 1/1, so it failed. (note that glimagesink supports force-aspect-ratio property) Does anyone know how to eliminate the 'pixel-aspect-ratio' in the caps ? Even if pixel-aspect-ratio in caps is not yet supported by gl elements we should at least have the same behavior. I'll try to fix it.
Patch suggested by Roland Peffer in an email to gst-devel: /* Commenting the code below out prevents problems with pixel-aspect-ratio not equal 1/1 /* if (par_value) gst_structure_set_value (structure, "pixel-aspect-ratio", par_value); else gst_structure_set (structure, "pixel-aspect-ratio", GST_TYPE_FRACTION, 1, 1, NULL); */
commit 74c38e2e917ca54f3a890427622b9c1ccb2a6ad1 Author: Roland Peffer <Roland.Peffer@clixxun.de> Date: Fri Apr 30 11:44:26 2010 +0200 glupload: par is already handled in fixate_caps function Fixes bug #593165