[FFmpeg-devel] [PATCH] avformat/wavdec: add support for chapters
Anton Khirnov
anton at khirnov.net
Tue Sep 1 14:43:34 EEST 2020
Quoting Paul B Mahol (2020-08-31 14:20:11)
> Support parsing 'cue ' and 'adtl' chunks.
>
> Signed-off-by: Paul B Mahol <onemda at gmail.com>
> ---
> libavformat/wavdec.c | 50 ++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 50 insertions(+)
Looks ok beyond some nits.
>
> diff --git a/libavformat/wavdec.c b/libavformat/wavdec.c
> index 5b3c481421..545f04c742 100644
> --- a/libavformat/wavdec.c
> +++ b/libavformat/wavdec.c
> @@ -500,6 +500,7 @@ static int wav_read_header(AVFormatContext *s)
> wav->smv_cur_pt = 0;
> goto break_loop;
> case MKTAG('L', 'I', 'S', 'T'):
> + case MKTAG('l', 'i', 's', 't'):
> if (size < 4) {
> av_log(s, AV_LOG_ERROR, "too short LIST tag\n");
> return AVERROR_INVALIDDATA;
> @@ -507,6 +508,37 @@ static int wav_read_header(AVFormatContext *s)
> switch (avio_rl32(pb)) {
> case MKTAG('I', 'N', 'F', 'O'):
> ff_read_riff_info(s, size - 4);
> + break;
> + case MKTAG('a', 'd', 't', 'l'):
> + if (s->nb_chapters > 0) {
> + while (avio_tell(pb) < next_tag_ofs) {
> + AVChapter *chapter = NULL;
> + char cue_label[512];
> + unsigned id, sub_size;
> +
> + if (avio_feof(pb))
> + break;
nit: would look better in the loop condition
> + if (avio_rl32(pb) != MKTAG('l', 'a', 'b', 'l'))
> + break;
> +
> + sub_size = avio_rl32(pb);
> + if (sub_size < 5)
> + break;
> + id = avio_rl32(pb);
> + avio_get_str(pb, sub_size - 4, cue_label, sizeof(cue_label));
> + avio_skip(pb, avio_tell(pb) & 1);
> +
> + for (int i = 0; i < s->nb_chapters; i++) {
> + if (s->chapters[i]->id == id) {
> + chapter = s->chapters[i];
> + break;
> + }
> + }
> + if (chapter)
> + av_dict_set(&chapter->metadata, "title", cue_label, 0);
nit: could be merged into the loop above
--
Anton Khirnov
More information about the ffmpeg-devel
mailing list