mirror of https://git.ffmpeg.org/ffmpeg.git
Increase search range if no end timestamp could be found for the duration
calculation. Originally committed as revision 21577 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
351aff72a4
commit
411ff3225f
|
@ -1771,6 +1771,7 @@ static void av_estimate_timings_from_bit_rate(AVFormatContext *ic)
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DURATION_MAX_READ_SIZE 250000
|
#define DURATION_MAX_READ_SIZE 250000
|
||||||
|
#define DURATION_MAX_RETRY 3
|
||||||
|
|
||||||
/* only usable for MPEG-PS streams */
|
/* only usable for MPEG-PS streams */
|
||||||
static void av_estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset)
|
static void av_estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset)
|
||||||
|
@ -1780,6 +1781,7 @@ static void av_estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset
|
||||||
int read_size, i, ret;
|
int read_size, i, ret;
|
||||||
int64_t end_time, start_time[MAX_STREAMS];
|
int64_t end_time, start_time[MAX_STREAMS];
|
||||||
int64_t filesize, offset, duration;
|
int64_t filesize, offset, duration;
|
||||||
|
int retry=0;
|
||||||
|
|
||||||
ic->cur_st = NULL;
|
ic->cur_st = NULL;
|
||||||
|
|
||||||
|
@ -1805,14 +1807,16 @@ static void av_estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset
|
||||||
/* estimate the end time (duration) */
|
/* estimate the end time (duration) */
|
||||||
/* XXX: may need to support wrapping */
|
/* XXX: may need to support wrapping */
|
||||||
filesize = ic->file_size;
|
filesize = ic->file_size;
|
||||||
offset = filesize - DURATION_MAX_READ_SIZE;
|
end_time = AV_NOPTS_VALUE;
|
||||||
|
do{
|
||||||
|
offset = filesize - (DURATION_MAX_READ_SIZE<<retry);
|
||||||
if (offset < 0)
|
if (offset < 0)
|
||||||
offset = 0;
|
offset = 0;
|
||||||
|
|
||||||
url_fseek(ic->pb, offset, SEEK_SET);
|
url_fseek(ic->pb, offset, SEEK_SET);
|
||||||
read_size = 0;
|
read_size = 0;
|
||||||
for(;;) {
|
for(;;) {
|
||||||
if (read_size >= DURATION_MAX_READ_SIZE)
|
if (read_size >= DURATION_MAX_READ_SIZE<<(FFMAX(retry-1,0)))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
do{
|
do{
|
||||||
|
@ -1836,6 +1840,9 @@ static void av_estimate_timings_from_pts(AVFormatContext *ic, int64_t old_offset
|
||||||
}
|
}
|
||||||
av_free_packet(pkt);
|
av_free_packet(pkt);
|
||||||
}
|
}
|
||||||
|
}while( end_time==AV_NOPTS_VALUE
|
||||||
|
&& filesize > (DURATION_MAX_READ_SIZE<<retry)
|
||||||
|
&& ++retry <= DURATION_MAX_RETRY);
|
||||||
|
|
||||||
fill_all_stream_timings(ic);
|
fill_all_stream_timings(ic);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue