[FFmpeg-devel] [PATCH v3] fftools/ffplay: fix rotation incorrect when frame contains the displaymatrix
Zhao Zhili
quinkblack at foxmail.com
Tue Sep 6 09:38:17 EEST 2022
On Mon, 2022-09-05 at 18:40 +0800, 1035567130 at qq.com wrote:
> From: Wang Yaqiang <wangyaqiang03 at 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
>
> Signed-off-by: Wang Yaqiang <wangyaqiang03 at kuaishou.com>
> ---
> 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");
LGTM.
More information about the ffmpeg-devel
mailing list