From patchwork Sat Jun 22 23:15:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 50095 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a59:ae71:0:b0:482:c625:d099 with SMTP id w17csp1270431vqz; Sat, 22 Jun 2024 16:17:08 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUQt+3aEx6VroCdggdKgjhcWUFadOh7Pk80fI54B3/AKq9IHSBCNaOsMLUzExRwSg2EW/+G+HeEtjjmOGjaO37B/DHAAyZFp3pk7Q== X-Google-Smtp-Source: AGHT+IECQZs+VTpzswg0Tqa0IOp5rVmOdWjxh1NrmCadl483MTgwxRBz/dk44m4NRtk6RvkcxSNx X-Received: by 2002:a17:906:694f:b0:a6f:dd93:7ffb with SMTP id a640c23a62f3a-a6ffe2709f0mr159031066b.1.1719098227808; Sat, 22 Jun 2024 16:17:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1719098227; cv=none; d=google.com; s=arc-20160816; b=MRriDSXaOflemnMFy4IK3xzRFf/peGZ1pfnsB1SwGS7+gFfmiIyjRsirxnzjxmP41l XUk4TduLPnAE+H8jswrIZYW32jdPqWyKImvKvVzF5gF2WxuWLeEp3XHfDKTE+y1TRozi HkAjAM+ORWru22d2hFt1lTkoHe2kQHnWqsiiAbJHTnJX8KAroS6Y60p177nIywApESJX N9/IV2v5ufRbmLFuhsuEDohwOaibJyX88DsSFVW5lTyO08Q8Hg6LM4GJ9oNtKZts34jS I4/yR3uSISc4QLbh+zBPd7z4j1EWYti7qNGfy8dWl+spNDHsoEaW/uTyUKqDc7mt5yfW M2FQ== 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=3K+zFYYgWaraQId4sCgHwdiKm4ab4hyy1jeGYTrwnJg=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=Xh9Yf0ejE5Oo15f3b1VIVB2Z5cnlAJWdK+ut3fnqJT4HsTs1x9ththYFet9Ttl0tes CW7IsNIWt+Su6KkmfnjwqDwvRTRY5I7xeV/KBX51Yb8XPzch7XDLCz1P4Tgh3Pr1jtKy AvcE6vQmzqab2Qu7bldOy9PUnIADHGj+mgNrpskiuj//qmyQi1IlJnCmwEsn3aWK+ROa HdPCigVYfrlla6beh+UMckrskTaV8xWlXh9tLt/1aqVGU8GU9dqZEJqQgupb2Q9BdcLB MAm7Blhod1IYHTg4u630GO2Jx7Va0vOweQSOlJbqonC9po7INR9whTD2spG6osFOn8e+ atEA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=QrTf0H+s; 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 a640c23a62f3a-a6fcf460bffsi225519466b.99.2024.06.22.16.17.07; Sat, 22 Jun 2024 16:17:07 -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=QrTf0H+s; 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 183C568D66F; Sun, 23 Jun 2024 02:16:06 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D590568D621 for ; Sun, 23 Jun 2024 02:15:56 +0300 (EEST) Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-7065a2f4573so1122640b3a.2 for ; Sat, 22 Jun 2024 16:15:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1719098154; x=1719702954; 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=/GMLb6GKxvw5Bd650iMLPSvIKEfFtT211L1OTGN9wao=; b=QrTf0H+sKWJIledY1UGO02rJekrocl9HPT2kg54DJvP3cegSX9Tqi0lfPuZIf+4Qpu 121ifTN9mHKqXfu80tqH+q1WehyWG/wgs8NAWaisZYkV9JwsLabwqn2b29dc9VUzJxJQ oQ/azofzeDTkshzWvvz6uo9dU9is42XJrrDc0x68G2X94NCzina5WiTSK5dnRy0Ksp1E 1PNQKrVyUZrzW0VcOEvLlTPYIXfWTHNKUs6C+9s5o1hWZ4wrnyswhGAQJb5MMDpdY7kH a9EsxgOM13vD5ivyS9P7DbJvDioDopHGgJ7ay7h0kUATkOS9Te5hh424iiuehA5M78d8 4bUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719098154; x=1719702954; 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=/GMLb6GKxvw5Bd650iMLPSvIKEfFtT211L1OTGN9wao=; b=iZlExvwmYuZUvgsw9Yt6ZRNgY2XD9RyTTHQZItTBfk790ReZQiFwZsC0TKMwk1hJF9 lKrAEklM7CmIwsjAJe/DqoNsZiAQAOq+Dhb7mU6qKLtSehhDH44e281eTAxwubilVBTl P5UPkrk07aV9HOmowc3TJXlH6z5zwySED38B7saXHtcrL30WUactp7BX3Ja0rV2Bawm0 uTJG0HUv2ay8kGtR8fvrI3JTbO98ciuN3BJ97o3/BcZ3r9xHv8ZntuzXqWNtfuCfZEZ6 7ee2pmcRnv829vvLT+c5l8UV1rbfpx+cXTYcE36PGKS7VbxMyLzjGTOFdE6x44Xq3Yuv lEsg== X-Gm-Message-State: AOJu0YyOEshTDF1k+mCzWNMfX/RMmPA86jOY7hm8ewI4MeyNT7Yihn+o iuid/DB9U62MJdBmkNugWoe2TnkPh208N7GWAjvORrYEYilvCdZ9JzEBYw== X-Received: by 2002:aa7:8d54:0:b0:706:705f:313a with SMTP id d2e1a72fcca58-706745947b5mr762798b3a.12.1719098154073; Sat, 22 Jun 2024 16:15:54 -0700 (PDT) Received: from localhost.localdomain ([190.194.167.233]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-706512e000asm3717691b3a.179.2024.06.22.16.15.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 22 Jun 2024 16:15:53 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 22 Jun 2024 20:15:17 -0300 Message-ID: <20240622231520.7410-7-jamrial@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240622231520.7410-1-jamrial@gmail.com> References: <20240622231520.7410-1-jamrial@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 07/10] avformat/matroska: set Monoscopic view for 2D projection 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: THMSNbjiZhhO Signed-off-by: James Almer --- libavformat/matroska.h | 36 ++++++++++++-------- libavformat/matroskadec.c | 6 ++-- libavformat/matroskaenc.c | 8 ++--- tests/ref/fate/matroska-spherical-mono | 2 +- tests/ref/fate/matroska-spherical-mono-remux | 4 +-- tests/ref/fate/matroska-vp8-alpha-remux | 2 +- 6 files changed, 33 insertions(+), 25 deletions(-) diff --git a/libavformat/matroska.h b/libavformat/matroska.h index 719f2ef796..8c4d8dcb99 100644 --- a/libavformat/matroska.h +++ b/libavformat/matroska.h @@ -392,35 +392,41 @@ extern const AVMetadataConv ff_mkv_metadata_conv[]; * as well as WebM compatibility. * * MAP and MKV_ONLY are macros to be provided by the user. - * MAP(MatroskaVideoStereoModeType, AVStereo3DType, AV_STEREO3D_FLAG_*, - * HALF_WIDTH, HALF_HEIGHT, WebM-compatibility) + * MAP(MatroskaVideoStereoModeType, AVStereo3DType, AVStereo3DView, + * AV_STEREO3D_FLAG_*, HALF_WIDTH, HALF_HEIGHT, WebM-compatibility) * is for the stereo modes that have a Stereo3D counterpart. * MKV_ONLY(MatroskaVideoStereoModeType, HALF_WIDTH, HALF_HEIGHT, WebM) * is for those that don't have a Stereo3D counterpart. * */ #define STEREOMODE_STEREO3D_MAPPING(MAP, MKV_ONLY) \ - MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_MONO, AV_STEREO3D_2D, 0, 0, 0, 1) \ - MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_LEFT_RIGHT, AV_STEREO3D_SIDEBYSIDE, 0, 1, 0, 1) \ + MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_MONO, AV_STEREO3D_2D, \ + AV_STEREO3D_VIEW_MONO, 0, 0, 0, 1) \ + MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_LEFT_RIGHT, AV_STEREO3D_SIDEBYSIDE, \ + AV_STEREO3D_VIEW_PACKED, 0, 1, 0, 1) \ MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_BOTTOM_TOP, AV_STEREO3D_TOPBOTTOM, \ - AV_STEREO3D_FLAG_INVERT, 0, 1, 1) \ - MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_TOP_BOTTOM, AV_STEREO3D_TOPBOTTOM, 0, 0, 1, 1) \ + AV_STEREO3D_VIEW_PACKED, AV_STEREO3D_FLAG_INVERT, 0, 1, 1) \ + MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_TOP_BOTTOM, AV_STEREO3D_TOPBOTTOM, \ + AV_STEREO3D_VIEW_PACKED, 0, 0, 1, 1) \ MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_RL, AV_STEREO3D_CHECKERBOARD, \ - AV_STEREO3D_FLAG_INVERT, 0, 0, 0) \ - MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_LR, AV_STEREO3D_CHECKERBOARD, 0, 0, 0, 0) \ + AV_STEREO3D_VIEW_PACKED, AV_STEREO3D_FLAG_INVERT, 0, 0, 0) \ + MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_LR, AV_STEREO3D_CHECKERBOARD, \ + AV_STEREO3D_VIEW_PACKED, 0, 0, 0, 0) \ MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_RL, AV_STEREO3D_LINES, \ - AV_STEREO3D_FLAG_INVERT, 0, 1, 0) \ - MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_LR, AV_STEREO3D_LINES, 0, 0, 1, 0) \ + AV_STEREO3D_VIEW_PACKED, AV_STEREO3D_FLAG_INVERT, 0, 1, 0) \ + MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_LR, AV_STEREO3D_LINES, \ + AV_STEREO3D_VIEW_PACKED, 0, 0, 1, 0) \ MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_RL, AV_STEREO3D_COLUMNS, \ - AV_STEREO3D_FLAG_INVERT, 1, 0, 0) \ - MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_LR, AV_STEREO3D_COLUMNS, 0, 1, 0, 0) \ + AV_STEREO3D_VIEW_PACKED, AV_STEREO3D_FLAG_INVERT, 1, 0, 0) \ + MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_LR, AV_STEREO3D_COLUMNS, \ + AV_STEREO3D_VIEW_PACKED, 0, 1, 0, 0) \ MKV_ONLY(MATROSKA_VIDEO_STEREOMODE_TYPE_ANAGLYPH_CYAN_RED, 0, 0, 0) \ MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_RIGHT_LEFT, AV_STEREO3D_SIDEBYSIDE, \ - AV_STEREO3D_FLAG_INVERT, 1, 0, 1) \ + AV_STEREO3D_VIEW_PACKED, AV_STEREO3D_FLAG_INVERT, 1, 0, 1) \ MKV_ONLY(MATROSKA_VIDEO_STEREOMODE_TYPE_ANAGLYPH_GREEN_MAG, 0, 0, 0) \ MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_LR, AV_STEREO3D_FRAMESEQUENCE, \ - 0, 0, 0, 0) \ + AV_STEREO3D_VIEW_PACKED, 0, 0, 0, 0) \ MAP(MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_RL, AV_STEREO3D_FRAMESEQUENCE, \ - AV_STEREO3D_FLAG_INVERT, 0, 0, 0) + AV_STEREO3D_VIEW_PACKED, AV_STEREO3D_FLAG_INVERT, 0, 0, 0) extern const char * const ff_matroska_video_stereo_mode[MATROSKA_VIDEO_STEREOMODE_TYPE_NB]; diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 6bc5fa621e..e6437ac68f 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2245,10 +2245,11 @@ static int mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mo { static const struct { char type; + char view; char flags; } stereo_mode_conv [] = { -#define STEREO_MODE_CONV(STEREOMODETYPE, STEREO3DTYPE, FLAGS, WDIV, HDIV, WEBM) \ - [(STEREOMODETYPE)] = { .type = (STEREO3DTYPE), .flags = (FLAGS) }, +#define STEREO_MODE_CONV(STEREOMODETYPE, STEREO3DTYPE, STEREO3DVIEW, FLAGS, WDIV, HDIV, WEBM) \ + [(STEREOMODETYPE)] = { .type = (STEREO3DTYPE), .view = (STEREO3DVIEW), .flags = (FLAGS) }, #define NOTHING(STEREOMODETYPE, WDIV, HDIV, WEBM) STEREOMODE_STEREO3D_MAPPING(STEREO_MODE_CONV, NOTHING) }; @@ -2259,6 +2260,7 @@ static int mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mo return AVERROR(ENOMEM); stereo->type = stereo_mode_conv[stereo_mode].type; + stereo->view = stereo_mode_conv[stereo_mode].view; stereo->flags = stereo_mode_conv[stereo_mode].flags; if (!av_packet_side_data_add(&st->codecpar->coded_side_data, &st->codecpar->nb_coded_side_data, diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index 094cf61357..dfcdda1adc 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -1605,20 +1605,20 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer, * indicates whether the MatroskaVideoStereoModeType with that value * uses double width/height or is WebM compatible. */ #define FLAG(STEREOMODETYPE, BOOL) | (BOOL) << (STEREOMODETYPE) -#define WDIV1(STEREOMODETYPE, STEREO3DTYPE, FLAGS, WDIV, HDIV, WEBM) \ +#define WDIV1(STEREOMODETYPE, STEREO3DTYPE, STEREO3DVIEW, FLAGS, WDIV, HDIV, WEBM) \ FLAG(STEREOMODETYPE, WDIV) #define WDIV2(STEREOMODETYPE, WDIV, HDIV, WEBM) \ FLAG(STEREOMODETYPE, WDIV) // The zero in the following line consumes the first '|'. const unsigned width_bitfield = 0 STEREOMODE_STEREO3D_MAPPING(WDIV1, WDIV2); -#define HDIV1(STEREOMODETYPE, STEREO3DTYPE, FLAGS, WDIV, HDIV, WEBM) \ +#define HDIV1(STEREOMODETYPE, STEREO3DTYPE, STEREO3DVIEW, FLAGS, WDIV, HDIV, WEBM) \ FLAG(STEREOMODETYPE, HDIV) #define HDIV2(STEREOMODETYPE, WDIV, HDIV, WEBM) \ FLAG(STEREOMODETYPE, HDIV) const unsigned height_bitfield = 0 STEREOMODE_STEREO3D_MAPPING(HDIV1, HDIV2); -#define WEBM1(STEREOMODETYPE, STEREO3DTYPE, FLAGS, WDIV, HDIV, WEBM) \ +#define WEBM1(STEREOMODETYPE, STEREO3DTYPE, STEREO3DVIEW, FLAGS, WDIV, HDIV, WEBM) \ FLAG(STEREOMODETYPE, WEBM) #define WEBM2(STEREOMODETYPE, WDIV, HDIV, WEBM) \ FLAG(STEREOMODETYPE, WEBM) @@ -1646,7 +1646,7 @@ static int mkv_write_stereo_mode(AVFormatContext *s, EbmlWriter *writer, const AVStereo3D *stereo; /* The following macro presumes all MATROSKA_VIDEO_STEREOMODE_TYPE_* * values to be in the range 0..254. */ -#define STEREOMODE(STEREOMODETYPE, STEREO3DTYPE, FLAGS, WDIV, HDIV, WEBM) \ +#define STEREOMODE(STEREOMODETYPE, STEREO3DTYPE, STEREO3DVIEW, FLAGS, WDIV, HDIV, WEBM) \ [(STEREO3DTYPE)][!!((FLAGS) & AV_STEREO3D_FLAG_INVERT)] = (STEREOMODETYPE) + 1, #define NOTHING(STEREOMODETYPE, WDIV, HDIV, WEBM) static const unsigned char conversion_table[][2] = { diff --git a/tests/ref/fate/matroska-spherical-mono b/tests/ref/fate/matroska-spherical-mono index b108596350..aa17e9c624 100644 --- a/tests/ref/fate/matroska-spherical-mono +++ b/tests/ref/fate/matroska-spherical-mono @@ -3,7 +3,7 @@ side_data_type=Stereo 3D type=2D inverted=0 -view=packed +view=monoscopic primary_eye=none baseline=0 horizontal_disparity_adjustment=0/1 diff --git a/tests/ref/fate/matroska-spherical-mono-remux b/tests/ref/fate/matroska-spherical-mono-remux index eec41b77f3..75a9b73a37 100644 --- a/tests/ref/fate/matroska-spherical-mono-remux +++ b/tests/ref/fate/matroska-spherical-mono-remux @@ -27,7 +27,7 @@ DISPOSITION:forced=1 side_data_type=Stereo 3D type=2D inverted=0 -view=packed +view=monoscopic primary_eye=none baseline=0 horizontal_disparity_adjustment=0/1 @@ -56,7 +56,7 @@ DISPOSITION:forced=0 side_data_type=Stereo 3D type=2D inverted=0 -view=packed +view=monoscopic primary_eye=none baseline=0 horizontal_disparity_adjustment=0/1 diff --git a/tests/ref/fate/matroska-vp8-alpha-remux b/tests/ref/fate/matroska-vp8-alpha-remux index 06bcc4b4ba..814463eeda 100644 --- a/tests/ref/fate/matroska-vp8-alpha-remux +++ b/tests/ref/fate/matroska-vp8-alpha-remux @@ -35,7 +35,7 @@ DISPOSITION:still_image=0 side_data_type=Stereo 3D type=2D inverted=0 -view=packed +view=monoscopic primary_eye=none baseline=0 horizontal_disparity_adjustment=0/1