aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2023-04-15 09:46:29 +0200
committerAnton Khirnov <anton@khirnov.net>2023-04-24 16:56:06 +0200
commitc94e9d03b44d21282418dfb6c84f4f7942d4db03 (patch)
treec8be2932d838aec8d9917b72a833dd91f1c0b190
parentcd3049277343abd336f941e07549727d6e1b3ed8 (diff)
downloadffmpeg-c94e9d03b44d21282418dfb6c84f4f7942d4db03.tar.gz
fftools/ffmpeg_enc: always use video frame durations when available
Previously they would only be used with trivial filtergraphs, because filters did not handle frame durations. That is no longer true - most filters process frame durations properly (there may still be some that don't - this change will help finding and fixing them). Improves output video frame durations in a number of FATE tests.
-rw-r--r--fftools/ffmpeg_enc.c19
-rw-r--r--tests/ref/fate/filter-concat-vfr66
-rw-r--r--tests/ref/fate/gif-disposal-restore2
-rw-r--r--tests/ref/fate/gif-gray72
-rw-r--r--tests/ref/fate/quickdraw2
5 files changed, 77 insertions, 84 deletions
diff --git a/fftools/ffmpeg_enc.c b/fftools/ffmpeg_enc.c
index e3dc858bc3..9aaec277f1 100644
--- a/fftools/ffmpeg_enc.c
+++ b/fftools/ffmpeg_enc.c
@@ -1005,24 +1005,17 @@ static void do_video_out(OutputFile *of,
AVRational frame_rate;
int64_t nb_frames, nb_frames_prev, i;
double duration = 0;
- InputStream *ist = ost->ist;
AVFilterContext *filter = ost->filter->filter;
- frame_rate = av_buffersink_get_frame_rate(filter);
- if (frame_rate.num > 0 && frame_rate.den > 0)
- duration = 1/(av_q2d(frame_rate) * av_q2d(enc->time_base));
+ if (next_picture)
+ duration = lrintf(next_picture->duration * av_q2d(next_picture->time_base) / av_q2d(enc->time_base));
- if(ist && ist->st->start_time != AV_NOPTS_VALUE && ist->first_dts != AV_NOPTS_VALUE && ost->frame_rate.num)
+ if (duration <= 0 && ost->frame_rate.num)
duration = FFMIN(duration, 1/(av_q2d(ost->frame_rate) * av_q2d(enc->time_base)));
- if (!ost->filters_script &&
- !ost->filters &&
- (nb_filtergraphs == 0 || !filtergraphs[0]->graph_desc) &&
- next_picture &&
- ist &&
- lrintf(next_picture->duration * av_q2d(ist->st->time_base) / av_q2d(enc->time_base)) > 0) {
- duration = lrintf(next_picture->duration * av_q2d(ist->st->time_base) / av_q2d(enc->time_base));
- }
+ frame_rate = av_buffersink_get_frame_rate(filter);
+ if (duration <= 0 && frame_rate.num > 0 && frame_rate.den > 0)
+ duration = 1/(av_q2d(frame_rate) * av_q2d(enc->time_base));
if (!next_picture) {
//end, flushing
diff --git a/tests/ref/fate/filter-concat-vfr b/tests/ref/fate/filter-concat-vfr
index 7c5e12e093..66e9007da8 100644
--- a/tests/ref/fate/filter-concat-vfr
+++ b/tests/ref/fate/filter-concat-vfr
@@ -8,7 +8,7 @@
#codec_id 1: pcm_s16le
#sample_rate 1: 44100
#channel_layout_name 1: mono
-0, 0, 0, 0, 230400, 0x88c4d19a
+0, 0, 0, 199999, 230400, 0x88c4d19a
1, 0, 0, 1024, 2048, 0xb3f10192
1, 1024, 1024, 1024, 2048, 0xb340fe4e
1, 2048, 2048, 1024, 2048, 0x0a5f0111
@@ -18,7 +18,7 @@
1, 6144, 6144, 1024, 2048, 0x70a8fa17
1, 7168, 7168, 1024, 2048, 0x0dad072a
1, 8192, 8192, 1024, 2048, 0x5e810c51
-0, 200000, 200000, 0, 230400, 0x0d77c977
+0, 200000, 200000, 200000, 230400, 0x0d77c977
1, 9216, 9216, 1024, 2048, 0xbe5bf462
1, 10240, 10240, 1024, 2048, 0xbcd9faeb
1, 11264, 11264, 1024, 2048, 0x0d5bfe9c
@@ -28,7 +28,7 @@
1, 15360, 15360, 1024, 2048, 0x11a9fa03
1, 16384, 16384, 1024, 2048, 0x9a920378
1, 17408, 17408, 1024, 2048, 0x901b0525
-0, 400000, 400000, 0, 230400, 0x242629d7
+0, 400000, 400000, 200000, 230400, 0x242629d7
1, 18432, 18432, 1024, 2048, 0x74b2003f
1, 19456, 19456, 1024, 2048, 0xa20ef3ed
1, 20480, 20480, 1024, 2048, 0x44cef9de
@@ -37,7 +37,7 @@
1, 23552, 23552, 1024, 2048, 0xcab6f9e5
1, 24576, 24576, 1024, 2048, 0x67f8f608
1, 25600, 25600, 1024, 2048, 0x8d7f03fa
-0, 600000, 600000, 0, 230400, 0x62cdc018
+0, 600000, 600000, 200000, 230400, 0x62cdc018
1, 26624, 26624, 1024, 2048, 0x3e1e0566
1, 27648, 27648, 1024, 2048, 0x2cfe0308
1, 28672, 28672, 1024, 2048, 0x1ceaf702
@@ -47,7 +47,7 @@
1, 32768, 32768, 1024, 2048, 0x3e5afa28
1, 33792, 33792, 1024, 2048, 0x053ff47a
1, 34816, 34816, 1024, 2048, 0x0d28fed9
-0, 800000, 800000, 0, 230400, 0x248ad058
+0, 800000, 800000, 200000, 230400, 0x248ad058
1, 35840, 35840, 1024, 2048, 0x279805cc
1, 36864, 36864, 1024, 2048, 0xb16a0a12
1, 37888, 37888, 1024, 2048, 0xb45af340
@@ -57,72 +57,72 @@
1, 41984, 41984, 1024, 2048, 0x503800ce
1, 43008, 43008, 1024, 2048, 0xa3bbf4af
1, 44032, 44032, 68, 136, 0xc8d751c7
-0, 1000000, 1000000, 0, 230400, 0x223d134f
+0, 1000000, 1000000, 200000, 230400, 0x223d134f
1, 44100, 44100, 9600, 19200, 0x00000000
-0, 1200000, 1200000, 0, 230400, 0xbf1c3d34
+0, 1200000, 1200000, 200000, 230400, 0xbf1c3d34
1, 53700, 53700, 9600, 19200, 0x00000000
-0, 1400000, 1400000, 0, 230400, 0xae0efe96
+0, 1400000, 1400000, 200000, 230400, 0xae0efe96
1, 63300, 63300, 9600, 19200, 0x00000000
-0, 1600000, 1600000, 0, 230400, 0x0cd624d1
+0, 1600000, 1600000, 200000, 230400, 0x0cd624d1
1, 72900, 72900, 9600, 19200, 0x00000000
-0, 1800000, 1800000, 0, 230400, 0x6dedf2c0
+0, 1800000, 1800000, 200000, 230400, 0x6dedf2c0
1, 82500, 82500, 5700, 11400, 0x00000000
-0, 2000000, 2000000, 0, 230400, 0x88c4d19a
+0, 2000000, 2000000, 66667, 230400, 0x88c4d19a
1, 88200, 88200, 1024, 2048, 0x283efb3a
1, 89224, 89224, 1024, 2048, 0x7692fb8f
1, 90248, 90248, 1024, 2048, 0xbaaafcc0
-0, 2066667, 2066667, 0, 230400, 0x5bbc2f63
+0, 2066667, 2066667, 66667, 230400, 0x5bbc2f63
1, 91272, 91272, 1024, 2048, 0xadc8017e
1, 92296, 92296, 1024, 2048, 0x4f4dffdc
1, 93320, 93320, 1024, 2048, 0x7ffbff48
-0, 2133333, 2133333, 0, 230400, 0x3becbfad
+0, 2133333, 2133333, 66667, 230400, 0x3becbfad
1, 94344, 94344, 1024, 2048, 0x2f990719
1, 95368, 95368, 1024, 2048, 0xe2caf65c
1, 96392, 96392, 1024, 2048, 0x825208e4
-0, 2200000, 2200000, 0, 230400, 0x0d77c977
+0, 2200000, 2200000, 66667, 230400, 0x0d77c977
1, 97416, 97416, 1024, 2048, 0xf563f13b
1, 98440, 98440, 1024, 2048, 0x855d03e9
1, 99464, 99464, 1024, 2048, 0x0ba9fa4b
-0, 2266667, 2266667, 0, 230400, 0x436cf4b2
+0, 2266667, 2266667, 66667, 230400, 0x436cf4b2
1, 100488, 100488, 1024, 2048, 0x83e1fb92
1, 101512, 101512, 1024, 2048, 0x1162f965
1, 102536, 102536, 1024, 2048, 0x0cfef73d
-0, 2333333, 2333333, 0, 230400, 0x39210f27
+0, 2333333, 2333333, 66667, 230400, 0x39210f27
1, 103560, 103560, 1024, 2048, 0x5688ff75
1, 104584, 104584, 1024, 2048, 0xf6c0ede9
1, 105608, 105608, 1024, 2048, 0xfdb20602
-0, 2400000, 2400000, 0, 230400, 0x242629d7
+0, 2400000, 2400000, 66667, 230400, 0x242629d7
1, 106632, 106632, 1024, 2048, 0x40c5f17b
1, 107656, 107656, 1024, 2048, 0x559600b1
1, 108680, 108680, 1024, 2048, 0xccc3f930
-0, 2466667, 2466667, 0, 230400, 0x771c2293
+0, 2466667, 2466667, 66667, 230400, 0x771c2293
1, 109704, 109704, 1024, 2048, 0xdc800045
1, 110728, 110728, 1024, 2048, 0xdce4fb3e
-0, 2533333, 2533333, 0, 230400, 0xec2af9a9
+0, 2533333, 2533333, 66667, 230400, 0xec2af9a9
1, 111752, 111752, 1024, 2048, 0x1e5efba9
1, 112776, 112776, 1024, 2048, 0x8c2e0832
1, 113800, 113800, 1024, 2048, 0x5c42f66d
-0, 2600000, 2600000, 0, 230400, 0x62cdc018
+0, 2600000, 2600000, 66667, 230400, 0x62cdc018
1, 114824, 114824, 1024, 2048, 0x08e20b1e
1, 115848, 115848, 1024, 2048, 0x4cf7f903
1, 116872, 116872, 1024, 2048, 0xe6b90794
-0, 2666667, 2666667, 0, 230400, 0xf02c8693
+0, 2666667, 2666667, 66667, 230400, 0xf02c8693
1, 117896, 117896, 1024, 2048, 0x5956f8e6
1, 118920, 118920, 1024, 2048, 0x6632ff16
1, 119944, 119944, 1024, 2048, 0x46c8fe11
-0, 2733333, 2733333, 0, 230400, 0x14436efb
+0, 2733333, 2733333, 66667, 230400, 0x14436efb
1, 120968, 120968, 1024, 2048, 0x7431f732
1, 121992, 121992, 1024, 2048, 0xa258049f
1, 123016, 123016, 1024, 2048, 0xdb71f00e
-0, 2800000, 2800000, 0, 230400, 0x248ad058
+0, 2800000, 2800000, 66667, 230400, 0x248ad058
1, 124040, 124040, 1024, 2048, 0xa89b0359
1, 125064, 125064, 1024, 2048, 0xe0aff0f2
1, 126088, 126088, 1024, 2048, 0xc33e0085
-0, 2866667, 2866667, 0, 230400, 0xe87f6c52
+0, 2866667, 2866667, 66667, 230400, 0xe87f6c52
1, 127112, 127112, 1024, 2048, 0x9d09f379
1, 128136, 128136, 1024, 2048, 0x8c78fd06
1, 129160, 129160, 1024, 2048, 0x532bfbdd
-0, 2933333, 2933333, 0, 230400, 0x6a0c196b
+0, 2933333, 2933333, 66667, 230400, 0x6a0c196b
1, 130184, 130184, 1024, 2048, 0xfc36f5cd
1, 131208, 131208, 1024, 2048, 0x2e8f0699
1, 132232, 132232, 1024, 2048, 0x52382578
@@ -169,52 +169,52 @@
1, 174216, 174216, 1024, 2048, 0xf86ff855
1, 175240, 175240, 1024, 2048, 0x6934061b
1, 176264, 176264, 136, 272, 0x4a458a45
-0, 4000000, 4000000, 0, 230400, 0x88c4d19a
+0, 4000000, 4000000, 125000, 230400, 0x88c4d19a
1, 176400, 176400, 1024, 2048, 0xdb0cfe95
1, 177424, 177424, 1024, 2048, 0xcff3fdf1
1, 178448, 178448, 1024, 2048, 0x070cf585
1, 179472, 179472, 1024, 2048, 0xe9b8007f
1, 180496, 180496, 1024, 2048, 0xc51ffd64
1, 181520, 181520, 1024, 2048, 0xede2fbf9
-0, 4125000, 4125000, 0, 230400, 0x05c1b733
+0, 4125000, 4125000, 125000, 230400, 0x05c1b733
1, 182544, 182544, 1024, 2048, 0x51510410
1, 183568, 183568, 1024, 2048, 0x198af498
1, 184592, 184592, 1024, 2048, 0xae3603a2
1, 185616, 185616, 1024, 2048, 0x6200f7a1
1, 186640, 186640, 1024, 2048, 0xe6e3fe32
-0, 4250000, 4250000, 0, 230400, 0x0446ec19
+0, 4250000, 4250000, 125000, 230400, 0x0446ec19
1, 187664, 187664, 1024, 2048, 0xb2e2fd77
1, 188688, 188688, 1024, 2048, 0x063dff2f
1, 189712, 189712, 1024, 2048, 0xa89ffe21
1, 190736, 190736, 1024, 2048, 0x9e6ffa6d
1, 191760, 191760, 1024, 2048, 0x028b004e
1, 192784, 192784, 1024, 2048, 0x57edfa23
-0, 4375000, 4375000, 0, 230400, 0x0f9b1744
+0, 4375000, 4375000, 125000, 230400, 0x0f9b1744
1, 193808, 193808, 1024, 2048, 0x6d8efe1f
1, 194832, 194832, 1024, 2048, 0x774bfe54
1, 195856, 195856, 1024, 2048, 0xa931fcfb
1, 196880, 196880, 1024, 2048, 0x3505004b
1, 197904, 197904, 1024, 2048, 0x5001f576
-0, 4500000, 4500000, 0, 230400, 0x30cf070a
+0, 4500000, 4500000, 125000, 230400, 0x30cf070a
1, 198928, 198928, 1024, 2048, 0x78ea049b
1, 199952, 199952, 1024, 2048, 0xd45bf733
1, 200976, 200976, 1024, 2048, 0x6395fead
1, 202000, 202000, 1024, 2048, 0xc126015e
1, 203024, 203024, 1024, 2048, 0xbecff8aa
-0, 4625000, 4625000, 0, 230400, 0x9175aaa9
+0, 4625000, 4625000, 125000, 230400, 0x9175aaa9
1, 204048, 204048, 1024, 2048, 0x0fea06c3
1, 205072, 205072, 1024, 2048, 0xdea6f351
1, 206096, 206096, 1024, 2048, 0x35b808f0
1, 207120, 207120, 1024, 2048, 0x5487ee73
1, 208144, 208144, 1024, 2048, 0xac69050e
1, 209168, 209168, 1024, 2048, 0xcc5ffb00
-0, 4750000, 4750000, 0, 230400, 0x597f5628
+0, 4750000, 4750000, 125000, 230400, 0x597f5628
1, 210192, 210192, 1024, 2048, 0x328c00cb
1, 211216, 211216, 1024, 2048, 0xa707fd82
1, 212240, 212240, 1024, 2048, 0xe442f73d
1, 213264, 213264, 1024, 2048, 0x545c0418
1, 214288, 214288, 1024, 2048, 0x744ff3f7
-0, 4875000, 4875000, 0, 230400, 0x38a45a85
+0, 4875000, 4875000, 125000, 230400, 0x38a45a85
1, 215312, 215312, 1024, 2048, 0x01aa04fd
1, 216336, 216336, 1024, 2048, 0xa885f7cd
1, 217360, 217360, 1024, 2048, 0xcfca04f4
diff --git a/tests/ref/fate/gif-disposal-restore b/tests/ref/fate/gif-disposal-restore
index b1282f61de..aca80c5e6d 100644
--- a/tests/ref/fate/gif-disposal-restore
+++ b/tests/ref/fate/gif-disposal-restore
@@ -4,5 +4,5 @@
#dimensions 0: 468x60
#sar 0: 0/1
0, 0, 0, 1, 112320, 0xb8afe429
-0, 1, 1, 1, 112320, 0xae588a4b
+0, 1, 1, 2, 112320, 0xae588a4b
0, 3, 3, 1, 112320, 0xccdd27b7
diff --git a/tests/ref/fate/gif-gray b/tests/ref/fate/gif-gray
index 18705d01fe..aa3969212d 100644
--- a/tests/ref/fate/gif-gray
+++ b/tests/ref/fate/gif-gray
@@ -3,39 +3,39 @@
#codec_id 0: rawvideo
#dimensions 0: 480x360
#sar 0: 0/1
-0, 0, 0, 1, 691200, 0xef6c0f3d
-0, 5, 5, 1, 691200, 0xc18b32de
-0, 7, 7, 1, 691200, 0x2395a3d7
-0, 9, 9, 1, 691200, 0x81dc3cf2
-0, 11, 11, 1, 691200, 0xabe2390e
-0, 13, 13, 1, 691200, 0xb2955c2a
-0, 15, 15, 1, 691200, 0x868d9ca2
-0, 17, 17, 1, 691200, 0x3016c2b6
-0, 19, 19, 1, 691200, 0x4501cffa
-0, 21, 21, 1, 691200, 0x8661d79e
-0, 25, 25, 1, 691200, 0xbc96d02e
-0, 27, 27, 1, 691200, 0x5f90bf5e
-0, 29, 29, 1, 691200, 0xf18da09a
-0, 31, 31, 1, 691200, 0x540467ce
-0, 33, 33, 1, 691200, 0x60d24012
-0, 35, 35, 1, 691200, 0x24323d36
-0, 37, 37, 1, 691200, 0x9e07c84b
-0, 39, 39, 1, 691200, 0xc18b32de
-0, 41, 41, 1, 691200, 0xef6c0f3d
-0, 46, 46, 1, 691200, 0xc9461045
-0, 48, 48, 1, 691200, 0x23ed4b99
-0, 50, 50, 1, 691200, 0x7e351d69
-0, 52, 52, 1, 691200, 0x0513e0aa
-0, 54, 54, 1, 691200, 0x28a4b6f2
-0, 56, 56, 1, 691200, 0xce10a94e
-0, 58, 58, 1, 691200, 0x63929d4e
-0, 60, 60, 1, 691200, 0xd26c9bb6
-0, 62, 62, 1, 691200, 0xb2a29842
-0, 66, 66, 1, 691200, 0x9fd69a16
-0, 68, 68, 1, 691200, 0x10f99e46
-0, 70, 70, 1, 691200, 0xea95a9fa
-0, 72, 72, 1, 691200, 0x97dbb9d6
-0, 74, 74, 1, 691200, 0xf4e9e2d6
-0, 76, 76, 1, 691200, 0x46b1230d
-0, 78, 78, 1, 691200, 0xb4a54ccd
-0, 80, 80, 1, 691200, 0x40cc103d
+0, 0, 0, 4, 691200, 0xef6c0f3d
+0, 5, 5, 2, 691200, 0xc18b32de
+0, 7, 7, 2, 691200, 0x2395a3d7
+0, 9, 9, 2, 691200, 0x81dc3cf2
+0, 11, 11, 2, 691200, 0xabe2390e
+0, 13, 13, 2, 691200, 0xb2955c2a
+0, 15, 15, 2, 691200, 0x868d9ca2
+0, 17, 17, 2, 691200, 0x3016c2b6
+0, 19, 19, 2, 691200, 0x4501cffa
+0, 21, 21, 4, 691200, 0x8661d79e
+0, 25, 25, 2, 691200, 0xbc96d02e
+0, 27, 27, 2, 691200, 0x5f90bf5e
+0, 29, 29, 2, 691200, 0xf18da09a
+0, 31, 31, 2, 691200, 0x540467ce
+0, 33, 33, 2, 691200, 0x60d24012
+0, 35, 35, 2, 691200, 0x24323d36
+0, 37, 37, 2, 691200, 0x9e07c84b
+0, 39, 39, 2, 691200, 0xc18b32de
+0, 41, 41, 5, 691200, 0xef6c0f3d
+0, 46, 46, 2, 691200, 0xc9461045
+0, 48, 48, 2, 691200, 0x23ed4b99
+0, 50, 50, 2, 691200, 0x7e351d69
+0, 52, 52, 2, 691200, 0x0513e0aa
+0, 54, 54, 2, 691200, 0x28a4b6f2
+0, 56, 56, 2, 691200, 0xce10a94e
+0, 58, 58, 2, 691200, 0x63929d4e
+0, 60, 60, 2, 691200, 0xd26c9bb6
+0, 62, 62, 4, 691200, 0xb2a29842
+0, 66, 66, 2, 691200, 0x9fd69a16
+0, 68, 68, 2, 691200, 0x10f99e46
+0, 70, 70, 2, 691200, 0xea95a9fa
+0, 72, 72, 2, 691200, 0x97dbb9d6
+0, 74, 74, 2, 691200, 0xf4e9e2d6
+0, 76, 76, 2, 691200, 0x46b1230d
+0, 78, 78, 2, 691200, 0xb4a54ccd
+0, 80, 80, 2, 691200, 0x40cc103d
diff --git a/tests/ref/fate/quickdraw b/tests/ref/fate/quickdraw
index 5746929502..44610498c8 100644
--- a/tests/ref/fate/quickdraw
+++ b/tests/ref/fate/quickdraw
@@ -9,7 +9,7 @@
0, 3, 3, 1, 921600, 0xc0e68764
0, 4, 4, 1, 921600, 0xc0e68764
0, 5, 5, 1, 921600, 0xc0e68764
-0, 7, 7, 1, 921600, 0x01a16629
+0, 7, 7, 2, 921600, 0x01a16629
0, 9, 9, 1, 921600, 0x01a16629
0, 10, 10, 1, 921600, 0x01a16629
0, 11, 11, 1, 921600, 0x01a16629