Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Lynne via ffmpeg-devel <ffmpeg-devel@ffmpeg.org>
To: ffmpeg-devel@ffmpeg.org
Cc: Lynne <dev@lynne.ee>
Subject: [FFmpeg-devel] [PATCH] lavu/stereo3d: change baseline and horizontal FOV to rationals
Date: Sat, 22 Jun 2024 22:11:05 +0200
Message-ID: <20240622201116.403924-1-dev@lynne.ee> (raw)

This avoids hardcoding any implementation-specific limitiations as
part of the API, and allows for future expandability.

This also allows API users to more conveniently convert the
values into floats without hardcoding specific conversion constants.

The draft implementation of this mechanism for the draft of
AVTransport uses rationals for these particular fields.

The API was committed 2 days ago, so changing these fields now
is within the realms of acceptable.
---
 fftools/ffprobe.c                            |  4 ++--
 libavformat/dump.c                           |  9 +++++----
 libavformat/mov.c                            |  9 ++++++---
 libavutil/stereo3d.h                         |  8 ++++----
 tests/ref/fate/matroska-spherical-mono       |  4 ++--
 tests/ref/fate/matroska-spherical-mono-remux |  8 ++++----
 tests/ref/fate/matroska-stereo_mode          | 16 ++++++++--------
 tests/ref/fate/matroska-vp8-alpha-remux      |  4 ++--
 tests/ref/fate/mov-spherical-mono            |  4 ++--
 9 files changed, 35 insertions(+), 31 deletions(-)

diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index d7ba980ff9..2da928b7c3 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -2546,9 +2546,9 @@ static void print_pkt_side_data(WriterContext *w,
             print_int("inverted", !!(stereo->flags & AV_STEREO3D_FLAG_INVERT));
             print_str("view", av_stereo3d_view_name(stereo->view));
             print_str("primary_eye", av_stereo3d_primary_eye_name(stereo->primary_eye));
-            print_int("baseline", stereo->baseline);
+            print_q("baseline", stereo->baseline, '/');
             print_q("horizontal_disparity_adjustment", stereo->horizontal_disparity_adjustment, '/');
-            print_int("horizontal_field_of_view", stereo->horizontal_field_of_view);
+            print_q("horizontal_field_of_view", stereo->horizontal_field_of_view, '/');
         } else if (sd->type == AV_PKT_DATA_SPHERICAL) {
             const AVSphericalMapping *spherical = (AVSphericalMapping *)sd->data;
             print_str("projection", av_spherical_projection_name(spherical->projection));
diff --git a/libavformat/dump.c b/libavformat/dump.c
index 61a2c6a29f..ac7d3038ab 100644
--- a/libavformat/dump.c
+++ b/libavformat/dump.c
@@ -262,13 +262,14 @@ static void dump_stereo3d(void *ctx, const AVPacketSideData *sd, int log_level)
     av_log(ctx, log_level, "%s, view: %s, primary eye: %s",
            av_stereo3d_type_name(stereo->type), av_stereo3d_view_name(stereo->view),
            av_stereo3d_primary_eye_name(stereo->primary_eye));
-    if (stereo->baseline)
-        av_log(ctx, log_level, ", baseline: %"PRIu32"", stereo->baseline);
+    if (stereo->baseline.num && stereo->baseline.den)
+        av_log(ctx, log_level, ", baseline: %d/%d", stereo->baseline.num, stereo->baseline.den);
     if (stereo->horizontal_disparity_adjustment.num && stereo->horizontal_disparity_adjustment.den)
         av_log(ctx, log_level, ", horizontal_disparity_adjustment: %d/%d",
                stereo->horizontal_disparity_adjustment.num, stereo->horizontal_disparity_adjustment.den);
-    if (stereo->horizontal_field_of_view)
-        av_log(ctx, log_level, ", horizontal_field_of_view: %"PRIu32"", stereo->horizontal_field_of_view);
+    if (stereo->horizontal_field_of_view.num && stereo->horizontal_field_of_view.den)
+        av_log(ctx, log_level, ", horizontal_field_of_view: %d/%d", stereo->horizontal_field_of_view.num,
+               stereo->horizontal_field_of_view.den);
 
     if (stereo->flags & AV_STEREO3D_FLAG_INVERT)
         av_log(ctx, log_level, " (inverted)");
diff --git a/libavformat/mov.c b/libavformat/mov.c
index f08fec3fb6..64cd17e770 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -6545,7 +6545,8 @@ static int mov_read_eyes(MOVContext *c, AVIOContext *pb, MOVAtom atom)
     MOVStreamContext *sc;
     int size, flags = 0;
     int64_t remaining;
-    uint32_t tag, baseline = 0;
+    uint32_t tag;
+    AVRational baseline = av_make_q(0, 0);
     enum AVStereo3DView view = AV_STEREO3D_VIEW_PACKED;
     enum AVStereo3DPrimaryEye primary_eye = AV_PRIMARY_EYE_NONE;
     AVRational horizontal_disparity_adjustment = { 0, 1 };
@@ -6642,7 +6643,8 @@ static int mov_read_eyes(MOVContext *c, AVIOContext *pb, MOVAtom atom)
             avio_skip(pb, 1); // version
             avio_skip(pb, 3); // flags
 
-            baseline = avio_rb32(pb);
+            baseline.num = avio_rb32(pb);
+            baseline.den = 1000000; // micrometers
 
             break;
         }
@@ -6782,7 +6784,8 @@ static int mov_read_hfov(MOVContext *c, AVIOContext *pb, MOVAtom atom)
             return AVERROR(ENOMEM);
     }
 
-    sc->stereo3d->horizontal_field_of_view = avio_rb32(pb);
+    sc->stereo3d->horizontal_field_of_view.num = avio_rb32(pb);
+    sc->stereo3d->horizontal_field_of_view.den = 1000; // thousands of a degree
 
     return 0;
 }
diff --git a/libavutil/stereo3d.h b/libavutil/stereo3d.h
index 00a5c3900e..097f6c9455 100644
--- a/libavutil/stereo3d.h
+++ b/libavutil/stereo3d.h
@@ -213,9 +213,9 @@ typedef struct AVStereo3D {
 
     /**
      * The distance between the centres of the lenses of the camera system,
-     * in micrometers. Zero if unset.
+     * in meters. Zero if unset.
      */
-    uint32_t baseline;
+    AVRational baseline;
 
     /**
      * Relative shift of the left and right images, which changes the zero parallax plane.
@@ -224,9 +224,9 @@ typedef struct AVStereo3D {
     AVRational horizontal_disparity_adjustment;
 
     /**
-     * Horizontal field of view in thousanths of a degree. Zero if unset.
+     * Horizontal field of view, in degrees. Zero if unset.
      */
-    uint32_t horizontal_field_of_view;
+    AVRational horizontal_field_of_view;
 } AVStereo3D;
 
 /**
diff --git a/tests/ref/fate/matroska-spherical-mono b/tests/ref/fate/matroska-spherical-mono
index b108596350..87f10cd879 100644
--- a/tests/ref/fate/matroska-spherical-mono
+++ b/tests/ref/fate/matroska-spherical-mono
@@ -5,9 +5,9 @@ type=2D
 inverted=0
 view=packed
 primary_eye=none
-baseline=0
+baseline=0/0
 horizontal_disparity_adjustment=0/1
-horizontal_field_of_view=0
+horizontal_field_of_view=0/0
 [/SIDE_DATA]
 [SIDE_DATA]
 side_data_type=Spherical Mapping
diff --git a/tests/ref/fate/matroska-spherical-mono-remux b/tests/ref/fate/matroska-spherical-mono-remux
index eec41b77f3..1239013185 100644
--- a/tests/ref/fate/matroska-spherical-mono-remux
+++ b/tests/ref/fate/matroska-spherical-mono-remux
@@ -29,9 +29,9 @@ type=2D
 inverted=0
 view=packed
 primary_eye=none
-baseline=0
+baseline=0/0
 horizontal_disparity_adjustment=0/1
-horizontal_field_of_view=0
+horizontal_field_of_view=0/0
 [/SIDE_DATA]
 [SIDE_DATA]
 side_data_type=Spherical Mapping
@@ -58,9 +58,9 @@ type=2D
 inverted=0
 view=packed
 primary_eye=none
-baseline=0
+baseline=0/0
 horizontal_disparity_adjustment=0/1
-horizontal_field_of_view=0
+horizontal_field_of_view=0/0
 [/SIDE_DATA]
 [SIDE_DATA]
 side_data_type=Spherical Mapping
diff --git a/tests/ref/fate/matroska-stereo_mode b/tests/ref/fate/matroska-stereo_mode
index 26c325b20e..46e8563f13 100644
--- a/tests/ref/fate/matroska-stereo_mode
+++ b/tests/ref/fate/matroska-stereo_mode
@@ -134,9 +134,9 @@ type=side by side
 inverted=0
 view=packed
 primary_eye=none
-baseline=0
+baseline=0/0
 horizontal_disparity_adjustment=0/1
-horizontal_field_of_view=0
+horizontal_field_of_view=0/0
 [/SIDE_DATA]
 [/STREAM]
 [STREAM]
@@ -154,9 +154,9 @@ type=top and bottom
 inverted=1
 view=packed
 primary_eye=none
-baseline=0
+baseline=0/0
 horizontal_disparity_adjustment=0/1
-horizontal_field_of_view=0
+horizontal_field_of_view=0/0
 [/SIDE_DATA]
 [/STREAM]
 [STREAM]
@@ -172,9 +172,9 @@ type=interleaved lines
 inverted=1
 view=packed
 primary_eye=none
-baseline=0
+baseline=0/0
 horizontal_disparity_adjustment=0/1
-horizontal_field_of_view=0
+horizontal_field_of_view=0/0
 [/SIDE_DATA]
 [/STREAM]
 [STREAM]
@@ -191,9 +191,9 @@ type=interleaved columns
 inverted=1
 view=packed
 primary_eye=none
-baseline=0
+baseline=0/0
 horizontal_disparity_adjustment=0/1
-horizontal_field_of_view=0
+horizontal_field_of_view=0/0
 [/SIDE_DATA]
 [/STREAM]
 [STREAM]
diff --git a/tests/ref/fate/matroska-vp8-alpha-remux b/tests/ref/fate/matroska-vp8-alpha-remux
index 06bcc4b4ba..ec1ad884b0 100644
--- a/tests/ref/fate/matroska-vp8-alpha-remux
+++ b/tests/ref/fate/matroska-vp8-alpha-remux
@@ -37,8 +37,8 @@ type=2D
 inverted=0
 view=packed
 primary_eye=none
-baseline=0
+baseline=0/0
 horizontal_disparity_adjustment=0/1
-horizontal_field_of_view=0
+horizontal_field_of_view=0/0
 [/SIDE_DATA]
 [/STREAM]
diff --git a/tests/ref/fate/mov-spherical-mono b/tests/ref/fate/mov-spherical-mono
index b108596350..87f10cd879 100644
--- a/tests/ref/fate/mov-spherical-mono
+++ b/tests/ref/fate/mov-spherical-mono
@@ -5,9 +5,9 @@ type=2D
 inverted=0
 view=packed
 primary_eye=none
-baseline=0
+baseline=0/0
 horizontal_disparity_adjustment=0/1
-horizontal_field_of_view=0
+horizontal_field_of_view=0/0
 [/SIDE_DATA]
 [SIDE_DATA]
 side_data_type=Spherical Mapping
-- 
2.45.1.288.g0e0cd299f1
_______________________________________________
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".

             reply	other threads:[~2024-06-22 20:11 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-22 20:11 Lynne via ffmpeg-devel [this message]
2024-06-22 20:19 ` James Almer
2024-06-22 21:26   ` Lynne via ffmpeg-devel
2024-06-22 21:30     ` James Almer
2024-06-22 22:07       ` Lynne via ffmpeg-devel
2024-06-23 11:05 ` Derek Buitenhuis
2024-06-23 12:03   ` Derek Buitenhuis
2024-06-23 14:23   ` Lynne via ffmpeg-devel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240622201116.403924-1-dev@lynne.ee \
    --to=ffmpeg-devel@ffmpeg.org \
    --cc=dev@lynne.ee \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
		ffmpegdev@gitmailbox.com
	public-inbox-index ffmpegdev

Example config snippet for mirrors.


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git