diff mbox series

[FFmpeg-devel,18/18] lavf/dv: do not continuously set stream timebase

Message ID 20220824084318.333-18-anton@khirnov.net
State New
Headers show
Series [FFmpeg-devel,01/18] tests/fate/mov: add a test for dv audio demuxed through dv demuxer | expand

Checks

Context Check Description
yinshiyou/make_loongarch64 success Make finished
yinshiyou/make_fate_loongarch64 fail Make fate failed
andriy/make_x86 success Make finished
andriy/make_fate_x86 fail Make fate failed

Commit Message

Anton Khirnov Aug. 24, 2022, 8:43 a.m. UTC
The code will call avpriv_set_pts_info() for each video frame, possibly
setting a different timebase if the stream framerate changes. This
violates API conventions, as the timebase is supposed to stay constant
after stream creation.

Change the demuxer to set a single timebase that is granular enough to
handle all supported DV framerates.

The seek tests change slightly because the new timebase is more
granular.
---
 libavformat/dv.c                  | 16 ++++++++++++----
 tests/ref/seek/lavf-dv            | 30 +++++++++++++++---------------
 tests/ref/seek/vsynth_lena-dv     | 24 ++++++++++++------------
 tests/ref/seek/vsynth_lena-dv-411 | 24 ++++++++++++------------
 tests/ref/seek/vsynth_lena-dv-50  | 24 ++++++++++++------------
 5 files changed, 63 insertions(+), 55 deletions(-)

Comments

Andreas Rheinhardt Aug. 24, 2022, 2:42 p.m. UTC | #1
Anton Khirnov:
> The code will call avpriv_set_pts_info() for each video frame, possibly
> setting a different timebase if the stream framerate changes. This
> violates API conventions, as the timebase is supposed to stay constant
> after stream creation.
> 
> Change the demuxer to set a single timebase that is granular enough to
> handle all supported DV framerates.
> 
> The seek tests change slightly because the new timebase is more
> granular.
> ---
>  libavformat/dv.c                  | 16 ++++++++++++----
>  tests/ref/seek/lavf-dv            | 30 +++++++++++++++---------------
>  tests/ref/seek/vsynth_lena-dv     | 24 ++++++++++++------------
>  tests/ref/seek/vsynth_lena-dv-411 | 24 ++++++++++++------------
>  tests/ref/seek/vsynth_lena-dv-50  | 24 ++++++++++++------------
>  5 files changed, 63 insertions(+), 55 deletions(-)
> 
> diff --git a/libavformat/dv.c b/libavformat/dv.c
> index ffed1a7a90..e2f7a6d313 100644
> --- a/libavformat/dv.c
> +++ b/libavformat/dv.c
> @@ -69,6 +69,8 @@ struct DVDemuxContext {
>      uint8_t           audio_buf[4][8192];
>      int               ach;
>      int               frames;
> +
> +    int64_t           next_pts;
>  };
>  
>  static inline uint16_t dv_audio_12to16(uint16_t sample)
> @@ -314,8 +316,6 @@ static int dv_extract_video_info(DVDemuxContext *c, const uint8_t *frame)
>  
>      par = c->vst->codecpar;
>  
> -    avpriv_set_pts_info(c->vst, 64, c->sys->time_base.num,
> -                        c->sys->time_base.den);
>      c->vst->avg_frame_rate = av_inv_q(c->vst->time_base);

This will now set the avg_frame_rate to 60000fps. Obviously wrong.
Anyway, this field should probably not be set for every frame.

>  
>      /* finding out SAR is a little bit messy */
> @@ -360,6 +360,8 @@ static int dv_init_demux(AVFormatContext *s, DVDemuxContext *c)
>      c->vst->codecpar->bit_rate   = 25000000;
>      c->vst->start_time        = 0;
>  
> +    avpriv_set_pts_info(c->vst, 64, 1, 60000);
> +
>      /* Audio streams are added later as they are encountered. */
>      s->ctx_flags |= AVFMTCTX_NOHEADER;
>  
> @@ -463,7 +465,10 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
>          pkt->size         = size;
>          pkt->flags       |= AV_PKT_FLAG_KEY;
>          pkt->stream_index = c->vst->index;
> -        pkt->pts          = c->frames;
> +        pkt->pts          = c->next_pts;
> +        pkt->duration     = av_rescale_q(1, c->sys->time_base, c->vst->time_base);
> +
> +        c->next_pts += pkt->duration;
>      }
>  
>      c->frames++;
> @@ -477,11 +482,12 @@ static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c,
>      // FIXME: sys may be wrong if last dv_read_packet() failed (buffer is junk)
>      FFFormatContext *const si = ffformatcontext(s);
>      const int frame_size = c->sys->frame_size;
> +    int64_t  frame_count = av_rescale_q(timestamp, c->vst->time_base, c->sys->time_base);
>      int64_t offset;
>      int64_t size       = avio_size(s->pb) - si->data_offset;
>      int64_t max_offset = ((size - 1) / frame_size) * frame_size;
>  
> -    offset = frame_size * timestamp;
> +    offset = frame_size * frame_count;
>  
>      if (size >= 0 && offset > max_offset)
>          offset = max_offset;
> @@ -494,6 +500,8 @@ static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c,
>  void ff_dv_offset_reset(DVDemuxContext *c, int64_t frame_offset)
>  {
>      c->frames = frame_offset;
> +    if (c->sys)
> +        c->next_pts = av_rescale_q(frame_offset, c->sys->time_base, c->vst->time_base);
>      c->audio_pkt[0].size = c->audio_pkt[1].size = 0;
>      c->audio_pkt[2].size = c->audio_pkt[3].size = 0;
>  }
> diff --git a/tests/ref/seek/lavf-dv b/tests/ref/seek/lavf-dv
> index f63e4460be..356f05546b 100644
> --- a/tests/ref/seek/lavf-dv
> +++ b/tests/ref/seek/lavf-dv
> @@ -3,50 +3,50 @@ ret: 0         st:-1 flags:0  ts:-1.000000
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:1  ts: 1.894167
>  ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.800000
> +ret: 0         st: 0 flags:0  ts: 0.788333
>  ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.320000
> +ret: 0         st: 0 flags:1  ts:-0.317500
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st: 1 flags:0  ts: 2.560000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000

