Jump to content


Photo

GStreamer 1.0

gstreamer 1.0 openpli

  • Please log in to reply
2520 replies to this topic

Re: GStreamer 1.0 #1221 athoik

  • PLi® Core member
  • 8,458 posts

+327
Excellent

Posted 1 May 2015 - 22:58

I think we are looking the problem ;) (but from different view)
 
[00:53] <athoik> __tim: just by looking the bt I think function gst_h264_parse_update_src_caps is related and most probably that commit: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/gst/videoparsers/gsth264parse.c?id=542c77ab3831388f162a78878ba8902cd5c4d9f9
Most probably that commit is causing the issue: http://cgit.freedesk...ba8902cd5c4d9f9
 
...
#57 0x77866b08 in gst_base_transform_query_caps (filter=0x85c800, pad=0x75f502c0, trans=0x75f56238)
    at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0/1.4.5+gitAUTOINC+937ad1615a-r1/git/libs/gst/base/gstbasetransform.c:727
#58 gst_base_transform_default_query (trans=0x75f56238, direction=<optimized out>, query=0x7defb0)
    at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0/1.4.5+gitAUTOINC+937ad1615a-r1/git/libs/gst/base/gstbasetransform.c:1556
#59 0x77f1dd58 in gst_pad_query (pad=0x75f502c0, query=0x7defb0)
    at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0/1.4.5+gitAUTOINC+937ad1615a-r1/git/gst/gstpad.c:3792
#60 0x77f1e718 in gst_pad_peer_query (pad=0x75f50170, query=0x7defb0)
    at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0/1.4.5+gitAUTOINC+937ad1615a-r1/git/gst/gstpad.c:3920
#61 0x77f60674 in gst_pad_peer_query_caps (pad=0x75f50170, filter=0x85c800)
    at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0/1.4.5+gitAUTOINC+937ad1615a-r1/git/gst/gstutils.c:2882

>> #62 0x733772f8 in ensure_caps_profile (sps=0x75f58000, caps=0x42d8f0, h264parse=0x75f4f8d8)
    at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0-plugins-bad/1.4.5+gitAUTOINC+105a5cce92-r1/git/gst/videoparsers/gsth264parse.c:1363
>> #63 gst_h264_parse_update_src_caps (h264parse=0x75f4f8d8, caps=0x42d8f0)
    at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0-plugins-bad/1.4.5+gitAUTOINC+105a5cce92-r1/git/gst/videoparsers/gsth264parse.c:1566

#64 0x7337a718 in gst_h264_parse_parse_frame (parse=0x75f4f8d8, frame=0x5d8b38)
    at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0-plugins-bad/1.4.5+gitAUTOINC+105a5cce92-r1/git/gst/videoparsers/gsth264parse.c:1752
#65 0x7337bbe4 in gst_h264_parse_handle_frame (parse=0x75f4f8d8, frame=0x5d8b38, skipsize=0x7545ebc8)
    at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0-plugins-bad/1.4.5+gitAUTOINC+105a5cce92-r1/git/gst/videoparsers/gsth264parse.c:1084
#66 0x7783e04c in gst_base_parse_handle_buffer (parse=0x75f4f8d8, buffer=<optimized out>, skip=0x7545ebc8, flushed=0x7545eb90)
    at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0/1.4.5+gitAUTOINC+937ad1615a-r1/git/libs/gst/base/gstbaseparse.c:1985
#67 0x77844410 in gst_base_parse_chain (pad=0x75f50020, parent=0x75f4f8d8, buffer=<optimized out>)
    at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0/1.4.5+gitAUTOINC+937ad1615a-r1/git/libs/gst/base/gstbaseparse.c:3029
#68 0x77f15194 in gst_pad_chain_data_unchecked (pad=0x75f50020, type=4112, data=0x75d0af20)
    at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0/1.4.5+gitAUTOINC+937ad1615a-r1/git/gst/gstpad.c:4038
#69 0x77f1723c in gst_pad_push_data (pad=0x75e0ee98, type=4112, data=0x75d0af20)
    at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0/1.4.5+gitAUTOINC+937ad1615a-r1/git/gst/gstpad.c:4271
#70 0x7729e5a4 in gst_single_queue_push_one (allow_drop=<synthetic pointer>, object=0x75d0af20, sq=0x75f4d0c8, mq=0x75f40698)
    at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0/1.4.5+gitAUTOINC+937ad1615a-r1/git/plugins/elements/gstmultiqueue.c:1237
#71 gst_multi_queue_loop (pad=<optimized out>)
    at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0/1.4.5+gitAUTOINC+937ad1615a-r1/git/plugins/elements/gstmultiqueue.c:1515
#72 0x77f4fbb0 in gst_task_func (task=0x75f4e028)
    at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0/1.4.5+gitAUTOINC+937ad1615a-r1/git/gst/gsttask.c:331
#73 0x77d94a40 in g_thread_pool_thread_proxy (data=<optimized out>) at /usr/src/debug/glib-2.0/1_2.42.1-r0/glib-2.42.1/glib/gthreadpool.c:307
#74 0x77d93f48 in g_thread_proxy (data=0x498490) at /usr/src/debug/glib-2.0/1_2.42.1-r0/glib-2.42.1/glib/gthread.c:764
#75 0x77cf68ac in start_thread (arg=0x7545f4a0) at pthread_create.c:315
#76 0x77c62fd0 in __thread_start () at ../sysdeps/unix/sysv/linux/mips/clone.S:144
...
Ps. I am almost sure that ensure_caps_profile is responsible.

Edited by athoik, 1 May 2015 - 23:12.

Wavefield T90: 0.8W - 1.9E - 4.8E - 13E - 16E - 19.2E - 23.5E - 26E - 33E - 39E - 42E - 45E on EMP Centauri DiseqC 16/1
Unamed: 13E Quattro - 9E Quattro on IKUSI MS-0916

Re: GStreamer 1.0 #1222 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 1 May 2015 - 23:39

I think you're right.

 

http://gstreamer-dev...-td4664381.html

 

The problem here is that gst_pad_peer_query() returned TRUE but the
query did not return any caps. So whatever answered the query did
something wrong there. Which code answered the query, and when?

gst_pad_peer_query_caps (GST_BASE_PARSE_SRC_PAD (h264parse), filter_caps); -> peer pad of srcpad h264 should be our basesink sinkpad.

If you check basesink handling of GST_QUERY_CAPS, you will find that it will always return TRUE and there is no checking if caps is not NULL and return FALSE in that case. So probably there is a bug, but maybe I'm wrong will test tommorrow..



Re: GStreamer 1.0 #1223 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 1 May 2015 - 23:47

mistake, if caps is NULL and return FALSE



Re: GStreamer 1.0 #1224 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 2 May 2015 - 00:15

please ignore previous posts, h264parse is not directly connected to dvbvideosink sink pad.



Re: GStreamer 1.0 #1225 christophecvr

  • Senior Member
  • 3,131 posts

+140
Excellent

Posted 2 May 2015 - 07:27

