[FFmpeg-cvslog] pthreads: drop has_b_frames mangling, its buggy in many many ways,

Michael Niedermayer git at videolan.org
Wed Nov 9 18:01:02 CET 2011


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Wed Nov  9 17:26:19 2011 +0100| [26ae9a5d7c448a3eb42641b546ee8d585ab716e6] | committer: Michael Niedermayer

pthreads: drop has_b_frames mangling, its buggy in many many ways,
not to mention race conditions and that its used for stream copy, used to determine IPB type by
applications and other things.
Fixes various frame drop/timestamp issues with frame multithreading.

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

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

 libavcodec/pthread.c |    2 --
 libavformat/utils.c  |    5 -----
 2 files changed, 0 insertions(+), 7 deletions(-)

diff --git a/libavcodec/pthread.c b/libavcodec/pthread.c
index 96db9ae..4a44cea 100644
--- a/libavcodec/pthread.c
+++ b/libavcodec/pthread.c
@@ -364,7 +364,6 @@ static int update_context_from_thread(AVCodecContext *dst, AVCodecContext *src,
 
     if (for_user) {
         dst->coded_frame   = src->coded_frame;
-        dst->has_b_frames += src->thread_count - 1;
     } else {
         if (dst->codec->update_thread_context)
             err = dst->codec->update_thread_context(dst, src);
@@ -686,7 +685,6 @@ static void frame_thread_free(AVCodecContext *avctx, int thread_count)
     av_freep(&fctx->threads);
     pthread_mutex_destroy(&fctx->buffer_mutex);
     av_freep(&avctx->thread_opaque);
-    avctx->has_b_frames -= avctx->thread_count - 1;
 }
 
 static int frame_thread_init(AVCodecContext *avctx)
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 1d84cc6..c7916dc 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -1004,11 +1004,6 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
     delay= st->codec->has_b_frames;
     presentation_delayed = 0;
 
-    // ignore delay caused by frame threading so that the mpeg2-without-dts
-    // warning will not trigger
-    if (delay && st->codec->active_thread_type&FF_THREAD_FRAME)
-        delay -= st->codec->thread_count-1;
-
     /* XXX: need has_b_frame, but cannot get it if the codec is
         not initialized */
     if (delay &&



More information about the ffmpeg-cvslog mailing list