On 2013-04-10 22:59:35 +0200, Luca Barbato wrote:
> On 4/10/13 9:00 PM, Anton Khirnov wrote:
> > Needed e.g. for h264 cropping to work properly.
> > ---
> > libavcodec/utils.c | 18 +++++++++++++-----
> > 1 file changed, 13 insertions(+), 5 deletions(-)
> >
> > diff --git a/libavcodec/utils.c b/libavcodec/utils.c
> > index dfb2f54..32ca703 100644
> > --- a/libavcodec/utils.c
> > +++ b/libavcodec/utils.c
> > @@ -555,10 +555,8 @@ int ff_get_buffer(AVCodecContext *avctx, AVFrame
> > *frame, int flags)
> >
> > switch (avctx->codec_type) {
> > case AVMEDIA_TYPE_VIDEO:
> > - if (!frame->width)
> > - frame->width = avctx->width;
> > - if (!frame->height)
> > - frame->height = avctx->height;
> > + frame->width = FFMAX(avctx->width, avctx->coded_width);
> > + frame->height = FFMAX(avctx->height, avctx->coded_height);
> > if (frame->format < 0)
> > frame->format = avctx->pix_fmt;
> > if (!frame->sample_aspect_ratio.num)
> > @@ -702,6 +700,9 @@ do {
> > \
> >
> > av_buffer_unref(&dummy_buf);
> >
> > + frame->width = avctx->width;
> > + frame->height = avctx->height;
> > +
> > return 0;
> >
> > fail:
> > @@ -712,7 +713,14 @@ fail:
> > }
> > #endif
> >
> > - return avctx->get_buffer2(avctx, frame, flags);
> > + ret = avctx->get_buffer2(avctx, frame, flags);
> > +
> > + if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
> > + frame->width = avctx->width;
> > + frame->height = avctx->height;
>
> Just to avoid problems in the future save a local copy of width and height.
I don't see how that's gonna improve things. frame->{width,height} are
expected to be zero. After returning from decode_video they should be
the dimensions of the frame, i.e. the displayed pixels.
patch lgtm
Janne
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel