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.
This commit is contained in:
Lynne 2024-06-23 15:58:28 +02:00
parent 0d748eec8d
commit dae12ddb2e
No known key found for this signature in database
GPG Key ID: A2FEA5F03F034464
10 changed files with 18 additions and 15 deletions

View File

@ -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));

View File

@ -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)");

View File

@ -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;
}

View File

@ -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)

View File

@ -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;
/**

View File

@ -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

View File

@ -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

View File

@ -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]

View File

@ -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]

View File

@ -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