summaryrefslogtreecommitdiff
path: root/libavcodec/pthread_frame.c
diff options
context:
space:
mode:
authorwm4 <nfxjfg@googlemail.com>2017-04-06 17:35:32 +0200
committerwm4 <nfxjfg@googlemail.com>2017-04-06 17:46:53 +0200
commit15a23a83326d70e470a6b5c8d71e55257bffd97b (patch)
treec40eaad5315b3dfda18b55dd5c74ac3cb72ecba8 /libavcodec/pthread_frame.c
parente5c11ab9cef60a6c9141d7a60145ea833dd88485 (diff)
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/pthread_frame.c')
-rw-r--r--libavcodec/pthread_frame.c1
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);