From patchwork Wed Jul 19 22:20:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42851 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:b813:b0:130:ccc6:6c4b with SMTP id fi19csp1498311pzb; Wed, 19 Jul 2023 15:21:18 -0700 (PDT) X-Google-Smtp-Source: APBJJlHXOgCMsV8lBp4uKA1FbMN5ZKaGTtHVjoM+pz20SyfK/Qd0KitKkvqfm9FuRKfC7Sn3dSMB X-Received: by 2002:a17:906:1054:b0:997:bb66:3ce with SMTP id j20-20020a170906105400b00997bb6603cemr3961422ejj.7.1689805278736; Wed, 19 Jul 2023 15:21:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689805278; cv=none; d=google.com; s=arc-20160816; b=kPCMEsGEMVUNCbV6kYrjyJhhfjJN+r6Rqm0pZSmFtdNl2eGDbgbtzfRRmIjdYXn/wG FmjeUIVPTAOweIzS6jCf3JHTjtUNsNgtrja8EhZlXUdOFE9z6E4adRudb00MFnj4ubPQ YfBnvg01EQdyicCduDYUt/sZKZOqP7ewpb7ChkpDMbXY8cx68NG3RwM2A4H9gqco0aUw 14inDL6jQSS5NshO8cc4jnIIhssENQaN4wekmHyLxqX0SooPBUX3HCZr2lxv17p7HEa0 evvIlTv/GJ76Sj7fWxP9rDtcggfos5dLbERoqBtdyCm0T+S3sx9QYEOfWVU2Bihr0nAM SQqA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=IejH8kOTxOMZ9id+CwRkC38gmlv3eS5i2WGmeMndMqY=; fh=J3zlMo7rVW2t2IQYogliBcMNuBh6YQg7NRChcrschf4=; b=DsZ60TAqPvID41kCWykA8W8ZLX5rucO4jkpAwM9VM7wvSjj0CL4oMTx/tEJguOkFDJ NdARiqmueFTV0G4hrSMdLSkFHcy51phhb2/IgGAAuDL6Lq6SeCYnkcZhulflCFOiq0JI dB6of4nKi9hTpP4/q5Lt/um8tGlpB2QZy1g5HrCO29FeOIxsT5E+b67e/jx8CjzFCsIR 2lPPtLSGhqZDbAOtN56PMWKGjbJJJc8jKO8u4Dd/sn/9JxTv6up+aqoHS7Toj1VLRpgz aVxhltKPa07m7Hesk79fZVzwhPRKShfPE5Nhd0BJ/6ZGcaur5s5+whw586o2Tbm+2QfT JVRg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=B9c7LaB1; 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 gy18-20020a170906f25200b0099b488364f7si742958ejb.781.2023.07.19.15.21.06; Wed, 19 Jul 2023 15:21:18 -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=20221208 header.b=B9c7LaB1; 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 5C7FF68C5C9; Thu, 20 Jul 2023 01:21:02 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f49.google.com (mail-oa1-f49.google.com [209.85.160.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E7C2E688301 for ; Thu, 20 Jul 2023 01:20:55 +0300 (EEST) Received: by mail-oa1-f49.google.com with SMTP id 586e51a60fabf-1b06a46e1a9so115962fac.2 for ; Wed, 19 Jul 2023 15:20:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689805253; x=1690410053; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=WjKKdWrRki3uuFpoaW22h6K7/NipphKr+njxhqqjX3A=; b=B9c7LaB1+SuKmivPf5hBygBZ5PBffuAwlDeB2A0hDUOXfKza+WcA8dXzeWVuSkYCXD O/oWcf1f+QCuerwW2KDZN8J9K7uaomDiBVnbEj6DBsAjwUf27Lb3qVWJ7W6U+bM9wQX+ aYG0vvqLbLpvEv/BKO7i9GxwGirvpp+mADhfJWR5i3aiZw6CpjoWoumr0luwo1Kfcy6Q A5IwUKsA49KCV81DRiwyNwyY2b5ZFLBPGNt75zcsrf1qAIwdKvfDheVJ6a5ufZGVjmGT qhSkqI7xlrT6fZnqdQ2dFski/2q1Mu9HpbRl5iLOWmhFIFfP+GXgYmdnVVjyKOKqBIpC JgMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689805253; x=1690410053; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=WjKKdWrRki3uuFpoaW22h6K7/NipphKr+njxhqqjX3A=; b=hXb/Bb/nEipBKx92x2FKhJJvCCFK847BJQhxI+DailusiZKSd/dDIzrkmceQKKAore ojPzyE06XOpXf2jxyuSt6w44q6gr8IdVV1AufDr6AIf9xmtWmn9cxEhjK9zWCeQ1Nh5m ubmEFMrjGNaD5bn3wEjzAqWxGiNuYpqnIZzy1BzJ4ZuCb7Cg5f0cLTybBvPvyAObx56c 1YYYEhtUTQIQ24l/qx6yKXptHdKkDzYrVGMpIXVh6xn7pRDN8FTRIdZIPtoxzNeBxIlw MYkuOkNLW9N0hVAEWp3xhKiDQLflPrzz2oM0d3Zkg0+8NNi+PAht1VkaoedqZ1C/YQky Znug== X-Gm-Message-State: ABy/qLaXm3v/UtS7GfU+a3BnhwfolX4YdLgGpblBMrXXT/DMvUk/CsyZ qJl/9cgnzOFni/Ze2+AatoPyh9TB+AY= X-Received: by 2002:a05:6870:590:b0:1b4:4972:a0cd with SMTP id m16-20020a056870059000b001b44972a0cdmr23564513oap.8.1689805252987; Wed, 19 Jul 2023 15:20:52 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id k2-20020a056870350200b001b36c56e6a7sm2371370oah.44.2023.07.19.15.20.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jul 2023 15:20:52 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 19 Jul 2023 19:20:39 -0300 Message-ID: <20230719222043.59743-1-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/5] avcodec/packet: add a decoded frame cropping side data type 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: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: ob0QWlIIn3fK Signed-off-by: James Almer --- libavcodec/packet.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libavcodec/packet.h b/libavcodec/packet.h index f28e7e7011..f93f2b6f10 100644 --- a/libavcodec/packet.h +++ b/libavcodec/packet.h @@ -299,6 +299,20 @@ enum AVPacketSideDataType { */ AV_PKT_DATA_DYNAMIC_HDR10_PLUS, + /** + * The number of pixels to discard from the + * top/bottom/left/right border of the decoded frame to obtain the sub-rectangle + * intended for presentation. + * + * @code + * u32le crop_top + * u32le crop_bottom + * u32le crop_left + * u32le crop_right + * @endcode + */ + AV_PKT_DATA_FRAME_CROPPING, + /** * The number of side data types. * This is not part of the public API/ABI in the sense that it may From patchwork Wed Jul 19 22:20:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42850 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:b813:b0:130:ccc6:6c4b with SMTP id fi19csp1498308pzb; Wed, 19 Jul 2023 15:21:18 -0700 (PDT) X-Google-Smtp-Source: APBJJlHxATLFuEZNomzxRxD10pZwUN625+XkyR3AfmGl8ZMn6IGSmBUbZ4UF+xiUtBF3d0fTE1hl X-Received: by 2002:a17:906:3015:b0:994:34a6:50cf with SMTP id 21-20020a170906301500b0099434a650cfmr3098648ejz.49.1689805278372; Wed, 19 Jul 2023 15:21:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689805278; cv=none; d=google.com; s=arc-20160816; b=q558X/2HIr+vETN0RSQPYKM1w71cRafYB3/VjxKkXp2iOezj5bam1yfnRCWMRR3eN5 exDE81o0MqgOEbxCEdMEGtDaUsnTqVaxQy/QioyoH42y8gXqyMRWwpFqFsfTtuQVRY3w k+6LhPpqwhV4+Qo8ythNcCT5+yc+G5h2M9J0/bsGDwGiDXLA2xSsI9XKf9h+SXuAc/3X T6jIO4s2okvf5Am8hRpM0FKPsE766IvLObMcn0QLLC+6KVcfaNm1Btm89Q1uc8laOWmO XTKPCvMPlx5EzfTg4BsOa66XC/seCTHzFH6DI8JSolXJSTIGcT+hlixqQq1nhteoTJlk K+Ag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=VDn98n1cchuEwweDSGP44YtQYRsmPIkA/PirELhRFMg=; fh=J3zlMo7rVW2t2IQYogliBcMNuBh6YQg7NRChcrschf4=; b=fhFvl2+KNyzsrmcj05Hh39POv43O2B01NCewEw1gel+/6YrTZfqavHbiN0F8xqwzrl JAE2BkTduXwtua9+qapFTbue5kTSxWuFogc6Ki52C4TnaR2b4j95LH1tkb0xXKrLj0xV 1YIxha/KLV1RHqrpxgombsEh8jwK4hkgKJ88E2dRuA7ZfEXUFW6ikjRBmqrQQ7rjqOGF 8XAvguz0VaGuvDqoTEa3wq8AXYmBIRZUDMlUuMIYYj362x/qlSFimFW/6h7I7fKvbWt5 ZmV1Xgc+6nFKngwZcHnBur+zJqKpJx4NP/sHwuMJryV+PTP95pFNX9I5PexJr97ezZ9y R5RQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=CkYEZeXm; 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 bo13-20020a170906d04d00b00997e1a43c28si3020611ejb.381.2023.07.19.15.21.18; Wed, 19 Jul 2023 15:21:18 -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=20221208 header.b=CkYEZeXm; 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 9C16F68C45C; Thu, 20 Jul 2023 01:21:05 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f53.google.com (mail-ot1-f53.google.com [209.85.210.53]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A6C1768C3F0 for ; Thu, 20 Jul 2023 01:20:56 +0300 (EEST) Received: by mail-ot1-f53.google.com with SMTP id 46e09a7af769-6b9f46dc2e3so126143a34.0 for ; Wed, 19 Jul 2023 15:20:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689805254; x=1690410054; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=TuH321qxn9UkcPUuhxr57KUBk1m4+Ba9aAJdIe4ylwI=; b=CkYEZeXmRkUuZkEimsrQMo4F/MI0GLTw/64QbIlf8P6r2NdqT0J4CXEW0ags28kthj m3kHSvW9I2klF0Bygf4KflalENeftznl1FHxlDQSOfZrbCxr3L3ZxgD7jrNkdUSR9lQn /rQxzTViTzdrP+P0sr6zIecMNDtG2BKg0wo2JpbbgpYJcHR/RypgZcwMMBr1+EV3LWB4 lrvWNn6oKCl5e5JM9gkg0i3ZfQpgGWymYqiVBN1JhL5zqT4RcGPGmxWnnt/ugNI/O8Cm CHgaKqVZBIvE49DsTxTtbIbQtqERRmujqQPCmK/G2qEXNSMJ9JD9+SzJRaU098NVvPyV XROg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689805254; x=1690410054; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TuH321qxn9UkcPUuhxr57KUBk1m4+Ba9aAJdIe4ylwI=; b=hYkUZROaXnZinuHBQmoO/CJS6Hi72KCGLeGJPS0TNpQQU++55kp35JvsCh2u/Deewv 3cE7lVjyc4R0vXny7wJNiKJO7RfXf3Ix2UanWYDm9J6gFrpnrQH7rG8mKhdGB3uk3jeQ DBfOEIKV2Me+OtKWnBP4H3voZmKmn2zGPPjOVvaPPyc12XsbrjVMzro6+26RDUkHPrEX jBy6ibq7fXsnGTNYFk/jJ22uw0rBJCPrCD7wWksJIax0+GrKxOdmI/gES7vy9Dv88YDo 4yf8Ra9AaCGprj8z9DXcUfZxGj+kXIm0eDwzBW2J0ucWgeNFq9F9kgijzaM8Vv3Egjdy cXaw== X-Gm-Message-State: ABy/qLZhao62v2tOZgadLXzbyJepinnCIowxpATCre9B4n9pHqjhO8j8 8KxIbWdQfeVVBoH0Jt/qI/L3pWohwRk= X-Received: by 2002:a05:6870:42cb:b0:1b7:2dfe:c1f5 with SMTP id z11-20020a05687042cb00b001b72dfec1f5mr840212oah.6.1689805254256; Wed, 19 Jul 2023 15:20:54 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id k2-20020a056870350200b001b36c56e6a7sm2371370oah.44.2023.07.19.15.20.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jul 2023 15:20:53 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 19 Jul 2023 19:20:40 -0300 Message-ID: <20230719222043.59743-2-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230719222043.59743-1-jamrial@gmail.com> References: <20230719222043.59743-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/5] avformat/dump: print Frame Cropping side data info 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: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: qhZUY7vNBwF8 Signed-off-by: James Almer --- libavformat/dump.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/libavformat/dump.c b/libavformat/dump.c index d31e4c2ec6..b35bbd185f 100644 --- a/libavformat/dump.c +++ b/libavformat/dump.c @@ -427,6 +427,23 @@ static void dump_s12m_timecode(void *ctx, const AVStream *st, const AVPacketSide } } +static void dump_cropping(void *ctx, const AVPacketSideData *sd) +{ + uint32_t top, bottom, left, right; + + if (sd->size != sizeof(uint32_t) * 4) { + av_log(ctx, AV_LOG_ERROR, "invalid data\n"); + return; + } + + top = AV_RL32(sd->data + 0); + bottom = AV_RL32(sd->data + 4); + left = AV_RL32(sd->data + 8); + right = AV_RL32(sd->data + 12); + + av_log(ctx, AV_LOG_INFO, "%d/%d/%d/%d", left, right, top, bottom); +} + static void dump_sidedata(void *ctx, const AVStream *st, const char *indent) { int i; @@ -497,6 +514,10 @@ static void dump_sidedata(void *ctx, const AVStream *st, const char *indent) av_log(ctx, AV_LOG_INFO, "SMPTE ST 12-1:2014: "); dump_s12m_timecode(ctx, st, sd); break; + case AV_PKT_DATA_FRAME_CROPPING: + av_log(ctx, AV_LOG_INFO, "Frame cropping: "); + dump_cropping(ctx, sd); + break; default: av_log(ctx, AV_LOG_INFO, "unknown side data type %d " "(%"SIZE_SPECIFIER" bytes)", sd->type, sd->size); From patchwork Wed Jul 19 22:20:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42852 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:b813:b0:130:ccc6:6c4b with SMTP id fi19csp1498368pzb; Wed, 19 Jul 2023 15:21:27 -0700 (PDT) X-Google-Smtp-Source: APBJJlH9RGpHZ1UH6QViAc22WFwbnVniBb47TnMBBzQVLfyzU8Rse5i3g72FYEB3YNFdcOmgPnP9 X-Received: by 2002:a05:6402:2048:b0:51e:677:603f with SMTP id bc8-20020a056402204800b0051e0677603fmr514274edb.38.1689805287441; Wed, 19 Jul 2023 15:21:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689805287; cv=none; d=google.com; s=arc-20160816; b=WZo9JPhg+f7vPf+cYGqJo2qwOC/Jz94lqR4wr0gEhYP1vSg+zzSPCTHIW1bRSJ9fAw pJMVw+mMfc9NgBouWm1p+4hrdzZMKiC8kse9WC0EmMqvvU0UEjy/wn/DfcBlnLDtmCHD wIEjP9LarH1b4GCE/PWn5+MuSK8bbjTjMbqupkI/b4G8Wola6Jhu0/MQTnG8jNknCw71 XiSAETZ0zWzJiOg1Yw2j3WR8rznrtBYQz+ZbMizhH7/XMe6lCOk3sk1mQzqm7Qu+nbG3 gvMn07JH3hOc2vOFUgwocLGl/Ns8nHix3v8vRygw9CnnqXYbu4Hl11hDuOSg2rAcUpiv TUsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=bBvDvb7E6IluCS8HQFqraWw+ypeP4XaaN6bOo3mwNp0=; fh=J3zlMo7rVW2t2IQYogliBcMNuBh6YQg7NRChcrschf4=; b=AcddAeWerFR1CpfxyidUdJaijA74KgafnqzX4DMIOkRA4yNaqJixpF5BHLplCQsvjz YPcS96n59jN5UkIEn6ZiYZ4IE9eD6pkgWb2pJfn8GTziVL1R1fySwKapVPvaCT7SCfRT xRQDYYqyXZ8px/1VyADpe/Tez5UsnFsm1buBqWv0G8nwZKl8iMsdMZr9+FaFfXcJzHMR ZNElPMWj9ccQd1Rmg+8o/Am8KjAJuhUzPP60goko3Aeej1GNCseaHCmPQ77I1qdFPink aI7LjLPL+BTtgBZngs4ICGMXyglaNRteV5MvWp3WOEsG95w4L3vCNKiZPfjgkPmgZdsn sPHQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=jXz6PGTC; 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 r26-20020aa7da1a000000b0051e0ea53eafsi3750203eds.558.2023.07.19.15.21.26; Wed, 19 Jul 2023 15:21:27 -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=20221208 header.b=jXz6PGTC; 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 B614068C5D2; Thu, 20 Jul 2023 01:21:06 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f54.google.com (mail-oa1-f54.google.com [209.85.160.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2A2C068C5C9 for ; Thu, 20 Jul 2023 01:20:57 +0300 (EEST) Received: by mail-oa1-f54.google.com with SMTP id 586e51a60fabf-1ba4460f0a4so135777fac.0 for ; Wed, 19 Jul 2023 15:20:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689805255; x=1690410055; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Y3EDguPmmOaNx1rFROz3/9kDkyWC0iIpfw35cp0enV4=; b=jXz6PGTCsfJZyjwEkKWpEtlW3mDAStISVoOY550D204eo+9Lyo9AmAWi51UsblPq1x w6mzCnc+qiMvOzE4sommfsYPfpEE4GZz1Q7rw2km0oQf9EXoE4jZIetUwvR9QEbPyc4D IseCpjCYNt1cXFl8bQEljt/c32wT5s0QpX9BFfgC/S2hlfqg93dcSmOwu5LFRVGGO9gq mzw6N+eOcOIrpOBhKxi2Mt4d6u42J20am4cImL22j/ayYqzi0z8IpD55wKMPfpYJm9Qv VndMsc4mjOcXs31igSwIyT23GiUdpBoBxur0lQO1VdzLz4JtmrpXAL29xXTGfLMNoMRi TZVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689805255; x=1690410055; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Y3EDguPmmOaNx1rFROz3/9kDkyWC0iIpfw35cp0enV4=; b=Hdy13sLwSjSPnrdSQljCZX90EgkEYCeYxbGsB8fmc4TH0zpR+WrfdtaYfJxUL3DUKq ILkvzeIL3cSVypgZc8rQ/jvZqx05Fay/+GW4RAn8W+MZwt8v3Imjrr3jIap2dRf5yXu4 NebCHwQ7tYlGQybV7VWu4NrdxB82kS8wQQv4lqZM5VLexzOWRmbDY8tnoPqw23hilAZS dnOgHzo3avs/AV6KmN7qH4Se5zJ29TOagQ76QK6eVK7Zyio8IVhlxc1pBQ5z6X7PX/x8 xVTGY4dF3ZEympC4DudKnQeKQFJrhARxEQeNqNm1cK6tz3MZEUi6xRNjFKslSxtdWMFN /acA== X-Gm-Message-State: ABy/qLZI8An0Wm70M9o5AoM3xbU61VYepolFltKaNMYYmqoj1lvwPsU2 LmVJtL8G8sU1Qhsy/yY06+xh0k+bq48= X-Received: by 2002:a05:6870:5b99:b0:1b0:649f:e68a with SMTP id em25-20020a0568705b9900b001b0649fe68amr3909937oab.25.1689805255420; Wed, 19 Jul 2023 15:20:55 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id k2-20020a056870350200b001b36c56e6a7sm2371370oah.44.2023.07.19.15.20.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jul 2023 15:20:55 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 19 Jul 2023 19:20:41 -0300 Message-ID: <20230719222043.59743-3-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230719222043.59743-1-jamrial@gmail.com> References: <20230719222043.59743-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/5] avformat/matroskadec: export cropping values 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: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: s8E0LOLgLa3z Signed-off-by: James Almer --- libavformat/matroskadec.c | 49 +++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 49950956b6..46459b3dc8 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -211,7 +211,13 @@ typedef struct MatroskaTrackVideo { uint64_t display_height; uint64_t pixel_width; uint64_t pixel_height; + uint64_t cropped_width; + uint64_t cropped_height; EbmlBin color_space; + uint64_t pixel_cropt; + uint64_t pixel_cropl; + uint64_t pixel_cropb; + uint64_t pixel_cropr; uint64_t display_unit; uint64_t interlaced; uint64_t field_order; @@ -525,10 +531,10 @@ static EbmlSyntax matroska_track_video[] = { { MATROSKA_ID_VIDEOALPHAMODE, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, alpha_mode), { .u = 0 } }, { MATROSKA_ID_VIDEOCOLOR, EBML_NEST, 0, sizeof(MatroskaTrackVideoColor), offsetof(MatroskaTrackVideo, color), { .n = matroska_track_video_color } }, { MATROSKA_ID_VIDEOPROJECTION, EBML_NEST, 0, 0, offsetof(MatroskaTrackVideo, projection), { .n = matroska_track_video_projection } }, - { MATROSKA_ID_VIDEOPIXELCROPB, EBML_NONE }, - { MATROSKA_ID_VIDEOPIXELCROPT, EBML_NONE }, - { MATROSKA_ID_VIDEOPIXELCROPL, EBML_NONE }, - { MATROSKA_ID_VIDEOPIXELCROPR, EBML_NONE }, + { MATROSKA_ID_VIDEOPIXELCROPB, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, pixel_cropb), {.u = 0 } }, + { MATROSKA_ID_VIDEOPIXELCROPT, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, pixel_cropt), {.u = 0 } }, + { MATROSKA_ID_VIDEOPIXELCROPL, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, pixel_cropl), {.u = 0 } }, + { MATROSKA_ID_VIDEOPIXELCROPR, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, pixel_cropr), {.u = 0 } }, { MATROSKA_ID_VIDEODISPLAYUNIT, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, display_unit), { .u= MATROSKA_VIDEO_DISPLAYUNIT_PIXELS } }, { MATROSKA_ID_VIDEOFLAGINTERLACED, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, interlaced), { .u = MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED } }, { MATROSKA_ID_VIDEOFIELDORDER, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, field_order), { .u = MATROSKA_VIDEO_FIELDORDER_UNDETERMINED } }, @@ -2527,10 +2533,21 @@ static int matroska_parse_tracks(AVFormatContext *s) track->default_duration = default_duration; } } + track->video.cropped_width = track->video.pixel_width; + track->video.cropped_height = track->video.pixel_height; + if (track->video.display_unit == 0) { + if (track->video.pixel_cropl >= INT_MAX - track->video.pixel_cropr || + track->video.pixel_cropt >= INT_MAX - track->video.pixel_cropb || + (track->video.pixel_cropl + track->video.pixel_cropr) >= track->video.pixel_width || + (track->video.pixel_cropt + track->video.pixel_cropb) >= track->video.pixel_height) + return AVERROR_INVALIDDATA; + track->video.cropped_width -= track->video.pixel_cropl + track->video.pixel_cropr; + track->video.cropped_height -= track->video.pixel_cropt + track->video.pixel_cropb; + } if (track->video.display_width == -1) - track->video.display_width = track->video.pixel_width; + track->video.display_width = track->video.cropped_width; if (track->video.display_height == -1) - track->video.display_height = track->video.pixel_height; + track->video.display_height = track->video.cropped_height; if (track->video.color_space.size == 4) fourcc = AV_RL32(track->video.color_space.data); } else if (track->type == MATROSKA_TRACK_TYPE_AUDIO) { @@ -2955,14 +2972,26 @@ static int matroska_parse_tracks(AVFormatContext *s) if (track->video.display_unit < MATROSKA_VIDEO_DISPLAYUNIT_UNKNOWN) { if (track->video.display_width && track->video.display_height && - st->codecpar->height < INT64_MAX / track->video.display_width / display_width_mul && - st->codecpar->width < INT64_MAX / track->video.display_height / display_height_mul) + track->video.cropped_height < INT64_MAX / track->video.display_width / display_width_mul && + track->video.cropped_width < INT64_MAX / track->video.display_height / display_height_mul) av_reduce(&st->sample_aspect_ratio.num, &st->sample_aspect_ratio.den, - st->codecpar->height * track->video.display_width * display_width_mul, - st->codecpar->width * track->video.display_height * display_height_mul, + track->video.cropped_height * track->video.display_width * display_width_mul, + track->video.cropped_width * track->video.display_height * display_height_mul, INT_MAX); } + if (track->video.cropped_width != track->video.pixel_width || + track->video.cropped_height != track->video.pixel_height) { + uint8_t *cropping = av_stream_new_side_data(st, AV_PKT_DATA_FRAME_CROPPING, sizeof(uint32_t) * 4); + if (!cropping) + return AVERROR(ENOMEM); + + bytestream_put_le32(&cropping, track->video.pixel_cropt); + bytestream_put_le32(&cropping, track->video.pixel_cropb); + bytestream_put_le32(&cropping, track->video.pixel_cropl); + bytestream_put_le32(&cropping, track->video.pixel_cropr); + } + if (st->codecpar->codec_id != AV_CODEC_ID_HEVC) sti->need_parsing = AVSTREAM_PARSE_HEADERS; From patchwork Wed Jul 19 22:20:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42853 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:b813:b0:130:ccc6:6c4b with SMTP id fi19csp1498423pzb; Wed, 19 Jul 2023 15:21:36 -0700 (PDT) X-Google-Smtp-Source: APBJJlHy8et7JEEX+7LUTa+5HDJTY0EQ8jTU78WTzVniy9t/9ztPdJf2ITACIeWDO0xVVY6hjrJ9 X-Received: by 2002:a05:6402:12d9:b0:51d:dbf1:c825 with SMTP id k25-20020a05640212d900b0051ddbf1c825mr4103503edx.1.1689805296527; Wed, 19 Jul 2023 15:21:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689805296; cv=none; d=google.com; s=arc-20160816; b=qoOcyAohazvoqDq6FGP1vqjK/e4fU/ZFqLHHkGzrGAs5GaIqGoh3CjXbwMeunTmQmV GDNLjCGb9uqsqxIFOC7tZIMruPw0stBxIpW86J/CBL75Hqxav7PKEsNi2HuevO26wLFO QecQyCAjWblonTIFsrRmH51nUexOYnpC1jGpqbhD2akGrRIqxn083bROboxugV5pNHIQ fJRg+d51W0EIunuLYnYkRTt+kG3V/Ucx01Eic2xeKmap5rjq5gYmHbsiUIepzhUXA7mL OHfpoZrqwzDkUJNWR9PDBYvwzptuiWnLOkuTAl+wO5l26G1Wnt/bTAva15LCH1BxtDmi o2Ew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=W95NyBWlmAQHNd1CBTMvbxepoA6SXEGvA+TFebsOUBk=; fh=J3zlMo7rVW2t2IQYogliBcMNuBh6YQg7NRChcrschf4=; b=JGSx0eYoNSVHIP5ECtHEQU6zCnb+4mVWdVLgh9SApNvO3T4tUBxtE/ZHpqTrGidftN YnTUEydvQL5EY0J+x/CpO54U9oTieXCpEgGJ9FRj42PStXfMYo8CK9yuF7axvGuvPohO QU/wzL50tjmxELi5z4hRj2RMZfR5umUwLo+cD4XurikatSkBxXAfX3f4Aj+1vN/1tqXm 4gXd8aLN4LJFPKJTEEiWeeN39mxQqA7kllUBFJjsch7sMQdTkeA5/dZ1Q+RDKBY+HsUe iU4HWG08xSrEnzDod/HD++WepUDQl1ElF14+SJ9rWnLGKjgrTlhvB3gh8g4nQnx2zz0i NGeg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=qVgvBdKO; 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 s9-20020aa7cb09000000b0051e249f6229si3789626edt.75.2023.07.19.15.21.36; Wed, 19 Jul 2023 15:21: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; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=qVgvBdKO; 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 BA76068C644; Thu, 20 Jul 2023 01:21:07 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f44.google.com (mail-oa1-f44.google.com [209.85.160.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5889468C45C for ; Thu, 20 Jul 2023 01:20:58 +0300 (EEST) Received: by mail-oa1-f44.google.com with SMTP id 586e51a60fabf-1ba79f16f4cso116303fac.3 for ; Wed, 19 Jul 2023 15:20:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689805256; x=1690410056; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=3RytYDPd4ypmRrS3LU89Fe8Uznpz6xBHs7ROEgZgzh0=; b=qVgvBdKOTFwCj9yfYd79Shc2iZIUrLAwXa0bUzdmOsJ9k8c2YC6+yFFFg3tezeyjR8 ZBc1Qy7IpdWoCF12ySfNC5COvi35eOOWX39Ja9RLXRi7hoGOt8jHq9y27ezfRR56GZbe pZX1BEDMEYDTD+yCSJ+cwcQpftrGrgem+5eE5a/GFzuQ7NYZQlam9e13kl7lwRoH0WlP oiWOipBSFknXccAar9tI3xJrdWfwlP5lGdz+JYejhmSEIBEA9CSUYLtkSo6QYbGDM0Qq /URHcltphwUzMF+5xZse4Lnb4abyJ3ncyht72XiPoy4LJcL7PgYDv9u5o4ckMNBRkmQx bM7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689805256; x=1690410056; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3RytYDPd4ypmRrS3LU89Fe8Uznpz6xBHs7ROEgZgzh0=; b=eeOx/J1Iu3lFdhNnZW1DwkCncTVFEuwb0sPSD9Fw/fAtrjWRG/288SheQ4isXGqmHG sE4Bz7Ebcn9PWu0DYoSv4QK2F7dbH+YmB1c8tSUmMK3SSKmBnpKZtHAKF76MYMme4wbc XpwpVhMDQ+fa+inJdz8Ned0nDRCVSZhXLbIn3Pq0nLC+gpbst+L2Wrsie8beGa1bps0D 5r6vcLa0lPjttibk4cqbG2y18i0n7WYpwL8fotHGptgvyqSy8HnGjdUaSSWmmv68JFWq /PtGFCl4nmourbJFj9XqYpw2kJHq5vuSR4qH14gQcwJ4Yx//7XabJA42ea7Vn6s4lgHR 7Ueg== X-Gm-Message-State: ABy/qLYd9/AwAt1AGdFTcWNSdkr+T6Hx29W8ktUqWoeEKbQiDECFfnU+ LjSSiO8jCCdjd63/FVqTjk0bHGzPFz4= X-Received: by 2002:a05:6870:d20c:b0:19f:2c0e:f865 with SMTP id g12-20020a056870d20c00b0019f2c0ef865mr24117144oac.7.1689805256638; Wed, 19 Jul 2023 15:20:56 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id k2-20020a056870350200b001b36c56e6a7sm2371370oah.44.2023.07.19.15.20.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jul 2023 15:20:56 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 19 Jul 2023 19:20:42 -0300 Message-ID: <20230719222043.59743-4-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230719222043.59743-1-jamrial@gmail.com> References: <20230719222043.59743-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/5] avformat/matroskaenc: support writing cropping values 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: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: +YtvA0C3RtgF Signed-off-by: James Almer --- libavformat/matroskaenc.c | 45 +++++++++++++++++++++++++++++++++------ 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 41e13b273d..7bfe7b002a 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -1654,8 +1654,11 @@ static int mkv_write_track_video(AVFormatContext *s, MatroskaMuxContext *mkv, const AVDictionaryEntry *tag; int display_width_div = 1, display_height_div = 1; uint8_t color_space[4], projection_private[20]; + uint8_t *cropping; EBML_WRITER(MAX_FIELD_ORDER_ELEMS + MAX_STEREO_MODE_ELEMS + MAX_VIDEO_COLOR_ELEMS + MAX_VIDEO_PROJECTION_ELEMS + 8); + int cropped_width = par->width, cropped_height = par->height; + size_t cropped_size; int ret; ebml_writer_open_master(&writer, MATROSKA_ID_TRACKVIDEO); @@ -1679,25 +1682,53 @@ static int mkv_write_track_video(AVFormatContext *s, MatroskaMuxContext *mkv, ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEOALPHAMODE, 1); } + cropping = av_stream_get_side_data(st, AV_PKT_DATA_FRAME_CROPPING, &cropped_size); + if (cropping) { + uint32_t top, bottom, left, right; + if (cropped_size != sizeof(uint32_t) * 4) + return AVERROR_INVALIDDATA; + + top = AV_RL32(cropping + 0); + bottom = AV_RL32(cropping + 4); + left = AV_RL32(cropping + 8); + right = AV_RL32(cropping + 12); + + if (left >= INT_MAX - right || + top >= INT_MAX - bottom || + (left + right) >= par->width || + (top + bottom) >= par->height) { + av_log(s, AV_LOG_ERROR, "Invalid cropping dimensions in stream side data\n"); + return AVERROR(EINVAL); + } + + ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEOPIXELCROPB, bottom); + ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEOPIXELCROPT, top); + ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEOPIXELCROPL, left); + ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEOPIXELCROPR, right); + + cropped_width -= left + right; + cropped_height -= top + bottom; + } + // write DisplayWidth and DisplayHeight, they contain the size of // a single source view and/or the display aspect ratio if (st->sample_aspect_ratio.num) { - int64_t d_width = av_rescale(par->width, st->sample_aspect_ratio.num, st->sample_aspect_ratio.den); + int64_t d_width = av_rescale(cropped_width, st->sample_aspect_ratio.num, st->sample_aspect_ratio.den); if (d_width > INT_MAX) { av_log(s, AV_LOG_ERROR, "Overflow in display width\n"); return AVERROR(EINVAL); } - if (d_width != par->width || display_width_div != 1 || display_height_div != 1) { + if (d_width != cropped_width || display_width_div != 1 || display_height_div != 1) { if (IS_WEBM(mkv) || display_width_div != 1 || display_height_div != 1) { ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEODISPLAYWIDTH, d_width / display_width_div); ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEODISPLAYHEIGHT, - par->height / display_height_div); + cropped_height / display_height_div); } else { AVRational display_aspect_ratio; av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den, - par->width * (int64_t)st->sample_aspect_ratio.num, - par->height * (int64_t)st->sample_aspect_ratio.den, + cropped_width * (int64_t)st->sample_aspect_ratio.num, + cropped_height * (int64_t)st->sample_aspect_ratio.den, 1024 * 1024); ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEODISPLAYWIDTH, display_aspect_ratio.num); @@ -1709,9 +1740,9 @@ static int mkv_write_track_video(AVFormatContext *s, MatroskaMuxContext *mkv, } } else if (display_width_div != 1 || display_height_div != 1) { ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEODISPLAYWIDTH, - par->width / display_width_div); + cropped_width / display_width_div); ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEODISPLAYHEIGHT, - par->height / display_height_div); + cropped_height / display_height_div); } else if (!IS_WEBM(mkv)) ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEODISPLAYUNIT, MATROSKA_VIDEO_DISPLAYUNIT_UNKNOWN); From patchwork Wed Jul 19 22:20:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 42854 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:b813:b0:130:ccc6:6c4b with SMTP id fi19csp1498492pzb; Wed, 19 Jul 2023 15:21:45 -0700 (PDT) X-Google-Smtp-Source: APBJJlGm+0krzSxfe1V08OJazTpCjL1xtuVTrZUAG0kr6eKO6BCPds70il5JU42PKZHKUesFuHMX X-Received: by 2002:a17:906:1c:b0:993:d920:87d3 with SMTP id 28-20020a170906001c00b00993d92087d3mr574387eja.25.1689805305585; Wed, 19 Jul 2023 15:21:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689805305; cv=none; d=google.com; s=arc-20160816; b=lgdG9T7oi6eme7hhZlV0LgMjCPKBk36qQClbdW3WxjQCGo0Mf9l7Ef4cKJIDXhT4V3 taClArBypX5XiGJHc7I7IBP/5K/60jfZaAEd+UKfUHvYx2n72w5UwGKWyCIIs77w/oER sYeOUjHKOU9xrZAMZd6XDG03J5Sy4ahXGi9GfA2k5mdDoRgrbnr/pVb0w1zHC/BUrz9n yumf/9ZyHMyK6Kv3a+EsvfgBWPoQIXa2dN5oPDuyvruZuft6dmyA+YgpuIUzb9ugBkaw YB7v/oZ7kAftCtg0Vs3SNk4XAzsHCUxPNteadTo7oZxA1o/TwGxwZvm0fC2Nh7TVmSty Fbhw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=O0lUX0RNfbXYdO2/2ibo1eKj9WP+Yy6JKXLTobDl9rA=; fh=J3zlMo7rVW2t2IQYogliBcMNuBh6YQg7NRChcrschf4=; b=gP1WOilDxNcVGgxSXvQWIjfA2yB656nKn3qoS9UAgfVaga4ExGMMO7avE7qlDiJa5d d3aHjaqzzk87IdSJV8az4CgbP+4QgAE1tmequ/VP8tF/woCggCOgZpxuyYj6Pfgd8ZI+ EtrcPbDtZKDcsSNXkxN3t3Q1I4rLGUADj+r0VgJWVOL29BAp+d6Q33rrPPJrZ/zhplyv riXdnjF+oM2VAKqWZVeZwHl7xdFX6dlxO0HR8RyZLRW3gFJu9gFvcSnPHuAcf5nOY+Eg I5TNEqFXoqENlcEaesbC3cwmeLvvVvPiGcgEpQdzb1zmp4vKe9HlWX4Ci6F8B2STCNVK C12g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20221208 header.b=ENxwuBeu; 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 x19-20020a170906805300b009930ed47c80si3511350ejw.893.2023.07.19.15.21.45; Wed, 19 Jul 2023 15:21:45 -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=20221208 header.b=ENxwuBeu; 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 C0FEE68C657; Thu, 20 Jul 2023 01:21:08 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-oa1-f44.google.com (mail-oa1-f44.google.com [209.85.160.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B7A1468C515 for ; Thu, 20 Jul 2023 01:20:59 +0300 (EEST) Received: by mail-oa1-f44.google.com with SMTP id 586e51a60fabf-1ba4460f0a4so135803fac.0 for ; Wed, 19 Jul 2023 15:20:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1689805258; x=1690410058; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=QQUqMNsaNY5mKMrp7aLGet4mKr4BVKE+7aJlP/UIv0A=; b=ENxwuBeuyVOxRLFFlWmyqmLHIEknvbZNGPVnwT15k7aScRQXxYtKIQBmNuPHarGujZ 5CILpSKxBm/6tnaaCQbfa9aNPRmnmqnsq939alZ5hgXNhJf4jBXypBeDKImuUupq7GlO ZdvziAHyx1F9N64q7YfII2OE8s8C5LFEgMPka0W0b/lsh2BJ8P8ejb4EOm+jVRFBAQjV S6PhgE5xrNu+PPCU33Ej+rrcj7ba6sY2Qw5QBq0igo+bwP5wnshCL40/KnNvP1kgh/U4 j6DIUrUSEDAv2IffoYCgWdR8seccNNbqKYYxNpx78R+L8j17xnkGqXQQ+GaXR6Q6Zifh Ph7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689805258; x=1690410058; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QQUqMNsaNY5mKMrp7aLGet4mKr4BVKE+7aJlP/UIv0A=; b=ID2vIz1jD/8dUtMKlt8Ee3OS6oyd19TQQ9kGcqI9I5QmuSMRtatqm36fA9UXcAwPZR mNsyez44hj8ZdiGdNqruhLEb6aQiNht4uYoHsxXv6U+PvsKHR4FKucw59+w2wnBxzn/N LyRL50e2tGJjcjJqaqUXqkZiE7igH9tmav7tXJgzPabykjdksukEQSB2xww3BCS36JiP jfAIr8PTEb9rRHxLPaRfOO9W5dSQEylCfoRedg6rs7UQWtGvWhEptVwAp3S/zlwW2frp VFkCPyJFHmMR1tiKVl0ylDvUpo6RZNFi+/1FrHkn618cKBpxk9I46VP4oRHPXMHtoccS CAZQ== X-Gm-Message-State: ABy/qLYCOuM2ibcTUbYUTJIDX5pAxfrhgCAc8XlXMwqmI+Fq8HzfDQim +HOYKmaAt2um2w/p+VOHnxVveGjwH5c= X-Received: by 2002:a05:6870:1719:b0:1b3:afdc:6c14 with SMTP id h25-20020a056870171900b001b3afdc6c14mr4057112oae.2.1689805257961; Wed, 19 Jul 2023 15:20:57 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id k2-20020a056870350200b001b36c56e6a7sm2371370oah.44.2023.07.19.15.20.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Jul 2023 15:20:57 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 19 Jul 2023 19:20:43 -0300 Message-ID: <20230719222043.59743-5-jamrial@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230719222043.59743-1-jamrial@gmail.com> References: <20230719222043.59743-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/5] fftools/ffmpeg: support applying container level cropping 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: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 1TP9ZkaoPgyl Signed-off-by: James Almer --- fftools/ffmpeg.h | 3 +++ fftools/ffmpeg_dec.c | 33 +++++++++++++++++++++++++++++++++ fftools/ffmpeg_demux.c | 6 ++++++ fftools/ffmpeg_enc.c | 6 ++++-- fftools/ffmpeg_opt.c | 3 +++ 5 files changed, 49 insertions(+), 2 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index f45ddf33b2..dc019b9c20 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -156,6 +156,8 @@ typedef struct OptionsContext { int nb_hwaccel_output_formats; SpecifierOpt *autorotate; int nb_autorotate; + SpecifierOpt *apply_cropping; + int nb_apply_cropping; /* output options */ StreamMap *stream_maps; @@ -350,6 +352,7 @@ typedef struct InputStream { int top_field_first; int autorotate; + int apply_cropping; int fix_sub_duration; diff --git a/fftools/ffmpeg_dec.c b/fftools/ffmpeg_dec.c index 5c1b8888e9..5b810f7588 100644 --- a/fftools/ffmpeg_dec.c +++ b/fftools/ffmpeg_dec.c @@ -19,6 +19,7 @@ #include "libavutil/avassert.h" #include "libavutil/dict.h" #include "libavutil/error.h" +#include "libavutil/intreadwrite.h" #include "libavutil/log.h" #include "libavutil/pixdesc.h" #include "libavutil/pixfmt.h" @@ -325,6 +326,38 @@ static int video_frame_process(InputStream *ist, AVFrame *frame) ist->dec_ctx->pix_fmt); } + if (ist->apply_cropping) { + size_t cropping_size; + uint8_t *cropping = av_stream_get_side_data(ist->st, AV_PKT_DATA_FRAME_CROPPING, &cropping_size); + if (cropping && cropping_size == sizeof(uint32_t) * 4) { + uint32_t top = AV_RL32(cropping + 0); + uint32_t bottom = AV_RL32(cropping + 4); + uint32_t left = AV_RL32(cropping + 8); + uint32_t right = AV_RL32(cropping + 12); + int err; + + if (top < INT_MAX - frame->crop_top && + bottom < INT_MAX - frame->crop_bottom && + left < INT_MAX - frame->crop_left && + right < INT_MAX - frame->crop_right) { + + frame->crop_top += top; + frame->crop_bottom += bottom; + frame->crop_left += left; + frame->crop_right += right; + + err = av_frame_apply_cropping(frame, ist->dec_ctx->flags & AV_CODEC_FLAG_UNALIGNED ? + AV_FRAME_CROP_UNALIGNED : 0); + if (err < 0) + return err; + } else + av_log(ist->dec_ctx, AV_LOG_WARNING, + "Invalid cropping information set through side data: %d/%d/%d/%d " + "(frame size %dx%d). Ignoring\n", + left, right, top, bottom, frame->width, frame->height); + } + } + if(ist->top_field_first>=0) frame->flags |= AV_FRAME_FLAG_TOP_FIELD_FIRST; diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index 9e7f13a2b4..09d040b626 100644 --- a/fftools/ffmpeg_demux.c +++ b/fftools/ffmpeg_demux.c @@ -48,6 +48,7 @@ static const char *const opt_name_hwaccels[] = {"hwaccel", NULL static const char *const opt_name_hwaccel_devices[] = {"hwaccel_device", NULL}; static const char *const opt_name_hwaccel_output_formats[] = {"hwaccel_output_format", NULL}; static const char *const opt_name_autorotate[] = {"autorotate", NULL}; +static const char *const opt_name_apply_cropping[] = {"apply_cropping", NULL}; static const char *const opt_name_display_rotations[] = {"display_rotation", NULL}; static const char *const opt_name_display_hflips[] = {"display_hflip", NULL}; static const char *const opt_name_display_vflips[] = {"display_vflip", NULL}; @@ -1068,6 +1069,11 @@ static int ist_add(const OptionsContext *o, Demuxer *d, AVStream *st) ist->autorotate = 1; MATCH_PER_STREAM_OPT(autorotate, i, ist->autorotate, ic, st); + ist->apply_cropping = 1; + MATCH_PER_STREAM_OPT(apply_cropping, i, ist->apply_cropping, ic, st); + + av_dict_set_int(&o->g->codec_opts, "apply_cropping", ist->apply_cropping, 0); + MATCH_PER_STREAM_OPT(codec_tags, str, codec_tag, ic, st); if (codec_tag) { uint32_t tag = strtol(codec_tag, &next, 0); diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c index 8b750de4e5..3cf29c8b2c 100644 --- a/fftools/ffmpeg_enc.c +++ b/fftools/ffmpeg_enc.c @@ -441,14 +441,16 @@ int enc_open(OutputStream *ost, AVFrame *frame) int i; for (i = 0; i < ist->st->nb_side_data; i++) { AVPacketSideData *sd = &ist->st->side_data[i]; - if (sd->type != AV_PKT_DATA_CPB_PROPERTIES) { + if (sd->type == AV_PKT_DATA_CPB_PROPERTIES) + continue; + if (ist->apply_cropping && sd->type == AV_PKT_DATA_FRAME_CROPPING) + continue; uint8_t *dst = av_stream_new_side_data(ost->st, sd->type, sd->size); if (!dst) return AVERROR(ENOMEM); memcpy(dst, sd->data, sd->size); if (ist->autorotate && sd->type == AV_PKT_DATA_DISPLAYMATRIX) av_display_rotation_set((int32_t *)dst, 0); - } } } diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index 300f042660..fe61a73643 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -1677,6 +1677,9 @@ const OptionDef options[] = { { "autorotate", HAS_ARG | OPT_BOOL | OPT_SPEC | OPT_EXPERT | OPT_INPUT, { .off = OFFSET(autorotate) }, "automatically insert correct rotate filters" }, + { "apply_cropping", HAS_ARG | OPT_BOOL | OPT_SPEC | + OPT_EXPERT | OPT_INPUT, { .off = OFFSET(apply_cropping) }, + "Apply frame cropping instead of exporting it" }, { "autoscale", HAS_ARG | OPT_BOOL | OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, { .off = OFFSET(autoscale) }, "automatically insert a scale filter at the end of the filter graph" },