Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH] fftools/ffplay: fix rotation incorrect when frame contains the side_data(type is AV_FRAME_DATA_DISPLAYMATRIX)
@ 2022-08-31 10:45 1035567130
  2022-08-31 16:34 ` Zhao Zhili
  2022-09-01  4:53 ` [FFmpeg-devel] [PATCH v2] fftools/ffplay: fix rotation incorrect when frame contains the displaymatrix 1035567130
  0 siblings, 2 replies; 12+ messages in thread
From: 1035567130 @ 2022-08-31 10:45 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Wang Yaqiang, 1445440736

From: Wang Yaqiang <wangyaqiang03@kuaishou.com>

For example, if the jpeg contains exif information and the rotation direction is included in the exif,
the displaymatrix will be set on the side_data of the frame when decoding.
However, when ffplay is used to play the image, only the side data in the stream will be determined.
It does not check whether the frame also contains rotation information, causing it to play in the wrong direction
---
 fftools/ffplay.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/fftools/ffplay.c b/fftools/ffplay.c
index 9242047f5c..868123dc65 100644
--- a/fftools/ffplay.c
+++ b/fftools/ffplay.c
@@ -1917,7 +1917,8 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
     if (autorotate) {
         int32_t *displaymatrix = (int32_t *)av_stream_get_side_data(is->video_st, AV_PKT_DATA_DISPLAYMATRIX, NULL);
         double theta = get_rotation(displaymatrix);
-
+        int frame_rotation_checked = 0;
+    rotation:
         if (fabs(theta - 90) < 1.0) {
             INSERT_FILT("transpose", "clock");
         } else if (fabs(theta - 180) < 1.0) {
@@ -1930,6 +1931,15 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
             snprintf(rotate_buf, sizeof(rotate_buf), "%f*PI/180", theta);
             INSERT_FILT("rotate", rotate_buf);
         }
+        if (!frame_rotation_checked) {
+            frame_rotation_checked = 1;
+            AVFrameSideData *sd = av_frame_get_side_data(frame,AV_FRAME_DATA_DISPLAYMATRIX);
+            if (sd) {
+                displaymatrix = (int32_t *)sd->data;
+                theta = get_rotation(displaymatrix);
+                goto rotation;
+            }
+        }
     }
 
     if ((ret = configure_filtergraph(graph, vfilters, filt_src, last_filter)) < 0)
-- 
2.33.0

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2022-09-15  8:59 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-31 10:45 [FFmpeg-devel] [PATCH] fftools/ffplay: fix rotation incorrect when frame contains the side_data(type is AV_FRAME_DATA_DISPLAYMATRIX) 1035567130
2022-08-31 16:34 ` Zhao Zhili
2022-09-01  1:17   ` Steven Liu
2022-09-01  1:24     ` Steven Liu
2022-09-01  3:59       ` wangyaqiang
2022-09-01  4:04       ` wangyaqiang
2022-09-01  4:29         ` Steven Liu
2022-09-01  4:53 ` [FFmpeg-devel] [PATCH v2] fftools/ffplay: fix rotation incorrect when frame contains the displaymatrix 1035567130
2022-09-01  6:50   ` "zhilizhao(赵志立)"
2022-09-05 10:40   ` [FFmpeg-devel] [PATCH v3] " 1035567130
2022-09-06  6:38     ` Zhao Zhili
2022-09-15  8:59       ` Steven Liu

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