}
int ff_mpeg4audio_get_config_gb(MPEG4AudioConfig *c, GetBitContext *gb,
- int sync_extension)
+ int sync_extension, void *logctx)
{
int specific_config_bitindex, ret;
int start_bit_index = get_bits_count(gb);
c->chan_config = get_bits(gb, 4);
if (c->chan_config < FF_ARRAY_ELEMS(ff_mpeg4audio_channels))
c->channels = ff_mpeg4audio_channels[c->chan_config];
+ else {
+ av_log(logctx, AV_LOG_ERROR, "Invalid chan_config %d\n", c->chan_config);
+ return AVERROR_INVALIDDATA;
+ }
c->sbr = -1;
c->ps = -1;
if (c->object_type == AOT_SBR || (c->object_type == AOT_PS &&
return specific_config_bitindex - start_bit_index;
}
+#if LIBAVCODEC_VERSION_MAJOR < 59
int avpriv_mpeg4audio_get_config(MPEG4AudioConfig *c, const uint8_t *buf,
int bit_size, int sync_extension)
{
if (ret < 0)
return ret;
- return ff_mpeg4audio_get_config_gb(c, &gb, sync_extension);
+ return ff_mpeg4audio_get_config_gb(c, &gb, sync_extension, NULL);
+}
+#endif
+
+int avpriv_mpeg4audio_get_config2(MPEG4AudioConfig *c, const uint8_t *buf,
+ int size, int sync_extension, void *logctx)
+{
+ GetBitContext gb;
+ int ret;
+
+ if (size <= 0)
+ return AVERROR_INVALIDDATA;
+
+ ret = init_get_bits8(&gb, buf, size);
+ if (ret < 0)
+ return ret;
+
+ return ff_mpeg4audio_get_config_gb(c, &gb, sync_extension, logctx);
}