Browse Source

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.
tags/n3.4
wm4 8 years ago
parent
commit
15a23a8332
1 changed files with 1 additions and 0 deletions
  1. +1
    -0
      libavcodec/pthread_frame.c

+ 1
- 0
libavcodec/pthread_frame.c View File

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



Loading…
Cancel
Save