From 27f7589ab1ad0f6d2694d713e176dfa234662e60 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Fri, 21 Oct 2011 20:45:00 +0200 Subject: [PATCH] seek: Fix av_gen_search() so that seeks outside max/min do not successfully seek to random points but rather seek to the min/max. Signed-off-by: Michael Niedermayer --- libavformat/utils.c | 10 ++++++++++ tests/ref/seek/ac3_rm | 37 +++++++++++++++++-------------------- tests/ref/seek/lavf_asf | 20 +++++++++++++------- tests/ref/seek/lavf_rm | 18 ++++++++++++------ tests/ref/seek/lavf_ts | 18 +++++++++--------- tests/ref/seek/wmav1_asf | 2 +- tests/ref/seek/wmav2_asf | 2 +- 7 files changed, 63 insertions(+), 44 deletions(-) diff --git a/libavformat/utils.c b/libavformat/utils.c index a788eefc341..b931f77bb57 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -1621,6 +1621,11 @@ int64_t av_gen_search(AVFormatContext *s, int stream_index, int64_t target_ts, i return -1; } + if(ts_min >= target_ts){ + *ts_ret= ts_min; + return pos_min; + } + if(ts_max == AV_NOPTS_VALUE){ int step= 1024; filesize = avio_size(s->pb); @@ -1646,6 +1651,11 @@ int64_t av_gen_search(AVFormatContext *s, int stream_index, int64_t target_ts, i pos_limit= pos_max; } + if(ts_max <= target_ts){ + *ts_ret= ts_max; + return pos_max; + } + if(ts_min > ts_max){ return -1; }else if(ts_min == ts_max){ diff --git a/tests/ref/seek/ac3_rm b/tests/ref/seek/ac3_rm index b38758bb2c6..ecf03c29a18 100644 --- a/tests/ref/seek/ac3_rm +++ b/tests/ref/seek/ac3_rm @@ -5,40 +5,37 @@ ret:-1 st:-1 flags:1 ts: 1.894167 ret:-1 st: 0 flags:0 ts: 0.788000 ret: 0 st: 0 flags:1 ts:-0.317000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 271 size: 556 -ret:-1 st:-1 flags:0 ts: 2.576668 +ret: 0 st:-1 flags:0 ts: 2.576668 +ret: 0 st: 0 flags:1 dts: 2.124000 pts: 2.124000 pos: 34997 size: 558 ret:-1 st:-1 flags:1 ts: 1.470835 ret:-1 st: 0 flags:0 ts: 0.365000 ret: 0 st: 0 flags:1 ts:-0.741000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 271 size: 556 -ret:-1 st:-1 flags:0 ts: 2.153336 +ret: 0 st:-1 flags:0 ts: 2.153336 +ret: 0 st: 0 flags:1 dts: 2.124000 pts: 2.124000 pos: 34997 size: 558 ret:-1 st:-1 flags:1 ts: 1.047503 ret: 0 st: 0 flags:0 ts:-0.058000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 271 size: 556 -ret:-1 st: 0 flags:1 ts: 2.836000 -ret: 0 st:-1 flags:0 ts: 1.730004 -ret: 0 st: 0 flags:1 dts:8589.800000 pts:8589.800000 pos: 65950 size: 32801 -ret: 0 st:-1 flags:1 ts: 0.624171 -ret: 0 st: 0 flags:1 dts: 0.256000 pts: 0.256000 pos: 65337 size: 400 +ret: 0 st: 0 flags:1 ts: 2.836000 +ret: 0 st: 0 flags:1 dts: 2.124000 pts: 2.124000 pos: 34997 size: 558 +ret:-1 st:-1 flags:0 ts: 1.730004 +ret:-1 st:-1 flags:1 ts: 0.624171 ret: 0 st: 0 flags:0 ts:-0.482000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 271 size: 556 -ret:-1 st: 0 flags:1 ts: 2.413000 +ret: 0 st: 0 flags:1 ts: 2.413000 +ret: 0 st: 0 flags:1 dts: 2.124000 pts: 2.124000 pos: 34997 size: 558 ret: 0 st:-1 flags:0 ts: 1.306672 -ret: 0 st: 0 flags:1 dts:8589.800000 pts:8589.800000 pos: 65950 size: 32801 -ret: 0 st:-1 flags:1 ts: 0.200839 -ret: 0 st: 0 flags:1 dts: 0.034000 pts: 0.034000 pos: 839 size: 558 +ret: 0 st: 0 flags:1 dts:65.537000 pts:65.537000 pos: 87488 size: 6132 +ret:-1 st:-1 flags:1 ts: 0.200839 ret: 0 st: 0 flags:0 ts:-0.905000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 271 size: 556 -ret: 0 st: 0 flags:1 ts: 1.989000 -ret: 0 st: 0 flags:1 dts: 0.256000 pts: 0.256000 pos: 65337 size: 400 -ret: 0 st:-1 flags:0 ts: 0.883340 -ret: 0 st: 0 flags:1 dts: 3.378000 pts: 3.378000 pos: 55491 size: 558 +ret:-1 st: 0 flags:1 ts: 1.989000 +ret:-1 st:-1 flags:0 ts: 0.883340 ret: 0 st:-1 flags:1 ts:-0.222493 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 271 size: 556 -ret: 0 st: 0 flags:0 ts: 2.672000 -ret: 0 st: 0 flags:1 dts: 3.378000 pts: 3.378000 pos: 55491 size: 558 -ret: 0 st: 0 flags:1 ts: 1.566000 -ret: 0 st: 0 flags:1 dts: 0.256000 pts: 0.256000 pos: 65337 size: 400 +ret:-1 st: 0 flags:0 ts: 2.672000 +ret:-1 st: 0 flags:1 ts: 1.566000 ret: 0 st:-1 flags:0 ts: 0.460008 -ret: 0 st: 0 flags:1 dts: 3.378000 pts: 3.378000 pos: 55491 size: 558 +ret: 0 st: 0 flags:1 dts: 1.567000 pts: 1.567000 pos: 25889 size: 556 ret: 0 st:-1 flags:1 ts:-0.645825 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 271 size: 556 diff --git a/tests/ref/seek/lavf_asf b/tests/ref/seek/lavf_asf index 757fd0e0bb4..18e4fb9b991 100644 --- a/tests/ref/seek/lavf_asf +++ b/tests/ref/seek/lavf_asf @@ -1,14 +1,16 @@ ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 575 size: 28487 ret: 0 st:-1 flags:0 ts:-1.000000 -ret: 0 st: 1 flags:1 dts: 0.444000 pts: 0.444000 pos: 147775 size: 209 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 575 size: 28487 ret: 0 st:-1 flags:1 ts: 1.894167 ret: 0 st: 1 flags:1 dts: 0.960000 pts: 0.960000 pos: -1 size: 209 ret: 0 st: 0 flags:0 ts: 0.788000 ret: 0 st: 1 flags:1 dts: 0.960000 pts: 0.960000 pos: -1 size: 209 ret: 0 st: 0 flags:1 ts:-0.317000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 575 size: 28487 -ret:-1 st: 1 flags:0 ts: 2.577000 -ret:-1 st: 1 flags:1 ts: 1.471000 +ret: 0 st: 1 flags:0 ts: 2.577000 +ret: 0 st: 1 flags:1 dts: 0.967000 pts: 0.967000 pos: -1 size: 209 +ret: 0 st: 1 flags:1 ts: 1.471000 +ret: 0 st: 1 flags:1 dts: 0.967000 pts: 0.967000 pos: -1 size: 209 ret: 0 st:-1 flags:0 ts: 0.365002 ret: 0 st: 1 flags:1 dts: 0.444000 pts: 0.444000 pos: 147775 size: 209 ret: 0 st:-1 flags:1 ts:-0.740831 @@ -19,7 +21,8 @@ ret: 0 st: 0 flags:1 ts: 1.048000 ret: 0 st: 1 flags:1 dts: 0.960000 pts: 0.960000 pos: -1 size: 209 ret: 0 st: 1 flags:0 ts:-0.058000 ret: 0 st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos: 29375 size: 208 -ret:-1 st: 1 flags:1 ts: 2.836000 +ret: 0 st: 1 flags:1 ts: 2.836000 +ret: 0 st: 1 flags:1 dts: 0.967000 pts: 0.967000 pos: -1 size: 209 ret: 0 st:-1 flags:0 ts: 1.730004 ret: 0 st: 1 flags:1 dts: 0.960000 pts: 0.960000 pos: -1 size: 209 ret: 0 st:-1 flags:1 ts: 0.624171 @@ -28,7 +31,8 @@ ret: 0 st: 0 flags:0 ts:-0.482000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 575 size: 28487 ret: 0 st: 0 flags:1 ts: 2.413000 ret: 0 st: 1 flags:1 dts: 0.960000 pts: 0.960000 pos: -1 size: 209 -ret:-1 st: 1 flags:0 ts: 1.307000 +ret: 0 st: 1 flags:0 ts: 1.307000 +ret: 0 st: 1 flags:1 dts: 0.967000 pts: 0.967000 pos: -1 size: 209 ret: 0 st: 1 flags:1 ts: 0.201000 ret: 0 st: 1 flags:1 dts: 0.183000 pts: 0.183000 pos: 70975 size: 209 ret: 0 st:-1 flags:0 ts:-0.904994 @@ -39,8 +43,10 @@ ret: 0 st: 0 flags:0 ts: 0.883000 ret: 0 st: 1 flags:1 dts: 0.960000 pts: 0.960000 pos: -1 size: 209 ret: 0 st: 0 flags:1 ts:-0.222000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 575 size: 28487 -ret:-1 st: 1 flags:0 ts: 2.672000 -ret:-1 st: 1 flags:1 ts: 1.566000 +ret: 0 st: 1 flags:0 ts: 2.672000 +ret: 0 st: 1 flags:1 dts: 0.967000 pts: 0.967000 pos: -1 size: 209 +ret: 0 st: 1 flags:1 ts: 1.566000 +ret: 0 st: 1 flags:1 dts: 0.967000 pts: 0.967000 pos: -1 size: 209 ret: 0 st:-1 flags:0 ts: 0.460008 ret: 0 st: 1 flags:1 dts: 0.444000 pts: 0.444000 pos: 147775 size: 209 ret: 0 st:-1 flags:1 ts:-0.645825 diff --git a/tests/ref/seek/lavf_rm b/tests/ref/seek/lavf_rm index 188367bc90a..394928086b8 100644 --- a/tests/ref/seek/lavf_rm +++ b/tests/ref/seek/lavf_rm @@ -7,8 +7,10 @@ ret: 0 st: 0 flags:0 ts: 0.788000 ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314982 size: 31143 ret: 0 st: 0 flags:1 ts:-0.317000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 398 size: 31082 -ret:-1 st: 1 flags:0 ts: 2.577000 -ret:-1 st: 1 flags:1 ts: 1.471000 +ret: 0 st: 1 flags:0 ts: 2.577000 +ret: 0 st: 1 flags:1 dts: 0.975000 pts: 0.975000 pos: 346128 size: 278 +ret: 0 st: 1 flags:1 ts: 1.471000 +ret: 0 st: 1 flags:1 dts: 0.975000 pts: 0.975000 pos: 346128 size: 278 ret: 0 st:-1 flags:0 ts: 0.365002 ret: 0 st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 158515 size: 31134 ret: 0 st:-1 flags:1 ts:-0.740831 @@ -19,7 +21,8 @@ ret: 0 st: 0 flags:1 ts: 1.048000 ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314982 size: 31143 ret: 0 st: 1 flags:0 ts:-0.058000 ret: 0 st: 1 flags:1 dts: 0.000000 pts: 0.000000 pos: 31483 size: 278 -ret:-1 st: 1 flags:1 ts: 2.836000 +ret: 0 st: 1 flags:1 ts: 2.836000 +ret: 0 st: 1 flags:1 dts: 0.975000 pts: 0.975000 pos: 346128 size: 278 ret: 0 st:-1 flags:0 ts: 1.730004 ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314982 size: 31143 ret: 0 st:-1 flags:1 ts: 0.624171 @@ -28,7 +31,8 @@ ret: 0 st: 0 flags:0 ts:-0.482000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 398 size: 31082 ret: 0 st: 0 flags:1 ts: 2.413000 ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314982 size: 31143 -ret:-1 st: 1 flags:0 ts: 1.307000 +ret: 0 st: 1 flags:0 ts: 1.307000 +ret: 0 st: 1 flags:1 dts: 0.975000 pts: 0.975000 pos: 346128 size: 278 ret: 0 st: 1 flags:1 ts: 0.201000 ret: 0 st: 1 flags:1 dts: 0.174000 pts: 0.174000 pos: 78969 size: 278 ret: 0 st:-1 flags:0 ts:-0.904994 @@ -39,8 +43,10 @@ ret: 0 st: 0 flags:0 ts: 0.883000 ret: 0 st: 0 flags:1 dts: 0.960000 pts: 0.960000 pos: 314982 size: 31143 ret: 0 st: 0 flags:1 ts:-0.222000 ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 398 size: 31082 -ret:-1 st: 1 flags:0 ts: 2.672000 -ret:-1 st: 1 flags:1 ts: 1.566000 +ret: 0 st: 1 flags:0 ts: 2.672000 +ret: 0 st: 1 flags:1 dts: 0.975000 pts: 0.975000 pos: 346128 size: 278 +ret: 0 st: 1 flags:1 ts: 1.566000 +ret: 0 st: 1 flags:1 dts: 0.975000 pts: 0.975000 pos: 346128 size: 278 ret: 0 st:-1 flags:0 ts: 0.460008 ret: 0 st: 0 flags:1 dts: 0.480000 pts: 0.480000 pos: 158515 size: 31134 ret: 0 st:-1 flags:1 ts:-0.645825 diff --git a/tests/ref/seek/lavf_ts b/tests/ref/seek/lavf_ts index 8e2e4d1ac16..0bc7a527f4f 100644 --- a/tests/ref/seek/lavf_ts +++ b/tests/ref/seek/lavf_ts @@ -1,10 +1,10 @@ ret: 0 st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos: 564 size: 24801 ret: 0 st:-1 flags:0 ts:-1.000000 -ret: 0 st: 0 flags:0 dts: 1.400000 pts: 1.440000 pos: 27072 size: 16433 +ret: 0 st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos: 564 size: 24801 ret: 0 st:-1 flags:1 ts: 1.894167 ret: 0 st: 0 flags:0 dts: 1.880000 pts: 1.920000 pos: 216012 size: 17441 ret: 0 st: 0 flags:0 ts: 0.788333 -ret: 0 st: 0 flags:0 dts: 1.400000 pts: 1.440000 pos: 27072 size: 16433 +ret: 0 st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos: 564 size: 24801 ret: 0 st: 0 flags:1 ts:-0.317500 ret: 0 st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos: 564 size: 24801 ret: 0 st: 1 flags:0 ts: 2.576667 @@ -12,7 +12,7 @@ ret: 0 st: 1 flags:1 dts: 2.131433 pts: 2.131433 pos: 403636 size: 209 ret: 0 st: 1 flags:1 ts: 1.470833 ret: 0 st: 1 flags:1 dts: 1.400000 pts: 1.400000 pos: 172584 size: 208 ret: 0 st:-1 flags:0 ts: 0.365002 -ret: 0 st: 0 flags:0 dts: 1.400000 pts: 1.440000 pos: 27072 size: 16433 +ret: 0 st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos: 564 size: 24801 ret: 0 st:-1 flags:1 ts:-0.740831 ret: 0 st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos: 564 size: 24801 ret: 0 st: 0 flags:0 ts: 2.153333 @@ -20,7 +20,7 @@ ret: 0 st: 0 flags:0 dts: 2.160000 pts: 2.200000 pos: 325240 size: 12679 ret: 0 st: 0 flags:1 ts: 1.047500 ret: 0 st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos: 564 size: 24801 ret: 0 st: 1 flags:0 ts:-0.058333 -ret: 0 st: 1 flags:1 dts: 1.765711 pts: 1.765711 pos: 322232 size: 209 +ret: 0 st: 1 flags:1 dts: 1.400000 pts: 1.400000 pos: 172584 size: 208 ret: 0 st: 1 flags:1 ts: 2.835833 ret: 0 st: 1 flags:1 dts: 2.131433 pts: 2.131433 pos: 403636 size: 209 ret: 0 st:-1 flags:0 ts: 1.730004 @@ -28,19 +28,19 @@ ret: 0 st: 1 flags:1 dts: 1.400000 pts: 1.400000 pos: 172584 size: 208 ret: 0 st:-1 flags:1 ts: 0.624171 ret: 0 st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos: 564 size: 24801 ret: 0 st: 0 flags:0 ts:-0.481667 -ret: 0 st: 0 flags:0 dts: 1.400000 pts: 1.440000 pos: 27072 size: 16433 +ret: 0 st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos: 564 size: 24801 ret: 0 st: 0 flags:1 ts: 2.412500 ret: 0 st: 1 flags:1 dts: 2.131433 pts: 2.131433 pos: 403636 size: 209 ret: 0 st: 1 flags:0 ts: 1.306667 -ret: 0 st: 1 flags:1 dts: 1.765711 pts: 1.765711 pos: 322232 size: 209 +ret: 0 st: 1 flags:1 dts: 1.400000 pts: 1.400000 pos: 172584 size: 208 ret: 0 st: 1 flags:1 ts: 0.200844 ret: 0 st: 1 flags:1 dts: 1.400000 pts: 1.400000 pos: 172584 size: 208 ret: 0 st:-1 flags:0 ts:-0.904994 -ret: 0 st: 0 flags:0 dts: 1.400000 pts: 1.440000 pos: 27072 size: 16433 +ret: 0 st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos: 564 size: 24801 ret: 0 st:-1 flags:1 ts: 1.989173 ret: 0 st: 0 flags:0 dts: 1.960000 pts: 2.000000 pos: 250980 size: 13438 ret: 0 st: 0 flags:0 ts: 0.883344 -ret: 0 st: 0 flags:0 dts: 1.400000 pts: 1.440000 pos: 27072 size: 16433 +ret: 0 st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos: 564 size: 24801 ret: 0 st: 0 flags:1 ts:-0.222489 ret: 0 st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos: 564 size: 24801 ret: 0 st: 1 flags:0 ts: 2.671678 @@ -48,6 +48,6 @@ ret: 0 st: 1 flags:1 dts: 2.131433 pts: 2.131433 pos: 403636 size: 209 ret: 0 st: 1 flags:1 ts: 1.565844 ret: 0 st: 1 flags:1 dts: 1.400000 pts: 1.400000 pos: 172584 size: 208 ret: 0 st:-1 flags:0 ts: 0.460008 -ret: 0 st: 0 flags:0 dts: 1.400000 pts: 1.440000 pos: 27072 size: 16433 +ret: 0 st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos: 564 size: 24801 ret: 0 st:-1 flags:1 ts:-0.645825 ret: 0 st: 0 flags:1 dts: 1.360000 pts: 1.400000 pos: 564 size: 24801 diff --git a/tests/ref/seek/wmav1_asf b/tests/ref/seek/wmav1_asf index 47c5b466213..3456e82759b 100644 --- a/tests/ref/seek/wmav1_asf +++ b/tests/ref/seek/wmav1_asf @@ -1,6 +1,6 @@ ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 404 size: 743 ret: 0 st:-1 flags:0 ts:-1.000000 -ret: 0 st: 0 flags:1 dts: 0.186000 pts: 0.186000 pos: 3604 size: 743 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 404 size: 743 ret: 0 st:-1 flags:1 ts: 1.894167 ret: 0 st: 0 flags:1 dts: 1.858000 pts: 1.858000 pos: 32404 size: 743 ret: 0 st: 0 flags:0 ts: 0.788000 diff --git a/tests/ref/seek/wmav2_asf b/tests/ref/seek/wmav2_asf index 7c58da2320c..31e7f3e7d38 100644 --- a/tests/ref/seek/wmav2_asf +++ b/tests/ref/seek/wmav2_asf @@ -1,6 +1,6 @@ ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 444 size: 743 ret: 0 st:-1 flags:0 ts:-1.000000 -ret: 0 st: 0 flags:1 dts: 0.186000 pts: 0.186000 pos: 3644 size: 743 +ret: 0 st: 0 flags:1 dts: 0.000000 pts: 0.000000 pos: 444 size: 743 ret: 0 st:-1 flags:1 ts: 1.894167 ret: 0 st: 0 flags:1 dts: 1.858000 pts: 1.858000 pos: 32444 size: 743 ret: 0 st: 0 flags:0 ts: 0.788000 -- 2.39.2