I'll did also many try outs all without succes.

 

At first I was almost shure it was a problem in our dvbmediasinks. (dvbaudiosink and/or dvbvideosink) Which version is used does not mather(Orig pli's,mx3L's,Athoik's or mine)

 

The more tests and try outs I do the more I think it's  a bug introduced in gstreamer self between the latest tagged 1.4.5 and the current HEAD master.

 

What is happening.

 

I've got the impression that somehow there is a spook cap created whitout any info for nothing and on top it's not NULL or 0. This for audio and video.

 

Here the very first time the error ocurs when using  gst-launch-1.0 playbin uri=http://megahdlive1-f...260/master.m3u8 -v

/* the init fase */
Setting pipeline to PAUSED ...
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: ring-buffer-max-size = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: buffer-size = -1
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: buffer-duration = -1
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: use-buffering = false
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: download = false
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: uri = http://megahdlive1-f.akamaihd.net/i/live_1@105260/master.m3u8
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: connection-speed = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0: source = "\(GstSoupHTTPSrc\)\ source"
Pipeline is PREROLLING ...
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstTypeFindElement:typefind: force-caps = application/x-hls
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0: sink-caps = application/x-hls
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstTypeFindElement:typefindelement0.GstPad:src: caps = application/x-hls
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0.GstGhostPad:sink.GstProxyPad:proxypad0: caps = application/x-hls
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstHLSDemux:hlsdemux0: connection-speed = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstHLSDemux:hlsdemux0.GstPad:sink: caps = application/x-hls
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstTypeFindElement:typefind.GstPad:src: caps = application/x-hls
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstTypeFindElement:typefind.GstPad:sink: caps = application/x-hls
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0.GstGhostPad:sink: caps = application/x-hls
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0: max-size-buffers = 5
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0: max-size-time = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0: max-size-bytes = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstHLSDemux:hlsdemux0.GstGhostPad:src_0: caps = "video/mpegts\,\ systemstream\=\(boolean\)true\,\ packetsize\=\(int\)188"
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0.GstPad:sink_0: caps = "video/mpegts\,\ systemstream\=\(boolean\)true\,\ packetsize\=\(int\)188"
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0.GstPad:sink_0: caps = "video/mpegts\,\ systemstream\=\(boolean\)true\,\ packetsize\=\(int\)188"
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0.GstPad:sink_0: caps = "video/mpegts\,\ systemstream\=\(boolean\)true\,\ packetsize\=\(int\)188"
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0: max-size-buffers = 5
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0: max-size-time = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0: max-size-bytes = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1: max-size-buffers = 5
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1: max-size-time = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1: max-size-bytes = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1.GstPad:sink_0: caps = "video/x-h264\,\ stream-format\=\(string\)byte-stream\,\ alignment\=\(string\)nal"
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1.GstPad:sink_0: caps = "video/x-h264\,\ stream-format\=\(string\)byte-stream\,\ alignment\=\(string\)nal"
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1.GstPad:src_1: caps = "audio/mpeg\,\ mpegversion\=\(int\)2\,\ stream-format\=\(string\)adts"
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1.GstPad:sink_1: caps = "audio/mpeg\,\ mpegversion\=\(int\)2\,\ stream-format\=\(string\)adts"
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0: max-size-buffers = 5
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0: max-size-time = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0: max-size-bytes = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1: max-size-buffers = 5
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1: max-size-time = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1: max-size-bytes = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstAacParse:aacparse0.GstPad:sink: caps = "audio/mpeg\,\ mpegversion\=\(int\)2\,\ stream-format\=\(string\)adts"
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstAacParse:aacparse0.GstPad:sink: caps = "audio/mpeg\,\ mpegversion\=\(int\)2\,\ stream-format\=\(string\)adts"
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1: max-size-buffers = 5
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1: max-size-time = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1: max-size-bytes = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1: max-size-buffers = 5
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1: max-size-time = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1: max-size-bytes = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1: max-size-buffers = 5
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1: max-size-time = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue1: max-size-bytes = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0: max-size-buffers = 5
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0: max-size-time = 0
/GstPlayBin:playbin0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstMultiQueue:multiqueue0: max-size-bytes = 0

/* when the first GStreamer-CRITICAL occurs */

/GstPlayBin:playbin0/GstInputSelector:inputselector0.GstSelectorPad:sink_0: tags = "taglist\,\ video-codec\=\(string\)H.264\;"
/GstPlayBin:playbin0/GstInputSelector:inputselector0.GstSelectorPad:sink_0: tags = "taglist\,\ video-codec\=\(string\)\"H.264\\\ \\\(Constrained\\\ Baseline\\\ Profile\\\)\"\;"
/GstPlayBin:playbin0/GstPlaySink:playsink.GstGhostPad:audio_sink.GstProxyPad:proxypad8: caps = "audio/mpeg\,\ framed\=\(boolean\)true\,\ mpegversion\=\(int\)4\,\ level\=\(string\)2\,\ base-profile\=\(string\)lc\,\ profile\=\(string\)lc\,\ rate\=\(int\)44100\,\ channels\=\(int\)2\,\ stream-format\=\(string\)adts"
/GstPlayBin:playbin0/GstPlaySink:playsink/GstTee:audiotee.GstTeePad:src_0: caps = "audio/mpeg\,\ framed\=\(boolean\)true\,\ mpegversion\=\(int\)4\,\ level\=\(string\)2\,\ base-profile\=\(string\)lc\,\ profile\=\(string\)lc\,\ rate\=\(int\)44100\,\ channels\=\(int\)2\,\ stream-format\=\(string\)adts"
/GstPlayBin:playbin0/GstPlaySink:playsink/GstStreamSynchronizer:streamsynchronizer0.GstPad:src_1: caps = "audio/mpeg\,\ framed\=\(boolean\)true\,\ mpegversion\=\(int\)4\,\ level\=\(string\)2\,\ base-profile\=\(string\)lc\,\ profile\=\(string\)lc\,\ rate\=\(int\)44100\,\ channels\=\(int\)2\,\ stream-format\=\(string\)adts"
/GstPlayBin:playbin0/GstPlaySink:playsink/GstBin:abin.GstGhostPad:sink.GstProxyPad:proxypad15: caps = "audio/mpeg\,\ framed\=\(boolean\)true\,\ mpegversion\=\(int\)4\,\ level\=\(string\)2\,\ base-profile\=\(string\)lc\,\ profile\=\(string\)lc\,\ rate\=\(int\)44100\,\ channels\=\(int\)2\,\ stream-format\=\(string\)adts"

(gst-launch-1.0:32251): GStreamer-CRITICAL **: gst_mini_object_ref: assertion 'mini_object != NULL' failed

(gst-launch-1.0:32251): GStreamer-CRITICAL **: gst_caps_merge: assertion 'GST_IS_CAPS (caps2)' failed
/GstPlayBin:playbin0/GstPlaySink:playsink/GstBin:abin/GstQueue:aqueue.GstPad:src: caps = "audio/mpeg\,\ framed\=\(boolean\)true\,\ mpegversion\=\(int\)4\,\ level\=\(string\)2\,\ base-profile\=\(string\)lc\,\ profile\=\(string\)lc\,\ rate\=\(int\)44100\,\ channels\=\(int\)2\,\ stream-format\=\(string\)adts"


Re: GStreamer 1.0 #1226 athoik

  • PLi® Core member
  • 8,458 posts

+327
Excellent

Posted 2 May 2015 - 07:27

Hi,

For sure we know that ensure_caps and gst_pad_peer_query_caps causes the isse.
 

diff --git a/gst/videoparsers/gsth264parse.c b/gst/videoparsers/gsth264parse.c
index 4c7513d..63ebec1 100644
--- a/gst/videoparsers/gsth264parse.c
+++ b/gst/videoparsers/gsth264parse.c
@@ -1360,8 +1360,10 @@ ensure_caps_profile (GstH264Parse * h264parse, GstCaps * caps, GstH264SPS * sps)
   GstCaps *filter_caps, *peer_caps, *compat_caps;

   filter_caps = gst_caps_new_empty_simple ("video/x-h264");
+  GST_DEBUG_OBJECT (h264parse, "Before calling gst_pad_peer_query_caps");
   peer_caps =
       gst_pad_peer_query_caps (GST_BASE_PARSE_SRC_PAD (h264parse), filter_caps);
+  GST_DEBUG_OBJECT (h264parse, "After calling gst_pad_peer_query_caps");

   if (peer_caps && !gst_caps_can_intersect (caps, peer_caps)) {
     GstStructure *structure;
0:00:02.431451702  2289 0x75a43090 DEBUG              h264parse gsth264parse.c:1363:ensure_caps_profile:<h264parse0> Before calling gst_pad_peer_query_caps

(gst-launch-1.0:2289): GStreamer-CRITICAL **: gst_mini_object_ref: assertion 'mini_object != NULL' failed

(gst-launch-1.0:2289): GStreamer-CRITICAL **: gst_caps_merge: assertion 'GST_IS_CAPS (caps2)' failed

0:00:02.459236109  2289 0x75a43090 DEBUG              h264parse gsth264parse.c:1366:ensure_caps_profile:<h264parse0> After calling gst_pad_peer_query_caps

In gst_pad_query_caps the filter might be NULL but if it is not NULL the returned caps will be a subset of filter.

 

When filter is gst_caps_new_empty_simple ("video/x-h264") what can posibly be the subset?


Wavefield T90: 0.8W - 1.9E - 4.8E - 13E - 16E - 19.2E - 23.5E - 26E - 33E - 39E - 42E - 45E on EMP Centauri DiseqC 16/1
Unamed: 13E Quattro - 9E Quattro on IKUSI MS-0916

Re: GStreamer 1.0 #1227 christophecvr

  • Senior Member
  • 3,131 posts

+140
Excellent

Posted 2 May 2015 - 07:30

I go and try what m3XL proposed going step by step back to since which commit this problem started that will be the best.

 

It will take quite a lot off work and time, But If found perhaps we can take as much debug data and fill a complete bug repoorts to gstreamer then.



Re: GStreamer 1.0 #1228 christophecvr

  • Senior Member
  • 3,131 posts

+140
Excellent

Posted 2 May 2015 - 08:22

Note: On the vuduo2 with current gstreamer HEAD (at least that from 2 days ago)

 

The dash and smootstream plays still 100 % ok.

 

But the caps problem for gst-launch-1.0 playbin uri=http://megahdlive1-f...260/master.m3u8

 

Is the same and even worse



Re: GStreamer 1.0 #1229 athoik

  • PLi® Core member
  • 8,458 posts

+327
Excellent

Posted 2 May 2015 - 08:28

[09:45] <@thaytan> athoik, I think you'd only hit that if you're missing any converter elements
[09:45] <@thaytan> in which case running with GST_DEBUG=4 will probably tell you something like 'missing converter elements'
[09:49] <athoik> thaytan: my hardware sink acceps video/x-h264, convertbin.c:100:gst_play_sink_convert_bin_add_conversion_element_factory:<vconv> warning: Missing element 'videoconvert' - check your GStreamer installation. convertbin.c:100:gst_play_sink_convert_bin_add_conversion_element_factory:<vconv> warning: video rendering might fail
[09:59] <@thaytan> athoik, it shouldn't go through the convert path for encoded output, so not sure what's wrong there
[10:07] == velvetfr [~epoitier@lns-bzn-27-82-248-38-176.adsl.proxad.net] has quit [Ping timeout: 272 seconds]
[10:09] <athoik> thaytan: installing gstreamer1.0-plugins-base-videoscale and gstreamer1.0-plugins-base-videoconvert makes error go away from gst-launch. Although videoconvert would kill our embedded boxes, their cpu poor enough and can't perform anything on software. It should only go though hw sink
[10:09] <athoik> But on gui (enigma2 framebuffer for STB) the error is still shown, athlough videoscale and videoconvert is installed.
[10:11] <athoik> so in order ensure_caps to work on h264parser now we have to plug videoconvert,videoscale?
[10:12] <@thaytan> athoik, they shouldn't get actually plugged for encoded vide
[10:12] <@thaytan> video
[10:26] <athoik> With gstreamer1.0-plugins-base-videoconvert "gst-launch-1.0 playbin uri=http://megahdlive1-f.akamaihd.net/i/live_1@105260/master.m3u8"  no errors. Without gstreamer1.0-plugins-base-videoconvert "gst-launch-1.0 playbin uri=http://megahdlive1-f.akamaihd.net/i/live_1@105260/master.m3u8"
[10:26] <athoik> we get (gst-launch-1.0:2654): GStreamer-CRITICAL **: gst_mini_object_ref: assertion 'mini_object != NULL' failed  (gst-launch-1.0:2654): GStreamer-CRITICAL **: gst_caps_merge: assertion 'GST_IS_CAPS (caps2)' failed

 

Do you confirm above behaviour?


Wavefield T90: 0.8W - 1.9E - 4.8E - 13E - 16E - 19.2E - 23.5E - 26E - 33E - 39E - 42E - 45E on EMP Centauri DiseqC 16/1
Unamed: 13E Quattro - 9E Quattro on IKUSI MS-0916

Re: GStreamer 1.0 #1230 christophecvr

  • Senior Member
  • 3,131 posts

+140
Excellent

Posted 2 May 2015 - 08:31

I think you're right.

 

http://gstreamer-dev...-td4664381.html

 

The problem here is that gst_pad_peer_query() returned TRUE but the
query did not return any caps. So whatever answered the query did
something wrong there. Which code answered the query, and when?

gst_pad_peer_query_caps (GST_BASE_PARSE_SRC_PAD (h264parse), filter_caps); -> peer pad of srcpad h264 should be our basesink sinkpad.

If you check basesink handling of GST_QUERY_CAPS, you will find that it will always return TRUE and there is no checking if caps is not NULL and return FALSE in that case. So probably there is a bug, but maybe I'm wrong will test tommorrow..

I've checked that message. But it's from before tagged 1.4.5 was introduced. (january 2014)

 

I think they solved the problem in the mean time in tagged version 1.4.5 wich was from december 2014. But somewhere in between the last tagged version and the current HEAD this error has surfaced again.



Re: GStreamer 1.0 #1231 christophecvr

  • Senior Member
  • 3,131 posts

+140
Excellent

Posted 2 May 2015 - 08:42

[09:45] <@thaytan> athoik, I think you'd only hit that if you're missing any converter elements
[09:45] <@thaytan> in which case running with GST_DEBUG=4 will probably tell you something like 'missing converter elements'
[09:49] <athoik> thaytan: my hardware sink acceps video/x-h264, convertbin.c:100:gst_play_sink_convert_bin_add_conversion_element_factory:<vconv> warning: Missing element 'videoconvert' - check your GStreamer installation. convertbin.c:100:gst_play_sink_convert_bin_add_conversion_element_factory:<vconv> warning: video rendering might fail
[09:59] <@thaytan> athoik, it shouldn't go through the convert path for encoded output, so not sure what's wrong there
[10:07] == velvetfr [~epoitier@lns-bzn-27-82-248-38-176.adsl.proxad.net] has quit [Ping timeout: 272 seconds]
[10:09] <athoik> thaytan: installing gstreamer1.0-plugins-base-videoscale and gstreamer1.0-plugins-base-videoconvert makes error go away from gst-launch. Although videoconvert would kill our embedded boxes, their cpu poor enough and can't perform anything on software. It should only go though hw sink
[10:09] <athoik> But on gui (enigma2 framebuffer for STB) the error is still shown, athlough videoscale and videoconvert is installed.
[10:11] <athoik> so in order ensure_caps to work on h264parser now we have to plug videoconvert,videoscale?
[10:12] <@thaytan> athoik, they shouldn't get actually plugged for encoded vide
[10:12] <@thaytan> video
[10:26] <athoik> With gstreamer1.0-plugins-base-videoconvert "gst-launch-1.0 playbin uri=http://megahdlive1-f.akamaihd.net/i/live_1@105260/master.m3u8"  no errors. Without gstreamer1.0-plugins-base-videoconvert "gst-launch-1.0 playbin uri=http://megahdlive1-f.akamaihd.net/i/live_1@105260/master.m3u8"
[10:26] <athoik> we get (gst-launch-1.0:2654): GStreamer-CRITICAL **: gst_mini_object_ref: assertion 'mini_object != NULL' failed  (gst-launch-1.0:2654): GStreamer-CRITICAL **: gst_caps_merge: assertion 'GST_IS_CAPS (caps2)' failed

Do you confirm above behaviour?

 

I do confirm But I think it's not only related to the video but also to audio. With other words a general caps issue not specifically related to audio or video.

 

And that's one off the reasons I think it's really a bug from gstreamer.

/GstPlayBin:playbin0/GstPlaySink:playsink/GstBin:vbin/GstPlaySinkVideoConvert:vconv.GstGhostPad:sink: caps = "video/x-h264\,\ stream-format\=\(string\)byte-stream\,\ alignment\=\(string\)nal\,\ width\=\(int\)640\,\ height\=\(int\)360\,\ framerate\=\(fraction\)0/1\,\ parsed\=\(boolean\)true\,\ level\=\(string\)3\,\ profile\=\(string\)constrained-baseline"

(gst-launch-1.0:17787): GStreamer-CRITICAL **: gst_mini_object_ref: assertion 'mini_object != NULL' failed
/GstPlayBin:playbin0/GstPlaySink:playsink/GstBin:vbin/GstPlaySinkVideoConvert:vconv.GstGhostPad:sink: caps = "video/x-h264\,\ stream-format\=\(string\)byte-stream\,\ alignment\=\(string\)nal\,\ width\=\(int\)640\,\ height\=\(int\)360\,\ framerate\=\(fraction\)0/1\,\ parsed\=\(boolean\)true\,\ level\=\(string\)3\,\ profile\=\(string\)constrained-baseline"
/GstPlayBin:playbin0/GstPlaySink:playsink/GstBin:vbin/GstPlaySinkVideoConvert:vconv.GstGhostPad:sink: caps = "video/x-h264\,\ stream-format\=\(string\)byte-stream\,\ alignment\=\(string\)nal\,\ width\=\(int\)640\,\ height\=\(int\)360\,\ framerate\=\(fraction\)0/1\,\ parsed\=\(boolean\)true\,\ level\=\(string\)3\,\ profile\=\(string\)constrained-baseline"

(gst-launch-1.0:17787): GStreamer-CRITICAL **: gst_caps_merge: assertion 'GST_IS_CAPS (caps2)' failed
/GstPlayBin:playbin0/GstPlaySink:playsink/GstBin:abin.GstGhostPad:sink.GstProxyPad:proxypad15: caps = "audio/mpeg\,\ framed\=\(boolean\)true\,\ mpegversion\=\(int\)4\,\ level\=\(string\)2\,\ base-profile\=\(string\)lc\,\ profile\=\(string\)lc\,\ rate\=\(int\)44100\,\ channels\=\(int\)2\,\ stream-format\=\(string\)adts"

(gst-launch-1.0:17787): GStreamer-CRITICAL **: gst_mini_object_ref: assertion 'mini_object != NULL' failed

(gst-launch-1.0:17787): GStreamer-CRITICAL **: gst_caps_merge: assertion 'GST_IS_CAPS (caps2)' failed



Re: GStreamer 1.0 #1232 christophecvr

  • Senior Member
  • 3,131 posts

+140
Excellent

Posted 2 May 2015 - 10:55

Before I started to do the trace from gstreamer commits. I just thaught about somthing to test.

 

The first which my tests reveals, it is not only video but also audio. Both caps triggers this error.

 

I found a way , it is not solveved bu wel a bit hackish. However now video and audio are playing fine (with the caps error.)

Ok it's not solved but I repport this perhaps athoik or mx3L thinks about some extra.

 

The caps and video changes. I set here the changes sections. (it's based on my dvbmediasink) this last is concerning the line numbers which wil make a difference.

 

gstdvbvideosink.c :

	case GST_EVENT_CAPS:
	{
		GstCaps *caps;
		gst_event_parse_caps(event, &caps);
		if (caps)
		{
            self->must_send_header = TRUE;
			gst_dvbvideosink_set_caps(sink, caps);
			ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
			gst_caps_unref(caps);
		}
		else
		{
			gst_event_unref(event);
			ret = FALSE;
		}			
		break;
	}
	default:
		ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
		break;

gstdvbaudiosink.c

#ifdef HAVE_MP3
#define MPEGCAPS \
		"audio/mpeg, " \
		"mpegversion = (int) 1, " \
		"layer = (int) [ 1, 3 ], " \
		"parsed = (boolean) true; " \
		"audio/mpeg, " \
		"mpegversion = (int) { 2, 4 }, " \
		"profile = (string) lc, " \
		"stream-format = (string) { raw, adif, loas }, " \
		"framed = (boolean) true; "
#else

here above I removed stream format adts ( that's a hack but I gues there is a problem in the adts cap from us)

 

The the change by event . TAG EVENt is removed that was wrong how it was.

 	case GST_EVENT_CAPS:
	{
		GstCaps *caps;
		gst_event_parse_caps(event, &caps);
		if (caps)
		{
			gst_dvbaudiosink_set_caps(sink, caps);
			ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
			gst_caps_unref(caps);			
		}
		else
		{
			gst_event_unref(event);
			ret = FALSE;
		}
		break;
	}
	default:
		ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
		break;

Ok it's not as it should but now it at least already plays. And I gues I'm coming into the right direction concerning this error.

I have the feeling that it's becoming warm.



Re: GStreamer 1.0 #1233 christophecvr

  • Senior Member
  • 3,131 posts

+140
Excellent

Posted 2 May 2015 - 11:18

Also A general remark. Which is not always done.

 

If we intercept an event and do not push it, it SHOULD be unreffed according the some call it the gstreamer FM . I do not find it an FM it is well a ver BM manual.

I set the should in capitals not to shout but to drawn the attention that it's not a must. Which means if you do not do it, it wan't change the working. But you will keep unneeded adres segments into ram blocked.(mem leak).

 

What well if you unreff an event while it should not be unreffed wel big change on segfault.



Re: GStreamer 1.0 #1234 christophecvr

  • Senior Member
  • 3,131 posts

+140
Excellent

Posted 2 May 2015 - 12:20

I already set a way to unref the events when they are not used. It is based on my sink. By the audio I removed the gst-0.1 code. I still forget to do this by the videosink. It's time to do it also. The sink can only support one version. Having the both ok based on included code or not depending on version of gstreamer make it to much confusing. In developpement. And for gst-0.1 the sink is really ok (better then it it almost can't) For gst-1.0 we are very far but still not perfect. Keeping the code from gst-0.1 in will lead to errors by confusion.

 

But here the events from my audio and videosink. Where when not used the event is unreffed and ret = false. Ok I will try to remove the v0.1 code out off my sink later on.

 

gstdvbaudiosink.c

static gboolean gst_dvbaudiosink_event(GstBaseSink *sink, GstEvent *event)
{
	GstDVBAudioSink *self = GST_DVBAUDIOSINK(sink);
	GST_INFO_OBJECT(self, "EVENT %s", gst_event_type_get_name(GST_EVENT_TYPE(event)));
	gboolean ret = FALSE;

	switch (GST_EVENT_TYPE(event))
	{
	case GST_EVENT_FLUSH_START:
		self->flushing = TRUE;
		/* wakeup the poll */
		write(self->unlockfd[1], "\x01", 1);
		if(self->paused)
		{
			ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
		}
		else
		{
			gst_event_unref(event);
		}
		break;
	case GST_EVENT_FLUSH_STOP:
		if (self->fd >= 0) ioctl(self->fd, AUDIO_CLEAR_BUFFER);
		GST_OBJECT_LOCK(self);
		while (self->queue)
		{
			queue_pop(&self->queue);
		}
		self->flushing = FALSE;
		self->timestamp = GST_CLOCK_TIME_NONE;
		self->fixed_buffertimestamp = GST_CLOCK_TIME_NONE;
		if (self->cache)
		{
			gst_buffer_unref(self->cache);
			self->cache = NULL;
		}
		GST_OBJECT_UNLOCK(self);
		if(self->paused)
		{
			ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
		}
		else
		{
			gst_event_unref(event);
		}
		break;
	case GST_EVENT_EOS:
	{
		gboolean pass_eos = FALSE;
		struct pollfd pfd[2];
		pfd[0].fd = self->unlockfd[0];
		pfd[0].events = POLLIN;
		pfd[1].fd = self->fd;
		pfd[1].events = POLLIN;
		ret = TRUE;
		GST_BASE_SINK_PREROLL_UNLOCK(sink);
		while (1)
		{
			int retval = poll(pfd, 2, 250);
			if (retval < 0)
			{
				perror("poll in EVENT_EOS");
				ret = FALSE;
				break;
			}

			if (pfd[0].revents & POLLIN)
			{
				GST_DEBUG_OBJECT(self, "wait EOS aborted!!\n");
				ret = FALSE;
				break;
			}

			if (pfd[1].revents & POLLIN)
			{
				GST_DEBUG_OBJECT(self, "got buffer empty from driver!\n");
				break;
			}

			if (sink->flushing)
			{
				GST_DEBUG_OBJECT(self, "wait EOS flushing!!\n");
				ret = FALSE;
				break;
			}
		}
		GST_BASE_SINK_PREROLL_LOCK(sink);
		if(ret)
		{
			ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
		}
		else
		{
			gst_event_unref(event);
		}
		break;
	}
	case GST_EVENT_SEGMENT:
	{
		const GstSegment *segment;
		GstFormat format;
		gdouble rate;
		guint64 start, end, pos;
		gst_event_parse_segment(event, &segment);
		format = segment->format;
		rate = segment->rate;
		start = segment->start;
		end = segment->stop;
		pos = segment->position;

		GST_INFO_OBJECT(self, "GST_EVENT_SEGMENT rate=%f format=%d start=%"G_GUINT64_FORMAT " position=%"G_GUINT64_FORMAT, rate, format, start, pos);
        /* fixme on dreambox this does not work att all and I gues on any box*/
		/* the video0 can't be opened since its in use */
		/* The try off opening video0 makes sync issues worse than they already are */
		if (format == GST_FORMAT_TIME)
		{
			self->timestamp_offset = start - pos;
			if (rate != self->rate)
			{
				/* IS THIS NEEDED ? it really does not work on the contrary it increase the time*/
				/* before sync is back ok after pause fast forward or backwards */
				int video_fd = open("/dev/dvb/adapter0/video0", O_RDWR);
				if (video_fd >= 0)
				{
					GST_INFO_OBJECT(self, "GST_EVENT_SEGMENT IS VIDEO0 OPEN ?");
					int skip = 0, repeat = 0;
					if (rate > 1.0)
					{
						skip = (int)rate;
					}
					else if (rate < 1.0)
					{
						repeat = 1.0 / rate;
					}
					ioctl(video_fd, VIDEO_SLOWMOTION, repeat);
					ioctl(video_fd, VIDEO_FAST_FORWARD, skip);
					ioctl(video_fd, VIDEO_CONTINUE);
					close(video_fd);
					video_fd = -1;
				}
				self->rate = rate;
			}
		}
		ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
		if(!ret)
		{
			gst_event_unref(event);
		}
		break;
	}
 	case GST_EVENT_CAPS:
	{
		GstCaps *caps;
		gst_event_parse_caps(event, &caps);
		if (caps)
		{
			gst_dvbaudiosink_set_caps(sink, caps);
			ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
			gst_caps_unref(caps);			
		}
		else
		{
			gst_event_unref(event);
			ret = FALSE;
		}
		break;
	}
	default:
		ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
		if (!ret)
		{
			gst_event_unref(event);
		}
		break;
	}
	return ret;
}

gstdvbvideosink.c

static gboolean gst_dvbvideosink_event(GstBaseSink *sink, GstEvent *event)
{
	GstDVBVideoSink *self = GST_DVBVIDEOSINK (sink);
	GST_INFO_OBJECT (self, "EVENT %s", gst_event_type_get_name(GST_EVENT_TYPE (event)));
	gboolean ret = FALSE;

	switch (GST_EVENT_TYPE (event))
	{
	case GST_EVENT_FLUSH_START:
		self->flushing = TRUE;
		/* wakeup the poll */
		write(self->unlockfd[1], "\x01", 1);
		if(self->paused)
		{
			ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
		}
		else
		{
			gst_event_unref(event);
		}
		break;
	case GST_EVENT_FLUSH_STOP:
		if (self->fd >= 0) ioctl(self->fd, VIDEO_CLEAR_BUFFER);
		GST_OBJECT_LOCK(self);
		self->must_send_header = TRUE;
		while (self->queue)
		{
			queue_pop(&self->queue);
		}
		self->flushing = FALSE;
		GST_OBJECT_UNLOCK(self);
		if(self->paused)
		{
			ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
		}
		else
		{
			gst_event_unref(event);
		}
		break;
	case GST_EVENT_EOS:
	{
		gboolean pass_eos = FALSE;
		struct pollfd pfd[2];
		pfd[0].fd = self->unlockfd[0];
		pfd[0].events = POLLIN;
		pfd[1].fd = self->fd;
		pfd[1].events = POLLIN;
		ret = TRUE;

#if GST_VERSION_MAJOR < 1
		GST_PAD_PREROLL_UNLOCK(sink->sinkpad);
#else
		GST_BASE_SINK_PREROLL_UNLOCK(sink);
#endif
		while (1)
		{
			int retval = poll(pfd, 2, 250);
			if (retval < 0)
			{
				perror("poll in EVENT_EOS");
				ret = FALSE;
				break;
			}

			if (pfd[0].revents & POLLIN)
			{
				GST_DEBUG_OBJECT (self, "wait EOS aborted!!\n");
				ret = FALSE;
				break;
			}

			if (pfd[1].revents & POLLIN)
			{
				GST_DEBUG_OBJECT (self, "got buffer empty from driver!\n");
				break;
			}

			if (sink->flushing)
			{
				GST_DEBUG_OBJECT (self, "wait EOS flushing!!\n");
				ret = FALSE;
				break;
			}
		}
#if GST_VERSION_MAJOR < 1
		GST_PAD_PREROLL_LOCK(sink->sinkpad);
#else
		GST_BASE_SINK_PREROLL_LOCK(sink);
#endif
		if(ret)
		{
			ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
		}
		else
		{
			gst_event_unref(event);
		}
		break;
	}
#if GST_VERSION_MAJOR < 1
	case GST_EVENT_NEWSEGMENT:
	{
		GstFormat format;
		gboolean update;
		gdouble rate;
		gint64 start, end, pos;
		gst_event_parse_new_segment(event, &update, &rate, &format, &start, &end, &pos);
#else
	case GST_EVENT_SEGMENT:
	{
		const GstSegment *segment;
		GstFormat format;
		gdouble rate;
		guint64 start, end, pos;
		gst_event_parse_segment(event, &segment);
		format = segment->format;
		rate = segment->rate;
		start = segment->start;
		end = segment->stop;
		pos = segment->position;
#endif
		GST_DEBUG_OBJECT(self, "GST_EVENT_NEWSEGMENT rate=%f\n", rate);
		if (format == GST_FORMAT_TIME)
		{
			self->timestamp_offset = start - pos;
			if (rate != self->rate)
			{
				int skip = 0, repeat = 0;
				if (rate > 1.0)
				{
					skip = (int)rate;
				}
				else if (rate < 1.0)
				{
					repeat = 1.0 / rate;
				}
				ioctl(self->fd, VIDEO_SLOWMOTION, repeat);
				ioctl(self->fd, VIDEO_FAST_FORWARD, skip);
				ioctl(self->fd, VIDEO_CONTINUE);
				self->rate = rate;
			}
		}
		ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
		if(!ret)
		{
			gst_event_unref(event);
		}
		break;
	}
	case GST_EVENT_CAPS:
	{
		GstCaps *caps;
		gst_event_parse_caps(event, &caps);
		if (caps)
		{
            self->must_send_header = TRUE;
			gst_dvbvideosink_set_caps(sink, caps);
			ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
			gst_caps_unref(caps);
		}
		else
		{
			gst_event_unref(event);
			ret = FALSE;
		}			
		break;
	}
	default:
		ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
		if (!ret)
		{
			gst_event_unref(event);
		}
		break;
	}
	return ret;
}


Re: GStreamer 1.0 #1235 athoik

  • PLi® Core member
  • 8,458 posts

+327
Excellent

Posted 2 May 2015 - 15:21

Regarding the error we are facing using HEAD.

(enigma2:4905): GStreamer-CRITICAL **: gst_mini_object_ref: assertion 'mini_object != NULL' failed
(enigma2:4905): GStreamer-CRITICAL **: gst_caps_merge: assertion 'GST_IS_CAPS (caps2)' failed

It is happening ensure_caps_profile  when calling gst_pad_peer_query_caps (GST_BASE_PARSE_SRC_PAD (h264parse), filter_caps).
 
The exact error is happening in gst_play_sink_convert_bin_getcaps because self->converter_caps is NULL.

 

Although if we install gstreamer1.0-plugins-base-videoconvert the error from gst-launch goes away!

 

But unfortunatelly in enigma2 is still there.

 

Here you can enable debuging only in playsinkconvertbin

# for gst-launch
GST_DEBUG_NO_COLOR=1 GST_DEBUG="playsinkconvertbin:6" gst-launch-1.0 playbin uri=http://megahdlive1-f.akamaihd.net/i/live_1@105260/master.m3u8
# for enigma
GST_DEBUG_NO_COLOR=1 GST_DEBUG="playsinkconvertbin:6" enigma2

 

@mx3L I hope you can take it a step further. I am stacked.


Wavefield T90: 0.8W - 1.9E - 4.8E - 13E - 16E - 19.2E - 23.5E - 26E - 33E - 39E - 42E - 45E on EMP Centauri DiseqC 16/1
Unamed: 13E Quattro - 9E Quattro on IKUSI MS-0916

Re: GStreamer 1.0 #1236 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 2 May 2015 - 16:02

@athoik

I can confirm that after installing videoconvert plugin, there are no issues when gst-lauch-1.0 is used, but as you mentioned when we use servicemp3 problem occurs again.

I think the next step should be to compare pipelines(xdot), I think they will be little different, since we are customizing playbin in servicemp3 with many flags.

 

I already look at pipeline with gst-launch without videoconvert installed and peer element in downstream direction to h264parse is capsfilter

GST_DEBUG=capsfilter:5 gst-launch-1.0 playbin uri=http://megahdlive1-f.akamaihd.net/i/live_1@105260/master.m3u8
...
0:00:03.703292332   590   0x4d43b0 DEBUG             capsfilter gstcapsfilter.c:279:gst_capsfilter_transform_caps:<capsfilter0> input:     video/x-h264, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], parsed=(boolean)true, stream-format=(string){ avc, avc3, byte-stream }, alignment=(string){ au, nal }
0:00:03.708977109   590   0x4d43b0 DEBUG             capsfilter gstcapsfilter.c:280:gst_capsfilter_transform_caps:<capsfilter0> filter:    video/x-h264
0:00:03.711493146   590   0x4d43b0 DEBUG             capsfilter gstcapsfilter.c:282:gst_capsfilter_transform_caps:<capsfilter0> caps filter:    video/x-h264, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], parsed=(boolean)true, stream-format=(string){ avc, avc3, byte-stream }, alignment=(string){ au, nal }; video/x-h264, parsed=(boolean)true, stream-format=(string){ avc, avc3, byte-stream }, alignment=(string){ au, nal }
0:00:03.714511072   590   0x4d43b0 DEBUG             capsfilter gstcapsfilter.c:283:gst_capsfilter_transform_caps:<capsfilter0> intersect: video/x-h264, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], parsed=(boolean)true, stream-format=(string){ avc, avc3, byte-stream }, alignment=(string){ au, nal }
0:00:03.746856220   590   0x4d43b0 DEBUG             capsfilter gstcapsfilter.c:279:gst_capsfilter_transform_caps:<capsfilter0> input:     video/x-h264
0:00:03.748442924   590   0x4d43b0 DEBUG             capsfilter gstcapsfilter.c:280:gst_capsfilter_transform_caps:<capsfilter0> filter:    (NULL)
0:00:03.752150443   590   0x4d43b0 DEBUG             capsfilter gstcapsfilter.c:282:gst_capsfilter_transform_caps:<capsfilter0> caps filter:    video/x-h264, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], parsed=(boolean)true, stream-format=(string){ avc, avc3, byte-stream }, alignment=(string){ au, nal }; video/x-h264, parsed=(boolean)true, stream-format=(string){ avc, avc3, byte-stream }, alignment=(string){ au, nal }
0:00:03.758985554   590   0x4d43b0 DEBUG             capsfilter gstcapsfilter.c:283:gst_capsfilter_transform_caps:<capsfilter0> intersect: video/x-h264, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], parsed=(boolean)true, stream-format=(string){ avc, avc3, byte-stream }, alignment=(string){ au, nal }; video/x-h264, parsed=(boolean)true, stream-format=(string){ avc, avc3, byte-stream }, alignment=(string){ au, nal }