This is IMO more than "slightly".

>  ret: 0         st: 1 flags:1  ts: 1.480000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:0  ts: 0.365002
>  ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
>  ret: 0         st:-1 flags:1  ts:-0.740831
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:0  ts: 2.160000
> +ret: 0         st: 0 flags:0  ts: 2.153333
>  ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> -ret: 0         st: 0 flags:1  ts: 1.040000
> +ret: 0         st: 0 flags:1  ts: 1.047500
>  ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
>  ret: 0         st: 1 flags:0  ts:-0.040000
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st: 1 flags:1  ts: 2.840000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:0  ts: 1.730004
>  ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
>  ret: 0         st:-1 flags:1  ts: 0.624171
>  ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.480000
> +ret: 0         st: 0 flags:0  ts:-0.481667
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.400000
> +ret: 0         st: 0 flags:1  ts: 2.412500
>  ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
>  ret: 0         st: 1 flags:0  ts: 1.320000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st: 1 flags:1  ts: 0.200000
> -ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:0  ts:-0.904994
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:1  ts: 1.989173
>  ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.880000
> +ret: 0         st: 0 flags:0  ts: 0.883333
>  ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.240000
> +ret: 0         st: 0 flags:1  ts:-0.222500
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st: 1 flags:0  ts: 2.680000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st: 1 flags:1  ts: 1.560000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:0  ts: 0.460008
>  ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
>  ret: 0         st:-1 flags:1  ts:-0.645825
> diff --git a/tests/ref/seek/vsynth_lena-dv b/tests/ref/seek/vsynth_lena-dv
> index d318794157..afed1fbe72 100644
> --- a/tests/ref/seek/vsynth_lena-dv
> +++ b/tests/ref/seek/vsynth_lena-dv
> @@ -3,49 +3,49 @@ ret: 0         st:-1 flags:0  ts:-1.000000
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:1  ts: 1.894167
>  ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:6768000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.800000
> +ret: 0         st: 0 flags:0  ts: 0.788333
>  ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.320000
> +ret: 0         st: 0 flags:1  ts:-0.317500
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:0  ts: 2.576668
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:1  ts: 1.470835
>  ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:5328000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.360000
> +ret: 0         st: 0 flags:0  ts: 0.365000
>  ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.760000
> +ret: 0         st: 0 flags:1  ts:-0.740833
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:0  ts: 2.153336
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:1  ts: 1.047503
>  ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:3744000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.040000
> +ret: 0         st: 0 flags:0  ts:-0.058333
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.840000
> +ret: 0         st: 0 flags:1  ts: 2.835833
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:0  ts: 1.730004
>  ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:6192000 size:144000
>  ret: 0         st:-1 flags:1  ts: 0.624171
>  ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.480000
> +ret: 0         st: 0 flags:0  ts:-0.481667
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.400000
> +ret: 0         st: 0 flags:1  ts: 2.412500
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:0  ts: 1.306672
>  ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:4752000 size:144000
>  ret: 0         st:-1 flags:1  ts: 0.200839
>  ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.920000
> +ret: 0         st: 0 flags:0  ts:-0.905000
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.000000
> +ret: 0         st: 0 flags:1  ts: 1.989167
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:0  ts: 0.883340
>  ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
>  ret: 0         st:-1 flags:1  ts:-0.222493
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:0  ts: 2.680000
> +ret: 0         st: 0 flags:0  ts: 2.671667
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> -ret: 0         st: 0 flags:1  ts: 1.560000
> +ret: 0         st: 0 flags:1  ts: 1.565833
>  ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:5616000 size:144000
>  ret: 0         st:-1 flags:0  ts: 0.460008
>  ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
> diff --git a/tests/ref/seek/vsynth_lena-dv-411 b/tests/ref/seek/vsynth_lena-dv-411
> index d318794157..afed1fbe72 100644
> --- a/tests/ref/seek/vsynth_lena-dv-411
> +++ b/tests/ref/seek/vsynth_lena-dv-411
> @@ -3,49 +3,49 @@ ret: 0         st:-1 flags:0  ts:-1.000000
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:1  ts: 1.894167
>  ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:6768000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.800000
> +ret: 0         st: 0 flags:0  ts: 0.788333
>  ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.320000
> +ret: 0         st: 0 flags:1  ts:-0.317500
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:0  ts: 2.576668
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:1  ts: 1.470835
>  ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:5328000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.360000
> +ret: 0         st: 0 flags:0  ts: 0.365000
>  ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.760000
> +ret: 0         st: 0 flags:1  ts:-0.740833
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
>  ret: 0         st:-1 flags:0  ts: 2.153336
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:1  ts: 1.047503
>  ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:3744000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.040000
> +ret: 0         st: 0 flags:0  ts:-0.058333
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.840000
> +ret: 0         st: 0 flags:1  ts: 2.835833
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:0  ts: 1.730004
>  ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:6192000 size:144000
>  ret: 0         st:-1 flags:1  ts: 0.624171
>  ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.480000
> +ret: 0         st: 0 flags:0  ts:-0.481667
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.400000
> +ret: 0         st: 0 flags:1  ts: 2.412500
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:0  ts: 1.306672
>  ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:4752000 size:144000
>  ret: 0         st:-1 flags:1  ts: 0.200839
>  ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.920000
> +ret: 0         st: 0 flags:0  ts:-0.905000
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.000000
> +ret: 0         st: 0 flags:1  ts: 1.989167
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
>  ret: 0         st:-1 flags:0  ts: 0.883340
>  ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
>  ret: 0         st:-1 flags:1  ts:-0.222493
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:0  ts: 2.680000
> +ret: 0         st: 0 flags:0  ts: 2.671667
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> -ret: 0         st: 0 flags:1  ts: 1.560000
> +ret: 0         st: 0 flags:1  ts: 1.565833
>  ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:5616000 size:144000
>  ret: 0         st:-1 flags:0  ts: 0.460008
>  ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
> diff --git a/tests/ref/seek/vsynth_lena-dv-50 b/tests/ref/seek/vsynth_lena-dv-50
> index fae6d1b225..3b1d69ffa6 100644
> --- a/tests/ref/seek/vsynth_lena-dv-50
> +++ b/tests/ref/seek/vsynth_lena-dv-50
> @@ -3,49 +3,49 @@ ret: 0         st:-1 flags:0  ts:-1.000000
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
>  ret: 0         st:-1 flags:1  ts: 1.894167
>  ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:13536000 size:288000
> -ret: 0         st: 0 flags:0  ts: 0.800000
> +ret: 0         st: 0 flags:0  ts: 0.788333
>  ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:5760000 size:288000
> -ret: 0         st: 0 flags:1  ts:-0.320000
> +ret: 0         st: 0 flags:1  ts:-0.317500
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
>  ret: 0         st:-1 flags:0  ts: 2.576668
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
>  ret: 0         st:-1 flags:1  ts: 1.470835
>  ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:10656000 size:288000
> -ret: 0         st: 0 flags:0  ts: 0.360000
> +ret: 0         st: 0 flags:0  ts: 0.365000
>  ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:2592000 size:288000
> -ret: 0         st: 0 flags:1  ts:-0.760000
> +ret: 0         st: 0 flags:1  ts:-0.740833
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
>  ret: 0         st:-1 flags:0  ts: 2.153336
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
>  ret: 0         st:-1 flags:1  ts: 1.047503
>  ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:7488000 size:288000
> -ret: 0         st: 0 flags:0  ts:-0.040000
> +ret: 0         st: 0 flags:0  ts:-0.058333
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> -ret: 0         st: 0 flags:1  ts: 2.840000
> +ret: 0         st: 0 flags:1  ts: 2.835833
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
>  ret: 0         st:-1 flags:0  ts: 1.730004
>  ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:12384000 size:288000
>  ret: 0         st:-1 flags:1  ts: 0.624171
>  ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:4608000 size:288000
> -ret: 0         st: 0 flags:0  ts:-0.480000
> +ret: 0         st: 0 flags:0  ts:-0.481667
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> -ret: 0         st: 0 flags:1  ts: 2.400000
> +ret: 0         st: 0 flags:1  ts: 2.412500
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
>  ret: 0         st:-1 flags:0  ts: 1.306672
>  ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:9504000 size:288000
>  ret: 0         st:-1 flags:1  ts: 0.200839
>  ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos:1440000 size:288000
> -ret: 0         st: 0 flags:0  ts:-0.920000
> +ret: 0         st: 0 flags:0  ts:-0.905000
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> -ret: 0         st: 0 flags:1  ts: 2.000000
> +ret: 0         st: 0 flags:1  ts: 1.989167
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
>  ret: 0         st:-1 flags:0  ts: 0.883340
>  ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:6336000 size:288000
>  ret: 0         st:-1 flags:1  ts:-0.222493
>  ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> -ret: 0         st: 0 flags:0  ts: 2.680000
> +ret: 0         st: 0 flags:0  ts: 2.671667
>  ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
> -ret: 0         st: 0 flags:1  ts: 1.560000
> +ret: 0         st: 0 flags:1  ts: 1.565833
>  ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:11232000 size:288000
>  ret: 0         st:-1 flags:0  ts: 0.460008
>  ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:3456000 size:288000
Marton Balint Aug. 25, 2022, 7:04 p.m. UTC | #2
On Wed, 24 Aug 2022, Anton Khirnov wrote:

> The code will call avpriv_set_pts_info() for each video frame, possibly
> setting a different timebase if the stream framerate changes. This
> violates API conventions, as the timebase is supposed to stay constant
> after stream creation.
>
> Change the demuxer to set a single timebase that is granular enough to
> handle all supported DV framerates.
>
> The seek tests change slightly because the new timebase is more
> granular.

Just because the timebase is more granular the packet timestamps should 
not change.

Regards,
Marton

> ---
> libavformat/dv.c                  | 16 ++++++++++++----
> tests/ref/seek/lavf-dv            | 30 +++++++++++++++---------------
> tests/ref/seek/vsynth_lena-dv     | 24 ++++++++++++------------
> tests/ref/seek/vsynth_lena-dv-411 | 24 ++++++++++++------------
> tests/ref/seek/vsynth_lena-dv-50  | 24 ++++++++++++------------
> 5 files changed, 63 insertions(+), 55 deletions(-)
>
> diff --git a/libavformat/dv.c b/libavformat/dv.c
> index ffed1a7a90..e2f7a6d313 100644
> --- a/libavformat/dv.c
> +++ b/libavformat/dv.c
> @@ -69,6 +69,8 @@ struct DVDemuxContext {
>     uint8_t           audio_buf[4][8192];
>     int               ach;
>     int               frames;
> +
> +    int64_t           next_pts;
> };
>
> static inline uint16_t dv_audio_12to16(uint16_t sample)
> @@ -314,8 +316,6 @@ static int dv_extract_video_info(DVDemuxContext *c, const uint8_t *frame)
>
>     par = c->vst->codecpar;
>
> -    avpriv_set_pts_info(c->vst, 64, c->sys->time_base.num,
> -                        c->sys->time_base.den);
>     c->vst->avg_frame_rate = av_inv_q(c->vst->time_base);
>
>     /* finding out SAR is a little bit messy */
> @@ -360,6 +360,8 @@ static int dv_init_demux(AVFormatContext *s, DVDemuxContext *c)
>     c->vst->codecpar->bit_rate   = 25000000;
>     c->vst->start_time        = 0;
>
> +    avpriv_set_pts_info(c->vst, 64, 1, 60000);
> +
>     /* Audio streams are added later as they are encountered. */
>     s->ctx_flags |= AVFMTCTX_NOHEADER;
>
> @@ -463,7 +465,10 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
>         pkt->size         = size;
>         pkt->flags       |= AV_PKT_FLAG_KEY;
>         pkt->stream_index = c->vst->index;
> -        pkt->pts          = c->frames;
> +        pkt->pts          = c->next_pts;
> +        pkt->duration     = av_rescale_q(1, c->sys->time_base, c->vst->time_base);
> +
> +        c->next_pts += pkt->duration;
>     }
>
>     c->frames++;
> @@ -477,11 +482,12 @@ static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c,
>     // FIXME: sys may be wrong if last dv_read_packet() failed (buffer is junk)
>     FFFormatContext *const si = ffformatcontext(s);
>     const int frame_size = c->sys->frame_size;
> +    int64_t  frame_count = av_rescale_q(timestamp, c->vst->time_base, c->sys->time_base);
>     int64_t offset;
>     int64_t size       = avio_size(s->pb) - si->data_offset;
>     int64_t max_offset = ((size - 1) / frame_size) * frame_size;
>
> -    offset = frame_size * timestamp;
> +    offset = frame_size * frame_count;
>
>     if (size >= 0 && offset > max_offset)
>         offset = max_offset;
> @@ -494,6 +500,8 @@ static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c,
> void ff_dv_offset_reset(DVDemuxContext *c, int64_t frame_offset)
> {
>     c->frames = frame_offset;
> +    if (c->sys)
> +        c->next_pts = av_rescale_q(frame_offset, c->sys->time_base, c->vst->time_base);
>     c->audio_pkt[0].size = c->audio_pkt[1].size = 0;
>     c->audio_pkt[2].size = c->audio_pkt[3].size = 0;
> }
> diff --git a/tests/ref/seek/lavf-dv b/tests/ref/seek/lavf-dv
> index f63e4460be..356f05546b 100644
> --- a/tests/ref/seek/lavf-dv
> +++ b/tests/ref/seek/lavf-dv
> @@ -3,50 +3,50 @@ ret: 0         st:-1 flags:0  ts:-1.000000
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:1  ts: 1.894167
> ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.800000
> +ret: 0         st: 0 flags:0  ts: 0.788333
> ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.320000
> +ret: 0         st: 0 flags:1  ts:-0.317500
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st: 1 flags:0  ts: 2.560000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st: 1 flags:1  ts: 1.480000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:0  ts: 0.365002
> ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
> ret: 0         st:-1 flags:1  ts:-0.740831
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:0  ts: 2.160000
> +ret: 0         st: 0 flags:0  ts: 2.153333
> ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> -ret: 0         st: 0 flags:1  ts: 1.040000
> +ret: 0         st: 0 flags:1  ts: 1.047500
> ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> ret: 0         st: 1 flags:0  ts:-0.040000
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st: 1 flags:1  ts: 2.840000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:0  ts: 1.730004
> ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> ret: 0         st:-1 flags:1  ts: 0.624171
> ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.480000
> +ret: 0         st: 0 flags:0  ts:-0.481667
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.400000
> +ret: 0         st: 0 flags:1  ts: 2.412500
> ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> ret: 0         st: 1 flags:0  ts: 1.320000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st: 1 flags:1  ts: 0.200000
> -ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:0  ts:-0.904994
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:1  ts: 1.989173
> ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.880000
> +ret: 0         st: 0 flags:0  ts: 0.883333
> ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.240000
> +ret: 0         st: 0 flags:1  ts:-0.222500
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st: 1 flags:0  ts: 2.680000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st: 1 flags:1  ts: 1.560000
> -ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
> +ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:0  ts: 0.460008
> ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
> ret: 0         st:-1 flags:1  ts:-0.645825
> diff --git a/tests/ref/seek/vsynth_lena-dv b/tests/ref/seek/vsynth_lena-dv
> index d318794157..afed1fbe72 100644
> --- a/tests/ref/seek/vsynth_lena-dv
> +++ b/tests/ref/seek/vsynth_lena-dv
> @@ -3,49 +3,49 @@ ret: 0         st:-1 flags:0  ts:-1.000000
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:1  ts: 1.894167
> ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:6768000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.800000
> +ret: 0         st: 0 flags:0  ts: 0.788333
> ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.320000
> +ret: 0         st: 0 flags:1  ts:-0.317500
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:0  ts: 2.576668
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:1  ts: 1.470835
> ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:5328000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.360000
> +ret: 0         st: 0 flags:0  ts: 0.365000
> ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.760000
> +ret: 0         st: 0 flags:1  ts:-0.740833
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:0  ts: 2.153336
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:1  ts: 1.047503
> ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:3744000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.040000
> +ret: 0         st: 0 flags:0  ts:-0.058333
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.840000
> +ret: 0         st: 0 flags:1  ts: 2.835833
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:0  ts: 1.730004
> ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:6192000 size:144000
> ret: 0         st:-1 flags:1  ts: 0.624171
> ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.480000
> +ret: 0         st: 0 flags:0  ts:-0.481667
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.400000
> +ret: 0         st: 0 flags:1  ts: 2.412500
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:0  ts: 1.306672
> ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:4752000 size:144000
> ret: 0         st:-1 flags:1  ts: 0.200839
> ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.920000
> +ret: 0         st: 0 flags:0  ts:-0.905000
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.000000
> +ret: 0         st: 0 flags:1  ts: 1.989167
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:0  ts: 0.883340
> ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
> ret: 0         st:-1 flags:1  ts:-0.222493
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:0  ts: 2.680000
> +ret: 0         st: 0 flags:0  ts: 2.671667
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> -ret: 0         st: 0 flags:1  ts: 1.560000
> +ret: 0         st: 0 flags:1  ts: 1.565833
> ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:5616000 size:144000
> ret: 0         st:-1 flags:0  ts: 0.460008
> ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
> diff --git a/tests/ref/seek/vsynth_lena-dv-411 b/tests/ref/seek/vsynth_lena-dv-411
> index d318794157..afed1fbe72 100644
> --- a/tests/ref/seek/vsynth_lena-dv-411
> +++ b/tests/ref/seek/vsynth_lena-dv-411
> @@ -3,49 +3,49 @@ ret: 0         st:-1 flags:0  ts:-1.000000
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:1  ts: 1.894167
> ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:6768000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.800000
> +ret: 0         st: 0 flags:0  ts: 0.788333
> ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.320000
> +ret: 0         st: 0 flags:1  ts:-0.317500
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:0  ts: 2.576668
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:1  ts: 1.470835
> ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:5328000 size:144000
> -ret: 0         st: 0 flags:0  ts: 0.360000
> +ret: 0         st: 0 flags:0  ts: 0.365000
> ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
> -ret: 0         st: 0 flags:1  ts:-0.760000
> +ret: 0         st: 0 flags:1  ts:-0.740833
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> ret: 0         st:-1 flags:0  ts: 2.153336
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:1  ts: 1.047503
> ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:3744000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.040000
> +ret: 0         st: 0 flags:0  ts:-0.058333
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.840000
> +ret: 0         st: 0 flags:1  ts: 2.835833
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:0  ts: 1.730004
> ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:6192000 size:144000
> ret: 0         st:-1 flags:1  ts: 0.624171
> ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.480000
> +ret: 0         st: 0 flags:0  ts:-0.481667
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.400000
> +ret: 0         st: 0 flags:1  ts: 2.412500
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:0  ts: 1.306672
> ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:4752000 size:144000
> ret: 0         st:-1 flags:1  ts: 0.200839
> ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
> -ret: 0         st: 0 flags:0  ts:-0.920000
> +ret: 0         st: 0 flags:0  ts:-0.905000
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:1  ts: 2.000000
> +ret: 0         st: 0 flags:1  ts: 1.989167
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> ret: 0         st:-1 flags:0  ts: 0.883340
> ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
> ret: 0         st:-1 flags:1  ts:-0.222493
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
> -ret: 0         st: 0 flags:0  ts: 2.680000
> +ret: 0         st: 0 flags:0  ts: 2.671667
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
> -ret: 0         st: 0 flags:1  ts: 1.560000
> +ret: 0         st: 0 flags:1  ts: 1.565833
> ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:5616000 size:144000
> ret: 0         st:-1 flags:0  ts: 0.460008
> ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
> diff --git a/tests/ref/seek/vsynth_lena-dv-50 b/tests/ref/seek/vsynth_lena-dv-50
> index fae6d1b225..3b1d69ffa6 100644
> --- a/tests/ref/seek/vsynth_lena-dv-50
> +++ b/tests/ref/seek/vsynth_lena-dv-50
> @@ -3,49 +3,49 @@ ret: 0         st:-1 flags:0  ts:-1.000000
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> ret: 0         st:-1 flags:1  ts: 1.894167
> ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:13536000 size:288000
> -ret: 0         st: 0 flags:0  ts: 0.800000
> +ret: 0         st: 0 flags:0  ts: 0.788333
> ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:5760000 size:288000
> -ret: 0         st: 0 flags:1  ts:-0.320000
> +ret: 0         st: 0 flags:1  ts:-0.317500
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> ret: 0         st:-1 flags:0  ts: 2.576668
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
> ret: 0         st:-1 flags:1  ts: 1.470835
> ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:10656000 size:288000
> -ret: 0         st: 0 flags:0  ts: 0.360000
> +ret: 0         st: 0 flags:0  ts: 0.365000
> ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:2592000 size:288000
> -ret: 0         st: 0 flags:1  ts:-0.760000
> +ret: 0         st: 0 flags:1  ts:-0.740833
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> ret: 0         st:-1 flags:0  ts: 2.153336
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
> ret: 0         st:-1 flags:1  ts: 1.047503
> ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:7488000 size:288000
> -ret: 0         st: 0 flags:0  ts:-0.040000
> +ret: 0         st: 0 flags:0  ts:-0.058333
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> -ret: 0         st: 0 flags:1  ts: 2.840000
> +ret: 0         st: 0 flags:1  ts: 2.835833
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
> ret: 0         st:-1 flags:0  ts: 1.730004
> ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:12384000 size:288000
> ret: 0         st:-1 flags:1  ts: 0.624171
> ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:4608000 size:288000
> -ret: 0         st: 0 flags:0  ts:-0.480000
> +ret: 0         st: 0 flags:0  ts:-0.481667
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> -ret: 0         st: 0 flags:1  ts: 2.400000
> +ret: 0         st: 0 flags:1  ts: 2.412500
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
> ret: 0         st:-1 flags:0  ts: 1.306672
> ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:9504000 size:288000
> ret: 0         st:-1 flags:1  ts: 0.200839
> ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos:1440000 size:288000
> -ret: 0         st: 0 flags:0  ts:-0.920000
> +ret: 0         st: 0 flags:0  ts:-0.905000
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> -ret: 0         st: 0 flags:1  ts: 2.000000
> +ret: 0         st: 0 flags:1  ts: 1.989167
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
> ret: 0         st:-1 flags:0  ts: 0.883340
> ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:6336000 size:288000
> ret: 0         st:-1 flags:1  ts:-0.222493
> ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
> -ret: 0         st: 0 flags:0  ts: 2.680000
> +ret: 0         st: 0 flags:0  ts: 2.671667
> ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
> -ret: 0         st: 0 flags:1  ts: 1.560000
> +ret: 0         st: 0 flags:1  ts: 1.565833
> ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:11232000 size:288000
> ret: 0         st:-1 flags:0  ts: 0.460008
> ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:3456000 size:288000
> -- 
> 2.35.1
>
> _______________________________________________
> 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".
>
diff mbox series

Patch

diff --git a/libavformat/dv.c b/libavformat/dv.c
index ffed1a7a90..e2f7a6d313 100644
--- a/libavformat/dv.c
+++ b/libavformat/dv.c
@@ -69,6 +69,8 @@  struct DVDemuxContext {
     uint8_t           audio_buf[4][8192];
     int               ach;
     int               frames;
+
+    int64_t           next_pts;
 };
 
 static inline uint16_t dv_audio_12to16(uint16_t sample)
@@ -314,8 +316,6 @@  static int dv_extract_video_info(DVDemuxContext *c, const uint8_t *frame)
 
     par = c->vst->codecpar;
 
-    avpriv_set_pts_info(c->vst, 64, c->sys->time_base.num,
-                        c->sys->time_base.den);
     c->vst->avg_frame_rate = av_inv_q(c->vst->time_base);
 
     /* finding out SAR is a little bit messy */
@@ -360,6 +360,8 @@  static int dv_init_demux(AVFormatContext *s, DVDemuxContext *c)
     c->vst->codecpar->bit_rate   = 25000000;
     c->vst->start_time        = 0;
 
+    avpriv_set_pts_info(c->vst, 64, 1, 60000);
+
     /* Audio streams are added later as they are encountered. */
     s->ctx_flags |= AVFMTCTX_NOHEADER;
 
