[FFmpeg-devel] [PATCH v3] fftools/ffplay: fix rotation incorrect when frame contains the displaymatrix
Steven Liu
lingjiujianke at gmail.com
Thu Sep 15 11:59:15 EEST 2022
Zhao Zhili <quinkblack at foxmail.com> 于2022年9月6日周二 14:38写道:
>
> 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.
Applied!
Thanks
Steven
More information about the ffmpeg-devel
mailing list