(gst-launch-1.0:590): GStreamer-CRITICAL **: gst_mini_object_ref: assertion 'mini_object != NULL' failed

(gst-launch-1.0:590): GStreamer-CRITICAL **: gst_caps_merge: assertion 'GST_IS_CAPS (caps2)' failed
0:00:03.810932924   590   0x4d43b0 DEBUG             capsfilter gstcapsfilter.c:279:gst_capsfilter_transform_caps:<capsfilter0> input:     video/x-h264, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], parsed=(boolean)true, stream-format=(string){ avc, avc3, byte-stream }, alignment=(string){ au, nal }
0:00:03.816386813   590   0x4d43b0 DEBUG             capsfilter gstcapsfilter.c:280:gst_capsfilter_transform_caps:<capsfilter0> filter:    video/x-h264
0:00:03.821970369   590   0x4d43b0 DEBUG             capsfilter gstcapsfilter.c:282:gst_capsfilter_transform_caps:<capsfilter0> caps filter:    video/x-h264, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], parsed=(boolean)true, stream-format=(string){ avc, avc3, byte-stream }, alignment=(string){ au, nal }; video/x-h264, parsed=(boolean)true, stream-format=(string){ avc, avc3, byte-stream }, alignment=(string){ au, nal }
0:00:03.825579406   590   0x4d43b0 DEBUG             capsfilter gstcapsfilter.c:283:gst_capsfilter_transform_caps:<capsfilter0> intersect: video/x-h264, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], parsed=(boolean)true, stream-format=(string){ avc, avc3, byte-stream }, alignment=(string){ au, nal }
0:00:04.035466591   590   0x4d43b0 DEBUG             capsfilter gstcapsfilter.c:279:gst_capsfilter_transform_caps:<capsfilter0> input:     video/x-h264
0:00:04.041558183   590   0x4d43b0 DEBUG             capsfilter gstcapsfilter.c:280:gst_capsfilter_transform_caps:<capsfilter0> filter:    (NULL)
0:00:04.045395813   590   0x4d43b0 DEBUG             capsfilter gstcapsfilter.c:282:gst_capsfilter_transform_caps:<capsfilter0> caps filter:    video/x-h264, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], parsed=(boolean)true, stream-format=(string){ avc, avc3, byte-stream }, alignment=(string){ au, nal }; video/x-h264, parsed=(boolean)true, stream-format=(string){ avc, avc3, byte-stream }, alignment=(string){ au, nal }
0:00:04.054246591   590   0x4d43b0 DEBUG             capsfilter gstcapsfilter.c:283:gst_capsfilter_transform_caps:<capsfilter0> intersect: video/x-h264, width=(int)[ 16, 4096 ], height=(int)[ 16, 4096 ], parsed=(boolean)true, stream-format=(string){ avc, avc3, byte-stream }, alignment=(string){ au, nal }; video/x-h264, parsed=(boolean)true, stream-format=(string){ avc, avc3, byte-stream }, alignment=(string){ au, nal }

