[FFmpeg-devel] [PATCH 2/3] avcodec/rv60: RealVideo 6.0 decoder
Peter Ross
pross at xvid.org
Sun Oct 22 02:31:32 EEST 2023
On Wed, Oct 18, 2023 at 04:42:01PM +0200, Anton Khirnov wrote:
> Quoting Peter Ross (2023-10-18 10:03:54)
[..]
> I think you can simplify this into:
> if (s->last_frame[NEXT_PIC]->data[0]) {
> av_frame_move_ref(frame, s->last_frame[NEXT_PIC]);
> *got_frame = 1;
> }
[..]
> You just unreffed the frame above, what is the point of using
> reget_buffer()?
[..]
> The generic code should be doing this already.
[..]
> You could change this into av_frame_move_ref() and drop the unref below.
many thanks anton for these suggestions. i agree with all of them.
> > + if (s->pict_type != AV_PICTURE_TYPE_B) {
> > + s->ref_pts[0] = s->ref_pts[1];
> > + s->ref_pts[1] = avpkt->pts;
> > +
> > + s->ref_ts[0] = s->ref_ts[1];
> > + s->ref_ts[1] = s->ts;
> > +
> > + if (s->ref_pts[1] > s->ref_pts[0] && s->ref_ts[1] > s->ref_ts[0])
> > + s->ts_scale = (s->ref_pts[1] - s->ref_pts[0]) / (s->ref_ts[1] - s->ref_ts[0]);
> > + } else {
> > + frame->pts = s->ref_pts[0] + (s->ts - s->ref_ts[0]) * s->ts_scale;
>
> This looks immensely evil. Isn't ff_get_buffer() already setting the
> timestamps correctly?
no ff_reget_buffer() does not set pts correctly.
the ref_ts ('s->ts') value is sent with every rv60 in the header, and is
used to calculate the pts value. unsure how to make this less evil.
cheers,
-- Peter
(A907 E02F A6E5 0CD2 34CD 20D2 6760 79C5 AC40 DD6B)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20231022/24fd94b7/attachment.sig>
More information about the ffmpeg-devel
mailing list