aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJanne Grunau <janne-libav@jannau.net>2011-11-10 17:30:33 +0100
committerJanne Grunau <janne-libav@jannau.net>2011-11-22 09:50:33 +0100
commit0945eddec09d1c2b69643afc70377d86febc0591 (patch)
tree97bcbf874a3b470c8426e869dc89cdd35b8a1422
parent82963f8f046bbe724e6c770a2aaf0290c9915503 (diff)
downloadffmpeg-0945eddec09d1c2b69643afc70377d86febc0591.tar.gz
pthread: do not touch has_b_frames
Adding the thread count in frame level multithreading to has_b_frames as an additional delay causes more problems than it solves. For example inconsistent behaviour during timestamp calculation in libavformat. Thread count and frame level multithreading are both set by the user. If the additional delay caused by frame level multithreading needs to be considered in the calling code it has all information to take it into account. Should it become necessary to calculate a maximum delay inside libavcodec it should be exported as its own field and not reusing an existing field. Based on a patch by Michael Niedermayer. Signed-off-by: Janne Grunau <janne-libav@jannau.net>
-rw-r--r--libavcodec/pthread.c4
-rw-r--r--libavcodec/version.h2
-rw-r--r--libavformat/utils.c5
3 files changed, 2 insertions, 9 deletions
diff --git a/libavcodec/pthread.c b/libavcodec/pthread.c
index 42b82a57d7..9c3453f13d 100644
--- a/libavcodec/pthread.c
+++ b/libavcodec/pthread.c
@@ -363,8 +363,7 @@ 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;
+ dst->coded_frame = src->coded_frame;
} else {
if (dst->codec->update_thread_context)
err = dst->codec->update_thread_context(dst, src);
@@ -684,7 +683,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/libavcodec/version.h b/libavcodec/version.h
index 35e8958c69..3f5c42e33e 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -21,7 +21,7 @@
#define AVCODEC_VERSION_H
#define LIBAVCODEC_VERSION_MAJOR 53
-#define LIBAVCODEC_VERSION_MINOR 21
+#define LIBAVCODEC_VERSION_MINOR 22
#define LIBAVCODEC_VERSION_MICRO 0
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
diff --git a/libavformat/utils.c b/libavformat/utils.c
index b8262ecaf1..2b378ab712 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -964,11 +964,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 &&