[FFmpeg-devel] [PATCH] avutil/frame: Simplify the video allocation
Michael Niedermayer
michael at niedermayer.cc
Tue Sep 11 02:03:09 EEST 2018
On Tue, Sep 11, 2018 at 12:57:11AM +0200, Michael Niedermayer wrote:
> From: Luca Barbato <lu_zero at gentoo.org>
>
> Merged-by: James Almer <jamrial at gmail.com>
> Padding-Remixed-by: Michael Niedermayer <michael at niedermayer.cc>
> Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> ---
> libavutil/frame.c | 32 ++++++++++++++++----------------
> 1 file changed, 16 insertions(+), 16 deletions(-)
>
> diff --git a/libavutil/frame.c b/libavutil/frame.c
> index deb9b6f334..6147c61259 100644
> --- a/libavutil/frame.c
> +++ b/libavutil/frame.c
> @@ -211,7 +211,8 @@ void av_frame_free(AVFrame **frame)
> static int get_video_buffer(AVFrame *frame, int align)
> {
> const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format);
> - int ret, i;
> + int ret, i, padded_height;
> + int plane_padding = FFMAX(16 + 16/*STRIDE_ALIGN*/, align);
>
> if (!desc)
> return AVERROR(EINVAL);
> @@ -236,23 +237,22 @@ static int get_video_buffer(AVFrame *frame, int align)
> frame->linesize[i] = FFALIGN(frame->linesize[i], align);
> }
>
> - for (i = 0; i < 4 && frame->linesize[i]; i++) {
> - int h = FFALIGN(frame->height, 32);
> - if (i == 1 || i == 2)
> - h = AV_CEIL_RSHIFT(h, desc->log2_chroma_h);
> + padded_height = FFALIGN(frame->height, 32);
> + if ((ret = av_image_fill_pointers(frame->data, frame->format, padded_height,
> + NULL, frame->linesize)) < 0)
> + return ret;
>
> - frame->buf[i] = av_buffer_alloc(frame->linesize[i] * h + 16 + 16/*STRIDE_ALIGN*/ - 1);
> - if (!frame->buf[i])
> - goto fail;
> + frame->buf[0] = av_buffer_alloc(ret + 4*plane_padding);
> + if (!frame->buf[0])
> + goto fail;
>
> - frame->data[i] = frame->buf[i]->data;
> - }
> - if (desc->flags & AV_PIX_FMT_FLAG_PAL || desc->flags & FF_PSEUDOPAL) {
> - av_buffer_unref(&frame->buf[1]);
> - frame->buf[1] = av_buffer_alloc(AVPALETTE_SIZE);
> - if (!frame->buf[1])
> - goto fail;
> - frame->data[1] = frame->buf[1]->data;
> + if (av_image_fill_pointers(frame->data, frame->format, padded_height,
> + frame->buf[0]->data, frame->linesize) < 0)
> + goto fail;
> +
> + for (i = 0; i < 4; i++) {
^
this is more ideal if its 1, saw it a moment after sending
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Does the universe only have a finite lifespan? No, its going to go on
forever, its just that you wont like living in it. -- Hiranya Peiri
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20180911/e514a718/attachment.sig>
More information about the ffmpeg-devel
mailing list