diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2011-12-11 00:40:09 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2011-12-11 01:05:33 +0100 |
commit | 964912aba56a29acf25c9e216255ea44190f419a (patch) | |
tree | fa82f5555f1604d36380b186f1f89403d0b9c388 /libavformat/flacdec.c | |
parent | cdba9b617f1a77f035416096f3ea91158ec5307b (diff) | |
parent | 2e87b4c51152e0241cae7f655d53920029a0e632 (diff) | |
download | ffmpeg-964912aba56a29acf25c9e216255ea44190f419a.tar.gz |
Merge remote-tracking branch 'qatar/master'
* qatar/master: (21 commits)
Warn about avserver being broken.
avconv: drop code for special handling of avserver streams.
rawdec: don't set codec timebase.
lavf doxy: add muxing stuff to lavf_encoding group
lavf doxy: add demuxing stuff to lavf_decoding group
lavf doxy: expand/reword metadata API doxy.
lavf doxy: add installed headers to groups.
lavf doxy: add avio groups into the lavf_io group.
lavf doxy: rename lavf I/O group to lavf_io.
lavf doxy: add metadata docs to the main lavf group
ttadec: check channel count as read from extradata.
Add CLJR encoding and decoding regression tests
cljr: remove unused code
flacdec: Support for tracks in cuesheet metadata block
ptx: fix inverted check for sufficient data
flac muxer: fix writing of file header and STREAMINFO header from extradata
ptx: emit a warning on insufficient picture data
utvideo: add fate tests covering all codec variants
doc: update to refer to avconv
doc: remove some stale entries from the faq
...
Conflicts:
Changelog
avconv.c
doc/avconv.texi
doc/faq.texi
doc/ffplay.texi
doc/ffprobe.texi
doc/ffserver.texi
libavcodec/avcodec.h
libavcodec/cljr.c
libavformat/avformat.h
libavformat/riff.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/flacdec.c')
-rw-r--r-- | libavformat/flacdec.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/libavformat/flacdec.c b/libavformat/flacdec.c index 8f855bb02d..163d2fac61 100644 --- a/libavformat/flacdec.c +++ b/libavformat/flacdec.c @@ -25,6 +25,7 @@ #include "rawdec.h" #include "oggdec.h" #include "vorbiscomment.h" +#include "libavcodec/bytestream.h" static int flac_read_header(AVFormatContext *s, AVFormatParameters *ap) @@ -54,6 +55,7 @@ static int flac_read_header(AVFormatContext *s, switch (metadata_type) { /* allocate and read metadata block for supported types */ case FLAC_METADATA_TYPE_STREAMINFO: + case FLAC_METADATA_TYPE_CUESHEET: case FLAC_METADATA_TYPE_VORBIS_COMMENT: buffer = av_mallocz(metadata_size + FF_INPUT_BUFFER_PADDING_SIZE); if (!buffer) { @@ -96,6 +98,31 @@ static int flac_read_header(AVFormatContext *s, if (si.samples > 0) st->duration = si.samples; } + } else if (metadata_type == FLAC_METADATA_TYPE_CUESHEET) { + uint8_t isrc[13]; + uint64_t start; + const uint8_t *offset; + int i, j, chapters, track, ti; + if (metadata_size < 431) + return AVERROR_INVALIDDATA; + offset = buffer + 395; + chapters = bytestream_get_byte(&offset) - 1; + if (chapters <= 0) + return AVERROR_INVALIDDATA; + for (i = 0; i < chapters; i++) { + if (offset + 36 - buffer > metadata_size) + return AVERROR_INVALIDDATA; + start = bytestream_get_be64(&offset); + track = bytestream_get_byte(&offset); + bytestream_get_buffer(&offset, isrc, 12); + isrc[12] = 0; + offset += 14; + ti = bytestream_get_byte(&offset); + if (ti <= 0) return AVERROR_INVALIDDATA; + for (j = 0; j < ti; j++) + offset += 12; + avpriv_new_chapter(s, track, st->time_base, start, AV_NOPTS_VALUE, isrc); + } } else { /* STREAMINFO must be the first block */ if (!found_streaminfo) { |