From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 4913D4ADC6 for ; Sat, 22 Jun 2024 23:17:04 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DCC6668D657; Sun, 23 Jun 2024 02:16:05 +0300 (EEST) 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-Google-Smtp-Source: AGHT+IGwyJbLRqqgfZI+u/f9l7AdT7l/ESjssOHgAotK+n3RZiHg4F0/xJqVeAQjsx++EOB9M5m3bw== 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: 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 -- 2.45.2 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".