@@ -463,7 +465,10 @@  int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
         pkt->size         = size;
         pkt->flags       |= AV_PKT_FLAG_KEY;
         pkt->stream_index = c->vst->index;
-        pkt->pts          = c->frames;
+        pkt->pts          = c->next_pts;
+        pkt->duration     = av_rescale_q(1, c->sys->time_base, c->vst->time_base);
+
+        c->next_pts += pkt->duration;
     }
 
     c->frames++;
@@ -477,11 +482,12 @@  static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c,
     // FIXME: sys may be wrong if last dv_read_packet() failed (buffer is junk)
     FFFormatContext *const si = ffformatcontext(s);
     const int frame_size = c->sys->frame_size;
+    int64_t  frame_count = av_rescale_q(timestamp, c->vst->time_base, c->sys->time_base);
     int64_t offset;
     int64_t size       = avio_size(s->pb) - si->data_offset;
     int64_t max_offset = ((size - 1) / frame_size) * frame_size;
 
-    offset = frame_size * timestamp;
+    offset = frame_size * frame_count;
 
     if (size >= 0 && offset > max_offset)
         offset = max_offset;
@@ -494,6 +500,8 @@  static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c,
 void ff_dv_offset_reset(DVDemuxContext *c, int64_t frame_offset)
 {
     c->frames = frame_offset;
+    if (c->sys)
+        c->next_pts = av_rescale_q(frame_offset, c->sys->time_base, c->vst->time_base);
     c->audio_pkt[0].size = c->audio_pkt[1].size = 0;
     c->audio_pkt[2].size = c->audio_pkt[3].size = 0;
 }
