History

alac: convert extradata reading to bytestream2.

Ronald S. Bultje committed 14 years ago

Commit c3bbd0b1 parent 62ce9de1 file · +20 −19Browse files

Unified · Split

libavcodec/alac.c+20−19
@@ -571,29 +571,30 @@ buf_alloc_fail: · 570 unmodified lines
571571
572572 static int alac_set_info(ALACContext *alac)
573573 {
574− const unsigned char *ptr = alac->avctx->extradata;
574+ GetByteContext gb;
575575
576− ptr += 4; /* size */
577− ptr += 4; /* alac */
578− ptr += 4; /* version */
576+ bytestream2_init(&gb, alac->avctx->extradata,
577+ alac->avctx->extradata_size);
579578
580− if(AV_RB32(ptr) >= UINT_MAX/4){
581− av_log(alac->avctx, AV_LOG_ERROR, "setinfo_max_samples_per_frame too large\n");
582− return -1;
583− }
579+ bytestream2_skipu(&gb, 12); // size:4, alac:4, version:4
584580
585581 /* buffer size / 2 ? */
586− alac->setinfo_max_samples_per_frame = bytestream_get_be32(&ptr);
587− ptr++; /* compatible version */
588− alac->setinfo_sample_size = *ptr++;
589− alac->setinfo_rice_historymult = *ptr++;
590− alac->setinfo_rice_initialhistory = *ptr++;
591− alac->setinfo_rice_kmodifier = *ptr++;
592− alac->numchannels = *ptr++;
593− bytestream_get_be16(&ptr); /* maxRun */
594− bytestream_get_be32(&ptr); /* max coded frame size */
595− bytestream_get_be32(&ptr); /* average bitrate */
596− bytestream_get_be32(&ptr); /* samplerate */
582+ alac->setinfo_max_samples_per_frame = bytestream2_get_be32u(&gb);
583+ if (alac->setinfo_max_samples_per_frame >= UINT_MAX/4){
584+ av_log(alac->avctx, AV_LOG_ERROR,
585+ "setinfo_max_samples_per_frame too large\n");
586+ return AVERROR_INVALIDDATA;
587+ }
588+ bytestream2_skipu(&gb, 1); // compatible version
589+ alac->setinfo_sample_size = bytestream2_get_byteu(&gb);
590+ alac->setinfo_rice_historymult = bytestream2_get_byteu(&gb);
591+ alac->setinfo_rice_initialhistory = bytestream2_get_byteu(&gb);
592+ alac->setinfo_rice_kmodifier = bytestream2_get_byteu(&gb);
593+ alac->numchannels = bytestream2_get_byteu(&gb);
594+ bytestream2_get_be16u(&gb); // maxRun
595+ bytestream2_get_be32u(&gb); // max coded frame size
596+ bytestream2_get_be32u(&gb); // average bitrate
597+ bytestream2_get_be32u(&gb); // samplerate
597598
598599 return 0;
599600 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t