(gst-launch-1.0:590): GStreamer-CRITICAL **: gst_mini_object_ref: assertion 'mini_object != NULL' failed

But unfortunately I don't see any problem... Is it possible to post gdb trace without <optimized out> entries? maybe we could get more from it.

 

 

@christophecvr

1.

 

The first which my tests reveals, it is not only video but also audio. Both caps triggers this error.

 

I cannot confirm this on et4x00, problem is for me only in dvbvideosink, can you test this pipeline?

gst-launch-1.0 playbin uri=http://megahdlive1-f.akamaihd.net/i/live_1@105260/master.m3u8 video-sink=fakesink

2. handling caps-event - you're calling set_caps of our dvbvideosink then calling default implementation for event-handling in basesink which calls our set_caps again!, check gstbasesink.c

3. gst_event_unref(event) - good point!, but we have to do that only when we are not calling default implementation for event-handling in basesink, since basesink are doing it for us, again check in gstbasesink.c

Attached Files


Edited by mx3L, 2 May 2015 - 16:03.


Re: GStreamer 1.0 #1237 athoik

  • PLi® Core member
  • 8,458 posts

+327
Excellent

Posted 2 May 2015 - 16:42

Is it possible to post gdb trace without <optimized out> entries? maybe we could get more from it.


Well I have to compile GStreamer with "gcc -O0" in order to see those values.

 