diff --git a/tests/ref/seek/lavf-dv b/tests/ref/seek/lavf-dv
index f63e4460be..356f05546b 100644
--- a/tests/ref/seek/lavf-dv
+++ b/tests/ref/seek/lavf-dv
@@ -3,50 +3,50 @@  ret: 0         st:-1 flags:0  ts:-1.000000
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:1  ts: 1.894167
 ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
-ret: 0         st: 0 flags:0  ts: 0.800000
+ret: 0         st: 0 flags:0  ts: 0.788333
 ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
-ret: 0         st: 0 flags:1  ts:-0.320000
+ret: 0         st: 0 flags:1  ts:-0.317500
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st: 1 flags:0  ts: 2.560000
-ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
+ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st: 1 flags:1  ts: 1.480000
-ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
+ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:0  ts: 0.365002
 ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
 ret: 0         st:-1 flags:1  ts:-0.740831
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:0  ts: 2.160000
+ret: 0         st: 0 flags:0  ts: 2.153333
 ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
-ret: 0         st: 0 flags:1  ts: 1.040000
+ret: 0         st: 0 flags:1  ts: 1.047500
 ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
 ret: 0         st: 1 flags:0  ts:-0.040000
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st: 1 flags:1  ts: 2.840000
-ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
+ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:0  ts: 1.730004
 ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
 ret: 0         st:-1 flags:1  ts: 0.624171
 ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
