diff mbox series

[FFmpeg-devel,v2] lavu/stereo3d: change the horizontal FOV field to a rational

Message ID 20240623141508.908804-1-dev@lynne.ee
State New
Headers show
Series [FFmpeg-devel,v2] lavu/stereo3d: change the horizontal FOV field to a rational | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 fail Make fate failed
andriy/make_x86 success Make finished
andriy/make_fate_x86 fail Make fate failed

Commit Message

Lynne June 23, 2024, 2:14 p.m. UTC
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 API was committed 2 days ago, so changing this field now
is within the realms of acceptable.
---
 fftools/ffprobe.c                            | 2 +-
 libavformat/dump.c                           | 5 +++--
 libavformat/mov.c                            | 3 ++-
 libavutil/stereo3d.c                         | 1 +
 libavutil/stereo3d.h                         | 4 ++--
 tests/ref/fate/matroska-spherical-mono       | 2 +-
 tests/ref/fate/matroska-spherical-mono-remux | 4 ++--
 tests/ref/fate/matroska-stereo_mode          | 8 ++++----
 tests/ref/fate/matroska-vp8-alpha-remux      | 2 +-
 tests/ref/fate/mov-spherical-mono            | 2 +-
 10 files changed, 18 insertions(+), 15 deletions(-)

Comments

James Almer June 24, 2024, 12:13 a.m. UTC | #1
On 6/23/2024 11:14 AM, Lynne via ffmpeg-devel wrote:
> 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 API was committed 2 days ago, so changing this field now
> is within the realms of acceptable.

Five days, soon to be six.

[...]

> diff --git a/tests/ref/fate/matroska-spherical-mono b/tests/ref/fate/matroska-spherical-mono
> index b108596350..8b011e332f 100644
> --- a/tests/ref/fate/matroska-spherical-mono
> +++ b/tests/ref/fate/matroska-spherical-mono
> @@ -7,7 +7,7 @@ view=packed
>   primary_eye=none
>   baseline=0
>   horizontal_disparity_adjustment=0/1
> -horizontal_field_of_view=0
> +horizontal_field_of_view=0/0

Re-run fate. This and many other tests are not correct.

If Derek is also ok with this then LGTM.
Derek Buitenhuis June 24, 2024, 3:51 p.m. UTC | #2
On 6/24/2024 1:13 AM, James Almer wrote:
> If Derek is also ok with this then LGTM.

I do not object.

- Derek
Lynne June 24, 2024, 9:54 p.m. UTC | #3
On 24/06/2024 17:51, Derek Buitenhuis wrote:
> On 6/24/2024 1:13 AM, James Almer wrote:
>> If Derek is also ok with this then LGTM.
> 
> I do not object.
> 
> - Derek
> _______________________________________________
> 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".

Thanks for the reviews.
Pushed with the requested changes.
diff mbox series

Patch

diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index d7ba980ff9..b69a75ff9a 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -2548,7 +2548,7 @@  static void print_pkt_side_data(WriterContext *w,
             print_str("primary_eye", av_stereo3d_primary_eye_name(stereo->primary_eye));
             print_int("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..b71b5356dc 100644
--- a/libavformat/dump.c
+++ b/libavformat/dump.c
@@ -267,8 +267,9 @@  static void dump_stereo3d(void *ctx, const AVPacketSideData *sd, int log_level)
     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..fe8a963c6e 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -6782,7 +6782,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.c b/libavutil/stereo3d.c
index 19e81e4124..ad6064e5d9 100644
--- a/libavutil/stereo3d.c
+++ b/libavutil/stereo3d.c
@@ -29,6 +29,7 @@ 
 static void get_defaults(AVStereo3D *stereo)
 {
     stereo->horizontal_disparity_adjustment = (AVRational) { 0, 1 };
+    stereo->horizontal_field_of_view = (AVRational) { 0, 1 };
 }
 
 AVStereo3D *av_stereo3d_alloc(void)
diff --git a/libavutil/stereo3d.h b/libavutil/stereo3d.h
index 00a5c3900e..d8b191118c 100644
--- a/libavutil/stereo3d.h
+++ b/libavutil/stereo3d.h
@@ -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..8b011e332f 100644
--- a/tests/ref/fate/matroska-spherical-mono
+++ b/tests/ref/fate/matroska-spherical-mono
@@ -7,7 +7,7 @@  view=packed
 primary_eye=none
 baseline=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..31dbf6cdd8 100644
--- a/tests/ref/fate/matroska-spherical-mono-remux
+++ b/tests/ref/fate/matroska-spherical-mono-remux
@@ -31,7 +31,7 @@  view=packed
 primary_eye=none
 baseline=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
@@ -60,7 +60,7 @@  view=packed
 primary_eye=none
 baseline=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..656a712e89 100644
--- a/tests/ref/fate/matroska-stereo_mode
+++ b/tests/ref/fate/matroska-stereo_mode
@@ -136,7 +136,7 @@  view=packed
 primary_eye=none
 baseline=0
 horizontal_disparity_adjustment=0/1
-horizontal_field_of_view=0
+horizontal_field_of_view=0/0
 [/SIDE_DATA]
 [/STREAM]
 [STREAM]
@@ -156,7 +156,7 @@  view=packed
 primary_eye=none
 baseline=0
 horizontal_disparity_adjustment=0/1
-horizontal_field_of_view=0
+horizontal_field_of_view=0/0
 [/SIDE_DATA]
 [/STREAM]
 [STREAM]
@@ -174,7 +174,7 @@  view=packed
 primary_eye=none
 baseline=0
 horizontal_disparity_adjustment=0/1
-horizontal_field_of_view=0
+horizontal_field_of_view=0/0
 [/SIDE_DATA]
 [/STREAM]
 [STREAM]
@@ -193,7 +193,7 @@  view=packed
 primary_eye=none
 baseline=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..bfc25fea7a 100644
--- a/tests/ref/fate/matroska-vp8-alpha-remux
+++ b/tests/ref/fate/matroska-vp8-alpha-remux
@@ -39,6 +39,6 @@  view=packed
 primary_eye=none
 baseline=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..065b109a41 100644
--- a/tests/ref/fate/mov-spherical-mono
+++ b/tests/ref/fate/mov-spherical-mono
@@ -7,7 +7,7 @@  view=packed
 primary_eye=none
 baseline=0
 horizontal_disparity_adjustment=0/1
-horizontal_field_of_view=0
+horizontal_field_of_view=0/1
 [/SIDE_DATA]
 [SIDE_DATA]
 side_data_type=Spherical Mapping