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

Zhu Carol B54851 at freescale.com
Thu Jul 30 09:30:02 UTC 2015


Hi, Carlos,
     As mentioned below, currently we may use this trivial modification to just print error messages instead of return GST_ELEMENT_ERROR before the aggregation of error message handling .
         For the baseparse patch, actually it is the similar situation with audio/video decoder patch, the only difference is that audio/decoder error message is got from audio/video decoder which means there is corrupt in raw audio/video data decoding.  The error in baseparse is similar that some corrupt error is detected in container when parsing the track, and it should not quit the playing if only one of the tracks meets the error, similar as audio/video decoder.

B.R.
Yuqing Zhu
________________________________________
发件人: Carlos Rafael Giani <dv at pseudoterminal.org>
发送时间: 2015年7月30日 5:48
收件人: Zhu Yuqing-B54851; openembedded-core at lists.openembedded.org
主题: Re: [poky][PATCH v4 2/5] gstreamer1.0-plugins-base: handle audio/video decoder error

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