Fix celt decoder assertion when using OPUS_CUSTOM
When using OPUS_CUSTOM, `CELTDecoder->end` can be larger than 21. Assert against 25 instead in OPUS_CUSTOM builds. See https://github.com/xiph/opus/issues/172.
This commit is contained in:
parent
703625a577
commit
582f3e5270
1 changed files with 7 additions and 1 deletions
|
@ -117,13 +117,19 @@ void validate_celt_decoder(CELTDecoder *st)
|
||||||
#ifndef CUSTOM_MODES
|
#ifndef CUSTOM_MODES
|
||||||
celt_assert(st->mode == opus_custom_mode_create(48000, 960, NULL));
|
celt_assert(st->mode == opus_custom_mode_create(48000, 960, NULL));
|
||||||
celt_assert(st->overlap == 120);
|
celt_assert(st->overlap == 120);
|
||||||
|
celt_assert(st->end <= 21);
|
||||||
|
#else
|
||||||
|
/* From Section 4.3 in the spec: "The normal CELT layer uses 21 of those bands,
|
||||||
|
though Opus Custom (see Section 6.2) may use a different number of bands"
|
||||||
|
|
||||||
|
Check if it's within the maximum number of Bark frequency bands instead */
|
||||||
|
celt_assert(st->end <= 25);
|
||||||
#endif
|
#endif
|
||||||
celt_assert(st->channels == 1 || st->channels == 2);
|
celt_assert(st->channels == 1 || st->channels == 2);
|
||||||
celt_assert(st->stream_channels == 1 || st->stream_channels == 2);
|
celt_assert(st->stream_channels == 1 || st->stream_channels == 2);
|
||||||
celt_assert(st->downsample > 0);
|
celt_assert(st->downsample > 0);
|
||||||
celt_assert(st->start == 0 || st->start == 17);
|
celt_assert(st->start == 0 || st->start == 17);
|
||||||
celt_assert(st->start < st->end);
|
celt_assert(st->start < st->end);
|
||||||
celt_assert(st->end <= 21);
|
|
||||||
#ifdef OPUS_ARCHMASK
|
#ifdef OPUS_ARCHMASK
|
||||||
celt_assert(st->arch >= 0);
|
celt_assert(st->arch >= 0);
|
||||||
celt_assert(st->arch <= OPUS_ARCHMASK);
|
celt_assert(st->arch <= OPUS_ARCHMASK);
|
||||||
|
|
Loading…
Reference in a new issue