From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> To: ffmpeg-devel@ffmpeg.org Subject: Re: [FFmpeg-devel] [PATCH v4 4/6] lavu/display: Add horizontal and vertical scaling to the display matrix Date: Mon, 19 Sep 2022 15:37:39 +0200 Message-ID: <AS8P250MB07449EF83DC76627CE857FC08F4D9@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM> (raw) In-Reply-To: <20220919094604.4645-5-thilo.borgmann@mail.de> Thilo Borgmann: > --- > doc/APIchanges | 3 +++ > libavutil/display.c | 35 +++++++++++++++++++++++++++++++++++ > libavutil/display.h | 26 ++++++++++++++++++++++++++ > libavutil/version.h | 2 +- > 4 files changed, 65 insertions(+), 1 deletion(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index e4b2fc8799..9dc393d999 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -14,6 +14,9 @@ libavutil: 2021-04-27 > > API changes, most recent first: > > +2022-09-19 - xxxxxxxxxx - lavu 57.38.100 - display.h > + Add av_display_matrix_scale(), av_display_{h,v}scale_get() > + > 2022-09-19 - xxxxxxxxxx - lavu 57.37.100 - opt.h > Add AV_OPT_FLAG_ARGUMENT. > Add av_arg_show() to print arguments to options. > diff --git a/libavutil/display.c b/libavutil/display.c > index d31061283c..434ed50104 100644 > --- a/libavutil/display.c > +++ b/libavutil/display.c > @@ -48,6 +48,30 @@ double av_display_rotation_get(const int32_t matrix[9]) > return -rotation; > } > > +double av_display_hscale_get(const int32_t matrix[9]) > +{ > + double scale; > + > + scale = hypot(CONV_FP(matrix[0]), CONV_FP(matrix[1])); > + > + if (scale == 0.0) > + return NAN; > + > + return scale; > +} > + > +double av_display_vscale_get(const int32_t matrix[9]) > +{ > + double scale; > + > + scale = hypot(CONV_FP(matrix[3]), CONV_FP(matrix[4])); > + > + if (scale == 0.0) > + return NAN; > + > + return scale; > +} Did I not already tell you that an arbitrary displaymatrix doesn't have well-defined horizontal and vertical scaling factors? Apart from that, the formulae are wrong even for the case where it has one, because you forgot the scaling given by what is called z in display.h. (Apart from that, these functions do not return the horizontal/vertical scaling factors; they return the length of the image of the horizontal/vertical unit vector under the transformation, but these vectors need not (and in general: will not) point into the horizontal/vertical direction at all; the return value is therefore not the "hor/ver scaling by which the transformation matrix scales the frame in the hor/ver direction", although the documentation claims that. The reason for this is of course that an arbitrary matrix doesn't have well-defined scaling factors.) > + > void av_display_rotation_set(int32_t matrix[9], double angle) > { > double radians = -angle * M_PI / 180.0f; > @@ -72,3 +96,14 @@ void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip) > for (i = 0; i < 9; i++) > matrix[i] *= flip[i % 3]; > } > + > +void av_display_matrix_scale(int32_t matrix[9], double hscale, double vscale) > +{ > + // hscale > + matrix[0] = CONV_DB(CONV_FP(matrix[0]) * hscale); > + matrix[1] = CONV_DB(CONV_FP(matrix[1]) * hscale); > + > + // vscale > + matrix[3] = CONV_DB(CONV_FP(matrix[3]) * vscale); > + matrix[4] = CONV_DB(CONV_FP(matrix[4]) * vscale); > +} > diff --git a/libavutil/display.h b/libavutil/display.h > index 31d8bef361..ef507eb521 100644 > --- a/libavutil/display.h > +++ b/libavutil/display.h > @@ -86,6 +86,24 @@ > */ > double av_display_rotation_get(const int32_t matrix[9]); > > +/** > + * Extract the horizontal scaling component of the transformation matrix. > + * > + * @param matrix the transformation matrix > + * @return the horizontal scaling by which the transformation matrix scales the frame > + * in the horizontal direction. > + */ > +double av_display_hscale_get(const int32_t matrix[9]); > + > +/** > + * Extract the vertical scaling component of the transformation matrix. > + * > + * @param matrix the transformation matrix > + * @return the vertical scaling by which the transformation matrix scales the frame > + * in the vertical direction. > + */ > +double av_display_vscale_get(const int32_t matrix[9]); > + > /** > * Initialize a transformation matrix describing a pure clockwise > * rotation by the specified angle (in degrees). > @@ -105,6 +123,14 @@ void av_display_rotation_set(int32_t matrix[9], double angle); > */ > void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip); > > +/** > + * Scale the input matrix horizontally and/or vertically. > + * > + * @param matrix an allocated transformation matrix > + * @param hscale scale factor by which the matrix should be scaled horizontally > + * @param vscale scale factor by which the matrix should be scaled vertically > + */ > +void av_display_matrix_scale(int32_t matrix[9], double hscale, double vscale); > /** > * @} > * @} > diff --git a/libavutil/version.h b/libavutil/version.h > index 9c44cef6aa..5aca550f45 100644 > --- a/libavutil/version.h > +++ b/libavutil/version.h > @@ -79,7 +79,7 @@ > */ > > #define LIBAVUTIL_VERSION_MAJOR 57 > -#define LIBAVUTIL_VERSION_MINOR 37 > +#define LIBAVUTIL_VERSION_MINOR 38 > #define LIBAVUTIL_VERSION_MICRO 100 > > #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ _______________________________________________ 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:[~2022-09-19 13:37 UTC|newest] Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-09-19 9:45 [FFmpeg-devel] [PATCH v4 0/6] Add display_matrix option Thilo Borgmann 2022-09-19 9:45 ` [FFmpeg-devel] [PATCH v4 1/6] lavu/opt: Allow options to be arguments of other options Thilo Borgmann 2022-09-19 9:46 ` [FFmpeg-devel] [PATCH v4 2/6] fftools/cmdutils: Print arguments of options Thilo Borgmann 2022-09-19 9:46 ` [FFmpeg-devel] [PATCH v4 3/6] fftools: Add support for dictionary options Thilo Borgmann 2022-09-19 9:46 ` [FFmpeg-devel] [PATCH v4 4/6] lavu/display: Add horizontal and vertical scaling to the display matrix Thilo Borgmann 2022-09-19 13:37 ` Andreas Rheinhardt [this message] 2022-09-19 9:46 ` [FFmpeg-devel] [PATCH v4 5/6] ffmpeg: Add display_matrix option Thilo Borgmann 2022-09-19 9:46 ` [FFmpeg-devel] [PATCH v4 6/6] ffmpeg: Deprecate display rotation override with a metadata key Thilo Borgmann 2022-09-20 8:36 ` [FFmpeg-devel] [PATCH v4 0/6] Add display_matrix option Anton Khirnov 2022-09-20 9:05 ` Nicolas George 2022-09-20 9:23 ` Anton Khirnov
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=AS8P250MB07449EF83DC76627CE857FC08F4D9@AS8P250MB0744.EURP250.PROD.OUTLOOK.COM \ --to=andreas.rheinhardt@outlook.com \ --cc=ffmpeg-devel@ffmpeg.org \ /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