From patchwork Sat Sep 14 06:58:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lynne X-Patchwork-Id: 51578 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:9fc3:0:b0:48e:c0f8:d0de with SMTP id k3csp220204vqy; Fri, 13 Sep 2024 23:59:36 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCWcowx6owGxvA5xDKgGGuQ4FoFnXx9+Zt7UXj0EmAZgr6GG43vTRXa0YbfbR7mwWtEAc/ocOYAdjHbwCmhkQmkv@gmail.com X-Google-Smtp-Source: AGHT+IFcpVOwpgWOJvILD+n8SnKIgXKRx7l0a6uT/UN1/aXH0V90vw/orPNTz6dRMB0+98p8ZcaS X-Received: by 2002:a17:906:4794:b0:a8d:2fdb:b449 with SMTP id a640c23a62f3a-a8ffabc2208mr1478225466b.16.1726297176440; Fri, 13 Sep 2024 23:59:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1726297176; cv=none; d=google.com; s=arc-20240605; b=aMTg8eZcPW3D2nQX7T7U2T7nBCEkA27ynHXaK3VWjtLI+C2ZcCPA0NyIvY/q1FuHI1 AbU5dYxEPMN83/uhqe8XDKjZmzFY5BafQUEsW6LsjH+S3RFvArhqQPsAsuHz4I3iINFJ hzKvzCOQTHKMUl7a4UBvMStnQ8DTahgLPsRR/PwG3ezK4KgeweFti7rMQcSBEz3btwWJ ams1zHKFoRZI21OvVEHZMDCNOWRQglzca6yc3juAiOvmgNqUhWd7faxOza0kfneltxAB knV11oKD7ATMA+PxZz3hFUTaKX5W+HK7s/h815auKanOwRk3/RS9DlLB9Q3q7coTk9eu jQ1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:content-transfer-encoding:cc:reply-to:from :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:delivered-to; bh=a3K0FWzIiMuzIjXqlCSkRdKyXI/h48Hq0CwFisnA2d0=; fh=nenT92/WZoU6unXd3J6UhGUdod4piddKfVtctNBOh6k=; b=ept8jCnO40hmraqtb1Dn0aYNMEWD9ngiSR2GHOXqzU9OaUor9Yb828G1ck/mCubp8F 4FA0LvEjyoP+dVN1OgbFobhGGaRVEM0z6IJvU0vlymDOttfD7hnmu3CvqggPKZzt1NzB 9HDjQOmYU0Y+KT/TM4eadryOIyBgCQ0SV/qFX8ng3c8acIelveSHGWnOmHvNW6xKaVtA EHXxvR57Pd4IcyI5IPNW8GJhCRCmUDbt2XBwcd4lUNFbdYxuz4t0x5zbAdH/N7fM0imd USUEh9yDM8yKJS1I6gxTPZQZYKvy+WGSY+UC6r6XY5LbAB0r5x+JDuRFxKhfrTi5mjIM 9jlw==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a9061334be0si53993966b.724.2024.09.13.23.59.36; Fri, 13 Sep 2024 23:59:36 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 510F268DDC0; Sat, 14 Sep 2024 09:59:33 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 971CC68D900 for ; Sat, 14 Sep 2024 09:59:26 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Sat, 14 Sep 2024 08:58:46 +0200 Message-ID: <20240914065925.149320-1-dev@lynne.ee> X-Mailer: git-send-email 2.45.2.753.g447d99e1c3b In-Reply-To: <20240914062856.132625-1-dev@lynne.ee> References: <20240914062856.132625-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2] hw_base_enc: inject side data to crop output for AV1 X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Lynne via ffmpeg-devel From: Lynne Reply-To: FFmpeg development discussions and patches Cc: Lynne Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 9c0uH94kNutQ Unlike H264/H265, AV1 contains no fields to crop encoded output to specific sizes. AMD's hardware cannot handle encoding of unaligned dimensions for AV1, hence it codes 1920x1080 as 1920x1088. Add side data to crop the output back to the original dimensions. There's an AV1-spec extension planned to fix this here: https://github.com/AOMediaCodec/av1-spec/pull/346 But it seems to have stuck for now. --- libavcodec/hw_base_encode.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/libavcodec/hw_base_encode.c b/libavcodec/hw_base_encode.c index 7b6ec97d3b..c28f1aa91c 100644 --- a/libavcodec/hw_base_encode.c +++ b/libavcodec/hw_base_encode.c @@ -22,6 +22,7 @@ #include "libavutil/log.h" #include "libavutil/mem.h" #include "libavutil/pixdesc.h" +#include "libavutil/intreadwrite.h" #include "encode.h" #include "avcodec.h" @@ -551,6 +552,30 @@ int ff_hw_base_encode_set_output_property(FFHWBaseEncodeContext *ctx, (3 * ctx->output_delay + ctx->async_depth)]; } + if ((avctx->codec_id == AV_CODEC_ID_AV1) && + ((avctx->coded_width != avctx->width) || + (avctx->coded_height != avctx->height))) { + int err; + size_t crop_data_size = 4*4; + + uint8_t *crop_data = av_mallocz(crop_data_size); + if (!crop_data) { + av_buffer_unref(&pkt->buf); + return AVERROR(ENOMEM); + } + + AV_WL32(&crop_data[2], ctx->surface_width - avctx->width); + AV_WL32(&crop_data[3], ctx->surface_height - avctx->height); + + err = av_packet_add_side_data(pkt, AV_PKT_DATA_FRAME_CROPPING, + crop_data, crop_data_size); + if (err < 0) { + av_buffer_unref(&pkt->buf); + av_free(crop_data); + return err; + } + } + return 0; }