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
This commit is contained in:
William Wilgus 2019-08-12 22:57:37 -05:00
parent 8570d4063b
commit 0ff6a31d7d
2 changed files with 5 additions and 1 deletions

View file

@ -92,7 +92,8 @@ static struct event_queue codec_queue SHAREDBSS_ATTR;
static struct queue_sender_list codec_queue_sender_list SHAREDBSS_ATTR;
/* Workaround stack overflow in opus codec on highmem devices (see FS#13060). */
#if !defined(CPU_COLDFIRE) && (MEMORYSIZE >= 8) && defined(IRAMSIZE) && IRAMSIZE > (32 * 1024)
/* Fixed 2019-8-14 (see FS#13131) */
#if 0 /*!defined(CPU_COLDFIRE) && (MEMORYSIZE >= 8) && defined(IRAMSIZE) && IRAMSIZE > (32 * 1024)*/
#define WORKAROUND_FS13060 0x800
#else
#define WORKAROUND_FS13060 0

View file

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