I will test the following patch soon. When there are no converter_caps (eg because videoconvert is missing) merge won't happen.

diff --git a/gst/playback/gstplaysinkconvertbin.c b/gst/playback/gstplaysinkconvertbin.c
index 04fd4e9..43a325d 100644
--- a/gst/playback/gstplaysinkconvertbin.c
+++ b/gst/playback/gstplaysinkconvertbin.c
@@ -402,9 +402,12 @@ gst_play_sink_convert_bin_getcaps (GstPad * pad, GstCaps * filter)
             gst_caps_append_structure (downstream_filter, s);
           }
         }
-        downstream_filter =
-            gst_caps_merge (downstream_filter,
-            gst_caps_ref (self->converter_caps));
+        GST_DEBUG_OBJECT (pad, "XXX: gst_caps_ref self->converter_caps");
+        if (self->converter_caps) {
+          downstream_filter =
+              gst_caps_merge (downstream_filter,
+              gst_caps_ref (self->converter_caps));
+        }
       }

       peer_caps = gst_pad_query_caps (peer, downstream_filter);

But why gstplaysinkconvertbin is now required for videos? And what is special with ensure_caps? (another option is to revert ensure_caps but I prefer to find a better solution...)


Edited by athoik, 2 May 2015 - 16:43.

Wavefield T90: 0.8W - 1.9E - 4.8E - 13E - 16E - 19.2E - 23.5E - 26E - 33E - 39E - 42E - 45E on EMP Centauri DiseqC 16/1
Unamed: 13E Quattro - 9E Quattro on IKUSI MS-0916

Re: GStreamer 1.0 #1238 christophecvr

  • Senior Member
  • 3,131 posts

+140
Excellent

Posted 2 May 2015 - 16:48

I did not yet tested the latest try's off athoik and mx3L yet.

 

But I well already corrected my mediasink.

 

All gst-0.1 only code is removed.

The events are majorly unreffed if not needed.

 

The test results are same as before. But code is much more readable. And yes it's not spectacular but base mem use is a bit less. About 5 to 10 % les ram use for same then before.

 

For the rest all audio and video which was ok before is still ok.

 

vuduo2 all (inclusif HLS) except the uri=http://megahdlive1-f...260/master.m3u8 which has the caps error.

dm8000 all but not HLS and the uri=http://megahdlive1-f...260/master.m3u8 which has the caps error.

 

My latest mediasink pushed. It's I nice base to work whitout the gst-0.1 confusing code.

 

https://github.com/c.../commits/master



Re: GStreamer 1.0 #1239 christophecvr

  • Senior Member
  • 3,131 posts

+140
Excellent

Posted 2 May 2015 - 16:59

@athoik

 

are You shure that :

 

But why gstplaysinkconvertbin is now required for videos? And what is special with ensure_caps? (another option is to revert ensure_caps but I prefer to find a better solution...)

 

