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)
signature.asc
Description: PGP signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".