Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
From: Steven Liu <lingjiujianke@gmail.com>
To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org>
Cc: Wang Yaqiang <wangyaqiang03@kuaishou.com>, 1445440736@qq.com
Subject: Re: [FFmpeg-devel] [PATCH] fftools/ffplay: fix rotation incorrect when frame contains the side_data(type is AV_FRAME_DATA_DISPLAYMATRIX)
Date: Thu, 1 Sep 2022 09:24:50 +0800
Message-ID: <CADxeRwnx4qgnUUD-ckHv95O=KL0EfPi=jbhaS8gWRJG3X_B+4A@mail.gmail.com> (raw)
In-Reply-To: <CADxeRw=1a+tqg5Royn1n_yaNOG3v1JE-MDCoMCwtS7ACOxJ++w@mail.gmail.com>

Steven Liu <lingjiujianke@gmail.com> 于2022年9月1日周四 09:17写道:
>
> Zhao Zhili <quinkblack@foxmail.com> 于2022年9月1日周四 00:34写道:
> >
> >
> >
> > > -----Original Message-----
> > > From: ffmpeg-devel-bounces@ffmpeg.org <ffmpeg-devel-bounces@ffmpeg.org> On Behalf Of 1035567130@qq.com
> > > Sent: 2022年8月31日 18:45
> > > To: ffmpeg-devel@ffmpeg.org
> > > Cc: Wang Yaqiang <wangyaqiang03@kuaishou.com>; 1445440736@qq.com
> > > Subject: [FFmpeg-devel] [PATCH] fftools/ffplay: fix rotation incorrect when frame contains the side_data(type is
> > > AV_FRAME_DATA_DISPLAYMATRIX)
> > >
> > > 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
> >
> > When both per-stream and per-frame DISPLAYMATRIX exist, we need to decode how they work
> > together. Does one applied after the other, or one override the other? I have no idea.
> I think we should "Does one applied after the other", do frame rotate
> adter stream rotate, because user maybe not need every frames rotate.
BTW,  we get jpeg picture need rotate by exif, but there have no
rotate data in stream,
the other sample we get there have rotate in stream only.
have not get rotate data in one time both stream and frames by one sample yet,
So we think it should do twice rotate operation in ffplay. because it
have no problem in ffmpeg, so we only modify ffplay.
>
> >
> > Secondly, even If one is applied after the other, we shouldn't use two rotation filter
> > but merge the operation into a single one.
> Agreed, should merge two rotate value into. one value.
> >
> > > ---
> > >  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".
> >
> > _______________________________________________
> > 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".
_______________________________________________
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".

  reply	other threads:[~2022-09-01  1:25 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-31 10:45 1035567130
2022-08-31 16:34 ` Zhao Zhili
2022-09-01  1:17   ` Steven Liu
2022-09-01  1:24     ` Steven Liu [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CADxeRwnx4qgnUUD-ckHv95O=KL0EfPi=jbhaS8gWRJG3X_B+4A@mail.gmail.com' \
    --to=lingjiujianke@gmail.com \
    --cc=1445440736@qq.com \
    --cc=ffmpeg-devel@ffmpeg.org \
    --cc=wangyaqiang03@kuaishou.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

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