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 

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
subprojects
gst-integration-testsuites/testsuites
gst-plugins-base/ext/ogg

@ -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

@ -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",

@ -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);