On 3/9/23 04:49, 1035567...@qq.com wrote:
From: Wang Yaqiang <wangyaqian...@kuaishou.com>
The angle is calculated by the get_rotation function,
but it needs to be combined with the displaymatrix to determine whether flip or
rotate,
which is consistent with the processing logic in ffmpeg_filter.c
Signed-off-by: Wang Yaqiang <wangyaqian...@kuaishou.com>
---
fftools/ffplay.c | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/fftools/ffplay.c b/fftools/ffplay.c
index d6479aef5f..860bac367a 100644
--- a/fftools/ffplay.c
+++ b/fftools/ffplay.c
@@ -1925,16 +1925,24 @@ static int configure_video_filters(AVFilterGraph
*graph, VideoState *is, const c
theta = get_rotation(displaymatrix);
if (fabs(theta - 90) < 1.0) {
- INSERT_FILT("transpose", "clock");
+ INSERT_FILT("transpose", displaymatrix[3] > 0 ? "cclock_flip" :
"clock");
} else if (fabs(theta - 180) < 1.0) {
- INSERT_FILT("hflip", NULL);
- INSERT_FILT("vflip", NULL);
+ if (displaymatrix[0] < 0) {
+ INSERT_FILT("hflip", NULL);
+ }
+ if (displaymatrix[4] < 0) {
+ INSERT_FILT("vflip", NULL);
+ }
Minor code style point, we don't use {} if there's only one line inside
the braces.
} else if (fabs(theta - 270) < 1.0) {
- INSERT_FILT("transpose", "cclock");
+ INSERT_FILT("transpose", displaymatrix[3] < 0 ? "clock_flip" :
"cclock");
} else if (fabs(theta) > 1.0) {
char rotate_buf[64];
snprintf(rotate_buf, sizeof(rotate_buf), "%f*PI/180", theta);
INSERT_FILT("rotate", rotate_buf);
+ } else if (fabs(theta) < 1.0) {
+ if (displaymatrix && displaymatrix[4] < 0) { > +
INSERT_FILT("vflip", NULL);
+ }
}
}
Otherwise looks mathematically sound.
- Leo Izen (thebombzen)
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".