diff options
author | wm4 <nfxjfg@googlemail.com> | 2017-04-06 17:35:32 +0200 |
---|---|---|
committer | wm4 <nfxjfg@googlemail.com> | 2017-04-06 17:46:53 +0200 |
commit | 15a23a83326d70e470a6b5c8d71e55257bffd97b (patch) | |
tree | c40eaad5315b3dfda18b55dd5c74ac3cb72ecba8 /libavcodec | |
parent | e5c11ab9cef60a6c9141d7a60145ea833dd88485 (diff) | |
download | ffmpeg-15a23a83326d70e470a6b5c8d71e55257bffd97b.tar.gz |
pthread_frame: don't return stale error codes after flush
Consider the following sequence of events:
- open a codec without AV_CODEC_CAP_DELAY
- decode call fails with an error
- ff_thread_flush() is called
- drain packet is sent
Then the last step would make ff_thread_decode_frame() return an error,
because p->result can still be set to an error value. This is because
submit_packet returns immediately if AV_CODEC_CAP_DELAY is not set, and
no worker thread gets the chance to reset p->result, yet its value is
trusted by ff_thread_decode_frame().
Fix this by clearing the error fields on flush.
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/pthread_frame.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c index c246c2fded..aaf576d63c 100644 --- a/libavcodec/pthread_frame.c +++ b/libavcodec/pthread_frame.c @@ -861,6 +861,7 @@ void ff_thread_flush(AVCodecContext *avctx) // Make sure decode flush calls with size=0 won't return old frames p->got_frame = 0; av_frame_unref(p->frame); + p->result = 0; release_delayed_buffers(p); |