oggdemux: Fix racy decode error

Sometimes the seek to the end of file to determine the duration would trigger a
reset of the source pads, that would confuse the decoder downstream and trigger
an error. So the proposed fix is to not reset pads when the segment event being
processed is the consequence of a seek performed to determine the duration.

Fixes #4212

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/937>
This commit is contained in:
Philippe Normand 2019-04-11 11:24:34 +01:00
parent bf98e200b2
commit 5de3cfca31
3 changed files with 1 additions and 42 deletions

View File

@ -755,7 +755,6 @@ validate.pushfile.media_check.qtdemux-test-frag-basic_zero_dur_no_mehd_mp4
~validate.rtsp2.playback.fast_forward.cm5000_hevc_1080i_colorbars_ts
~validate.rtsp2.playback.fast_forward.mp3_h264_0_mp4
~validate.rtsp2.playback.fast_forward.mp3_h264_1_mp4
~validate.rtsp2.playback.fast_forward.opus_1_ogg
~validate.rtsp2.playback.fast_forward.raw_h264_0_mp4
~validate.rtsp2.playback.fast_forward.raw_h264_1_mp4
~validate.rtsp2.playback.fast_forward.rawaudioS32LE_prores_mov
@ -765,8 +764,6 @@ validate.pushfile.media_check.qtdemux-test-frag-basic_zero_dur_no_mehd_mp4
~validate.rtsp2.playback.fast_forward.samples_multimedia_cx_testsuite_iv31_avi
~validate.rtsp2.playback.fast_forward.test5_mkv
~validate.rtsp2.playback.fast_forward.tron_en_ge_aac_h264_ts
~validate.rtsp2.playback.fast_forward.vorbis_theora_0_ogg
~validate.rtsp2.playback.fast_forward.vorbis_theora_1_ogg
~validate.rtsp2.playback.fast_forward.vorbis_vp8_0_webm
~validate.rtsp2.playback.fast_forward.vorbis_vp8_1_webm
~validate.rtsp2.playback.play_15s.1080p_xavc_audio_conforming_accuracy_mxf
@ -810,7 +807,6 @@ validate.pushfile.media_check.qtdemux-test-frag-basic_zero_dur_no_mehd_mp4
~validate.rtsp2.playback.reverse_playback.mp3_h264_0_mp4
~validate.rtsp2.playback.reverse_playback.mp3_h264_1_mp4
~validate.rtsp2.playback.reverse_playback.numerated_frames_blue_ogv
~validate.rtsp2.playback.reverse_playback.opus_1_ogg
~validate.rtsp2.playback.reverse_playback.raw_h264_0_mp4
~validate.rtsp2.playback.reverse_playback.raw_h264_1_mp4
~validate.rtsp2.playback.reverse_playback.raw_video_avi
@ -818,8 +814,6 @@ validate.pushfile.media_check.qtdemux-test-frag-basic_zero_dur_no_mehd_mp4
~validate.rtsp2.playback.reverse_playback.rawaudioS32LE_prores_mov
~validate.rtsp2.playback.reverse_playback.samples_multimedia_cx_flac_Yesterday_flac
~validate.rtsp2.playback.reverse_playback.samples_multimedia_cx_testsuite_iv31_avi
~validate.rtsp2.playback.reverse_playback.vorbis_theora_0_ogg
~validate.rtsp2.playback.reverse_playback.vorbis_theora_1_ogg
~validate.rtsp2.playback.seek_backward.GH1_00094_1920x1280_MTS
~validate.rtsp2.playback.seek_backward.bowlerhatdancer_sleepytom_SGP_mjpeg_avi
~validate.rtsp2.playback.seek_backward.cm5000_hevc_1080i_colorbars_ts
@ -895,10 +889,8 @@ validate.pushfile.media_check.qtdemux-test-frag-basic_zero_dur_no_mehd_mp4
~validate.rtsp2.playback.seek_with_stop.cm5000_hevc_1080i_colorbars_ts
~validate.rtsp2.playback.seek_with_stop.mp3_h264_0_mp4
~validate.rtsp2.playback.seek_with_stop.mp3_h264_1_mp4
~validate.rtsp2.playback.seek_with_stop.numerated_frames_blue_ogv
~validate.rtsp2.playback.seek_with_stop.op1a-mpeg2-wave_hd_mxf
~validate.rtsp2.playback.seek_with_stop.op2b-mpeg2-wave_hd_mxf
~validate.rtsp2.playback.seek_with_stop.opus_1_ogg
~validate.rtsp2.playback.seek_with_stop.raw_h264_0_mp4
~validate.rtsp2.playback.seek_with_stop.raw_h264_1_mp4
~validate.rtsp2.playback.seek_with_stop.raw_video_avi

View File

@ -49,39 +49,6 @@ KNOWN_ISSUES = {
},
]
},
"https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/issues/311": {
"tests": [
"validate.http.*.ogg$",
"validate.http.*.ogv$",
"validate.rtsp.*.ogg$",
"validate.rtsp.*.ogv$",
],
"issues": [
{
"detected-on": "playbin",
"summary": "We got an ERROR message on the bus",
"details": ".*No valid frames decoded before end of stream.*",
"level": "critical",
"sometimes": True,
},
{
"level": "critical",
"summary": "We got an ERROR message on the bus",
"details": ".*Got error: Could not decode stream.*",
"sometimes": True,
},
{
"level": "critical",
"summary": "The program stopped before some actions were executed",
"sometimes": True,
},
{
"summary": "The program stopped before some actions were executed",
"issue-id": "scenario::not-ended",
"sometimes": True,
},
]
},
"https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/issues/563": {
"tests": [
"validate.rtsp.playback.seek_backward.bowlerhatdancer_sleepytom_SGP_mjpeg_avi",

View File

@ -2487,7 +2487,7 @@ gst_ogg_demux_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
ogg sync object as we already reset the chain */
GST_DEBUG_OBJECT (ogg, "No chain, just resetting ogg sync");
ogg_sync_reset (&ogg->sync);
} else {
} else if (ogg->push_state != PUSH_DURATION) {
/* reset pad push mode seeking state */
for (i = 0; i < chain->streams->len; i++) {
GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);