On Nov 10, 2011, at 4:02 PM, Janne Grunau wrote: > this fixes fate-iv8-demux with two threads
Seems worthwhile. I added this to avoid mplayer/vlc having to make code changes (their a/v sync is somewhat based on guesswork…), so if you apply this they'll need to change. > ---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. Auto thread count would make this not true of course. > 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 > libav-devel@libav.org > https://lists.libav.org/mailman/listinfo/libav-devel _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel