On Tue, 21 Apr 2015 22:07:07 +0200 Clément Bœsch <u...@pkh.me> wrote:
> On Tue, Apr 21, 2015 at 09:33:52PM +0200, wm4 wrote: > > "-usetoc 2" now invokes the generic seek and indexing mode. This mode > > skips data until the seek target is reached, and this is exact. It also > > makes gapless audio actually work if a seek past the start of the file > > is involved. > > --- > > Strange option value. On the other hand, it will be made default, so > > this option will generally be used only to select the "old" seek modes. > > But in general, libavformat should probably have something to switch > > between slow/accurate and fast/inaccurate seeking. > > --- > > libavformat/mp3dec.c | 12 +++++++++--- > > tests/fate/gapless.mak | 5 +++-- > > tests/ref/fate/gapless-mp3 | 5 ----- > > tests/ref/fate/gapless-mp3-cbr | 5 +++++ > > 4 files changed, 17 insertions(+), 10 deletions(-) > > delete mode 100644 tests/ref/fate/gapless-mp3 > > create mode 100644 tests/ref/fate/gapless-mp3-cbr > > > > diff --git a/libavformat/mp3dec.c b/libavformat/mp3dec.c > > index 008cb23..8a4dfbd 100644 > > --- a/libavformat/mp3dec.c > > +++ b/libavformat/mp3dec.c > > @@ -110,7 +110,7 @@ static void read_xing_toc(AVFormatContext *s, int64_t > > filesize, int64_t duration > > { > > int i; > > MP3DecContext *mp3 = s->priv_data; > > - int fill_index = mp3->usetoc && duration > 0; > > + int fill_index = mp3->usetoc == 1 && duration > 0; > > > > if (!filesize && > > !(filesize = avio_size(s->pb))) { > > @@ -336,6 +336,9 @@ static int mp3_read_header(AVFormatContext *s) > > int ret; > > int i; > > > > + if (mp3->usetoc < 0) > > + mp3->usetoc = 0; > > + > > st = avformat_new_stream(s, NULL); > > if (!st) > > return AVERROR(ENOMEM); > > @@ -432,8 +435,11 @@ static int mp3_seek(AVFormatContext *s, int > > stream_index, int64_t timestamp, > > int64_t best_pos; > > int best_score; > > > > + if (mp3->usetoc == 2) > > + return -1; // generic index code > > + > > if ( mp3->is_cbr > > - && (mp3->usetoc <= 0 || !mp3->xing_toc) > > + && (mp3->usetoc == 0 || !mp3->xing_toc) > > && st->duration > 0 > > && mp3->header_filesize > s->internal->data_offset > > && mp3->frames) { > > @@ -498,7 +504,7 @@ static int mp3_seek(AVFormatContext *s, int > > stream_index, int64_t timestamp, > > } > > > > static const AVOption options[] = { > > - { "usetoc", "use table of contents", offsetof(MP3DecContext, usetoc), > > AV_OPT_TYPE_INT, {.i64 = -1}, -1, 1, AV_OPT_FLAG_DECODING_PARAM}, > > + { "usetoc", "use table of contents", offsetof(MP3DecContext, usetoc), > > AV_OPT_TYPE_INT, {.i64 = -1}, -1, 2, AV_OPT_FLAG_DECODING_PARAM}, > > Can you use AV_OPT_TYPE_CONST for the different special values? > > (and document it) > > [...] > I'm not sure if it's a good idea to set this in stone. I'd much rather have something similar to AVFMT_FLAG_IGNIDX, which can be checked by all demuxers. _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel