this fixes fate-iv8-demux with two threads
---8<---
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.
---
libavcodec/pthread.c | 4 +---
libavcodec/version.h | 2 +-
libavformat/utils.c | 5 -----
3 files changed, 2 insertions(+), 9 deletions(-)
diff --git a/libavcodec/pthread.c b/libavcodec/pthread.c
index 7557e68..8fd2eba 100644
--- a/libavcodec/pthread.c
+++ b/libavcodec/pthread.c
@@ -362,8 +362,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);
@@ -681,7 +680,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 c11f09c..756ad1d 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 18
+#define LIBAVCODEC_VERSION_MINOR 19
#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 c2beeae..2b7230a 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -962,11 +962,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 &&
--
1.7.8.rc1
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel