[OE-core] [poky][PATCH v4 2/5] gstreamer1.0-plugins-base: handle audio/video decoder error

Carlos Rafael Giani dv at pseudoterminal.org
Wed Jul 29 21:48:40 UTC 2015


This one is quite difficult. On one hand, I see the benefits. If for 
example an audio track is broken but the video track is fine, it should 
not stop the entire playback. On the other hand, the error message about 
no valid frames found is quite significant, and if a player suddenly 
stops because of missing valid frames, this player will not get any 
message from the pipeline. The reason for the stop will remain a mystery 
unless somebody looks at the logs.

I agree with the conclusions in Bugzilla that the appropriate way to 
handle this would be to somehow aggregate the error messages and only 
stop if all tracks report an error. However, this is a nontrivial 
change, and if it is implemente, it won't make it in before GStreamer 
1.8 (perhaps even later).

But, Zhu, the bugzilla entry also contains a patch for baseparse. What 
about that one?

Am 2015-07-29 um 20:25 schrieb Yuqing Zhu:
> When there is input data and no output data to the end of the stream, it will
> send GST_ELEMENT_ERROR and quit from playing.
> The patch comments the GST_ELEMENT_ERROR() and just add GST_ERROR_OBJECT()
> information instead.
>
> Signed-off-by: Yuqing Zhu<b54851 at freescale.com>
> ---
>   .../handle-audio-video-decoder-error.patch         | 64 ++++++++++++++++++++++
>   .../gstreamer/gstreamer1.0-plugins-base_1.4.5.bb   |  1 +
>   2 files changed, 65 insertions(+)
>   create mode 100755 meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/handle-audio-video-decoder-error.patch
>
> diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/handle-audio-video-decoder-error.patch b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/handle-audio-video-decoder-error.patch
> new file mode 100755
> index 0000000..833ce72
> --- /dev/null
> +++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/handle-audio-video-decoder-error.patch
> @@ -0,0 +1,64 @@
> +From bcb2b8b6f49e7c66124a4f5e07dea829d5ebfe59 Mon Sep 17 00:00:00 2001
> +From: Lyon Wang<lyon.wang at freescale.com>
> +Date: Mon, 15 Dec 2014 16:52:07 +0800
> +Subject: [PATCH] handle audio/video decoder error
> +
> +When there is input data and no output data to the end of the stream, it will
> +send GST_ELEMENT_ERROR, So the clips playing will quit.
> +However, if only one of the tracks is corrupt, there is no need to quit other
> +tracks playing.
> +
> +The patch comments the GST_ELEMENT_ERROR() and just add GST_ERROR_OBJECT()
> +information instead.
> +
> +Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=741542]
> +
> +Signed-off-by: Lyon Wang<lyon.wang at freescale.com>
> +---
> + gst-libs/gst/audio/gstaudiodecoder.c |    5 +++--
> + gst-libs/gst/video/gstvideodecoder.c |    5 +++--
> + 2 files changed, 6 insertions(+), 4 deletions(-)
> + mode change 100644 => 100755 gst-libs/gst/audio/gstaudiodecoder.c
> + mode change 100644 => 100755 gst-libs/gst/video/gstvideodecoder.c
> +
> +diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c
> +old mode 100644
> +new mode 100755
> +index c2e7a28..891df0a
> +--- a/gst-libs/gst/audio/gstaudiodecoder.c
> ++++ b/gst-libs/gst/audio/gstaudiodecoder.c
> +@@ -2123,9 +2123,10 @@ gst_audio_decoder_sink_eventfunc (GstAudioDecoder * dec, GstEvent * event)
> +       GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
> +
> +       if (dec->priv->ctx.had_input_data && !dec->priv->ctx.had_output_data) {
> +-        GST_ELEMENT_ERROR (dec, STREAM, DECODE,
> ++        /* GST_ELEMENT_ERROR (dec, STREAM, DECODE,
> +             ("No valid frames decoded before end of stream"),
> +-            ("no valid frames found"));
> ++            ("no valid frames found")); */
> ++        GST_ERROR_OBJECT(dec, "No valid frames decoded before end of stream");
> +       }
> +
> +       /* send taglist if no valid frame is decoded util EOS */
> +diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c
> +old mode 100644
> +new mode 100755
> +index ac581e1..4278bcd
> +--- a/gst-libs/gst/video/gstvideodecoder.c
> ++++ b/gst-libs/gst/video/gstvideodecoder.c
> +@@ -1068,9 +1068,10 @@ gst_video_decoder_sink_event_default (GstVideoDecoder * decoder,
> +
> +       /* Error out even if EOS was ok when we had input, but no output */
> +       if (ret && priv->had_input_data && !priv->had_output_data) {
> +-        GST_ELEMENT_ERROR (decoder, STREAM, DECODE,
> ++        /* GST_ELEMENT_ERROR (decoder, STREAM, DECODE,
> +             ("No valid frames decoded before end of stream"),
> +-            ("no valid frames found"));
> ++            ("no valid frames found")); */
> ++        GST_ERROR_OBJECT(decoder, "No valid frames decoded before end of stream");
> +       }
> +
> +       /* Forward EOS immediately. This is required because no
> +--
> +1.7.9.5
> +
> diff --git a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.4.5.bb b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.4.5.bb
> index aaa1ecb..aa90179 100644
> --- a/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.4.5.bb
> +++ b/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.4.5.bb
> @@ -9,6 +9,7 @@ SRC_URI +="file://do-not-change-eos-event-to-gap-event-if.patch \
>               file://get-caps-from-src-pad-when-query-caps.patch \
>               file://taglist-not-send-to-down-stream-if-all-the-frame-cor.patch \
>               file://fix-id3demux-utf16-to-utf8-issue.patch \
> +            file://handle-audio-video-decoder-error.patch \
>   "
>   
>   SRC_URI[md5sum] = "357165af625c0ca353ab47c5d843920e"




More information about the Openembedded-core mailing list