From patchwork Mon Sep 3 00:34:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 10208 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:12c4:0:0:0:0:0 with SMTP id 65-v6csp2106968jap; Sun, 2 Sep 2018 17:35:53 -0700 (PDT) X-Google-Smtp-Source: ANB0Vdap+B8m2xlqySyoJOkhW9oRZs2U64ynq9KZzx416ycBTwC06bwaNhs8YAcMvoD308VzdnuN X-Received: by 2002:a5d:4cc8:: with SMTP id c8-v6mr17798549wrt.210.1535934953039; Sun, 02 Sep 2018 17:35:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535934953; cv=none; d=google.com; s=arc-20160816; b=wtxGyZ/yYqwNWu3S870N29XKALruFDdif7tWHDoZs/ulrkPR61uzvQAztN7U+q650g ON+OGtP1UQLidYT8y5Qd24x1uQcY3hYvw0dHglr2hkGFRJ0y2VviKq/fT9gcG/NnmcvU rJd7d2mFxU+3EY/jMyXXGuKtbKqigoBFMHk/2QZzDO9tJ+jIJHQyMIamMLzbtYD7E7Kz FvTHnU4JAyGHdsY0ZgCMy31aShNYy3PmhNBAb4yLJrp0TJLpP9o5s8Ak4SaGIWKeMEV+ 9YlOJa20ux4CZqnCfPzWakZlrPMWyxc1bOCRLutA8rVv5pCr9REiODEEWsYGV7+x+cC3 Jxgw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=8NCRxDKDtXsLyyCHa4Cj+0lviXIyjo2CJDpEwmSFce4=; b=UIMvbnx3eDgKzKAmGcgcs/plv05U51r/RUxRobTN5XPSzMkXnt3pAjnZmSbZuGDBDq SothygfoBd8NZtRUwZae5S9v+K/pKWeoL2Z0vPZupyo0uzBPIpbmUEgbGKBlqRUOb+sx 9Kzvj968ozPhpXatDYAPUEmCtmCoH7Uuh4JESVMgodHnSgXnX3L60KnzHspm89P3HETj TEd3IM5sI3rMdbrxIWeXkjh8h94HUuJHsAmSfeHm8PcrxZeN9QtwLWHHYn0K7QG/n+Nr 0ZJNJKF11sElzLND0WU3iX9SRSrZNwErXHDMQ1B7yWNtWZstJEq/qMxfsG4UK/H7fuE5 NquQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=MX1o4SIu; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a15-v6si15819691wrf.312.2018.09.02.17.35.52; Sun, 02 Sep 2018 17:35:53 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=MX1o4SIu; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8F267689AC3; Mon, 3 Sep 2018 03:35:44 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f195.google.com (mail-qt0-f195.google.com [209.85.216.195]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2F4AC68083F for ; Mon, 3 Sep 2018 03:35:38 +0300 (EEST) Received: by mail-qt0-f195.google.com with SMTP id h4-v6so20225323qtj.7 for ; Sun, 02 Sep 2018 17:35:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=jFYfjxOkJzTMegApIJs6CLWpHCQ4UQFHOODghI9XDpg=; b=MX1o4SIuPPmtskngkIoU/RFkNpYJa3pFPfjT31gFLz0+WQoVcSRIah8E+9Vbu/Am3W k5Hl8RzL/tNrXs2qbvyDX6+wkUaEm3Sr0iLnpDxzVsJzxusg81RrGsYZxMmd3OoHUFTy 9UM7qU10UU27kQSVWf/4ZqYq9GlqXtKhoTdW59yZl3O9Aq+qyElPCbhwgvB/HxTOQ6os 9yXG6n0nVbNmBiR0dJgsfoHNidQaEHuL6JUb9HBSyQY9FfoyGBqu3bxyLFoByyCzYH9b izuRyJXd+wsAlacItUovSMfR3i1N/SRhvjWYR9Jgcof7rhJ3MB6+lmqsqtO7EZaZ378E XXwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=jFYfjxOkJzTMegApIJs6CLWpHCQ4UQFHOODghI9XDpg=; b=daCqa4kKo56ontRklllf2pFIuqZzO0DVjRGvDE/lRiajPm+IC5qfRdOnHacGIviKua Tcsf52MZVeeorKeO2jmGkX6YGW3BO8+nISHBs2lSY5aOHzYE5qOa8LNIpzz+T1TFq148 1pmO26E6ltCPzScz2pAMIUTRTeXOCnexbpaqGfNT/9jYaIZe5sTWUchffeyiPucDHbrk /w3h9W7vBXplGopU6Gsbpt+couSOAY4l7IHds6/nI6UIASQSdQNhbgMh4vo4IQoSkae7 CIeaP0zKfD51XVUCymGhM/+CyrRgd2e4MbEl/qbVHeDAElo/VYtwlkcIssUMXS2+zK3W 8E8w== X-Gm-Message-State: APzg51CrmNA9C+ciTrAMVnoxThBaHiwLIviP6tnmzekb0V/5J5q9d0dC rvQmBktrqC1eJyJvvW2Yl7TrjOqp X-Received: by 2002:a0c:91d8:: with SMTP id r24-v6mr23658098qvr.113.1535934942814; Sun, 02 Sep 2018 17:35:42 -0700 (PDT) Received: from localhost.localdomain ([181.231.186.237]) by smtp.gmail.com with ESMTPSA id a66-v6sm9096518qkf.96.2018.09.02.17.35.41 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 02 Sep 2018 17:35:42 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sun, 2 Sep 2018 21:34:23 -0300 Message-Id: <20180903003423.6656-1-jamrial@gmail.com> X-Mailer: git-send-email 2.18.0 Subject: [FFmpeg-devel] [PATCH] frame: Simplify the video allocation X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Luca Barbato Merged-by: James Almer --- This is the next merge in the queue. It's a critical part of the AVFrame API, so even if FATE passes I'd rather have others look at it and test in case something breaks. The only difference compared to the libav commit is the "32 - 1" padding per plane when allocating the buffer, which was only in our tree. libavutil/frame.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/libavutil/frame.c b/libavutil/frame.c index deb9b6f334..f072baa916 100644 --- a/libavutil/frame.c +++ b/libavutil/frame.c @@ -211,7 +211,7 @@ 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; if (!desc) return AVERROR(EINVAL); @@ -236,24 +236,18 @@ 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) + 32 /* STRIDE_ALIGN */ - 1; + 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); + 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; frame->extended_data = frame->data;