[FFmpeg-devel] [PATCH 3/5] avformat/mp3dec: allow enabling generic seek mode
Clément Bœsch
u at pkh.me
Tue Apr 21 22:07:07 CEST 2015
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)
[...]
--
Clément B.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20150421/3267b7e8/attachment.asc>
More information about the ffmpeg-devel
mailing list