pthreads: drop has_b_frames mangling, its buggy in many many ways,
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 9 Nov 2011 16:26:19 +0000 (17:26 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 9 Nov 2011 16:47:10 +0000 (17:47 +0100)
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@gmx.at>
libavcodec/pthread.c
libavformat/utils.c

index 96db9ae..4a44cea 100644 (file)
@@ -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)
index 1d84cc6..c7916dc 100644 (file)
@@ -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 &&