-ret: 0         st: 0 flags:0  ts:-0.480000
+ret: 0         st: 0 flags:0  ts:-0.481667
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:1  ts: 2.400000
+ret: 0         st: 0 flags:1  ts: 2.412500
 ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
 ret: 0         st: 1 flags:0  ts: 1.320000
-ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
+ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st: 1 flags:1  ts: 0.200000
-ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
+ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:0  ts:-0.904994
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:1  ts: 1.989173
 ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
-ret: 0         st: 0 flags:0  ts: 0.880000
+ret: 0         st: 0 flags:0  ts: 0.883333
 ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
-ret: 0         st: 0 flags:1  ts:-0.240000
+ret: 0         st: 0 flags:1  ts:-0.222500
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st: 1 flags:0  ts: 2.680000
-ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
+ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st: 1 flags:1  ts: 1.560000
-ret: 0         st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
+ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:0  ts: 0.460008
 ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
 ret: 0         st:-1 flags:1  ts:-0.645825
diff --git a/tests/ref/seek/vsynth_lena-dv b/tests/ref/seek/vsynth_lena-dv
index d318794157..afed1fbe72 100644
--- a/tests/ref/seek/vsynth_lena-dv
+++ b/tests/ref/seek/vsynth_lena-dv
@@ -3,49 +3,49 @@  ret: 0         st:-1 flags:0  ts:-1.000000
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:1  ts: 1.894167
 ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:6768000 size:144000
-ret: 0         st: 0 flags:0  ts: 0.800000
+ret: 0         st: 0 flags:0  ts: 0.788333
 ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
-ret: 0         st: 0 flags:1  ts:-0.320000
+ret: 0         st: 0 flags:1  ts:-0.317500
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:0  ts: 2.576668
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:1  ts: 1.470835
 ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:5328000 size:144000
-ret: 0         st: 0 flags:0  ts: 0.360000
+ret: 0         st: 0 flags:0  ts: 0.365000
 ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
-ret: 0         st: 0 flags:1  ts:-0.760000
+ret: 0         st: 0 flags:1  ts:-0.740833
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:0  ts: 2.153336
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:1  ts: 1.047503
 ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:3744000 size:144000
-ret: 0         st: 0 flags:0  ts:-0.040000
+ret: 0         st: 0 flags:0  ts:-0.058333
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:1  ts: 2.840000
+ret: 0         st: 0 flags:1  ts: 2.835833
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:0  ts: 1.730004
 ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:6192000 size:144000
 ret: 0         st:-1 flags:1  ts: 0.624171
 ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
-ret: 0         st: 0 flags:0  ts:-0.480000
+ret: 0         st: 0 flags:0  ts:-0.481667
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:1  ts: 2.400000
+ret: 0         st: 0 flags:1  ts: 2.412500
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:0  ts: 1.306672
 ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:4752000 size:144000
 ret: 0         st:-1 flags:1  ts: 0.200839
 ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
-ret: 0         st: 0 flags:0  ts:-0.920000
+ret: 0         st: 0 flags:0  ts:-0.905000
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:1  ts: 2.000000
+ret: 0         st: 0 flags:1  ts: 1.989167
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:0  ts: 0.883340
 ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
 ret: 0         st:-1 flags:1  ts:-0.222493
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:0  ts: 2.680000
+ret: 0         st: 0 flags:0  ts: 2.671667
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
-ret: 0         st: 0 flags:1  ts: 1.560000
+ret: 0         st: 0 flags:1  ts: 1.565833
 ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:5616000 size:144000
 ret: 0         st:-1 flags:0  ts: 0.460008
 ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
diff --git a/tests/ref/seek/vsynth_lena-dv-411 b/tests/ref/seek/vsynth_lena-dv-411
index d318794157..afed1fbe72 100644
--- a/tests/ref/seek/vsynth_lena-dv-411
+++ b/tests/ref/seek/vsynth_lena-dv-411
@@ -3,49 +3,49 @@  ret: 0         st:-1 flags:0  ts:-1.000000
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:1  ts: 1.894167
 ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:6768000 size:144000
-ret: 0         st: 0 flags:0  ts: 0.800000
+ret: 0         st: 0 flags:0  ts: 0.788333
 ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:2880000 size:144000
-ret: 0         st: 0 flags:1  ts:-0.320000
+ret: 0         st: 0 flags:1  ts:-0.317500
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:0  ts: 2.576668
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:1  ts: 1.470835
 ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:5328000 size:144000
-ret: 0         st: 0 flags:0  ts: 0.360000
+ret: 0         st: 0 flags:0  ts: 0.365000
 ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:1296000 size:144000
-ret: 0         st: 0 flags:1  ts:-0.760000
+ret: 0         st: 0 flags:1  ts:-0.740833
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
 ret: 0         st:-1 flags:0  ts: 2.153336
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:1  ts: 1.047503
 ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:3744000 size:144000
-ret: 0         st: 0 flags:0  ts:-0.040000
+ret: 0         st: 0 flags:0  ts:-0.058333
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:1  ts: 2.840000
+ret: 0         st: 0 flags:1  ts: 2.835833
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:0  ts: 1.730004
 ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:6192000 size:144000
 ret: 0         st:-1 flags:1  ts: 0.624171
 ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:2304000 size:144000
