* [FFmpeg-devel] [PATCH 1/3] lavf/dv: do not set video timebase more than once
@ 2023-04-24 15:55 Anton Khirnov
2023-04-24 15:55 ` [FFmpeg-devel] [PATCH 2/3] lavf/dv: shorten code by using a local variable Anton Khirnov
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Anton Khirnov @ 2023-04-24 15:55 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: Dave Rice
Current 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 fine enough to
handle all supported DV framerates.
The seek tests change slightly because the new timebase is more
granular.
---
libavcodec/dv.h | 3 +++
libavformat/dv.c | 25 ++++++++++++++++++++-----
tests/ref/seek/lavf-dv | 16 ++++++++--------
tests/ref/seek/vsynth_lena-dv | 24 ++++++++++++------------
tests/ref/seek/vsynth_lena-dv-411 | 24 ++++++++++++------------
tests/ref/seek/vsynth_lena-dv-50 | 24 ++++++++++++------------
6 files changed, 67 insertions(+), 49 deletions(-)
diff --git a/libavcodec/dv.h b/libavcodec/dv.h
index 29f97b6089a..b473bdc992d 100644
--- a/libavcodec/dv.h
+++ b/libavcodec/dv.h
@@ -60,6 +60,9 @@ enum DVPackType {
*/
#define DV_MAX_FRAME_SIZE 576000
+// LCM of video framerate numerators
+#define DV_TIMESCALE_VIDEO 60000
+
/**
* maximum number of blocks per macroblock in any DV format
*/
diff --git a/libavformat/dv.c b/libavformat/dv.c
index ffed1a7a90e..d30dc298805 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_video;
};
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, DV_TIMESCALE_VIDEO);
+
/* 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_video;
+ pkt->duration = av_rescale_q(1, c->sys->time_base, c->vst->time_base);
+
+ c->next_pts_video += 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_video = 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;
}
@@ -618,7 +626,14 @@ static int dv_read_seek(AVFormatContext *s, int stream_index,
{
RawDVContext *r = s->priv_data;
DVDemuxContext *c = &r->dv_demux;
- int64_t offset = dv_frame_offset(s, c, timestamp, flags);
+ int64_t offset;
+
+ // seek using the video stream
+ if (stream_index != c->vst->index)
+ timestamp = av_rescale_q(timestamp, s->streams[stream_index]->time_base,
+ c->vst->time_base);
+
+ offset = dv_frame_offset(s, c, timestamp, flags);
if (avio_seek(s->pb, offset, SEEK_SET) < 0)
return -1;
diff --git a/tests/ref/seek/lavf-dv b/tests/ref/seek/lavf-dv
index f63e4460be6..95f19d28f03 100644
--- a/tests/ref/seek/lavf-dv
+++ b/tests/ref/seek/lavf-dv
@@ -3,9 +3,9 @@ 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
@@ -15,9 +15,9 @@ 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
@@ -27,9 +27,9 @@ 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
@@ -39,9 +39,9 @@ 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
diff --git a/tests/ref/seek/vsynth_lena-dv b/tests/ref/seek/vsynth_lena-dv
index d318794157b..afed1fbe727 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 d318794157b..afed1fbe727 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 fae6d1b225d..3b1d69ffa69 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.39.2
_______________________________________________
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".
^ permalink raw reply [flat|nested] 7+ messages in thread
* [FFmpeg-devel] [PATCH 2/3] lavf/dv: shorten code by using a local variable
2023-04-24 15:55 [FFmpeg-devel] [PATCH 1/3] lavf/dv: do not set video timebase more than once Anton Khirnov
@ 2023-04-24 15:55 ` Anton Khirnov
2023-04-24 15:55 ` [FFmpeg-devel] [PATCH 3/3] lavf/dv: use a more granular timebase for audio Anton Khirnov
2023-04-26 11:54 ` [FFmpeg-devel] [PATCH 1/3] lavf/dv: do not set video timebase more than once Michael Niedermayer
2 siblings, 0 replies; 7+ messages in thread
From: Anton Khirnov @ 2023-04-24 15:55 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: Dave Rice
---
libavformat/dv.c | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/libavformat/dv.c b/libavformat/dv.c
index d30dc298805..49c4f421fa5 100644
--- a/libavformat/dv.c
+++ b/libavformat/dv.c
@@ -437,10 +437,13 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
return size;
for (i = 0; i < c->ach; i++) {
- c->audio_pkt[i].pos = pos;
- c->audio_pkt[i].size = size;
- c->audio_pkt[i].pts = (c->sys->height == 720) ? (c->frames & ~1) : c->frames;
- c->audio_pkt[i].duration = 1;
+ DVPacket *dpkt = &c->audio_pkt[i];
+
+ dpkt->pos = pos;
+ dpkt->size = size;
+ dpkt->pts = (c->sys->height == 720) ? (c->frames & ~1) : c->frames;
+ dpkt->duration = 1;
+
ppcm[i] = c->audio_buf[i];
}
if (c->ach)
--
2.39.2
_______________________________________________
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".
^ permalink raw reply [flat|nested] 7+ messages in thread
* [FFmpeg-devel] [PATCH 3/3] lavf/dv: use a more granular timebase for audio
2023-04-24 15:55 [FFmpeg-devel] [PATCH 1/3] lavf/dv: do not set video timebase more than once Anton Khirnov
2023-04-24 15:55 ` [FFmpeg-devel] [PATCH 2/3] lavf/dv: shorten code by using a local variable Anton Khirnov
@ 2023-04-24 15:55 ` Anton Khirnov
2023-04-26 11:54 ` [FFmpeg-devel] [PATCH 1/3] lavf/dv: do not set video timebase more than once Michael Niedermayer
2 siblings, 0 replies; 7+ messages in thread
From: Anton Khirnov @ 2023-04-24 15:55 UTC (permalink / raw)
To: ffmpeg-devel; +Cc: Dave Rice
One that is fine enough to represent all DV audio sample rates. Audio
packet durations are now sample-accurate.
This largely undoes commit 76fbb0052df471075858c1cb82b04c8be7adba8d. To
avoid breaking the issue fixed by that commit, resync audio timestamps
against video if they get more than one frame apart. The sample from
issue #8762 still works correctly after this commit.
Slightly changes the results of the lavf-dv seektest, due to the audio
timebase being more granular.
---
CC-ing Dave, as he reported issue #8762. The sample from there still
seems to work fine, but please let me know if you notice any other
issues
---
libavcodec/dv.h | 3 +++
libavformat/dv.c | 30 ++++++++++++++++++++++++++----
tests/ref/seek/lavf-dv | 16 ++++++++--------
3 files changed, 37 insertions(+), 12 deletions(-)
diff --git a/libavcodec/dv.h b/libavcodec/dv.h
index b473bdc992d..abff9f1ea9a 100644
--- a/libavcodec/dv.h
+++ b/libavcodec/dv.h
@@ -63,6 +63,9 @@ enum DVPackType {
// LCM of video framerate numerators
#define DV_TIMESCALE_VIDEO 60000
+// LCM of audio sample rates
+#define DV_TIMESCALE_AUDIO 14112000
+
/**
* maximum number of blocks per macroblock in any DV format
*/
diff --git a/libavformat/dv.c b/libavformat/dv.c
index 49c4f421fa5..41e94a87e75 100644
--- a/libavformat/dv.c
+++ b/libavformat/dv.c
@@ -71,6 +71,7 @@ struct DVDemuxContext {
int frames;
int64_t next_pts_video;
+ int64_t next_pts_audio;
};
static inline uint16_t dv_audio_12to16(uint16_t sample)
@@ -282,7 +283,7 @@ static int dv_extract_audio_info(DVDemuxContext *c, const uint8_t *frame)
if (!c->ast[i])
return AVERROR(ENOMEM);
- avpriv_set_pts_info(c->ast[i], 64, c->sys->time_base.num, c->sys->time_base.den);
+ avpriv_set_pts_info(c->ast[i], 64, 1, DV_TIMESCALE_AUDIO);
c->ast[i]->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
c->ast[i]->codecpar->codec_id = AV_CODEC_ID_PCM_S16LE;
c->ast[i]->codecpar->ch_layout = (AVChannelLayout)AV_CHANNEL_LAYOUT_STEREO;
@@ -421,6 +422,7 @@ int avpriv_dv_get_packet(DVDemuxContext *c, AVPacket *pkt)
int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
uint8_t *buf, int buf_size, int64_t pos)
{
+ int64_t pts, duration;
int size, i;
uint8_t *ppcm[5] = { 0 };
@@ -436,13 +438,30 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
if (size < 0)
return size;
+ if (c->ach) {
+ int64_t next_pts_video = av_rescale_q(c->next_pts_video, c->vst->time_base,
+ c->ast[0]->time_base);
+
+ duration = av_rescale_q(size / 4,
+ (AVRational){ 1, c->audio_pkt[0].sample_rate },
+ c->ast[0]->time_base);
+
+ // if audio timestamps are more than one frame away from video,
+ // assume desync happened (e.g. due to dropped audio frames) and
+ // resynchronize
+ pts = (FFABS(next_pts_video - c->next_pts_audio) >= duration) ?
+ next_pts_video : c->next_pts_audio;
+
+ c->next_pts_audio = pts + duration;
+ }
+
for (i = 0; i < c->ach; i++) {
DVPacket *dpkt = &c->audio_pkt[i];
dpkt->pos = pos;
dpkt->size = size;
- dpkt->pts = (c->sys->height == 720) ? (c->frames & ~1) : c->frames;
- dpkt->duration = 1;
+ dpkt->pts = pts;
+ dpkt->duration = duration;
ppcm[i] = c->audio_buf[i];
}
@@ -503,8 +522,11 @@ 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)
+ if (c->sys) {
c->next_pts_video = av_rescale_q(frame_offset, c->sys->time_base, c->vst->time_base);
+ if (c->ast[0])
+ c->next_pts_audio = av_rescale_q(frame_offset, c->sys->time_base, c->ast[0]->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 95f19d28f03..db46c7734c2 100644
--- a/tests/ref/seek/lavf-dv
+++ b/tests/ref/seek/lavf-dv
@@ -7,9 +7,9 @@ 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.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: 1 flags:0 ts: 2.576668
ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
-ret: 0 st: 1 flags:1 ts: 1.480000
+ret: 0 st: 1 flags:1 ts: 1.470835
ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 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
@@ -19,9 +19,9 @@ 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.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: 1 flags:0 ts:-0.058330
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: 1 flags:1 ts: 2.835837
ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 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
@@ -31,9 +31,9 @@ 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.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: 1 flags:0 ts: 1.306672
ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
-ret: 0 st: 1 flags:1 ts: 0.200000
+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:-1 flags:0 ts:-0.904994
ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 0 size:144000
@@ -43,9 +43,9 @@ 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.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: 1 flags:0 ts: 2.671674
ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 size:144000
-ret: 0 st: 1 flags:1 ts: 1.560000
+ret: 0 st: 1 flags:1 ts: 1.565841
ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos:3456000 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
--
2.39.2
_______________________________________________
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".
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/3] lavf/dv: do not set video timebase more than once
2023-04-24 15:55 [FFmpeg-devel] [PATCH 1/3] lavf/dv: do not set video timebase more than once Anton Khirnov
2023-04-24 15:55 ` [FFmpeg-devel] [PATCH 2/3] lavf/dv: shorten code by using a local variable Anton Khirnov
2023-04-24 15:55 ` [FFmpeg-devel] [PATCH 3/3] lavf/dv: use a more granular timebase for audio Anton Khirnov
@ 2023-04-26 11:54 ` Michael Niedermayer
2023-04-27 7:48 ` Anton Khirnov
2023-04-27 11:39 ` [FFmpeg-devel] [PATCH] " Anton Khirnov
2 siblings, 2 replies; 7+ messages in thread
From: Michael Niedermayer @ 2023-04-26 11:54 UTC (permalink / raw)
To: FFmpeg development discussions and patches
[-- Attachment #1.1: Type: text/plain, Size: 1507 bytes --]
On Mon, Apr 24, 2023 at 05:55:51PM +0200, Anton Khirnov wrote:
> Current 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 fine enough to
> handle all supported DV framerates.
>
> The seek tests change slightly because the new timebase is more
> granular.
> ---
> libavcodec/dv.h | 3 +++
> libavformat/dv.c | 25 ++++++++++++++++++++-----
> tests/ref/seek/lavf-dv | 16 ++++++++--------
> tests/ref/seek/vsynth_lena-dv | 24 ++++++++++++------------
> tests/ref/seek/vsynth_lena-dv-411 | 24 ++++++++++++------------
> tests/ref/seek/vsynth_lena-dv-50 | 24 ++++++++++++------------
> 6 files changed, 67 insertions(+), 49 deletions(-)
This breaks:
./ffmpeg -ss 4:56 -i ~/tickets/4086/Oca-Agu\ 1995.avi -codec copy -t 1 -bitexact 4086-30frames.dv
(the file is empty after the patch)
The file seems no longer available on the original link and a little big
ill put it in your home directory on the server probably in 30+min or so.
once you are done with it please delete it off the server so it doesnt eat
diskspace
thx
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
What does censorship reveal? It reveals fear. -- Julian Assange
[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
[-- Attachment #2: Type: text/plain, Size: 251 bytes --]
_______________________________________________
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".
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [FFmpeg-devel] [PATCH 1/3] lavf/dv: do not set video timebase more than once
2023-04-26 11:54 ` [FFmpeg-devel] [PATCH 1/3] lavf/dv: do not set video timebase more than once Michael Niedermayer
@ 2023-04-27 7:48 ` Anton Khirnov
2023-04-27 11:39 ` [FFmpeg-devel] [PATCH] " Anton Khirnov
1 sibling, 0 replies; 7+ messages in thread
From: Anton Khirnov @ 2023-04-27 7:48 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Quoting Michael Niedermayer (2023-04-26 13:54:10)
> On Mon, Apr 24, 2023 at 05:55:51PM +0200, Anton Khirnov wrote:
> > Current 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 fine enough to
> > handle all supported DV framerates.
> >
> > The seek tests change slightly because the new timebase is more
> > granular.
> > ---
> > libavcodec/dv.h | 3 +++
> > libavformat/dv.c | 25 ++++++++++++++++++++-----
> > tests/ref/seek/lavf-dv | 16 ++++++++--------
> > tests/ref/seek/vsynth_lena-dv | 24 ++++++++++++------------
> > tests/ref/seek/vsynth_lena-dv-411 | 24 ++++++++++++------------
> > tests/ref/seek/vsynth_lena-dv-50 | 24 ++++++++++++------------
> > 6 files changed, 67 insertions(+), 49 deletions(-)
>
> This breaks:
>
> ./ffmpeg -ss 4:56 -i ~/tickets/4086/Oca-Agu\ 1995.avi -codec copy -t 1 -bitexact 4086-30frames.dv
> (the file is empty after the patch)
>
> The file seems no longer available on the original link and a little big
> ill put it in your home directory on the server probably in 30+min or so.
> once you are done with it please delete it off the server so it doesnt eat
> diskspace
Thank you, file downloaded and deleted.
Seems we do not have any FATE tests for dv in avi - do you (or anyone
else) have a reasonably small sample that can be used for that?
--
Anton Khirnov
_______________________________________________
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".
^ permalink raw reply [flat|nested] 7+ messages in thread
* [FFmpeg-devel] [PATCH] lavf/dv: do not set video timebase more than once
2023-04-26 11:54 ` [FFmpeg-devel] [PATCH 1/3] lavf/dv: do not set video timebase more than once Michael Niedermayer
2023-04-27 7:48 ` Anton Khirnov
@ 2023-04-27 11:39 ` Anton Khirnov
2023-05-01 9:52 ` Anton Khirnov
1 sibling, 1 reply; 7+ messages in thread
From: Anton Khirnov @ 2023-04-27 11:39 UTC (permalink / raw)
To: ffmpeg-devel
Current 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 fine enough to
handle all supported DV framerates.
The seek tests change slightly because the new timebase is more
granular.
---
libavcodec/dv.h | 3 +++
libavformat/avidec.c | 22 +++++++++++++------
libavformat/dv.c | 36 +++++++++++++++++++++++--------
libavformat/dv.h | 2 +-
tests/ref/seek/lavf-dv | 16 +++++++-------
tests/ref/seek/vsynth_lena-dv | 24 ++++++++++-----------
tests/ref/seek/vsynth_lena-dv-411 | 24 ++++++++++-----------
tests/ref/seek/vsynth_lena-dv-50 | 24 ++++++++++-----------
8 files changed, 91 insertions(+), 60 deletions(-)
diff --git a/libavcodec/dv.h b/libavcodec/dv.h
index 29f97b6089..b473bdc992 100644
--- a/libavcodec/dv.h
+++ b/libavcodec/dv.h
@@ -60,6 +60,9 @@ enum DVPackType {
*/
#define DV_MAX_FRAME_SIZE 576000
+// LCM of video framerate numerators
+#define DV_TIMESCALE_VIDEO 60000
+
/**
* maximum number of blocks per macroblock in any DV format
*/
diff --git a/libavformat/avidec.c b/libavformat/avidec.c
index 7a3fad6392..00bd7a98a9 100644
--- a/libavformat/avidec.c
+++ b/libavformat/avidec.c
@@ -1869,13 +1869,20 @@ static int avi_read_seek(AVFormatContext *s, int stream_index,
st = s->streams[stream_index];
sti = ffstream(st);
ast = st->priv_data;
- index = av_index_search_timestamp(st,
- timestamp * FFMAX(ast->sample_size, 1),
- flags);
+
+ if (avi->dv_demux) {
+ // index entries are in the AVI scale/rate timebase, which does
+ // not match DV demuxer's stream timebase
+ timestamp = av_rescale_q(timestamp, st->time_base,
+ (AVRational){ ast->scale, ast->rate });
+ } else
+ timestamp *= FFMAX(ast->sample_size, 1);
+
+ index = av_index_search_timestamp(st, timestamp, flags);
if (index < 0) {
if (sti->nb_index_entries > 0)
av_log(s, AV_LOG_DEBUG, "Failed to find timestamp %"PRId64 " in index %"PRId64 " .. %"PRId64 "\n",
- timestamp * FFMAX(ast->sample_size, 1),
+ timestamp,
sti->index_entries[0].timestamp,
sti->index_entries[sti->nb_index_entries - 1].timestamp);
return AVERROR_INVALIDDATA;
@@ -1883,7 +1890,7 @@ static int avi_read_seek(AVFormatContext *s, int stream_index,
/* find the position */
pos = sti->index_entries[index].pos;
- timestamp = sti->index_entries[index].timestamp / FFMAX(ast->sample_size, 1);
+ timestamp = sti->index_entries[index].timestamp;
av_log(s, AV_LOG_TRACE, "XX %"PRId64" %d %"PRId64"\n",
timestamp, index, sti->index_entries[index].timestamp);
@@ -1898,11 +1905,14 @@ static int avi_read_seek(AVFormatContext *s, int stream_index,
/* Feed the DV video stream version of the timestamp to the */
/* DV demux so it can synthesize correct timestamps. */
- ff_dv_offset_reset(avi->dv_demux, timestamp);
+ ff_dv_ts_reset(avi->dv_demux,
+ av_rescale_q(timestamp, (AVRational){ ast->scale, ast->rate },
+ st->time_base));
avi->stream_index = -1;
return 0;
}
+ timestamp /= FFMAX(ast->sample_size, 1);
pos_min = pos;
for (i = 0; i < s->nb_streams; i++) {
diff --git a/libavformat/dv.c b/libavformat/dv.c
index ffed1a7a90..9888c10b48 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_video;
};
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, DV_TIMESCALE_VIDEO);
+
/* 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_video;
+ pkt->duration = av_rescale_q(1, c->sys->time_base, c->vst->time_base);
+
+ c->next_pts_video += pkt->duration;
}
c->frames++;
@@ -472,28 +477,34 @@ int avpriv_dv_produce_packet(DVDemuxContext *c, AVPacket *pkt,
}
static int64_t dv_frame_offset(AVFormatContext *s, DVDemuxContext *c,
- int64_t timestamp, int flags)
+ int64_t *timestamp)
{
// 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;
else if (offset < 0)
offset = 0;
+ *timestamp = av_rescale_q(offset / frame_size, c->sys->time_base, c->vst->time_base);
+
return offset + si->data_offset;
}
-void ff_dv_offset_reset(DVDemuxContext *c, int64_t frame_offset)
+void ff_dv_ts_reset(DVDemuxContext *c, int64_t ts)
{
- c->frames = frame_offset;
+ c->frames = !c->sys ? 0 :
+ av_rescale_q(ts, c->vst->time_base, c->sys->time_base);
+ c->next_pts_video = ts;
+
c->audio_pkt[0].size = c->audio_pkt[1].size = 0;
c->audio_pkt[2].size = c->audio_pkt[3].size = 0;
}
@@ -618,12 +629,19 @@ static int dv_read_seek(AVFormatContext *s, int stream_index,
{
RawDVContext *r = s->priv_data;
DVDemuxContext *c = &r->dv_demux;
- int64_t offset = dv_frame_offset(s, c, timestamp, flags);
+ int64_t offset;
+
+ // seek using the video stream
+ if (stream_index != c->vst->index)
+ timestamp = av_rescale_q(timestamp, s->streams[stream_index]->time_base,
+ c->vst->time_base);
+
+ offset = dv_frame_offset(s, c, ×tamp);
if (avio_seek(s->pb, offset, SEEK_SET) < 0)
return -1;
- ff_dv_offset_reset(c, offset / c->sys->frame_size);
+ ff_dv_ts_reset(c, timestamp);
return 0;
}
diff --git a/libavformat/dv.h b/libavformat/dv.h
index efced6ccf0..d21ea19e02 100644
--- a/libavformat/dv.h
+++ b/libavformat/dv.h
@@ -34,6 +34,6 @@ typedef struct DVDemuxContext DVDemuxContext;
DVDemuxContext* avpriv_dv_init_demux(AVFormatContext* s);
int avpriv_dv_get_packet(DVDemuxContext*, AVPacket *);
int avpriv_dv_produce_packet(DVDemuxContext*, AVPacket*, uint8_t*, int, int64_t);
-void ff_dv_offset_reset(DVDemuxContext *c, int64_t frame_offset);
+void ff_dv_ts_reset(DVDemuxContext *c, int64_t ts_video);
#endif /* AVFORMAT_DV_H */
diff --git a/tests/ref/seek/lavf-dv b/tests/ref/seek/lavf-dv
index f63e4460be..95f19d28f0 100644
--- a/tests/ref/seek/lavf-dv
+++ b/tests/ref/seek/lavf-dv
@@ -3,9 +3,9 @@ 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
@@ -15,9 +15,9 @@ 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
@@ -27,9 +27,9 @@ 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
@@ -39,9 +39,9 @@ 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
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.39.2
_______________________________________________
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".
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [FFmpeg-devel] [PATCH] lavf/dv: do not set video timebase more than once
2023-04-27 11:39 ` [FFmpeg-devel] [PATCH] " Anton Khirnov
@ 2023-05-01 9:52 ` Anton Khirnov
0 siblings, 0 replies; 7+ messages in thread
From: Anton Khirnov @ 2023-05-01 9:52 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Will push the set tomorrow if nobody has further objections.
--
Anton Khirnov
_______________________________________________
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".
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-05-01 9:53 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-24 15:55 [FFmpeg-devel] [PATCH 1/3] lavf/dv: do not set video timebase more than once Anton Khirnov
2023-04-24 15:55 ` [FFmpeg-devel] [PATCH 2/3] lavf/dv: shorten code by using a local variable Anton Khirnov
2023-04-24 15:55 ` [FFmpeg-devel] [PATCH 3/3] lavf/dv: use a more granular timebase for audio Anton Khirnov
2023-04-26 11:54 ` [FFmpeg-devel] [PATCH 1/3] lavf/dv: do not set video timebase more than once Michael Niedermayer
2023-04-27 7:48 ` Anton Khirnov
2023-04-27 11:39 ` [FFmpeg-devel] [PATCH] " Anton Khirnov
2023-05-01 9:52 ` Anton Khirnov
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