From patchwork Sat Dec 18 23:07:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 32716 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp2958616iog; Sat, 18 Dec 2021 15:08:20 -0800 (PST) X-Google-Smtp-Source: ABdhPJz4UjLdbM8F4RVEoDqT5CRDIZRnwR+8qwJ03EA2DY0hHQ9EMKjRYoQE79sOg3PCGizE9Wj+ X-Received: by 2002:a05:6402:1352:: with SMTP id y18mr6569941edw.224.1639868900552; Sat, 18 Dec 2021 15:08:20 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i24si7316297edu.443.2021.12.18.15.08.20; Sat, 18 Dec 2021 15:08:20 -0800 (PST) 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=@outlook.com header.s=selector1 header.b=sr7pr5gj; arc=fail (body hash mismatch); 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=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2ADE968AF78; Sun, 19 Dec 2021 01:08:09 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2010.outbound.protection.outlook.com [40.92.89.10]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7D21F68A588 for ; Sun, 19 Dec 2021 01:08:02 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iBqpSbtXmHDgyBMlHJi2K/0O5rhfb8J5nLMCkpl1IdlfDT8vTZ2/OW/1MvWtKpoIG+KAWG0SX8dJ6xdTS2qmdja/D/qyeKGJD+BNHRjD7q6h9sZrDckwxKq2+RbYv5RmdCN2Tn0jpaXG5XY1lj3b1lLr1WoKZfYd4kJ5wOAS1cR4E+qgE07QW3GoMbZATvNinMJ9R0UbWgLw44Z355k3URez8eBIn3a3j3ODcwew4YnVhCX0mOKBpVbZ+Le/wrx00/0k9UGvY0QmM5TJsSJSCvehCU0DPcnzOJzVqmmfezD/gNwn7BoGsodnAIjAdn1lEwTSxfoLayhc5XkaIrMpDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=YFMJqpjO2m3YFjZlqXeCcZ18nENhsmRYuiBMeUuH4iA=; b=Qe3HQ27hS+5J6oGT/W/ZLph5yLDMQnj5bY4kFT4VWlf5A43MifO7gXmfN80fHccvRx02DJipl+t0Cn6+usqyvBt4/MqK5VO6Aoq4YOXq0balq9b4fzPjMJj04+ORAWDrFOkVFlWW6uq0YRisjbncZIx5ZeOOhMaQlXzGsD9VceLVSfRnKNH4vBUVd8APtZjWhiMRMi1N26EkoyysweH8b/BY2zGNMH/HN+9OmtCgjGQE6IhLvsYJgTXZWt0NEDPGYGwqyRm7HfwWRl/HWjWjbD8TeVGjFX+YYld+T2oJohaXRAUX3JE2fmjYci65GrLnPZtQEkYgTMX9H7Y4Wd5eug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=YFMJqpjO2m3YFjZlqXeCcZ18nENhsmRYuiBMeUuH4iA=; b=sr7pr5gjB5kDhdSdYeSluTgyP4hvXfWgM8ChoeRE5WhPCPM14lDdkODbMn3C9X5fQYlNcqvFWApLhYXhBww9OwhoPd9gk88mvZzA3OP2rQ5E+Haoxdz8Pln0Qgwg6HrYpVkx8oAiarfv3RrhVN3nsyfBF0Ckzb8TJbVUwgEVRGRykuF6/TNrmoupCRihMO9xl2t0NHsQxXlkiLVbB2yK6dr1P9iiUDW3/sL+YxA85ETyu2AVAYimzk37x2ovFwtgarFKSwWidkTgOa0L1DUevg49rPQ/ofX7LupknI9Uce2FPrYrpMdXCML9pjdF7u3+bKr5UPs72CM8kHqW4tK7wQ== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB3862.eurprd03.prod.outlook.com (2603:10a6:20b:17::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4801.19; Sat, 18 Dec 2021 23:07:58 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::f0dc:92f5:6bc2:45ca]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::f0dc:92f5:6bc2:45ca%6]) with mapi id 15.20.4801.020; Sat, 18 Dec 2021 23:07:58 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 19 Dec 2021 00:07:43 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [CiqvTm2AlM91VRHCVaNPzcSe8XCw+j4h] X-ClientProxiedBy: AM0PR03CA0076.eurprd03.prod.outlook.com (2603:10a6:208:69::17) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20211218230745.1227624-2-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7ce949e5-0e55-4aa1-941d-08d9c27b3b45 X-MS-Exchange-SLBlob-MailProps: q+fD6XS3/UJ+cHfC79vTguh6WqLpD1ahtRlGxXkf6drEDHeYMoijlxJC3sjFI51ptD7p3AaVm3fQL5DgnvNrhmq/w8pfyNoTBBcEwJgeIAqtAbtLsKZZe3gyBepp8plu/JBLxseq6YkbL8mFlsy6eHETMmvTXjVZnNtRuhecgtJUXnM6lD28xu4r76VINHS/VSP0Fos9i1ldMOCWM5rTPfoGh+eluHsw8j42llYzlE8bPQ3lSn/aSqHQqKDDrwPuFancnoiebwr2BfCdw9Q9PnPfeSdBipl/8nUAfFQ+b387UHyiLb+YA1ezXzeCuHz5cLcA6bA9fRjbDbj5MJ6FDeFObOG4ou7U0SylW/OPM/R0KF1gyIbkrZMObhagKIVYvOufPJeMpetTNlmDkXd03jWQyszekwRtex3b/90cztIPgSNzGtPfQRAUfGrIXbbKrK4EuYyGNPetgks/TvJvf913VPx5ZK4Bit4YQteHgL/LhQbSnNUg43YveCZMeujWRTpFgfmAcjgEy+AqxUKsDD6rwVFHVr1p7OO+P5GjTabRSsv8xOudtxd0IOxyGT2RAdFpUU/sek+mCqT47m/Mqj7Zw97KAtjX5aooBlFAt45MSkiuE+xjAF81LXy1SEVet15KrW1gYlwVWpKy+k6EYpdq64TYrV1WHpuAv4+RWQgJIcb6+as1RIHC4EB+ZY01RAgiZfIni4CLzCXTcImV3Q== X-MS-TrafficTypeDiagnostic: AM6PR03MB3862:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: l3DgIPkmszkd4bKeIJ9Zzkogn9XSXdvn5InRApNfBTSiQfbMqSYS6hZE4COt+M1DoI2D1Rx+Va7uSYzz1Of6h0asABd/jCl9IiuACViuylArX5A5XIXEaWtTg0EKeWEnsUNhBRlXiccn/k7KNO6TICvojXqPm7ZB8ly3lsq1o9QtYG5cASLBSu77G7mjjhEUUVxaD3H8Gap6nzrvUx155FYJSczcCRP3MwJrdaVZlG/Mi7SNAfklsBWN0WFCVLVBCSXSS4YUoD+78TSsB5YcWquEayqKh9R1Eu2p01+vaiwObar90N/3fzb3FmGIQy32REt1VVqXFwwadC21/Y9A1lWgg6A4Am7Q+Mf+irOgDhRH8MlLTLu4Bpy6RcRrATzWmUrK2EjOyHMstRypEd8d83BVZWjNG1shC1vfNE7jEeqUjhvhqY1+Pzim5rloGUfwT55tVwQQ0dPIuS5vBPqhqs9/AMs84FfDwemheOH318fmNTbmYgwoDhVs/VN76uAzJI/5Rx38i7FIIT0jH6GgSUcxKpGPoZqyJugC7fkp7+/5+z/HouK74A2DfJ1KrqJhRjcMy1PSEXHiW5M2W3htaQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?nCliIfUXb5bMLdxHvc6cF6D+2Cg0?= =?utf-8?q?fQ1RXfa5qHi3E1vi8OZ18pqO83OhJ9/51ZgdRIrRKNC762hMRF4AmEWsVEY28SlI5?= =?utf-8?q?5sBhzScM0V/u5v+t5KYDDdNh9mGlvVUZhxTutsM7VRRk8bW+Q2AfvO1v6UshCIlP9?= =?utf-8?q?k336GB2IMRJQpuIlcVqMPY4O4H1VnxcE0ggIEZ5xymamMPI3MRvq3wJkqfVLRQhPQ?= =?utf-8?q?wG9TtxqocWceziibiiYsxsZbEbHFW3PFF5U9cZd/WYGKcqWg+tram7nuDCLHZ6gnz?= =?utf-8?q?l6WTCTaovHD3wwoqsm0r5fRxwcTxWfHj6cHCzKQQ4QKh2ftICvlpUXx4iDfOOj5Hn?= =?utf-8?q?eDsMOoWwYIp1SSg1e6NldjnAwFaOgfpvFnx2NJmT1QthLH+bO32wuUcgBX/OGjes7?= =?utf-8?q?htcHSy6TU+5kcGuTuJkScighutTcT+3yW+5aLTdR0K4ONcDgRpz+Ua6CPxa5XUTeR?= =?utf-8?q?97W4U590EvdXWjN3GZyJIjLy7HHMw5xXGcjOv/eH0TxZ1pPA2jqRZSAm4/jQvdUJp?= =?utf-8?q?iGkhT2H7I6rqWN+D0hSzPezVjCTBWhqMwYM6VQRhGlQki4T45ypiMqf2kazjIpmUK?= =?utf-8?q?QvwNuveEP0EiNPec18TYDlnh2OwvFaoiOMpFLFHs8YS63irXH8cC9cyBXJPjwPk0Y?= =?utf-8?q?2X27YJ2ni/nCGHUDszEyPgQJmSkZSxnQ+nSNs3J2JnEWH2M4YSnjUqJ7LEb8PwBYO?= =?utf-8?q?cXsOaaGNySmMy4KDulT82San8y2ZONT2txJmu89ul0sKs95uQjYo3PDj5gSf3+zWE?= =?utf-8?q?I22bx1JnPwSMag8E0xrTaVT4hnZvfnisC6pIZ/cG/N6bb6sjYLH0ZbHdvERTDZC1l?= =?utf-8?q?5/EtBRT7pV2m5Ny4pB1qzSwXczggZxjWc8coVfG6JjM/CmYgLvZou/LW51w0X/pg1?= =?utf-8?q?X4R9E78Xftt2TAlybhtTfyhJvJ60DH+4gf0PPFmGxwEA=3D=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7ce949e5-0e55-4aa1-941d-08d9c27b3b45 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Dec 2021 23:07:58.2848 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR03MB3862 Subject: [FFmpeg-devel] [PATCH 2/4] fftools/ffmpeg_filter: Fix autorotation 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: EUK6UlPXFCg+ In case of an orthogonal transformation av_display_rotation_get() returns the (anticlockwise) degree that the unit vector in x-direction gets rotated by; get_rotation in cmdutils.c makes a clockwise degree out of this. So if one inserts a transpose filter corresponding to this degree, then the x-vector gets mapped correctly and there are two possibilities for image of the y-vector, namely the two unit vectors orthogonal to the image of the x-vector. E.g. if the x-vector gets rotated by 90° clockwise, then the two possibilities for the y-vector are the unit vector in x direction or its opposite. The latter case is a simple 90° rotation for both vectors* whereas the former is a simple 90° clockwise rotation followed by a horizontal flip. These two cases can be distinguished by looking at the x-coordinate of the image of the y-vector, i.e. by looking at displaymatrix[3]. Similarly for the case of a 270° clockwise rotation. These two cases were previously wrong (they were made to match wrongly parsed exif rotation tag values). *: For display matrices, the y-axis points downward. Signed-off-by: Andreas Rheinhardt --- fftools/ffmpeg_filter.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 501a0acd61..8c929ab9fa 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -761,12 +761,12 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter, theta = get_rotation(displaymatrix); if (fabs(theta - 90) < 1.0) { + ret = insert_filter(&last_filter, &pad_idx, "transpose", "clock"); if (displaymatrix[3] > 0) { ret = insert_filter(&last_filter, &pad_idx, "hflip", NULL); if (ret < 0) return ret; } - ret = insert_filter(&last_filter, &pad_idx, "transpose", "clock"); } else if (fabs(theta - 180) < 1.0) { if (displaymatrix[0] < 0) { ret = insert_filter(&last_filter, &pad_idx, "hflip", NULL); @@ -777,12 +777,12 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter, ret = insert_filter(&last_filter, &pad_idx, "vflip", NULL); } } else if (fabs(theta - 270) < 1.0) { + ret = insert_filter(&last_filter, &pad_idx, "transpose", "cclock"); if (displaymatrix[3] < 0) { ret = insert_filter(&last_filter, &pad_idx, "hflip", NULL); if (ret < 0) return ret; } - ret = insert_filter(&last_filter, &pad_idx, "transpose", "cclock"); } else if (fabs(theta) > 1.0) { char rotate_buf[64]; snprintf(rotate_buf, sizeof(rotate_buf), "%f*PI/180", theta);