mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-12-12 18:10:13 +01:00
Merge remote-tracking branch 'qatar/master'
* qatar/master: (53 commits) probe: Restore identification of files with very large id3 tags and no extension. probe: Remove id3 tag presence as a criteria to do file extension checking. mpegts: MP4 SL support mpegts: MP4 OD support mpegts: Add support for Sections in PMT mpegts: Replace the MP4 descriptor parser with a recursive parser. mpegts: Add support for multiple mp4 descriptors mpegts: Parse mpeg2 SL descriptors. isom: Add MPEG4SYSTEMS dummy object type indication. aacdec: allow output reconfiguration on channel changes nellymoserenc: take float input samples instead of int16 nellymoserdec: use dsp functions for overlap and windowing nellymoserdec: do not fail if there is extra data in the packet nellymoserdec: fail if output buffer is too small nellymoserdec: remove pointless buffer size check. lavf: add init_put_byte() to the list of visible symbols. seek-test: free options dictionary after use snow: do not draw_edge if emu_edge is set tools/pktdumper: update to recent avformat api seek-test: update to recent avformat api ... Conflicts: doc/APIchanges libavcodec/mpegaudiodec.c libavcodec/nellymoserdec.c libavcodec/snow.c libavcodec/version.h libavcodec/wmadec.c libavformat/avformat.h libavformat/mpegts.c libavformat/mxfdec.c libavformat/utils.c libavformat/wtv.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@@ -340,6 +340,7 @@ AVInputFormat *av_probe_input_format3(AVProbeData *pd, int is_opened, int *score
|
||||
fmt = NULL;
|
||||
}
|
||||
*score_ret= score_max;
|
||||
|
||||
return fmt;
|
||||
}
|
||||
|
||||
@@ -1427,7 +1428,15 @@ void ff_read_frame_flush(AVFormatContext *s)
|
||||
}
|
||||
}
|
||||
|
||||
void av_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp){
|
||||
#if FF_API_SEEK_PUBLIC
|
||||
void av_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp)
|
||||
{
|
||||
return ff_update_cur_dts(s, ref_st, timestamp);
|
||||
}
|
||||
#endif
|
||||
|
||||
void ff_update_cur_dts(AVFormatContext *s, AVStream *ref_st, int64_t timestamp)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = 0; i < s->nb_streams; i++) {
|
||||
@@ -1547,7 +1556,14 @@ int av_index_search_timestamp(AVStream *st, int64_t wanted_timestamp,
|
||||
wanted_timestamp, flags);
|
||||
}
|
||||
|
||||
#if FF_API_SEEK_PUBLIC
|
||||
int av_seek_frame_binary(AVFormatContext *s, int stream_index, int64_t target_ts, int flags){
|
||||
return ff_seek_frame_binary(s, stream_index, target_ts, flags);
|
||||
}
|
||||
#endif
|
||||
|
||||
int ff_seek_frame_binary(AVFormatContext *s, int stream_index, int64_t target_ts, int flags)
|
||||
{
|
||||
AVInputFormat *avif= s->iformat;
|
||||
int64_t av_uninit(pos_min), av_uninit(pos_max), pos, pos_limit;
|
||||
int64_t ts_min, ts_max, ts;
|
||||
@@ -1594,7 +1610,7 @@ int av_seek_frame_binary(AVFormatContext *s, int stream_index, int64_t target_ts
|
||||
}
|
||||
}
|
||||
|
||||
pos= av_gen_search(s, stream_index, target_ts, pos_min, pos_max, pos_limit, ts_min, ts_max, flags, &ts, avif->read_timestamp);
|
||||
pos= ff_gen_search(s, stream_index, target_ts, pos_min, pos_max, pos_limit, ts_min, ts_max, flags, &ts, avif->read_timestamp);
|
||||
if(pos<0)
|
||||
return -1;
|
||||
|
||||
@@ -1603,12 +1619,28 @@ int av_seek_frame_binary(AVFormatContext *s, int stream_index, int64_t target_ts
|
||||
return ret;
|
||||
|
||||
ff_read_frame_flush(s);
|
||||
av_update_cur_dts(s, st, ts);
|
||||
ff_update_cur_dts(s, st, ts);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int64_t av_gen_search(AVFormatContext *s, int stream_index, int64_t target_ts, int64_t pos_min, int64_t pos_max, int64_t pos_limit, int64_t ts_min, int64_t ts_max, int flags, int64_t *ts_ret, int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t )){
|
||||
#if FF_API_SEEK_PUBLIC
|
||||
int64_t av_gen_search(AVFormatContext *s, int stream_index, int64_t target_ts,
|
||||
int64_t pos_min, int64_t pos_max, int64_t pos_limit,
|
||||
int64_t ts_min, int64_t ts_max, int flags, int64_t *ts_ret,
|
||||
int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ))
|
||||
{
|
||||
return ff_gen_search(s, stream_index, target_ts, pos_min, pos_max,
|
||||
pos_limit, ts_min, ts_max, flags, ts_ret,
|
||||
read_timestamp);
|
||||
}
|
||||
#endif
|
||||
|
||||
int64_t ff_gen_search(AVFormatContext *s, int stream_index, int64_t target_ts,
|
||||
int64_t pos_min, int64_t pos_max, int64_t pos_limit,
|
||||
int64_t ts_min, int64_t ts_max, int flags, int64_t *ts_ret,
|
||||
int64_t (*read_timestamp)(struct AVFormatContext *, int , int64_t *, int64_t ))
|
||||
{
|
||||
int64_t pos, ts;
|
||||
int64_t start_pos, filesize;
|
||||
int no_change;
|
||||
@@ -1775,7 +1807,7 @@ static int seek_frame_generic(AVFormatContext *s,
|
||||
ie= &st->index_entries[st->nb_index_entries-1];
|
||||
if ((ret = avio_seek(s->pb, ie->pos, SEEK_SET)) < 0)
|
||||
return ret;
|
||||
av_update_cur_dts(s, st, ie->timestamp);
|
||||
ff_update_cur_dts(s, st, ie->timestamp);
|
||||
}else{
|
||||
if ((ret = avio_seek(s->pb, s->data_offset, SEEK_SET)) < 0)
|
||||
return ret;
|
||||
@@ -1812,7 +1844,7 @@ static int seek_frame_generic(AVFormatContext *s,
|
||||
ie = &st->index_entries[index];
|
||||
if ((ret = avio_seek(s->pb, ie->pos, SEEK_SET)) < 0)
|
||||
return ret;
|
||||
av_update_cur_dts(s, st, ie->timestamp);
|
||||
ff_update_cur_dts(s, st, ie->timestamp);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1853,7 +1885,7 @@ int av_seek_frame(AVFormatContext *s, int stream_index, int64_t timestamp, int f
|
||||
|
||||
if (s->iformat->read_timestamp && !(s->iformat->flags & AVFMT_NOBINSEARCH)) {
|
||||
ff_read_frame_flush(s);
|
||||
return av_seek_frame_binary(s, stream_index, timestamp, flags);
|
||||
return ff_seek_frame_binary(s, stream_index, timestamp, flags);
|
||||
} else if (!(s->iformat->flags & AVFMT_NOGENSEARCH)) {
|
||||
ff_read_frame_flush(s);
|
||||
return seek_frame_generic(s, stream_index, timestamp, flags);
|
||||
|
||||
Reference in New Issue
Block a user