I found out that it is reallly not only video but video and audio caps which are causing a problem.

 

note: if you would take my latest dvbmediasink. And just remove audio adts as possible stream-format.

 

It all plays fine, however it issue the caps error non stop. But it really plays ok



Re: GStreamer 1.0 #1240 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 2 May 2015 - 18:21

@athoik

/**
 * GstPlayFlags:
 * @GST_PLAY_FLAG_VIDEO: Enable rendering of the video stream
 * @GST_PLAY_FLAG_AUDIO: Enable rendering of the audio stream
 * @GST_PLAY_FLAG_TEXT: Enable rendering of subtitles
 * @GST_PLAY_FLAG_VIS: Enable rendering of visualisations when there is
 *       no video stream.
 * @GST_PLAY_FLAG_SOFT_VOLUME: Use software volume
 * @GST_PLAY_FLAG_NATIVE_AUDIO: only allow native audio formats, this omits
 *   configuration of audioconvert and audioresample.
 * @GST_PLAY_FLAG_NATIVE_VIDEO: only allow native video formats, this omits
 *   configuration of videoconvert and videoscale.
 * @GST_PLAY_FLAG_DOWNLOAD: enable progressice download buffering for selected
 *   formats.
 * @GST_PLAY_FLAG_BUFFERING: enable buffering of the demuxed or parsed data.
 * @GST_PLAY_FLAG_DEINTERLACE: deinterlace raw video (if native not forced).
 * @GST_PLAY_FLAG_FORCE_FILTERS: force audio/video filters to be applied if
 *   set.
 *
 * Extra flags to configure the behaviour of the sinks.
 */
