[FFmpeg-cvslog] threads: Perform the generic progress cleanup more carefully.

Michael Niedermayer git at videolan.org
Sun Feb 12 20:54:58 CET 2012


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Sat Feb 11 20:14:33 2012 +0100| [18a7f7465e7e6b9c3688ffc23230ae7a0639a771] | committer: Michael Niedermayer

threads: Perform the generic progress cleanup more carefully.

The cleanup is only done now when
a picture is returned (assuming that it has to be done when its returned)
a error is returned (assuming that there will be no further progress on the frame)
the codec is not h264 (this is still needed due to some deadlocks in realvideo)

This fixes a decoding regression with 00017.MTS

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=18a7f7465e7e6b9c3688ffc23230ae7a0639a771
---

 libavcodec/pthread.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/libavcodec/pthread.c b/libavcodec/pthread.c
index 0e64a32..9e1c1e2 100644
--- a/libavcodec/pthread.c
+++ b/libavcodec/pthread.c
@@ -388,7 +388,7 @@ static attribute_align_arg void *frame_worker_thread(void *arg)
 
         pthread_mutex_lock(&p->progress_mutex);
         for (i = 0; i < MAX_BUFFERS; i++)
-            if (p->progress_used[i]) {
+            if (p->progress_used[i] && (p->got_frame || p->result<0 || avctx->codec_id != CODEC_ID_H264)) {
                 p->progress[i][0] = INT_MAX;
                 p->progress[i][1] = INT_MAX;
             }



More information about the ffmpeg-cvslog mailing list