From patchwork Wed Sep 8 18:34:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 30075 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp687217iov; Wed, 8 Sep 2021 11:34:56 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzd74VqdUzYMmjWHEtWbQaTtPl57/UGkYYJoU5n+nZmJBodanqSnvz2T/BLyMvpMo3ySxAd X-Received: by 2002:a50:8e42:: with SMTP id 2mr5260500edx.338.1631126095987; Wed, 08 Sep 2021 11:34:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631126095; cv=none; d=google.com; s=arc-20160816; b=LdycKHP6W24rATXdTdCZ04Xv+ENkd8RuuyEP9n60dS1U5mHaZpzCh/VXqaXPhA1Aea LEEMSG5KgzhS1/rG068Zo7UhO4GspevMjUzd8HpkdkV+TxLWJFxEpo40nz5OYLSKGcoX +knE/d1anRSzcRNvCXPh8zNvhU7mYUrbEwV9dpCfzW5y4qnrWgsP9URGpGUG5P55hzfA m/dZHwA0vvGJCY/zfvjyj0E1WaJloe1WnIQXxaoqw2srcEamKDCIscNjyAd1Z9+bwdRO RuogCIkVt1Hn3QHRWoTtV0hVH4d0Mu2K2lyWackFNLSrreEcwvq83hoTaqMlD7yFmSuw nXkA== 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=efEMkDQtInFlwC6QwiWbSLfn3HFylP8EP/r4qwdHIds=; b=nmqqw0nac8qo1XcTb0GX5h5N3JaNH/ohysFnldFMvxfhM8rTDaMgCTac0KdZCFLvFv dESS3TQnVjaafmS3tJeVvPFaVmY0O9mhc2j/CCiwaKWWTLOLrO2U6Y6qDoC7q2qoYcqO 4uPi5rXKWsVPk8ahJ2ngJf+cS+E5ENxVL+X/M/riPUxNkskyW6HnF2OlbzFV+BiQjXKX YwSK2uViOubktLVprrjaGTtkjJWkMNTdNeC4OoYnfd0lhpi1ZsbibvLlWEME/yLA31Bt IOfssi+mvCN0ARdj6SYUj2H4p0x8hV/kTyoejhYIfNhQE7pr3h623V4q6yToqxHhefMX srdQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=PgU9Myqf; 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 z16si2848848edr.217.2021.09.08.11.34.55; Wed, 08 Sep 2021 11:34: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=20210112 header.b=PgU9Myqf; 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 BDCA468A5F8; Wed, 8 Sep 2021 21:34:50 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f171.google.com (mail-qk1-f171.google.com [209.85.222.171]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8E18268804C for ; Wed, 8 Sep 2021 21:34:43 +0300 (EEST) Received: by mail-qk1-f171.google.com with SMTP id w78so3640753qkb.4 for ; Wed, 08 Sep 2021 11:34:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=8qaxATyTqKWRe+ldF70PgOjMRAq2FFx7D159vnTawA8=; b=PgU9MyqfMXqZfpSzQQ3KDzPyJTcbTOxGIWzu611TcsZN3a4jCTkZVoX46Es3pvKJrj lqpLkU8VCtSLt0FVqFb1ibciZr4BSq6g8It/L5XVM9qHSEWwuiBTNx6y2YMcpH4iaSK0 N+X26SNQJFD0PT6wCbKp7dDSP9GBi0Mtuh7bcAB+3poZ6fNTYXxRBNFUkUrV/BWVKWbJ heSIxZLKXWgQB2VwibrwfIudMbBCWgD782qmVeev15ExBxKfrQxn0bZQvzJbFd2Ykn0j aQX6DRPbOKwLlCQU7hUluxs5rP+T9go/ydbvGq5B6wKfLuEuS2nVczXu/i8GCkBsbdKw 83cQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=8qaxATyTqKWRe+ldF70PgOjMRAq2FFx7D159vnTawA8=; b=Yb50q/0MWFVmJWh9ndDOIHg7nM6WsclZFVaLsKSP9pdWD3k4kCPetsXrMEhlEa9Nh6 RW9j1UFfBen/hSBVX19iNUD7KrHwd8HrIbJIwLbcasVo7b2A87r/RV9p0s+e6ofC4Xls nodv9thLIIpmTzA3pntyXn+X/sGACQEDR6SKHALq7+BJEvWxEomeDEm2RqCV9bQa1wqY N+23qY4KDELLzGD0Q9yDTLr7UIScYx1j9Dl3qK3jX8c4fYKZ0cWvWNU1nDT+m2iv4DPS 3g3nILgMD1m9o4hseeKNerEJNxmaWbk0rsgiM8PcIHA1l3Ih/PB07MKRC0EagkeegNwm /mtw== X-Gm-Message-State: AOAM5317sfcMV/qDG6ccvL6p8N+qjzX8h+s/3XO0X3vzP73V9wcCsBOW xfHG9pXjC+IXa/WU+9YdkOCAYpazBGQ= X-Received: by 2002:a37:a554:: with SMTP id o81mr4864273qke.231.1631126081587; Wed, 08 Sep 2021 11:34:41 -0700 (PDT) Received: from localhost.localdomain ([181.23.66.70]) by smtp.gmail.com with ESMTPSA id c4sm2516108qkf.122.2021.09.08.11.34.40 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Sep 2021 11:34:41 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 8 Sep 2021 15:34:23 -0300 Message-Id: <20210908183426.53347-1-jamrial@gmail.com> X-Mailer: git-send-email 2.33.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/4] avcodec/mjpegdec: export display matrix frame side data when available 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: 72h3YKg+xoFG Signed-off-by: James Almer --- libavcodec/mjpegdec.c | 53 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c index 2a5868fe1d..7bec5ce221 100644 --- a/libavcodec/mjpegdec.c +++ b/libavcodec/mjpegdec.c @@ -30,6 +30,7 @@ * MJPEG decoder. */ +#include "libavutil/display.h" #include "libavutil/imgutils.h" #include "libavutil/avassert.h" #include "libavutil/opt.h" @@ -2406,6 +2407,7 @@ int ff_mjpeg_receive_frame(AVCodecContext *avctx, AVFrame *frame) int i, index; int ret = 0; int is16bit; + AVDictionaryEntry *e = NULL; s->force_pal8 = 0; @@ -2864,6 +2866,57 @@ the_end: } } + if (e = av_dict_get(s->exif_metadata, "Orientation", e, AV_DICT_IGNORE_SUFFIX)) { + char *value = e->value + strspn(e->value, " \n\t\r"), *endptr; + int orientation = strtol(value, &endptr, 0); + + if (!*endptr) { + AVFrameSideData *sd = NULL; + + if (orientation >= 2 && orientation <= 8) { + int32_t *matrix; + + sd = av_frame_new_side_data(frame, AV_FRAME_DATA_DISPLAYMATRIX, sizeof(int32_t) * 9); + if (!sd) { + av_log(s->avctx, AV_LOG_ERROR, "Could not allocate frame side data\n"); + return AVERROR(ENOMEM); + } + + matrix = (int32_t *)sd->data; + + switch (orientation) { + case 2: + av_display_rotation_set(matrix, 0.0); + av_display_matrix_flip(matrix, 1, 0); + break; + case 3: + av_display_rotation_set(matrix, 180.0); + break; + case 4: + av_display_rotation_set(matrix, 180.0); + av_display_matrix_flip(matrix, 1, 0); + break; + case 5: + av_display_rotation_set(matrix, 90.0); + av_display_matrix_flip(matrix, 0, 1); + break; + case 6: + av_display_rotation_set(matrix, 90.0); + break; + case 7: + av_display_rotation_set(matrix, -90.0); + av_display_matrix_flip(matrix, 0, 1); + break; + case 8: + av_display_rotation_set(matrix, -90.0); + break; + default: + av_assert0(0); + } + } + } + } + av_dict_copy(&frame->metadata, s->exif_metadata, 0); av_dict_free(&s->exif_metadata); From patchwork Wed Sep 8 18:34:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 30076 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp687635iov; Wed, 8 Sep 2021 11:35:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzjnPaKc9ZlJU9ADqNt5JoOcsNc6G89l670NJKxf0sMIA9GCJAgfY2y/JvUg7KFlngXB3Hp X-Received: by 2002:a05:6402:40cf:: with SMTP id z15mr5216147edb.70.1631126130709; Wed, 08 Sep 2021 11:35:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631126130; cv=none; d=google.com; s=arc-20160816; b=mUla2yZDhrqC3N4DvMbJLzsOtfQtm9x5XR/xjN6iv+der/695yH8Y6MgX4Pu4iah8M jvPCogZ4wk+tL+7bV9NLF5ExfTuDew2DE7poRRyz4e3MZyBcGDzupRdUu1sMustUvEHe 7HY7P6Ns1eFSXzdNwWpxgTfOKWZ0Y64t9wsUS/JKy/EBIHJY4XESZkL7h7CnMiPUPLyU 5kvVZx/+/CHJ5O3XFzisNZ2P8N6cDcEe7Bq3aHsyaEK/JwLdU3tQyih1SKYokDWGTN5F PMdCV1LXB2dBE+pTjrWQu9FDS3noZn4s4hDCZTzUKEA09yCiyFiiN2+YdpSb1N7+vej+ 3SSg== 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=2RgZe27NIM+Hx3JtRNAehsLXqkWIhk6nDh2dgTOyT8Q=; b=fTZGcB9wM8dMU2Nin/HZzWExd+/I1tgnm+j45vnuIZ7VXOo/DcMPk2StkRKylheBhU hA+8zmlncTbxeCRPBeASCYVuVyr6OCk9qq2y2LIAk93L8XlbgA7gQYUYow3+Bj9MBlrZ DOPJT9GGkR7uq+7Ca/PbSzK97l4398IfN/5V7jOadHXyCVvxD8I4emOFqgHrSym+qbFN UhRXNW7Uj3XDmXyt1L63+uotj14B99i9vgFt4FR1+HknXhRXj3uPlzxnmSzB5tCj4+r7 7BLiOvltCStKxvQo3E/ZH2vQogAJjvVDhpQCJpq3ccHl3ACZZTH2SstdbszOjlmYlHyE j14w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=g4UhtYfG; 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 c24si2004788edn.26.2021.09.08.11.35.06; Wed, 08 Sep 2021 11:35: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=20210112 header.b=g4UhtYfG; 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 BD0EF68A7A4; Wed, 8 Sep 2021 21:34:51 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f173.google.com (mail-qk1-f173.google.com [209.85.222.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1322868804C for ; Wed, 8 Sep 2021 21:34:44 +0300 (EEST) Received: by mail-qk1-f173.google.com with SMTP id p4so3635710qki.3 for ; Wed, 08 Sep 2021 11:34:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=ud+nK5aBLY+iTca92PFF+cQ7pS6o7obMNoGtANu4zbs=; b=g4UhtYfGMePsFIXzTdlUhqZQJ4ZEihrqaJgNpkoJi+6bGz1qO5DSIQ13UAUy4KCw1s Lgbb9reQdl1QO+BlUTGOx3CaN1pG1Aps1TTSVtQk9Bo5ahihL9QllL+bS9jeHcTzGsvJ NMQFlW5h+7l//l56x1NMIBWY4z0LHY/mtG31eUoCaJL3JCbfm22Fou7egG4Ll1N01iw8 tCGGttDlZWyeuDneYKL02HAbvbhoZbpeglTU8h97B5kawhfJ+3iTjv6ErFFRM0TuHBaG 8eK6LA1ajuQ2ujBBaxQ8+c2YMj0q/S1hRgJxAWe9HuaAprxDiTDVOKOJC6jWKSMqL0tf PQVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ud+nK5aBLY+iTca92PFF+cQ7pS6o7obMNoGtANu4zbs=; b=QasmT8qPyZKFDZmOqqiKia7f6H/weVPx++7/pYyWF/FWOQ6GJrBqNn5BAk0kpTHQd4 qEnDMJM1xdow4oUFYDFOiEwcmbtA3MuPDVg72iEt8OhE3/7Xc4Eca7Kau5Jc1MSnUDV1 /MwnE7DGHrLsm5Z1rhXNiGq9/RxPDxyUxgD+iVAVFEfQoohGTi3k7hlZbtnZsTTaWOWB WmTDdIlgRe02RqZgTpiEuJoUIeedOZGP6eyNuR/UgdmJlW2kAnHc3jnKOj02iYWk5R+M UN/bMvoalnhJ4ufLWaVA+vgNcbbxhc5QO+XjE811I2ClpnyKDiD58afWxSxXpjOb9ZjA waaA== X-Gm-Message-State: AOAM530gxJpDlwcrS5aqswLJ1u0JtNm9AyhuCK/r2qRWOS3+BLNV4+wc VGIdW0PMOn4qh5PA0ac3QJvhnaYdUYA= X-Received: by 2002:a05:620a:1402:: with SMTP id d2mr5063369qkj.141.1631126082697; Wed, 08 Sep 2021 11:34:42 -0700 (PDT) Received: from localhost.localdomain ([181.23.66.70]) by smtp.gmail.com with ESMTPSA id c4sm2516108qkf.122.2021.09.08.11.34.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Sep 2021 11:34:42 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 8 Sep 2021 15:34:24 -0300 Message-Id: <20210908183426.53347-2-jamrial@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210908183426.53347-1-jamrial@gmail.com> References: <20210908183426.53347-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/4] cmdutils: round rotation value to nearest integer 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: 9GMfYHsWT43A As recommended by the doxy for av_display_rotation_get(). Signed-off-by: James Almer --- fftools/cmdutils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c index ac172dbd65..7e9c4299fa 100644 --- a/fftools/cmdutils.c +++ b/fftools/cmdutils.c @@ -2207,7 +2207,7 @@ double get_rotation(AVStream *st) AV_PKT_DATA_DISPLAYMATRIX, NULL); double theta = 0; if (displaymatrix) - theta = -av_display_rotation_get((int32_t*) displaymatrix); + theta = -round(av_display_rotation_get((int32_t*) displaymatrix)); theta -= 360*floor(theta/360 + 0.9/360); From patchwork Wed Sep 8 18:34:25 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 30077 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp687749iov; Wed, 8 Sep 2021 11:35:40 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyqMhnPPgW6oxbdBaigsaiJ3nHvgH8vHh/Qkz7uZYZil3oycCj9Wn4F+3a8jQuSNYUEoNny X-Received: by 2002:a17:906:584b:: with SMTP id h11mr1307932ejs.209.1631126140068; Wed, 08 Sep 2021 11:35:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631126140; cv=none; d=google.com; s=arc-20160816; b=uegnIMWgvp8l3AwpNyU26zmnxCg/bm3O64yN0aNSoQgXhOAxhXtwrd2JEfiHQJ/xFt LIyHnbtcmZHDHuj/LRgbutWTZxNLb5V7mRFm3EN0eYYjzWQwuZjQoj8/3iUvZ/sM7IlH lu8LPEWwzQqU7z+OcBBoKSrnsDcECDtVlb+4VQXL61bC7qVr115/lhcOraaHsPWGqyOo 7ogIjhvn60q5M+5XKRgMKvpRV9fisx+/tyLeQg8ONcyWKQK/YhvJagbbM6yyxtHVijWk PVjGdu33X644bANtoZN37BGrxK/rStpP/VCnwpNG1Bz4NLz8bXpa+IY9iEBosDDAxtBO yz2A== 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=Bi3/FkutdexNMQIbn6HyHeNM/j9Bnhs2tX4dVVXFDlA=; b=aLq7WrwRe4U2mFFZuBSFCiM+oIYYr59heAqiFuxuSMcXOfKjUWF+iJo+yVnwi420Hg gtKNGmPm7YbXuU018T0SINfV2CC/G/4p5y3v62UC/YnIwx/hdvPW7iwgHMQhpUyghGzy UUNoPAFHXuTuqHe3yiQwU0AHMZH2CogBfcUJqXTXmP0f+uUU4iLsdXXK/QHgnVcSn29j JU5gOZI1Yg/cVnychQm174pC6rFE6pA9x3gP/Znyty0fsVn51M7sqfdqniSpfbWtDPIm EtwTQsnUIBcYR2JvmGBlUwFmooE/KQ2YnfS/VRFcWDrhbsg2KMpOcuGXsevpK2eMyp0a zKPw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=ASYsaY2R; 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 v4si1587243edq.329.2021.09.08.11.35.17; Wed, 08 Sep 2021 11:35:40 -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=20210112 header.b=ASYsaY2R; 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 CA61F68A636; Wed, 8 Sep 2021 21:34:53 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f43.google.com (mail-qv1-f43.google.com [209.85.219.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 48A6C68A7BB for ; Wed, 8 Sep 2021 21:34:47 +0300 (EEST) Received: by mail-qv1-f43.google.com with SMTP id 93so2092590qva.7 for ; Wed, 08 Sep 2021 11:34:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=WhtsXvPDYwM78bJ7hESutYhH9mReJwyZCRG2x9yDybQ=; b=ASYsaY2RquRUwUga9aexN681MGZ5Wuvuf2C5LNy+PQ6GSO0Cp8m4cTvfgYSvGMX7M2 YsOpTaLJY8o7biAkO+mm9FbjeRTTJZFrh+L1QQ4XfAdvAI3HdDrByF3EIKcpL6CgTTx1 049DYEjD2kXE/Q2dCzKOT/JPba4AIB/hnW0t7iARgrfHCtbXyHA8p8oESF4plDZwpJL6 QhOkGh0ZNav/McwTDsbgvJ6cNziMnv/v499zgT+Ys4GTfK7XRyE0neyZ0HeKJq7dO5jX 44fVWImThSCZNDFLAqRqoJfzfJJJxVER1ZkDrvcPSUeroKlFXY2B+1mHGFiM+GOQOXeR TLRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WhtsXvPDYwM78bJ7hESutYhH9mReJwyZCRG2x9yDybQ=; b=Ly7aFPrcRA53BFy9gXVcfKyoFhHmJsqanB+33LD9m5blxJ5IqmzCZMDhUtyvQqcG20 3lZ64VU9x9ldCv4sKo3qn/w5qkc+9Hp7ZiKLDWMtgMUS05yU+i4jDvGHcA31oIYni/ub MFKPBCBc5a0pgaIQXZLqpcAdqVrtzynH+z3ZjxK7WlkyuUaMAQ0FtpS8CxgWgBbfBMR1 PW+UPzmnojnTEXBUHzhWTYVjnoJn8cUFOm/ad3EVA42YYFe0vQIFDsgXDSHGs09zZAhJ qgjRGdiVVcVjDb6yLctvaPU6F6e9Jk5JFR4WNsscs0TNDSXDMVcPb9qSCIh+sDxw8sla Ul+w== X-Gm-Message-State: AOAM533gIe8HUeyVJ7oswyMnYIk4f9anMIpYEyagrCQIPtvL7n33EIsP hefXDWTurf0m7+9kH5a9SPGuIHsMrwo= X-Received: by 2002:a0c:a709:: with SMTP id u9mr5438921qva.3.1631126083955; Wed, 08 Sep 2021 11:34:43 -0700 (PDT) Received: from localhost.localdomain ([181.23.66.70]) by smtp.gmail.com with ESMTPSA id c4sm2516108qkf.122.2021.09.08.11.34.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Sep 2021 11:34:43 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 8 Sep 2021 15:34:25 -0300 Message-Id: <20210908183426.53347-3-jamrial@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210908183426.53347-1-jamrial@gmail.com> References: <20210908183426.53347-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/4] ffmpeg: use display matrix frame side data for 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: oom+VqYSBQJA And give it priority over stream side data when present. Fixes part of ticket #6945. Signed-off-by: James Almer --- fftools/cmdutils.c | 4 +--- fftools/cmdutils.h | 2 +- fftools/ffmpeg.c | 8 ++++++++ fftools/ffmpeg.h | 1 + fftools/ffmpeg_filter.c | 14 +++++++++++++- fftools/ffplay.c | 3 ++- 6 files changed, 26 insertions(+), 6 deletions(-) diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c index 7e9c4299fa..ed3dcd31f4 100644 --- a/fftools/cmdutils.c +++ b/fftools/cmdutils.c @@ -2201,10 +2201,8 @@ void *grow_array(void *array, int elem_size, int *size, int new_size) return array; } -double get_rotation(AVStream *st) +double get_rotation(int32_t *displaymatrix) { - uint8_t* displaymatrix = av_stream_get_side_data(st, - AV_PKT_DATA_DISPLAYMATRIX, NULL); double theta = 0; if (displaymatrix) theta = -round(av_display_rotation_get((int32_t*) displaymatrix)); diff --git a/fftools/cmdutils.h b/fftools/cmdutils.h index 9caad01865..30f0b79725 100644 --- a/fftools/cmdutils.h +++ b/fftools/cmdutils.h @@ -648,6 +648,6 @@ void *grow_array(void *array, int elem_size, int *size, int new_size); char name[128];\ av_get_channel_layout_string(name, sizeof(name), 0, ch_layout); -double get_rotation(AVStream *st); +double get_rotation(int32_t *displaymatrix); #endif /* FFTOOLS_CMDUTILS_H */ diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index a9bb9d964d..5365f711e5 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -535,6 +535,7 @@ static void ffmpeg_cleanup(int ret) av_frame_free(&frame); } av_fifo_freep(&ifilter->frame_queue); + av_freep(&ifilter->displaymatrix); if (ist->sub2video.sub_queue) { while (av_fifo_size(ist->sub2video.sub_queue)) { AVSubtitle sub; @@ -2183,6 +2184,7 @@ static int ifilter_has_all_input_formats(FilterGraph *fg) static int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame) { FilterGraph *fg = ifilter->graph; + AVFrameSideData *sd; int need_reinit, ret, i; /* determine if the parameters for this input changed */ @@ -2207,6 +2209,12 @@ static int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame) (ifilter->hw_frames_ctx && ifilter->hw_frames_ctx->data != frame->hw_frames_ctx->data)) need_reinit = 1; + if (sd = av_frame_get_side_data(frame, AV_FRAME_DATA_DISPLAYMATRIX)) { + if (!ifilter->displaymatrix || memcmp(sd->data, ifilter->displaymatrix, sizeof(int32_t) * 9)) + need_reinit = 1; + } else if (ifilter->displaymatrix) + need_reinit = 1; + if (need_reinit) { ret = ifilter_parameters_from_frame(ifilter, frame); if (ret < 0) diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index 1194bb0cae..30225e9ffe 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -258,6 +258,7 @@ typedef struct InputFilter { uint64_t channel_layout; AVBufferRef *hw_frames_ctx; + int32_t *displaymatrix; int eof; } InputFilter; diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 6b7b6ca1b3..a4c2de07da 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -757,7 +757,12 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter, last_filter = ifilter->filter; if (ist->autorotate) { - double theta = get_rotation(ist->st); + int32_t *displaymatrix = ifilter->displaymatrix; + double theta; + + if (!displaymatrix) + displaymatrix = (int32_t *)av_stream_get_side_data(ist->st, AV_PKT_DATA_DISPLAYMATRIX, NULL); + theta = get_rotation(displaymatrix); if (fabs(theta - 90) < 1.0) { ret = insert_filter(&last_filter, &pad_idx, "transpose", "clock"); @@ -1127,6 +1132,8 @@ fail: int ifilter_parameters_from_frame(InputFilter *ifilter, const AVFrame *frame) { + AVFrameSideData *sd; + av_buffer_unref(&ifilter->hw_frames_ctx); ifilter->format = frame->format; @@ -1139,6 +1146,11 @@ int ifilter_parameters_from_frame(InputFilter *ifilter, const AVFrame *frame) ifilter->channels = frame->channels; ifilter->channel_layout = frame->channel_layout; + av_freep(&ifilter->displaymatrix); + sd = av_frame_get_side_data(frame, AV_FRAME_DATA_DISPLAYMATRIX); + if (sd) + ifilter->displaymatrix = av_memdup(sd->data, sizeof(int32_t) * 9); + if (frame->hw_frames_ctx) { ifilter->hw_frames_ctx = av_buffer_ref(frame->hw_frames_ctx); if (!ifilter->hw_frames_ctx) diff --git a/fftools/ffplay.c b/fftools/ffplay.c index 46758b9f55..ccea0e4578 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -1925,7 +1925,8 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c } while (0) if (autorotate) { - double theta = get_rotation(is->video_st); + int32_t *displaymatrix = (int32_t *)av_stream_get_side_data(is->video_st, AV_PKT_DATA_DISPLAYMATRIX, NULL); + double theta = get_rotation(displaymatrix); if (fabs(theta - 90) < 1.0) { INSERT_FILT("transpose", "clock"); From patchwork Wed Sep 8 18:34:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 30074 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp687851iov; Wed, 8 Sep 2021 11:35:51 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwvnttaB3XrmyIgyr+Oe9/aN5vxvmgTe8uRb0oPf/hA8cwCoXjBgc0iazEdct3scEK0GdI/ X-Received: by 2002:a17:906:6148:: with SMTP id p8mr1331532ejl.17.1631126150891; Wed, 08 Sep 2021 11:35:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631126150; cv=none; d=google.com; s=arc-20160816; b=HZBnZqZCtXDwozGVDJemZB/DrhNYeCoeO7P3Qu7ohiRghGVr8TuJOrlCND2/XdGgek i2vRIyBB9TM9BSuZzQMPRjJIx1B7ZrTY3XUIZfDUJPiHzTPWo/P/K/EC0LGGipp160Ba iiyX4d0yxIs6GvU2P5oreMqEGHcxiZlW0KwENCTfVa5aYeZeKNIcSYC7ZWXBuE5LopjH fF6Nt5qTUKu7dZ9zNNWct+Ufu15gCWRR2WG062Hqim+Nk0pi57urLMNE66AI46YBIhXN pYwf7lDVQ/KPfcffUejp4N04qghTqM9yb0Oby7zgvk3Jmf3t0mcDLx96n711oU95yFxD CPlw== 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=54+7bBpu18J4SVtpagwO4wWZhPagvbafepaDJjYfGFo=; b=Tt6YAdOMJuQSGjCaEqzMZBt9hP6PjY73nevSIAeOcdEyNMQ0Ss9oxOGinHu3D41CkE ftDywomsiUpMfDo6F3x/mXUCt04x1HYNv1m/os9PCXcp9vfalmPAqstbHTLpAdNZHJua kBVyNCKRkF6AHSFz5+zqadMXkryMsOPIrK5Be3dCkonlzi0dSlhlZHM7zC6UuHwU0J3u iUGUmNZVJ88nuYL/4wg5oR2plvePaPaK1I65OBlnfRVCLmY7riV7J9YH/f0Jlj+2yXld Ry/22HgbpKopk88IJPk6nWYenH/ssuIUdEKdcSZLumdnH39Lfkgh2YD8iiSKwlTXqwM8 1q0g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20210112 header.b=HIhcmdhU; 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 d16si2799496ejm.114.2021.09.08.11.35.28; Wed, 08 Sep 2021 11:35:50 -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=20210112 header.b=HIhcmdhU; 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 E6BED68A7E6; Wed, 8 Sep 2021 21:34:55 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f173.google.com (mail-qt1-f173.google.com [209.85.160.173]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BF76168A4FA for ; Wed, 8 Sep 2021 21:34:48 +0300 (EEST) Received: by mail-qt1-f173.google.com with SMTP id w17so2729530qta.9 for ; Wed, 08 Sep 2021 11:34:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=9TaAV+jkVFbhQUy92e1mjGmZEELaqndqfodQDBotDaQ=; b=HIhcmdhURm5igas9OZ82iBPvEslpOkhBSI7qXX3bj8n49TPnfRETlquAv++vcEM5RJ yjDMUs8GUnYs9J1wvKQTtXT6uRIxfPLsf8hl97epxc6ERYFH+VljrI348cIUj3K3mFXy 6ONdj2u63vNhflct/JR3fnIr0nuLpDpz8SkIFZhnaQ1YeceyFvyNzOa+IuRljFWisEJ9 OOnb0U9eKkwuCr+sWAt3/7t5DHi44WDj0nBVyDGepsz/y2JLvBp+HQIcgEXGhczMU8at 8QKgaRbUsZZBbl/qsF5+bPAAT2e4++tKzKQqme2O+CMYJB9g/PZLWYKFxgE0/XvoHoE5 5acw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=9TaAV+jkVFbhQUy92e1mjGmZEELaqndqfodQDBotDaQ=; b=lP4XpA1NPoR3EQr/q69vZcQone4mlVMXt7Rctisqoq0JlqSPzjc8hVZr2CQ5nENCWc QTUVjFcdF/TAsLY25kXcIFCdTx/bUiRz7F/HCvdZ+IPpjdeQoYOOi2Jzyp3C/xOPqhIV UoOeZ0mkv79RnDZFlFmgATXRfHZhRc/chj8AraWwcInD+nEF9sjmLr0QQBuJ6eQJxjmv 3f86B2L0SsCMQw79TybEJ+jAb0MmSGelNxuSoV48UkpsfdENajCQGnFx63GERdrDS7uk r5OjkPylgb644ND2MAlAoNUELZ4AclVxIc94ChhmnknLOOWixJk5zRE8ghNNydWfZmZl k37w== X-Gm-Message-State: AOAM531q4bZveMIzoEm3E8JMJwSF1KqGbRTIVHZdUP2WCqxxfxy5nzyr zfq6aPQ0c8syX/OHcQh7t+fixDf3mUE= X-Received: by 2002:ac8:1404:: with SMTP id k4mr5051253qtj.278.1631126086666; Wed, 08 Sep 2021 11:34:46 -0700 (PDT) Received: from localhost.localdomain ([181.23.66.70]) by smtp.gmail.com with ESMTPSA id c4sm2516108qkf.122.2021.09.08.11.34.45 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Sep 2021 11:34:46 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Wed, 8 Sep 2021 15:34:26 -0300 Message-Id: <20210908183426.53347-4-jamrial@gmail.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210908183426.53347-1-jamrial@gmail.com> References: <20210908183426.53347-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/4] ffmpeg: take into account image flipping in the display matrix 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: 0KVUmKo6d+t3 This covers only standard rotations. Finishes fixing ticket #6945. Signed-off-by: James Almer --- fftools/ffmpeg_filter.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index a4c2de07da..da0d4faf54 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -765,18 +765,36 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter, theta = get_rotation(displaymatrix); if (fabs(theta - 90) < 1.0) { + 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) { - ret = insert_filter(&last_filter, &pad_idx, "hflip", NULL); - if (ret < 0) - return ret; - ret = insert_filter(&last_filter, &pad_idx, "vflip", NULL); + if (displaymatrix[0] < 0) { + ret = insert_filter(&last_filter, &pad_idx, "hflip", NULL); + if (ret < 0) + return ret; + } + if (displaymatrix[4] < 0) { + ret = insert_filter(&last_filter, &pad_idx, "vflip", NULL); + } } else if (fabs(theta - 270) < 1.0) { + 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); ret = insert_filter(&last_filter, &pad_idx, "rotate", rotate_buf); + } else if (fabs(theta) < 1.0) { + if (displaymatrix && displaymatrix[4] < 0) { + ret = insert_filter(&last_filter, &pad_idx, "vflip", NULL); + } } if (ret < 0) return ret;