-ret: 0         st: 0 flags:0  ts:-0.480000
+ret: 0         st: 0 flags:0  ts:-0.481667
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:1  ts: 2.400000
+ret: 0         st: 0 flags:1  ts: 2.412500
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:0  ts: 1.306672
 ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:4752000 size:144000
 ret: 0         st:-1 flags:1  ts: 0.200839
 ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos: 720000 size:144000
-ret: 0         st: 0 flags:0  ts:-0.920000
+ret: 0         st: 0 flags:0  ts:-0.905000
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:1  ts: 2.000000
+ret: 0         st: 0 flags:1  ts: 1.989167
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
 ret: 0         st:-1 flags:0  ts: 0.883340
 ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:3168000 size:144000
 ret: 0         st:-1 flags:1  ts:-0.222493
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:144000
-ret: 0         st: 0 flags:0  ts: 2.680000
+ret: 0         st: 0 flags:0  ts: 2.671667
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:7056000 size:144000
-ret: 0         st: 0 flags:1  ts: 1.560000
+ret: 0         st: 0 flags:1  ts: 1.565833
 ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:5616000 size:144000
 ret: 0         st:-1 flags:0  ts: 0.460008
 ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:1728000 size:144000
diff --git a/tests/ref/seek/vsynth_lena-dv-50 b/tests/ref/seek/vsynth_lena-dv-50
index fae6d1b225..3b1d69ffa6 100644
--- a/tests/ref/seek/vsynth_lena-dv-50
+++ b/tests/ref/seek/vsynth_lena-dv-50
@@ -3,49 +3,49 @@  ret: 0         st:-1 flags:0  ts:-1.000000
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
 ret: 0         st:-1 flags:1  ts: 1.894167
 ret: 0         st: 0 flags:1 dts: 1.880000 pts: 1.880000 pos:13536000 size:288000
-ret: 0         st: 0 flags:0  ts: 0.800000
+ret: 0         st: 0 flags:0  ts: 0.788333
 ret: 0         st: 0 flags:1 dts: 0.800000 pts: 0.800000 pos:5760000 size:288000
-ret: 0         st: 0 flags:1  ts:-0.320000
+ret: 0         st: 0 flags:1  ts:-0.317500
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
 ret: 0         st:-1 flags:0  ts: 2.576668
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
 ret: 0         st:-1 flags:1  ts: 1.470835
 ret: 0         st: 0 flags:1 dts: 1.480000 pts: 1.480000 pos:10656000 size:288000
-ret: 0         st: 0 flags:0  ts: 0.360000
+ret: 0         st: 0 flags:0  ts: 0.365000
 ret: 0         st: 0 flags:1 dts: 0.360000 pts: 0.360000 pos:2592000 size:288000
-ret: 0         st: 0 flags:1  ts:-0.760000
+ret: 0         st: 0 flags:1  ts:-0.740833
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
 ret: 0         st:-1 flags:0  ts: 2.153336
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
 ret: 0         st:-1 flags:1  ts: 1.047503
 ret: 0         st: 0 flags:1 dts: 1.040000 pts: 1.040000 pos:7488000 size:288000
-ret: 0         st: 0 flags:0  ts:-0.040000
+ret: 0         st: 0 flags:0  ts:-0.058333
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
-ret: 0         st: 0 flags:1  ts: 2.840000
+ret: 0         st: 0 flags:1  ts: 2.835833
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
 ret: 0         st:-1 flags:0  ts: 1.730004
 ret: 0         st: 0 flags:1 dts: 1.720000 pts: 1.720000 pos:12384000 size:288000
 ret: 0         st:-1 flags:1  ts: 0.624171
 ret: 0         st: 0 flags:1 dts: 0.640000 pts: 0.640000 pos:4608000 size:288000
-ret: 0         st: 0 flags:0  ts:-0.480000
+ret: 0         st: 0 flags:0  ts:-0.481667
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
-ret: 0         st: 0 flags:1  ts: 2.400000
+ret: 0         st: 0 flags:1  ts: 2.412500
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
 ret: 0         st:-1 flags:0  ts: 1.306672
 ret: 0         st: 0 flags:1 dts: 1.320000 pts: 1.320000 pos:9504000 size:288000
 ret: 0         st:-1 flags:1  ts: 0.200839
 ret: 0         st: 0 flags:1 dts: 0.200000 pts: 0.200000 pos:1440000 size:288000
-ret: 0         st: 0 flags:0  ts:-0.920000
+ret: 0         st: 0 flags:0  ts:-0.905000
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
-ret: 0         st: 0 flags:1  ts: 2.000000
+ret: 0         st: 0 flags:1  ts: 1.989167
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
 ret: 0         st:-1 flags:0  ts: 0.883340
 ret: 0         st: 0 flags:1 dts: 0.880000 pts: 0.880000 pos:6336000 size:288000
 ret: 0         st:-1 flags:1  ts:-0.222493
 ret: 0         st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos:      0 size:288000
-ret: 0         st: 0 flags:0  ts: 2.680000
+ret: 0         st: 0 flags:0  ts: 2.671667
 ret: 0         st: 0 flags:1 dts: 1.960000 pts: 1.960000 pos:14112000 size:288000
-ret: 0         st: 0 flags:1  ts: 1.560000
+ret: 0         st: 0 flags:1  ts: 1.565833
 ret: 0         st: 0 flags:1 dts: 1.560000 pts: 1.560000 pos:11232000 size:288000
 ret: 0         st:-1 flags:0  ts: 0.460008
 ret: 0         st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos:3456000 size:288000