typedef enum {
  GST_PLAY_FLAG_VIDEO         = (1 << 0),
  GST_PLAY_FLAG_AUDIO         = (1 << 1),
  GST_PLAY_FLAG_TEXT          = (1 << 2),
  GST_PLAY_FLAG_VIS           = (1 << 3),
  GST_PLAY_FLAG_SOFT_VOLUME   = (1 << 4),
  GST_PLAY_FLAG_NATIVE_AUDIO  = (1 << 5),
  GST_PLAY_FLAG_NATIVE_VIDEO  = (1 << 6),
  GST_PLAY_FLAG_DOWNLOAD      = (1 << 7),
  GST_PLAY_FLAG_BUFFERING     = (1 << 8),
  GST_PLAY_FLAG_DEINTERLACE   = (1 << 9),
  GST_PLAY_FLAG_SOFT_COLORBALANCE = (1 << 10),
  GST_PLAY_FLAG_FORCE_FILTERS = (1 << 11),
} GstPlayFlags;

default playbin flags:

GST_PLAY_FLAG_AUDIO | GST_PLAY_FLAG_VIDEO | GST_PLAY_FLAG_TEXT | GST_PLAY_FLAG_SOFT_VOLUME | GST_PLAY_FLAG_DEINTERLACE | GST_PLAY_FLAG_SOFT_COLORBALANCE
>>> hex((1 << 0)|(1 << 1)|(1 << 2)|(1 << 4)|(1 << 9)|(1 << 10))
'0x617'

servicemp3 flags for playbin:

GST_PLAY_FLAG_AUDIO | GST_PLAY_FLAG_VIDEO | GST_PLAY_FLAG_TEXT | GST_PLAY_FLAG_NATIVE_VIDEO | GST_PLAY_FLAG_DEINTERLACE | GST_PLAY_FLAG_SOFT_COLORBALANCE
hex((1 << 0)|(1 << 1)|(1 << 2)|(1 << 4)|(1 << 6)|(1 << 9)|(1 << 10))
'0x657'

gst-launch-1.0 playbin uri=http://megahdlive1-f...260/master.m3u8 flags=0x617 -> no issues

gst-launch-1.0 playbin uri=http://megahdlive1-f...260/master.m3u8 flags=0x657 -> caps problems

 

So videoconverter plugin is not required in case flag GST_PLAY_FLAG_NATIVE_VIDEO is set(servicemp3) and I suppose we don't need one, since we don't do and can't do any live video conversions.

By installing it we are just masking some bug.


Edited by mx3L, 2 May 2015 - 18:22.




9 user(s) are reading this topic

0 members, 9 guests, 0 anonymous users