From 0ff6a31d7dc51ff2f0a6147a0fadff2d6359ecb9 Mon Sep 17 00:00:00 2001 From: William Wilgus Date: Mon, 12 Aug 2019 22:57:37 -0500 Subject: opus reset decoder on seek completion to prevent stack overflow apparently we should be doing this anyway mark4o> The packets overlap and may reuse state set by other recent packets, so if you seek to a different position, resetting the state helps to ensure that the subsequent packets won't use the state set by the unrelated packets that were processed before the seek. remove stack bump WORKAROUND_FS13060 Change-Id: I1c14e23b1721a360b91e3e55202c1557aef0fcc6 --- lib/rbcodec/codecs/opus.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'lib/rbcodec') diff --git a/lib/rbcodec/codecs/opus.c b/lib/rbcodec/codecs/opus.c index f0ad5e8ba4..c34c0b885b 100644 --- a/lib/rbcodec/codecs/opus.c +++ b/lib/rbcodec/codecs/opus.c @@ -413,6 +413,9 @@ enum codec_status codec_run(void) LOGF("Opus seek page:%lld,%lld,%ld\n", seek_target, page_granule, (long)param); opus_seek_page_granule(seek_target, page_granule, &oy, &os); + /* reset the state to help ensure that subsequent packets won't + use state set by unrelated packets processed before seek */ + opus_decoder_ctl(st, OPUS_RESET_STATE); } ci->set_elapsed(param); -- cgit v1.2.3