[FFmpeg-cvslog] fftools/ffplay: fix rotation incorrect when frame contains the displaymatrix
Wang Yaqiang
git at videolan.org
Thu Sep 15 11:16:25 EEST 2022
ffmpeg | branch: master | Wang Yaqiang <wangyaqiang03 at kuaishou.com> | Mon Sep 5 18:40:36 2022 +0800| [3f0fac9303b430c5114da62f9a63ed0b945b435f] | committer: Steven Liu
fftools/ffplay: fix rotation incorrect when frame contains the displaymatrix
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
Reviewed-by: Zhao Zhili <zhilizhao at tencent.com>
Signed-off-by: Wang Yaqiang <wangyaqiang03 at kuaishou.com>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=3f0fac9303b430c5114da62f9a63ed0b945b435f
---
fftools/ffplay.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/fftools/ffplay.c b/fftools/ffplay.c
index 9242047f5c..bcc00afe31 100644
--- a/fftools/ffplay.c
+++ b/fftools/ffplay.c
@@ -1915,8 +1915,14 @@ static int configure_video_filters(AVFilterGraph *graph, VideoState *is, const c
} while (0)
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);
+ double theta = 0.0;
+ int32_t *displaymatrix = NULL;
+ AVFrameSideData *sd = av_frame_get_side_data(frame, AV_FRAME_DATA_DISPLAYMATRIX);
+ if (sd)
+ displaymatrix = (int32_t *)sd->data;
+ if (!displaymatrix)
+ displaymatrix = (int32_t *)av_stream_get_side_data(is->video_st, AV_PKT_DATA_DISPLAYMATRIX, NULL);
+ theta = get_rotation(displaymatrix);
if (fabs(theta - 90) < 1.0) {
INSERT_FILT("transpose", "clock");
More information about the ffmpeg-cvslog
mailing list