On 2014-05-11 08:23:25 +0200, Anton Khirnov wrote: > > On Thu, 8 May 2014 15:15:06 +0200, Luca Barbato <[email protected]> wrote: > > It would reduce the boilerplate code users have to write. > > --- > > libavcodec/avcodec.h | 5 +++++ > > libavcodec/pthread_frame.c | 4 ++++ > > 2 files changed, 9 insertions(+) > > > > diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h > > index d89cbf8..4be8849 100644 > > --- a/libavcodec/avcodec.h > > +++ b/libavcodec/avcodec.h > > @@ -2947,6 +2947,11 @@ typedef struct AVHWAccel { > > struct AVHWAccel *next; > > > > /** > > + * Allocate a custom buffer > > + */ > > + int (*alloc_frame)(AVCodecContext *avctx, AVFrame *frame); > > + > > + /** > > * Called at the beginning of each frame or field picture. > > * > > * Meaningful frame information (codec specific) is guaranteed to > > diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c > > index 34ca9a6..645b3b9 100644 > > --- a/libavcodec/pthread_frame.c > > +++ b/libavcodec/pthread_frame.c > > @@ -694,10 +694,14 @@ void ff_thread_flush(AVCodecContext *avctx) > > int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags) > > { > > PerThreadContext *p = avctx->internal->thread_ctx; > > + const AVHWAccel *hwaccel = avctx->hwaccel; > > int err; > > > > f->owner = avctx; > > > > + if (hwaccel && hwaccel->alloc_frame) > > + return hwaccel->alloc_frame(avctx, f->f); > > + > > if (!(avctx->active_thread_type & FF_THREAD_FRAME)) > > return ff_get_buffer(avctx, f->f, flags); > > > > -- > > 1.9.0 > > > > This assumes every hwaccel user is frame-threaded. > Which might be true now, but there's no reason for it to be true in general.
It also skips all the common code in ff_thread_get_buffer/ff_get_buffer for the frame setup. reordered_opaque and pkt_pts won't be set unless it is duplicated in alloc_frame. I would also feel safer if it didn't skip all the frame-thread related setup. It should go after ff_decode_frame_props() in ff_get_buffer(). Janne _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
