From: Lynne via ffmpeg-devel <ffmpeg-devel@ffmpeg.org> To: ffmpeg-devel@ffmpeg.org Cc: Lynne <dev@lynne.ee> Subject: Re: [FFmpeg-devel] [PATCH] lavu/stereo3d: change baseline and horizontal FOV to rationals Date: Sat, 22 Jun 2024 23:26:48 +0200 Message-ID: <663e290b-fda1-4903-8625-a6600078b636@lynne.ee> (raw) In-Reply-To: <279f38ed-f2ce-4fe0-98f4-09495dd97bb3@gmail.com> [-- Attachment #1.1.1.1: Type: text/plain, Size: 7737 bytes --] On 22/06/2024 22:19, James Almer wrote: > On 6/22/2024 5:11 PM, 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 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; > > This is not ok. No reason for distance be a soft float, or allow > negative values. In the case of the blin box, it's a 32bit unsigned > value, which will not fit in AVRational. Added an (int32_t) cast locally. This is also how horizontal_disparity_adjustment is handled, with a uint32_t converted into a rational. > > You can easily convert this in your code by using a 1000000 denominator > if you wish. > >> /** >> * 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; > > This one i can't say. Would for example Matroska implement degrees as a > float, or uint? Likely a float (EBML_FLOAT). This is how mastering metadata and video projection are handled. [-- Attachment #1.1.1.2: OpenPGP public key --] [-- Type: application/pgp-keys, Size: 637 bytes --] [-- Attachment #1.2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 236 bytes --] [-- Attachment #2: Type: text/plain, Size: 251 bytes --] _______________________________________________ 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".
next prev parent reply other threads:[~2024-06-22 21:26 UTC|newest] Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-06-22 20:11 Lynne via ffmpeg-devel 2024-06-22 20:19 ` James Almer 2024-06-22 21:26 ` Lynne via ffmpeg-devel [this message] 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=663e290b-fda1-4903-8625-a6600078b636@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