From patchwork Sat Oct 7 16:24:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 44201 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4e24:b0:15d:8365:d4b8 with SMTP id gk36csp510182pzb; Sat, 7 Oct 2023 09:25:22 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEUdJEeStUExGedgKro6gBlUz2B66rWZhXG2TsRwliaZlaNotKpJbvTzXL8JpjWc/YgFSzl X-Received: by 2002:a17:906:8a47:b0:9b8:9b30:aff with SMTP id gx7-20020a1709068a4700b009b89b300affmr9082060ejc.1.1696695922660; Sat, 07 Oct 2023 09:25:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696695922; cv=none; d=google.com; s=arc-20160816; b=YQHlkDt7/OOKr4drikbK4m/VA6i85V6mlGofHTTu7ikvtF2wYvXZPVNg2MZtsJSPYq fqQZh+YVh84czQC8N0RZTonqgwZLKlErRsSS0/GgbgP6e8oqQp21xAHb+N93XJy9pboM Qe37/oVTe5e7ZtTRf14hVIbpR6sSf5Z2ez2EHtYLmU1/s3llAj/0GB0cAclYiWZZDLsB P9zL11FigYjJ/fgbxf5X5jERozz9h9XyQhHwOzKBh03Se1jLsw7VVKlCN14O7qLnYNcL N0Uou+QEOm5BuSz9CJgpnR0FCgEloFsDkcNwWxi7eXIy7AGyr7dcjqAILCLmPKx6za9F Rg8A== 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=KIb97vYMCaxTlzXmDSpeTWEHMPCmcM2AhbRkPTuhaSg=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=l9pt/Z8oWwYwRdMPztOBcsJDpUoUJvoNK7Jx5kUnxl6BDQPUgTTcYoEZqkM5qBLzca Uys4FBDxEGhT9rHAFCoMUMVmprfwD8HelvDleZEislFYo9WWeOppRyc779H+tsfWYZml emb/THpibvDUaRr8rxP7Aa6nh22ULWSeHzAwFEv9ZG812C+iTS7AVAOZcGxkv1HPOfqG l9BviOTjoxwdsENe+tNDoVr/+bRUBClWru4i7FHqy8raXpAoY65ECJFkhwdJSCInGsmd wXXYhMhGr8yPeL51tyb/UgNoQTqjoWW4P2zNiWaVJnuVejwjEzOTdBhC9IQcYK4BiJ6E 99ag== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=V3Sk2w6i; 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 l3-20020a1709061c4300b009b94afdcfb9si2788732ejg.570.2023.10.07.09.25.22; Sat, 07 Oct 2023 09:25:22 -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=20230601 header.b=V3Sk2w6i; 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 487EA68CADB; Sat, 7 Oct 2023 19:25:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ot1-f48.google.com (mail-ot1-f48.google.com [209.85.210.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 86AF568C9E2 for ; Sat, 7 Oct 2023 19:25:01 +0300 (EEST) Received: by mail-ot1-f48.google.com with SMTP id 46e09a7af769-6c646b5028dso2053552a34.3 for ; Sat, 07 Oct 2023 09:25:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696695899; x=1697300699; darn=ffmpeg.org; 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=2NwHGvxBNeuRpIB1WEWyU1v4uSsqSN077JRdH6ojD0k=; b=V3Sk2w6iGaSNe9fmtzeZUIaYltrJuhPp6xhr0uzOLHzXNWWJkCcn30+ZHlRL/DSyzJ gQ+u1s01WbN7LSdjCuN2esqqT1q52yEan4t2rpRfkSn1uf2Gl1CzBPPyzj9QiptpTkcE QV5Qr99Dkx2dtRzUHktbF/gG/QbIpe329Of1GA6sbS1kMiiaaNWyfyMFrODDKDyn4Cv2 LS7J3YhrebEJX01NiCTOAmp1tOa4jlB/B1AaZngT7dUN2ZVn/kDOfbqGsF2CqwyN41AR q91BzpyilB71pZWNKYo2jnT6NkvswqoIqz0h9ezs4b3c0oiIR+5EjwOaaILCs27FgcCY Z4wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696695899; x=1697300699; 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=2NwHGvxBNeuRpIB1WEWyU1v4uSsqSN077JRdH6ojD0k=; b=h1vjZP6nq94/s+yAZ4/ObnZj2XkpugQU5VxrB0G7MsprBgDAOn4Futljb7xlf3Wozp W6Ys29fsYaaqkc3ormhHhbCeNXAsrWZ0/7RuO1Y12ZvlBFBobJW5+JbT3YjsStgCSfAK mM+3LcUfsQtp6BPYy6kXK/4CaitcOjGc22QQCgMvW3N59eNynDRVa5HPgGIY9tArWez4 Ukm9+WK8BVJGTn34ZStMqpp42kZ7BhR41yvqjeRZM1pNxzWCAJgEqVWmsBGKEo3omvv0 YHDptNspnZfPqr0MtARj4+Pl1f/dnEOW/JwVoELSMyNse52CEbvnIIXzzPiUW49QkHG0 GmwA== X-Gm-Message-State: AOJu0YwHnVhOmubz3wrtAYJWOAJTjvlRkXOYRMaTSA0R8TasVinlDX2P /wu2vbZiCIEDhuXG/YFuH6Bi50Q3s4s= X-Received: by 2002:a05:6358:440a:b0:135:3f5c:9675 with SMTP id z10-20020a056358440a00b001353f5c9675mr11921439rwc.19.1696695899556; Sat, 07 Oct 2023 09:24:59 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id 30-20020a17090a191e00b002792b7182dcsm7883180pjg.49.2023.10.07.09.24.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Oct 2023 09:24:59 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 7 Oct 2023 13:24:57 -0300 Message-ID: <20231007162503.1057-2-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231007162503.1057-1-jamrial@gmail.com> References: <20231007162503.1057-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/7] 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: sOXp0b0AiIcm 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 b19409b719..6053d43c44 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 Sat Oct 7 16:24:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 44202 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4e24:b0:15d:8365:d4b8 with SMTP id gk36csp510235pzb; Sat, 7 Oct 2023 09:25:30 -0700 (PDT) X-Google-Smtp-Source: AGHT+IG3J+ZkM/H7GkPxVN8YQ0/vFmdD3Bf8DXu+6SL9DAR3Xc2XG12Zpf+a6ZXwjzQpT+Y8SvF8 X-Received: by 2002:a17:906:5396:b0:9ae:4f13:e581 with SMTP id g22-20020a170906539600b009ae4f13e581mr9071610ejo.59.1696695930496; Sat, 07 Oct 2023 09:25:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696695930; cv=none; d=google.com; s=arc-20160816; b=D6lqwl+zBT4cvEX7X7uYvlXNXAp7mushqi9/vEpmEq+wiHlxpiQZBSqS1+8sjvQKYK BOTCeWFBKr7qxCj5fHiju7xTldKgCRMcuqvxqRkKPCGPNnufJJ4+kkGQ0VgQ9b1gFLip lMpWtWjLAdS5OQ5jeZ9KGOv4jdCRBFTMe7ICcBV4dbOYGj80FdPKh2KAeNAch8kDJuSu f9a90zoxo4CE55WCqcRTAPPJRZVPcBrG4bZbEUzQuKkoRi2PsUQlWkRDioW3TxJ67eLZ M3U7P77PiF/tvgmZYOjpCfLxHFiwhpY3AZxV68ZFSXbZBvaMS75cz0XYyiBsqhQAyyZA +S0g== 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=/hs4fAXWBjrbeRSK6jrqinQfeOrB06K42PLD6S2wzR8=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=F5NLOxsg9lJwwXUEd0RzIXimQqiWEtCaK1b3S75TVJWmQxvKEyiWAn+G4zvlRhqh6z PrQV+zhSzQ2u4O01F2fSvz/jk4cxiS1nNUG5L9t3E/3GNlGaSkgRlSL0f26FnE40FCho 9fGvkGdSH5XcrQGdHw2plPtbYQBI7lAqYFZsAp5PQVPZsC3c/BO+TA9RPmqivlcnvCZk zVJ6tuRVo0qziyjYLKiLRGOkSL7XBxDO+b+7Cn0BGxw8sK3NrjxywN5o12p6ar2/LLhs 5SdT+GgOimibzlyn0MtmI3mDucgnl3XbGe00Gabz2XsUgIukV/oVw6Dbn9AGTuIATX3I 9uUg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=G7fVNYZj; 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 a25-20020a17090640d900b009a224eb0938si2549630ejk.21.2023.10.07.09.25.30; Sat, 07 Oct 2023 09:25:30 -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=20230601 header.b=G7fVNYZj; 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 7140168CAFE; Sat, 7 Oct 2023 19:25:10 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f53.google.com (mail-pj1-f53.google.com [209.85.216.53]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A164F68CA99 for ; Sat, 7 Oct 2023 19:25:03 +0300 (EEST) Received: by mail-pj1-f53.google.com with SMTP id 98e67ed59e1d1-27777174297so2124916a91.3 for ; Sat, 07 Oct 2023 09:25:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696695901; x=1697300701; darn=ffmpeg.org; 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=GzZ+axB5uFjSJAaFm9wcxzEZ+FAbJZlNIMU4A9XiMjw=; b=G7fVNYZjq104dhxYgIOBMRl43fmUn8YQBbY9y3MKDeO/PryhVoq9Qgc2AfGquE5x5C Kn7CB1j7Q+yUYd0MPKIF3EQrbxsMJKCRQ0ZH6cMqJuxRA09ZrLQQznEA6l8eHxZg+iN7 P7RTW1rqPL9ObYWeLHZua4nGDwziz34NeoRGH1dfSLR4Jy8uvvkv8qitd0xpcrO1rgu2 nMODOLAh4IZQ3bJzbeyHrjnQH6UgtUfFsqrBTKWsiJHgImm04Hl9Px6J4KU18z5msEkj PuNOFpCOADo+IIq1Jc4YD6SJWHNYbrIdLabzb+Kvpq8U1iW5gl2MO7WZbTEZ2F8lw+dD HQjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696695901; x=1697300701; 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=GzZ+axB5uFjSJAaFm9wcxzEZ+FAbJZlNIMU4A9XiMjw=; b=wL4wOUbJe61Bbckn7I+WJZgd2Ram3sLdMDnchHbrQ9L3p5MB41Hc4b8x2St/dFVvWA 40P49YFnvh5hn1mIyHJpCRp805B0IzocqfcvYWJ/Ohb2NOe7x6AzzrprefgYVCWE+Dpi oG8kLYLK/0d8sTnfaHw4wZ7iCQnVDf12Z/J6w4D3S43pwayrLP5my9qXlZNqMIomodhg D21hIHF9BFYghnobZDnV9/C1IBjEE6wO/05jzp3HXPz0bqlI5fE1fCfrtKSKCFp96nRJ asT8T5RqcrfDD5r9EouScwM1TMWraXWHXs4i0Pio/5VFRuEMJwLGsyjmOfaZgSIHbJ19 E2iA== X-Gm-Message-State: AOJu0Ywckfh/wTh4G7wJ0Wimngtc7s8DOxtCekrYmcF8ChfwQIMaaeKD 3WZpVjcu3yWA/BPKZzvYZQLDrlxXO7s= X-Received: by 2002:a17:90a:1541:b0:268:1355:b03e with SMTP id y1-20020a17090a154100b002681355b03emr10641987pja.38.1696695900890; Sat, 07 Oct 2023 09:25:00 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id 30-20020a17090a191e00b002792b7182dcsm7883180pjg.49.2023.10.07.09.24.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Oct 2023 09:25:00 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 7 Oct 2023 13:24:58 -0300 Message-ID: <20231007162503.1057-3-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231007162503.1057-1-jamrial@gmail.com> References: <20231007162503.1057-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/7] 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: g1DHVzemTMw1 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 c0868a1bb3..8986e7c32a 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 Sat Oct 7 16:24:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 44200 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4e24:b0:15d:8365:d4b8 with SMTP id gk36csp510298pzb; Sat, 7 Oct 2023 09:25:38 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFX1UqkRoeGFOyjZbAQOgeUxW03gxJUDUXzmVtnWNNaF1/C5NH+1RF+nK4SsvLiKQI4aCIo X-Received: by 2002:a17:907:7749:b0:9b2:b9bd:a369 with SMTP id kx9-20020a170907774900b009b2b9bda369mr9261873ejc.45.1696695938601; Sat, 07 Oct 2023 09:25:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696695938; cv=none; d=google.com; s=arc-20160816; b=rifjA006VKmoKH6vTeXu59kb2itXna1IqZAzWUr/Ib/s8rkkldltJ++EA9ejsXhFfj qOaXGmT0E/0nVKNNbXnOi5qTkksltGdfl9CAm8CRb2sdROZH9Lae+zmqqRxOI1aYdT+4 PS9kXC721MmBbiAG3/qpi/AsX/N1hD0lw2wdNFvFuJIlxnxKoPcjzez6m2tHE7dovwdx BGKn7Y4Z5BQfyBOklBHdmmT7Y+2dW/KSrg2itGklc5Z4qsLA+g76nFZb5G99vjyCJFkT l17E8CW73tJWi2PJAo1RiOuhe3HEb1KMyWuw9347e/F7Jm71FKwtpZ2kdqcRbJmWRIvy 722g== 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=1mNJf7PKa2rribEfYy7TecEHmfmBKOIgmmJnU2VqjVE=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=gpxCpTOC3DF2TiI2YgEMuZjqd8zj+5cVMfNUliAjbqmirmWjbr+Wy8SEJCEkIw1qC/ Tzsu8YynN90bjWzpHV7/7ZrPV2EN2xqy+NvHcC19ylT28mpe7n9E54Ko2zkR2j3NeiIU 6B4mn99JVq4QVdWrR0FOPgomZEDQ1Jwxg7XFWK7PeMg7YXo/odDyipINk1RnF54+JsRI JRv5Znh5vcmkTqFooCaBEPPFhnGabs+XW//H9biSBtig5DKKP4yLlj0CDRLXRSPpmeA6 W8fdSeXfD24VCNplSohhzC2a8eG3VXzvFRj3WqV/6JCW3bRGHjMdozKHeMbGhNvQDfU6 Lurw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=Qmqv7tVD; 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 pv1-20020a170907208100b009b2ca767fc9si2604540ejb.988.2023.10.07.09.25.38; Sat, 07 Oct 2023 09:25:38 -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=20230601 header.b=Qmqv7tVD; 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 797EC68CB1B; Sat, 7 Oct 2023 19:25:12 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5F8AE68CAE4 for ; Sat, 7 Oct 2023 19:25:04 +0300 (EEST) Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-27b0d0c0ba0so2420171a91.1 for ; Sat, 07 Oct 2023 09:25:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696695902; x=1697300702; darn=ffmpeg.org; 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=tMwVw8fioFHjcBG7FKui/x3I1JGEijVZz10C+i4EOKs=; b=Qmqv7tVDBtRQ3j+7kgmLN6ptK6D+orqBCC4rwcgmtjL2Gx9BAa3RtHcTCEOrBhtz3V Yrfih1r1rEARAQnQXMFfT+8Cgzo8U95SUKPak7g7WdFsjvNdPPwBHWzIWbv+a7HWH2FT cc7ZJrGCpV5cN0oLhkeI+v271vX2EHAJkFGR+H7eSXdCxa59Hk35hRx+qi9Pe0A8pqT/ bb4yJ3ph3PoHLwria1ABocPck50TCtJjOv8HzxwGKnnmQGdkYJDKrlaBE6hdeHawPI1n g99w1tTgJ++F1pDqAGEjjZeYrT/hzmkMmGxqONbz6LpuxJONpcCM7+6fiFLc8Jo1r9NG 07GA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696695902; x=1697300702; 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=tMwVw8fioFHjcBG7FKui/x3I1JGEijVZz10C+i4EOKs=; b=E4IkoWNYvSHCT3kANCA/56D3UQL8DiJwFFufQwlABh+CmGPkkFxhgyTH6kVeo2R7oS f/ptSEiDo8gr+QyZU19DzF8XD4ORqCKhQwU666/+nBQEOvCvRdbO8NjtoIeUaSjLqTRi 1RnKg4tq61tcqAkqflkpV5lIOSGmQ+aTypR4znmKfsI2smwc9okRZUM2d2oWYwPblhio +XOxjW2Ncn8UWiuXTlfRVJKsMrw8rAMp8fJCh3pMDL8CpU3Nn4Ddd+V/cToOvfEyMFEx k5fS6rXdCgivLeDr2iSfJoTKd/GP0dyOuhpik8U7lSFnVo0ubbQAlhjwaP83+UjhKshm Zb2g== X-Gm-Message-State: AOJu0YyskDjtc9hcCAQSPCw6cDFQZwaZJb4hS0MamV/6jWxctYX1e7mx ShHoydFXTKJmhcPn/KuBnqcNpGptE/o= X-Received: by 2002:a17:90b:1989:b0:25f:20f:2f7d with SMTP id mv9-20020a17090b198900b0025f020f2f7dmr10682136pjb.2.1696695902213; Sat, 07 Oct 2023 09:25:02 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id 30-20020a17090a191e00b002792b7182dcsm7883180pjg.49.2023.10.07.09.25.01 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Oct 2023 09:25:01 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 7 Oct 2023 13:24:59 -0300 Message-ID: <20231007162503.1057-4-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231007162503.1057-1-jamrial@gmail.com> References: <20231007162503.1057-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/7] 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: lZVZn/OPLXHd Signed-off-by: James Almer --- libavformat/matroskadec.c | 53 +++++++++++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index c8acf91970..0e98e97957 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 } }, @@ -2953,14 +2959,30 @@ static int mkv_parse_video(MatroskaTrack *track, AVStream *st, if (track->video.display_unit < MATROSKA_VIDEO_DISPLAYUNIT_UNKNOWN) { if (track->video.display_width && track->video.display_height && - par->height < INT64_MAX / track->video.display_width / display_width_mul && - par->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, - par->height * track->video.display_width * display_width_mul, - par->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; + AVPacketSideData *sd = av_packet_side_data_new(&st->codecpar->coded_side_data, + &st->codecpar->nb_coded_side_data, + AV_PKT_DATA_FRAME_CROPPING, + sizeof(uint32_t) * 4, 0); + if (!sd) + return AVERROR(ENOMEM); + + cropping = sd->data; + 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 (par->codec_id != AV_CODEC_ID_HEVC) sti->need_parsing = AVSTREAM_PARSE_HEADERS; @@ -3126,10 +3148,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; } else if (track->type == MATROSKA_TRACK_TYPE_AUDIO) { if (!track->audio.out_samplerate) track->audio.out_samplerate = track->audio.samplerate; From patchwork Sat Oct 7 16:25:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 44203 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4e24:b0:15d:8365:d4b8 with SMTP id gk36csp510339pzb; Sat, 7 Oct 2023 09:25:47 -0700 (PDT) X-Google-Smtp-Source: AGHT+IG0qsDvWt01SJOpB3E5rSjqcI8iN0tP+yyuGsWOPFYC1KfPsofk0P2Xjp192J8W/K7r7cZn X-Received: by 2002:a05:6402:690:b0:533:6379:afaa with SMTP id f16-20020a056402069000b005336379afaamr10204472edy.20.1696695947041; Sat, 07 Oct 2023 09:25:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696695947; cv=none; d=google.com; s=arc-20160816; b=lOMT1IddcIR4T3NM6wYalNXiEgt6tLw9YCY3KGhcLGG/1l/BWUXd7QaVF/ri2VUwX9 CVi/B40chKQCKf2+5WmwsraWwLFmlH764KYZzJ0JTT6UcD0ek2JuS1e8bZyXMRL2RARA e7ynIpagkYEUhJaJqM2OFskSOfn8fYnkFbIkxgyB30wHUzcKzmoYCnGfs3/7ZYLwSk66 KnoVFaFcty9OPxTZhcEfeC91Qld1x2K+H9RLfKKjRk7fe4gJyLdp+5Sn9Oy63SpaDUCc 35Dm0RenczFkbrivD4RwbcWaMpjgDK7bElF5iezRz17S+Q/EH10DMMM1KUnb+1QDXCIt pAIA== 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=I+3dMKiwCc5mxbHWFzuoPY3eZkLEFQwMp1MWyblNfog=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=BR2CTkeWe2PDvU/FslhM9bhshTo6JRJI2ZK+Wn8yW8HZLf5ub3iomC+4M+mq3rrMPE Mkh2WxJx2lbboQI0jLwDumNCnfKVMDsbnj6H84goM42BP8jsi9iFEav+/4v9QewxQsE4 DTIrq5yOUcchGpAAxdZMUXcDkF3Pa9TM8Eg4Eqr12kp+gO7+VlkZTy3YXAz5qMmfoZma j0Wt+9fvHMa/1lQezbUk+yePZ8d2A3Xhpxa5PLoMGzUmjZU22CGtbbcaq8cK9buZ3gtq kgfGkLDXy74cTxKljN3FqTt8jNTjPvEoEBdPyL5jqmFDhfh9vwYNIWsWUhV8tM9gJeg6 WUtQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=VSlcxnMu; 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 c2-20020aa7d602000000b00530bad54f0esi2769185edr.561.2023.10.07.09.25.46; Sat, 07 Oct 2023 09:25:47 -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=20230601 header.b=VSlcxnMu; 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 7C99768CB78; Sat, 7 Oct 2023 19:25:13 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f41.google.com (mail-pj1-f41.google.com [209.85.216.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AFD9468CB03 for ; Sat, 7 Oct 2023 19:25:05 +0300 (EEST) Received: by mail-pj1-f41.google.com with SMTP id 98e67ed59e1d1-279150bad13so2342420a91.3 for ; Sat, 07 Oct 2023 09:25:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696695903; x=1697300703; darn=ffmpeg.org; 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=8jUObIJaxw8IQvOO2+tbh9yir/SfbHkjGBI762qt3BA=; b=VSlcxnMudFCUmdgLe9RPp2oiwImSP/XbTTjMNuzq4ylAP0uH0vd9EHijtm8Qi4MOsu XeVaAAu9jymZ7iISslvOkqyon7Rj8kOs1K6VQKTLdrcBtHdE5H47ckJ1SjtZRQCHBgX6 BC2ow4TQIhp7NQqoZHmCkygf8XJoBctCNHHLU5JHOzumQifLkX36Z4j5mprM8AYvT8+R +UZO7GIVavFz0J746NPAgLdKTjVnyJPG8waS1YcmoeMFNKOh4neIKJ9xkh8Cqk4dED5m U0aQvyXGS9vnVuwMVPjqFNAOZqxaN1JQaE6V8A0ipr6yzgkF8m5XoC+coBLq7iRaz2Yr 3+bg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696695903; x=1697300703; 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=8jUObIJaxw8IQvOO2+tbh9yir/SfbHkjGBI762qt3BA=; b=HTEPAXwTm24WfNEYHGWgshB1zCCDy0KYPRJ5RmlaZa7M2k6+s8F2ihi7e53bvBF1Yg istZaMUUdomPiWNU45e6JntAtTK+atK2DOkeMmJOl75qzDZ7r1CdWZFxd655eQSRkXzi 8b5Erv5UpKz/4FR/TUVOVXRW4+9uQl3DxMQs95ORZl6kfOi8x3LE4NZO5/PDM+7+ru2a OGWb99858971o93J5yfroUkPAVrzTW8RUto5L+uKudipbO0qlpbGLku8fTqOUrHQjKlu 8X9KTNYZ0PiQjw5Ja6RcHscsEFIIRzpXgewCgv0qSdx0W0PD+wpxhpUS+4K1jWZlaGNr 88gA== X-Gm-Message-State: AOJu0YzFrKRa2Imd4NKo30ayVsGS3da2d5I68TaZnG37pSXGZXuw7iDD irGlmHDSv66xMZAY9hm7fm3d1LFFN5E= X-Received: by 2002:a17:90b:1915:b0:26d:2162:f596 with SMTP id mp21-20020a17090b191500b0026d2162f596mr10628442pjb.6.1696695903557; Sat, 07 Oct 2023 09:25:03 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id 30-20020a17090a191e00b002792b7182dcsm7883180pjg.49.2023.10.07.09.25.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Oct 2023 09:25:03 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 7 Oct 2023 13:25:00 -0300 Message-ID: <20231007162503.1057-5-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231007162503.1057-1-jamrial@gmail.com> References: <20231007162503.1057-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/7] avformat/avformat: add a flag to signal muxers that support storing 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: FSPxZkygCbTJ Signed-off-by: James Almer --- libavformat/avformat.h | 1 + libavformat/mux.c | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 9e7eca007e..c099ca8a01 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -500,6 +500,7 @@ typedef struct AVProbeData { The user or muxer can override this through AVFormatContext.avoid_negative_ts */ +#define AVFMT_CROPPING 0x80000 /**< Format supports storing cropping values */ #define AVFMT_SEEK_TO_PTS 0x4000000 /**< Seeking is based on PTS */ diff --git a/libavformat/mux.c b/libavformat/mux.c index c7877c5d98..c5e8a4ca74 100644 --- a/libavformat/mux.c +++ b/libavformat/mux.c @@ -188,6 +188,7 @@ static int init_muxer(AVFormatContext *s, AVDictionary **options) AVDictionary *tmp = NULL; const FFOutputFormat *of = ffofmt(s->oformat); AVDictionaryEntry *e; + int warned_crop = 0; int ret = 0; if (options) @@ -276,6 +277,13 @@ FF_ENABLE_DEPRECATION_WARNINGS goto fail; } } + if (!warned_crop && !(s->oformat->flags & AVFMT_CROPPING) && + av_packet_side_data_get(st->codecpar->coded_side_data, + st->codecpar->nb_coded_side_data, + AV_PKT_DATA_FRAME_CROPPING)) { + av_log(s, AV_LOG_WARNING, "Muxer does not support storing cropping values\n"); + warned_crop = 1; + } break; } From patchwork Sat Oct 7 16:25:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 44204 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4e24:b0:15d:8365:d4b8 with SMTP id gk36csp510397pzb; Sat, 7 Oct 2023 09:25:56 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEj5u+sbKXAFmXm0SO01+7ZI47rJmYjxLJSqt7dJ3oNH62FqVkRKXRgsjcoZ5GRiABCR1nK X-Received: by 2002:aa7:c710:0:b0:537:fb3e:2229 with SMTP id i16-20020aa7c710000000b00537fb3e2229mr8667658edq.6.1696695955953; Sat, 07 Oct 2023 09:25:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696695955; cv=none; d=google.com; s=arc-20160816; b=otGTfVEYXUFHK7p3ufKtyIedm5IzNM9MXq0VmLYQ+yKQqLwP4TGYh58wL/XehJ8eh4 dlx2uTMAaAlh4lyzwn5Mljcfdnfn2y634cRHYc0mWR9rqvgt7TlsjD0Ige5WAMlh3M/c F5vYs4hOxnXVY61fXu5Qld6+g4mQTwNDEgn4RNKJW4MNjkWW+udNP0EjfVsUu4axBdO1 eFHfZH7Ta1sNoUdKES+pVC+IdvFCWfN/oTm9RWwbZJHpb7zVH9ekM8+LW8RD1K8lTymA a77/PUfoA3SEvhg/6CH1NrhFz+B2+Jp2aDX7FOf2rTRpfIx0D4UIaF+OaHj5JnOoj4+j NnIw== 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=hDK0uc4itSsBRiea0CoB6ThlrtmZh3Qd49DK8w8TDKI=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=VUAI3N4xwHWU8vGD87tCwyTtTTn1cmD9iu6v5YWLKv539Oc0+hifsluKmxfrPOzAW8 PUv1z/uwExfcjGWVmRQpCfryFpPuzTBXgLHuaASQdF/Up45dDtbNYvYDRXnsber/xf8C Ab3scHtPkpoiAk9n7Bu7S0+pBFDypm6QLPmI9SYni1w4ty4Ev6UohxETEV8z32J+H43T tQmeKXDenfs7AdVKla1UIwToDbKfrMqAKQ4WKrchLCPZ4YS4H/hq7P5uZ5yeqtPUmDh4 7VEic88So8PX7pAT26fMnlAnxcFsD+6pMpHMDvRCjeo0fzF9+76h8Vbp92zAURJ5+4yq 7NaA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=VuHwRzcX; 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 k8-20020a05640212c800b0053466caf928si2676461edx.682.2023.10.07.09.25.55; Sat, 07 Oct 2023 09:25:55 -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=20230601 header.b=VuHwRzcX; 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 AFD2068CB87; Sat, 7 Oct 2023 19:25:14 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 78ED168CB0E for ; Sat, 7 Oct 2023 19:25:07 +0300 (EEST) Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-1c60778a3bfso26294425ad.1 for ; Sat, 07 Oct 2023 09:25:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696695905; x=1697300705; darn=ffmpeg.org; 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=y3ayIDNvUy8nJH8imrZAeypp6DYn+Q34aqHOBX3k0vI=; b=VuHwRzcX2vnBHzTMHd0hwrP9zZHKiefgZCOHUvtbt8aFWDp/OjKJ4hebYE9nfnOQ2j P5vl0y8YXdRzHMICfz9zlNjPU0UkdK5Ra9lvxu2RPlICk0NuCynTAqJ+Iog7JmeWUOtj 1Rac9FEDaB2YDKA5Fg9PXJDibiWAwLSxNxUYmlQ5JkahR0iYL5gM8dROreMgfcU7ZKxy +YmcY1gGHG6pw6mcEDixYx0NVlnE4AiXU+MmVM241VwMiH0RuvFYGX6pdaKkyNuNIE9c wQ8HghE53vGyuNUu1lADU8RnCvm5AaUu/ydlYlySczE48Jae6ARe9jwq4sjNY1g2Cf6l 5SoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696695905; x=1697300705; 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=y3ayIDNvUy8nJH8imrZAeypp6DYn+Q34aqHOBX3k0vI=; b=ZygQdgTbYksrEWSoTw5wln9Wb8a3ZINpMdJJEJPuG8d/KJZBZv5E8k2EZ2NUcU+00k Q8GYejYLrIb5n3h6w7/pV/KqF8eK0pLBcQgjCfnSeFbuiAaGHMIlJnhSCMrQapxnz2Bo r6GqxkwaUIkYX7c5IOSidwslxlpSsh8y71KAsx1F3D8KiFXwLmEC0BMxGOFVTwg//WHK taf3m/t9c5vinWe3o90nMpdfQ8REKanhYUub4KYRXzW/CH4sswMnzGDBK/Dk/WReEuK9 o9ZSe1tFI2l+pHtqQOjF2sQWL4jw7sFsZxyuoCmEyAecmEmiBfiu34VYF03e9iaL+6aA O5HA== X-Gm-Message-State: AOJu0Yy9s7ZBfpnSA/IKld6DasxNJNxvRDwdomVSPNwuk75btPYx8PxO vDIxYOsbmIjEIbO62WMcUyYXnvMosrc= X-Received: by 2002:a17:90b:1047:b0:262:f06d:c0fc with SMTP id gq7-20020a17090b104700b00262f06dc0fcmr10814528pjb.7.1696695904916; Sat, 07 Oct 2023 09:25:04 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id 30-20020a17090a191e00b002792b7182dcsm7883180pjg.49.2023.10.07.09.25.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Oct 2023 09:25:04 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 7 Oct 2023 13:25:01 -0300 Message-ID: <20231007162503.1057-6-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231007162503.1057-1-jamrial@gmail.com> References: <20231007162503.1057-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/7] 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: BSxxtAluRn0N Signed-off-by: James Almer --- libavformat/matroskaenc.c | 59 ++++++++++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 13 deletions(-) diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 1457a6890c..9005237a83 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -1751,8 +1751,10 @@ 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]; + const AVPacketSideData *sd; 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; int ret; ebml_writer_open_master(&writer, MATROSKA_ID_TRACKVIDEO); @@ -1775,25 +1777,58 @@ static int mkv_write_track_video(AVFormatContext *s, MatroskaMuxContext *mkv, (tag = av_dict_get( s->metadata, "alpha_mode", NULL, 0))) && strtol(tag->value, NULL, 0)) ebml_writer_add_uint(&writer, MATROSKA_ID_VIDEOALPHAMODE, 1); + sd = av_packet_side_data_get(st->codecpar->coded_side_data, + st->codecpar->nb_coded_side_data, + AV_PKT_DATA_FRAME_CROPPING); + if (sd) { + const uint8_t *cropping = sd->data; + size_t cropped_size = sd->size; + 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); @@ -1805,9 +1840,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); @@ -3555,10 +3590,9 @@ const FFOutputFormat ff_matroska_muxer = { .write_trailer = mkv_write_trailer, .p.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS | #if FF_API_ALLOW_FLUSH - AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH, -#else - AVFMT_TS_NONSTRICT, + AVFMT_ALLOW_FLUSH | #endif + AVFMT_TS_NONSTRICT | AVFMT_CROPPING, .p.codec_tag = (const AVCodecTag* const []){ ff_codec_bmp_tags, ff_codec_wav_tags, additional_audio_tags, additional_subtitle_tags, 0 @@ -3599,10 +3633,9 @@ const FFOutputFormat ff_webm_muxer = { .check_bitstream = mkv_check_bitstream, .p.flags = AVFMT_GLOBALHEADER | AVFMT_VARIABLE_FPS | #if FF_API_ALLOW_FLUSH - AVFMT_TS_NONSTRICT | AVFMT_ALLOW_FLUSH, -#else - AVFMT_TS_NONSTRICT, + AVFMT_ALLOW_FLUSH | #endif + AVFMT_TS_NONSTRICT | AVFMT_CROPPING, .p.priv_class = &matroska_webm_class, .flags_internal = FF_FMT_ALLOW_FLUSH, }; From patchwork Sat Oct 7 16:25:02 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 44205 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4e24:b0:15d:8365:d4b8 with SMTP id gk36csp510455pzb; Sat, 7 Oct 2023 09:26:04 -0700 (PDT) X-Google-Smtp-Source: AGHT+IG5gLfGR4B1b6TKQM7R7I0bCtHg8hTb1unpWr1msAWWL4V2+oVH86iH2xLSmqHrbxMWLE8X X-Received: by 2002:a50:fa95:0:b0:52c:92e3:1d12 with SMTP id w21-20020a50fa95000000b0052c92e31d12mr9590772edr.11.1696695964660; Sat, 07 Oct 2023 09:26:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696695964; cv=none; d=google.com; s=arc-20160816; b=zki9y3YSSxE5DVmrlB3gxxXZYUrD1vEW8SqJrW/sNIHgPCnE7FDmp0dOJhWfxJcHi3 tMk8Eo4/+d2v21l2PVW9xsx85KnONMgM285ZeORjNjnZU74HvCKSvRBGjt7D92gF7uGQ 5l2wEsbh6hmoAa0Rm9zbAWL4tbLS+MPDsfivtmh27M3sdz4XuHMMvZ6UDKEA8DOgLQgS CBbNXFtnzelCXh6t4RdaHQurZHx50fFzGS1Kcuxd2EEOoLSb7ofzQryYsLW5xAvmezHk RUxw50Bmsmj7u1xA++tD1ROoP/thz6LO5YS9ps5RBoA+B3FsGhBysKWP2CRU9GrQuDQ0 8mwQ== 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=TzJ4FaHaynFXygAn8SfVF6rOR9FfQbFcGO5EpSltbqE=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=Bd4qnV+qseeJolof49LKcQ4xHVqbwVjYwU/2c/Cqh/ljzG397rAngKs7pEtVXtrQrx 4xS688PrtzIu2Po+Da1sfNyxM2TBgMw+nHUxRtxNG07bi7EH4XtNHlDhDUUzZfVyLuKh TU12plRU+CObvbHlG4tAZ/GgJ+r6R65m5b8llhqH9INN8JGL7Z81vEuZVNAZyE5pNIJO wBAB5F2lJiDRe94r5MGqTQG+AwEPEh+1Xv0RthTak4Aq8m2PEZaRNAxqgVNk7rweTQBI ACL7EF7xzDin6OFj2C0ExvCWMjbaiNC9h5JFrj7Lc3VYL5QpDCh74ZK0us1+uGRQwY3c Qyag== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=gU3DYArb; 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 a24-20020aa7d918000000b0053406d40a32si2620729edr.606.2023.10.07.09.26.04; Sat, 07 Oct 2023 09:26:04 -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=20230601 header.b=gU3DYArb; 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 10E3868CC11; Sat, 7 Oct 2023 19:25:16 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f175.google.com (mail-pg1-f175.google.com [209.85.215.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 908EF68CB7D for ; Sat, 7 Oct 2023 19:25:08 +0300 (EEST) Received: by mail-pg1-f175.google.com with SMTP id 41be03b00d2f7-564af0ac494so2210933a12.0 for ; Sat, 07 Oct 2023 09:25:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696695906; x=1697300706; darn=ffmpeg.org; 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=IzfIzxB/grH6ZVjOC7RIENUvxHG+NpMTKGWEw4n9JcY=; b=gU3DYArbD3/EvR8aiyN9mgEjDABUEdV8zlcXcCgUBNuJAsJK77DffCl+HgxjsqQFM9 3rMElP/k+q0WBrAPZfAAVAmb8xEAVzoTTy6S+jTC+zZc97j3MgJhFcFwMdGd5ZyMiuUS 2bk9AXXwxvf6qvw2d+b8Flid1Qciw36++NRI/0fT/FOHxGtBx4vX8jksfPCCtHhd6mhi QeWGfhy+MQ57VeaGnI+1aEEqtlcSXIcmKuZPjr8Ofy5Et+lJtyk1uY7sevh5xb3uRqgJ MKI3zB6zVNjY+fqn4WFNGLcYnJuoCrfNSbCAzEoe1X2iDJxGR3zU4xegr0fKAoA+Eu4i y6sg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696695906; x=1697300706; 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=IzfIzxB/grH6ZVjOC7RIENUvxHG+NpMTKGWEw4n9JcY=; b=Wr7kJsKZ3FxnQu373hg7OjAA+/new5QBIbWUWuDBOvdV7dIq7r93qF4KofMYBGfAvL MRTbkPn3sOHz/UjZIE0dDAaWhq2F43PlvBRbD+sFmzdpgQwzFsvtSKHVJxkSO+XQ0vMC YVlrbyCLHzEoGtDGeYTUKXFl5zXYHO+9lsQghFk9wF5rqdka1TNKXIyAqDQ4q5Jqv+CB P9uF8EgGmTaEb/wWuvfd0M7ljWw/XqdKPfq0TYJyyx4GHi+h8M1NtUU0w9phk6404Zkg hIEgGhBfymDpZYWs1/JVgij1p88dRz10Xoq65eujq6ou5Xjre79RbvixhLGVbrPI+Q9B CKkw== X-Gm-Message-State: AOJu0YxSFfP1hIR4nNLU74H0GkcVgFPpePMyO4zVe1f1pXDtVzQu7C07 4eEnmotIgNzRE1dX2Q1VkRacVau8rrw= X-Received: by 2002:a17:90a:850b:b0:274:3d7d:e793 with SMTP id l11-20020a17090a850b00b002743d7de793mr10286348pjn.47.1696695906321; Sat, 07 Oct 2023 09:25:06 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id 30-20020a17090a191e00b002792b7182dcsm7883180pjg.49.2023.10.07.09.25.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Oct 2023 09:25:05 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 7 Oct 2023 13:25:02 -0300 Message-ID: <20231007162503.1057-7-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231007162503.1057-1-jamrial@gmail.com> References: <20231007162503.1057-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/7] 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: hxDKEejdv0Zr Signed-off-by: James Almer --- fftools/ffmpeg.h | 3 +++ fftools/ffmpeg_demux.c | 6 ++++++ fftools/ffmpeg_enc.c | 24 +++++++++++++----------- fftools/ffmpeg_filter.c | 23 +++++++++++++++++++++++ fftools/ffmpeg_opt.c | 3 +++ 5 files changed, 48 insertions(+), 11 deletions(-) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index b059ecbb9f..94ada9d586 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -155,6 +155,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; @@ -352,6 +354,7 @@ typedef struct InputStream { #endif int autorotate; + int apply_cropping; int fix_sub_duration; diff --git a/fftools/ffmpeg_demux.c b/fftools/ffmpeg_demux.c index c71edf01a5..53fe584959 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 be35465c28..27dd28172c 100644 --- a/fftools/ffmpeg_enc.c +++ b/fftools/ffmpeg_enc.c @@ -467,17 +467,19 @@ int enc_open(OutputStream *ost, AVFrame *frame) if (ist) { int i; for (i = 0; i < ist->st->codecpar->nb_coded_side_data; i++) { - AVPacketSideData *sd_src = &ist->st->codecpar->coded_side_data[i]; - if (sd_src->type != AV_PKT_DATA_CPB_PROPERTIES) { - AVPacketSideData *sd_dst = av_packet_side_data_new(&ost->par_in->coded_side_data, - &ost->par_in->nb_coded_side_data, - sd_src->type, sd_src->size, 0); - if (!sd_dst) - return AVERROR(ENOMEM); - memcpy(sd_dst->data, sd_src->data, sd_src->size); - if (ist->autorotate && sd_src->type == AV_PKT_DATA_DISPLAYMATRIX) - av_display_rotation_set((int32_t *)sd_dst->data, 0); - } + AVPacketSideData *sd_dst, *sd_src = &ist->st->codecpar->coded_side_data[i]; + if (sd_src->type == AV_PKT_DATA_CPB_PROPERTIES) + continue; + if (ist->apply_cropping && sd_src->type == AV_PKT_DATA_FRAME_CROPPING) + continue; + sd_dst = av_packet_side_data_new(&ost->par_in->coded_side_data, + &ost->par_in->nb_coded_side_data, + sd_src->type, sd_src->size, 0); + if (!sd_dst) + return AVERROR(ENOMEM); + memcpy(sd_dst->data, sd_src->data, sd_src->size); + if (ist->autorotate && sd_src->type == AV_PKT_DATA_DISPLAYMATRIX) + av_display_rotation_set((int32_t *)sd_dst->data, 0); } } diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index b71a84185a..d17b9fc45a 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -31,6 +31,7 @@ #include "libavutil/bprint.h" #include "libavutil/channel_layout.h" #include "libavutil/display.h" +#include "libavutil/intreadwrite.h" #include "libavutil/opt.h" #include "libavutil/pixdesc.h" #include "libavutil/pixfmt.h" @@ -1381,6 +1382,28 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter, desc = av_pix_fmt_desc_get(ifp->format); av_assert0(desc); + if (ist->apply_cropping) { + AVPacketSideData *sd = av_packet_side_data_get(ist->st->codecpar->coded_side_data, + ist->st->codecpar->nb_coded_side_data, + AV_PKT_DATA_FRAME_CROPPING); + + if (sd->data && sd->size == sizeof(uint32_t) * 4) { + char crop_buf[64]; + int top = AV_RL32(sd->data + 0); + int bottom = AV_RL32(sd->data + 4); + int left = AV_RL32(sd->data + 8); + int right = AV_RL32(sd->data + 12); + + if (top < 0 || bottom < 0 || left < 0 || right < 0) + return AVERROR(EINVAL); + + snprintf(crop_buf, sizeof(crop_buf), "w=iw-%d-%d:h=ih-%d-%d", left, right, top, bottom); + ret = insert_filter(&last_filter, &pad_idx, "crop", crop_buf); + if (ret < 0) + return ret; + } + } + // TODO: insert hwaccel enabled filters like transpose_vaapi into the graph if (ist->autorotate && !(desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) { const AVPacketSideData *sd = NULL; diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index 304471dd03..1ef131aa3a 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -1737,6 +1737,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" }, From patchwork Sat Oct 7 16:25:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 44206 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:4e24:b0:15d:8365:d4b8 with SMTP id gk36csp510499pzb; Sat, 7 Oct 2023 09:26:12 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFcrbn0642lACPapojnJVJ//RVJ14qjhYgFZJoKEbgZHlrxZzev2jvTVMrwc4T+m+8XeTeP X-Received: by 2002:a17:906:9c9:b0:9ae:4f9e:7813 with SMTP id r9-20020a17090609c900b009ae4f9e7813mr8637632eje.73.1696695972681; Sat, 07 Oct 2023 09:26:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696695972; cv=none; d=google.com; s=arc-20160816; b=cPHOaT/LUlqpU74MOEbOdVWCDft3+ost0gGv4Fz9lZUUEdNJRCc6TChL7NRbPInvsv H0en+4lL72oETINXsvbXmf7w2WBgJFIoO52U7uyJRRzLX7b0dBYAlab0Y7VvoRtdoWvn iGfJXPypMR5E9qevcPhsnGca8zVrjkbYwpGOHh+QFIl1mTTeM/+uGF5uahG6sqwSc3CK eUWm2dJV/gFQO3/4MME41f5Og+eBvtGkOEyvhukNrfoy0PTs0E1jLr5PGzUDpsKDvpg9 vVac9b++1TItVoPpsoVauuNJLtfXukc0TrtlPb9waEMzTTaJXCU8GvnxhHExNKYpZnyM M/8A== 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=s/rybUSko4D+RL7hfl0uC6XcP7Z74HZDgFovDYO2lFU=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=K5dVoPoOKqppAhWLV7QclNiKJr938W+2g3bD56rJp5SbKQ6eNAAtHuIrMjm7BRG5FV WiY9AudeaPnSGwUrYwpqrIdEGHd8Eb8SXeBa/9letfxjGvpaDEkEp4lTGhi6Mie0K+eo WQxYvNW6m/hstww1D8YzQET2tIJdWF4mwpdEATIHDk9rqGCB6R/GKL35L0bNpl7cDHq9 Y+uQipF9v3eVz5nkJdGwT56vZPP2JpeIMZO0h0CsSbsEKlgYeCPE4VENiQjjXgqnMSzz iq9D24oZcT++q7qIuhyeOS/DGPmke4bdysLkRub6qt+aN/+u5aDQ2qvl6ZGanVha2QrC HvKQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=RydPVnZ3; 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 g7-20020a170906594700b009b92b7579b4si2529670ejr.25.2023.10.07.09.26.12; Sat, 07 Oct 2023 09:26:12 -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=20230601 header.b=RydPVnZ3; 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 2A70268CC1D; Sat, 7 Oct 2023 19:25:17 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f178.google.com (mail-pg1-f178.google.com [209.85.215.178]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D89C668CBFA for ; Sat, 7 Oct 2023 19:25:09 +0300 (EEST) Received: by mail-pg1-f178.google.com with SMTP id 41be03b00d2f7-58907163519so2385044a12.1 for ; Sat, 07 Oct 2023 09:25:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1696695908; x=1697300708; darn=ffmpeg.org; 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=dPSi2c7vMyFhRZwvKydK4P2hPfnz6C+yzAc9CDcLTYI=; b=RydPVnZ398EbddGCk/eMYk4GwKQAKlR+9PEJHCEH5S2yutU1NTJ2zc8AnzObBkjZnw FSReDoialnfkjMrmJlvzGnK10S6dG38RW3shpTab2C/IQ6KNQQxJOBAYAGeCHHohlnjs 9Jg5DyYaAcFFuWwPL+CbwPtLUluQS3OHomOtOqXhLuv5BQztOMOVdO0jYIBZs6gKUYPN tebac8prEinWsih0165YPGM80KvkOJIcE+ITBG48/dN2rt4wuJ0M051/2AkMGvE5qgyP luJ7orikZObSAZWjfCwQuO1QVjD3FasmCIfuJTyI69LBw3kIzcx9lrO87XXMyj1blSbX Y/Qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696695908; x=1697300708; 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=dPSi2c7vMyFhRZwvKydK4P2hPfnz6C+yzAc9CDcLTYI=; b=LAh480aleMAg+CpyE9oXpM4eHTElc7Npnzi1wTJyw42Ay0FE+JXfVNxzhKP18LRWOD p8r1CBrWPkNeB7C3NsKxPi00QDH+ftNVTLl1DJb/L65EMRuRjwq5dRws62S7YaDrUPKh 9+lmuqdwr6UrcsBw1s15xODZY4Oo3O7TNuRYB4OjX8aFNJ5MD1T3Ezf7ASEKcaSD33/F DmAIEraD5ZtUdIZiGD5wtO12RIQVQlipdemoNoVqkMoaHKQzx37JCfArFuoWUr08wyO1 tWqF7nyP9bjAwqNPx62hZaIzAMGj9Z3fRNyt02+Jyq1sSMaFQbV+NDTRmojdDmR3ngTn 7qPA== X-Gm-Message-State: AOJu0YxJ3llqUCu2NfmB8hNgcMdWahaKCpmJEOiTGwg4eDp+KnkgVAAi 1cZSpoLmoEQrGwBHIHpvnZksFIEZK+s= X-Received: by 2002:a17:90a:9c0f:b0:274:914f:7fcc with SMTP id h15-20020a17090a9c0f00b00274914f7fccmr10966366pjp.1.1696695907733; Sat, 07 Oct 2023 09:25:07 -0700 (PDT) Received: from localhost.localdomain (host197.190-225-105.telecom.net.ar. [190.225.105.197]) by smtp.gmail.com with ESMTPSA id 30-20020a17090a191e00b002792b7182dcsm7883180pjg.49.2023.10.07.09.25.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Oct 2023 09:25:07 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 7 Oct 2023 13:25:03 -0300 Message-ID: <20231007162503.1057-8-jamrial@gmail.com> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20231007162503.1057-1-jamrial@gmail.com> References: <20231007162503.1057-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 7/7] fftools/ffplay: 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: EXop1roZQXLK Signed-off-by: James Almer --- fftools/ffplay.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/fftools/ffplay.c b/fftools/ffplay.c index d8c69e10bc..5c213bf0d8 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -36,6 +36,7 @@ #include "libavutil/eval.h" #include "libavutil/mathematics.h" #include "libavutil/pixdesc.h" +#include "libavutil/intreadwrite.h" #include "libavutil/imgutils.h" #include "libavutil/dict.h" #include "libavutil/fifo.h" @@ -348,6 +349,7 @@ static const char **vfilters_list = NULL; static int nb_vfilters = 0; static char *afilters = NULL; static int autorotate = 1; +static int apply_cropping = 1; static int find_stream_info = 1; static int filter_nbthreads = 0; @@ -1910,6 +1912,28 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c last_filter = filt_ctx; \ } while (0) + if (apply_cropping) { + AVPacketSideData *sd = av_packet_side_data_get(is->video_st->codecpar->coded_side_data, + is->video_st->codecpar->nb_coded_side_data, + AV_PKT_DATA_FRAME_CROPPING); + + if (sd->data && sd->size == sizeof(uint32_t) * 4) { + char crop_buf[64]; + int top = AV_RL32(sd->data + 0); + int bottom = AV_RL32(sd->data + 4); + int left = AV_RL32(sd->data + 8); + int right = AV_RL32(sd->data + 12); + + if (top < 0 || bottom < 0 || left < 0 || right < 0) { + ret = AVERROR(EINVAL); + goto fail; + } + + snprintf(crop_buf, sizeof(crop_buf), "w=iw-%d-%d:h=ih-%d-%d", left, right, top, bottom); + INSERT_FILT("crop", crop_buf); + } + } + if (autorotate) { double theta = 0.0; int32_t *displaymatrix = NULL; @@ -2610,6 +2634,7 @@ static int stream_component_open(VideoState *is, int stream_index) av_dict_set(&opts, "threads", "auto", 0); if (stream_lowres) av_dict_set_int(&opts, "lowres", stream_lowres, 0); + av_dict_set_int(&opts, "apply_cropping", apply_cropping, 0); av_dict_set(&opts, "flags", "+copy_opaque", AV_DICT_MULTIKEY); @@ -3608,6 +3633,7 @@ static const OptionDef options[] = { { "scodec", HAS_ARG | OPT_STRING | OPT_EXPERT, { &subtitle_codec_name }, "force subtitle decoder", "decoder_name" }, { "vcodec", HAS_ARG | OPT_STRING | OPT_EXPERT, { &video_codec_name }, "force video decoder", "decoder_name" }, { "autorotate", OPT_BOOL, { &autorotate }, "automatically rotate video", "" }, + { "apply_cropping", OPT_BOOL, { &apply_cropping }, "apply frame cropping", "" }, { "find_stream_info", OPT_BOOL | OPT_INPUT | OPT_EXPERT, { &find_stream_info }, "read and decode the streams to fill missing information with heuristics" }, { "filter_threads", HAS_ARG | OPT_INT | OPT_EXPERT, { &filter_nbthreads }, "number of filter threads per graph" },