mirror of
https://github.com/nu774/fdkaac.git
synced 2025-03-15 08:20:08 +01:00
wav/caf parser: ensure fmt/desc chunk
fixes https://github.com/nu774/fdkaac/issues/52
This commit is contained in:
parent
53fe239bf6
commit
4ec1422bd9
@ -172,6 +172,7 @@ int caf_parse(caf_reader_t *reader, int64_t *data_length)
|
||||
{
|
||||
uint32_t fcc;
|
||||
int64_t chunk_size;
|
||||
int desc_seen = 0;
|
||||
|
||||
*data_length = 0;
|
||||
|
||||
@ -181,9 +182,10 @@ int caf_parse(caf_reader_t *reader, int64_t *data_length)
|
||||
TRY_IO(pcm_skip(&reader->io, 4)); /* mFileVersion, mFileFlags */
|
||||
|
||||
while ((fcc = caf_next_chunk(reader, &chunk_size)) != 0) {
|
||||
if (fcc == M4AF_FOURCC('d','e','s','c'))
|
||||
if (fcc == M4AF_FOURCC('d','e','s','c')) {
|
||||
desc_seen = 1;
|
||||
TRY_IO(caf_desc(reader, chunk_size));
|
||||
else if (fcc == M4AF_FOURCC('i','n','f','o'))
|
||||
} else if (fcc == M4AF_FOURCC('i','n','f','o'))
|
||||
TRY_IO(caf_info(reader, chunk_size));
|
||||
else if (fcc == M4AF_FOURCC('c','h','a','n')) {
|
||||
ENSURE(reader->sample_format.channels_per_frame);
|
||||
@ -199,7 +201,7 @@ int caf_parse(caf_reader_t *reader, int64_t *data_length)
|
||||
TRY_IO(pcm_skip(&reader->io, chunk_size));
|
||||
}
|
||||
ENSURE(reader->sample_format.channels_per_frame);
|
||||
ENSURE(fcc == M4AF_FOURCC('d','a','t','a'));
|
||||
ENSURE(desc_seen && fcc == M4AF_FOURCC('d','a','t','a'));
|
||||
return 0;
|
||||
FAIL:
|
||||
return -1;
|
||||
|
@ -155,6 +155,7 @@ static
|
||||
int wav_parse(wav_reader_t *reader, int64_t *data_length)
|
||||
{
|
||||
uint32_t container, fcc, chunk_size;
|
||||
int fmt_seen = 0;
|
||||
|
||||
*data_length = 0;
|
||||
container = riff_next_chunk(reader, &chunk_size);
|
||||
@ -167,6 +168,7 @@ int wav_parse(wav_reader_t *reader, int64_t *data_length)
|
||||
riff_ds64(reader, data_length);
|
||||
while ((fcc = riff_next_chunk(reader, &chunk_size)) != 0) {
|
||||
if (fcc == RIFF_FOURCC('f','m','t',' ')) {
|
||||
fmt_seen = 1;
|
||||
if (wav_fmt(reader, chunk_size) < 0)
|
||||
goto FAIL;
|
||||
} else if (fcc == RIFF_FOURCC('d','a','t','a')) {
|
||||
@ -178,8 +180,8 @@ int wav_parse(wav_reader_t *reader, int64_t *data_length)
|
||||
TRY_IO(pcm_skip(&reader->io, (chunk_size + 1) & ~1));
|
||||
}
|
||||
}
|
||||
if (fcc == RIFF_FOURCC('d','a','t','a'))
|
||||
return 0;
|
||||
ENSURE(fmt_seen && fcc == RIFF_FOURCC('d', 'a', 't', 'a'));
|
||||
return 0;
|
||||
FAIL:
|
||||
return -1;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user