aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLynne <dev@lynne.ee>2024-06-23 15:58:28 +0200
committerLynne <dev@lynne.ee>2024-06-24 23:53:25 +0200
commitdae12ddb2e5d4ec8cf5a965f4ac793edfa3802d6 (patch)
tree4161d26f1fdb57c9184fe469841ef0d12f99ebc9
parent0d748eec8d52715f2949bd03519d39f2bf5baac4 (diff)
downloadffmpeg-dae12ddb2e5d4ec8cf5a965f4ac793edfa3802d6.tar.gz
lavu/stereo3d: change the horizontal FOV field to a rational
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 a few days ago, so changing this field now is within the realms of acceptable.
-rw-r--r--fftools/ffprobe.c2
-rw-r--r--libavformat/dump.c5
-rw-r--r--libavformat/mov.c3
-rw-r--r--libavutil/stereo3d.c1
-rw-r--r--libavutil/stereo3d.h4
-rw-r--r--tests/ref/fate/matroska-spherical-mono2
-rw-r--r--tests/ref/fate/matroska-spherical-mono-remux4
-rw-r--r--tests/ref/fate/matroska-stereo_mode8
-rw-r--r--tests/ref/fate/matroska-vp8-alpha-remux2
-rw-r--r--tests/ref/fate/mov-spherical-mono2
10 files changed, 18 insertions, 15 deletions
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..065b109a41 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/1
[/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..3ee7fd2d1c 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/1
[/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/1
[/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..3382a60f57 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/1
[/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/1
[/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/1
[/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/1
[/SIDE_DATA]
[/STREAM]
[STREAM]
diff --git a/tests/ref/fate/matroska-vp8-alpha-remux b/tests/ref/fate/matroska-vp8-alpha-remux
index 06bcc4b4ba..6d2c18363d 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/1
[/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