mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
alac: convert extradata reading to bytestream2.
This commit is contained in:
parent
62ce9defb8
commit
c3bbd0b53b
@ -571,29 +571,30 @@ buf_alloc_fail:
|
|||||||
|
|
||||||
static int alac_set_info(ALACContext *alac)
|
static int alac_set_info(ALACContext *alac)
|
||||||
{
|
{
|
||||||
const unsigned char *ptr = alac->avctx->extradata;
|
GetByteContext gb;
|
||||||
|
|
||||||
ptr += 4; /* size */
|
bytestream2_init(&gb, alac->avctx->extradata,
|
||||||
ptr += 4; /* alac */
|
alac->avctx->extradata_size);
|
||||||
ptr += 4; /* version */
|
|
||||||
|
|
||||||
if(AV_RB32(ptr) >= UINT_MAX/4){
|
bytestream2_skipu(&gb, 12); // size:4, alac:4, version:4
|
||||||
av_log(alac->avctx, AV_LOG_ERROR, "setinfo_max_samples_per_frame too large\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* buffer size / 2 ? */
|
/* buffer size / 2 ? */
|
||||||
alac->setinfo_max_samples_per_frame = bytestream_get_be32(&ptr);
|
alac->setinfo_max_samples_per_frame = bytestream2_get_be32u(&gb);
|
||||||
ptr++; /* compatible version */
|
if (alac->setinfo_max_samples_per_frame >= UINT_MAX/4){
|
||||||
alac->setinfo_sample_size = *ptr++;
|
av_log(alac->avctx, AV_LOG_ERROR,
|
||||||
alac->setinfo_rice_historymult = *ptr++;
|
"setinfo_max_samples_per_frame too large\n");
|
||||||
alac->setinfo_rice_initialhistory = *ptr++;
|
return AVERROR_INVALIDDATA;
|
||||||
alac->setinfo_rice_kmodifier = *ptr++;
|
}
|
||||||
alac->numchannels = *ptr++;
|
bytestream2_skipu(&gb, 1); // compatible version
|
||||||
bytestream_get_be16(&ptr); /* maxRun */
|
alac->setinfo_sample_size = bytestream2_get_byteu(&gb);
|
||||||
bytestream_get_be32(&ptr); /* max coded frame size */
|
alac->setinfo_rice_historymult = bytestream2_get_byteu(&gb);
|
||||||
bytestream_get_be32(&ptr); /* average bitrate */
|
alac->setinfo_rice_initialhistory = bytestream2_get_byteu(&gb);
|
||||||
bytestream_get_be32(&ptr); /* samplerate */
|
alac->setinfo_rice_kmodifier = bytestream2_get_byteu(&gb);
|
||||||
|
alac->numchannels = bytestream2_get_byteu(&gb);
|
||||||
|
bytestream2_get_be16u(&gb); // maxRun
|
||||||
|
bytestream2_get_be32u(&gb); // max coded frame size
|
||||||
|
bytestream2_get_be32u(&gb); // average bitrate
|
||||||
|
bytestream2_get_be32u(&gb); // samplerate
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user