aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/alac.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2012-03-26 20:34:29 +0200
committerMichael Niedermayer <michaelni@gmx.at>2012-03-26 20:52:52 +0200
commit7e496e154583b5fe11ccf04b833c418b22f05ca4 (patch)
tree51ff1dc2484ab90ede1d715d30e935ce22b1af7d /libavcodec/alac.c
parent60497cb984221268ef95d2b63476f4f3379fb7e2 (diff)
parent72ccfb3cb7a85d35cfe2c99ab53e981974e599cd (diff)
downloadffmpeg-7e496e154583b5fe11ccf04b833c418b22f05ca4.tar.gz
Merge remote-tracking branch 'qatar/master'
* qatar/master: build: ppc: drop stray leftover backslash build: Only clean the architecture subdirectory we build for. build: drop some unnecessary dependencies from the H.264 parser build: prettyprinting cosmetics libavutil: Remove pointless rational test program. libavutil: Remove broken and pointless lzo test program. lavf doxy: expand AVStream.codec doxy. lavf doxy: improve AVStream.time_base doxy. lavf doxy: add some basic documentation about reading from the demuxer. lavf doxy: document passing options to demuxers. lavf doxy: clarify that an AVPacket contains encoded data. mpegtsenc: allow user triggered PES packet flushing APIchanges: mark the place where 0.7 was cut. APIchanges: mark the place where 0.8 was cut. APIchanges: fill in missing dates and hashes. smacker: convert palette and header reading to bytestream2. alac: convert extradata reading to bytestream2. Conflicts: doc/APIchanges libavcodec/smacker.c libavcodec/x86/Makefile libavfilter/Makefile libavutil/Makefile Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/alac.c')
-rw-r--r--libavcodec/alac.c39
1 files changed, 20 insertions, 19 deletions
diff --git a/libavcodec/alac.c b/libavcodec/alac.c
index 83e0d810e6..8ba7b805ad 100644
--- a/libavcodec/alac.c
+++ b/libavcodec/alac.c
@@ -602,29 +602,30 @@ buf_alloc_fail:
static int alac_set_info(ALACContext *alac)
{
- const unsigned char *ptr = alac->avctx->extradata;
+ GetByteContext gb;
- ptr += 4; /* size */
- ptr += 4; /* alac */
- ptr += 4; /* version */
+ bytestream2_init(&gb, alac->avctx->extradata,
+ alac->avctx->extradata_size);
- if(AV_RB32(ptr) >= UINT_MAX/4){
- av_log(alac->avctx, AV_LOG_ERROR, "setinfo_max_samples_per_frame too large\n");
- return -1;
- }
+ bytestream2_skipu(&gb, 12); // size:4, alac:4, version:4
/* buffer size / 2 ? */
- alac->setinfo_max_samples_per_frame = bytestream_get_be32(&ptr);
- ptr++; /* compatible version */
- alac->setinfo_sample_size = *ptr++;
- alac->setinfo_rice_historymult = *ptr++;
- alac->setinfo_rice_initialhistory = *ptr++;
- alac->setinfo_rice_kmodifier = *ptr++;
- alac->numchannels = *ptr++;
- bytestream_get_be16(&ptr); /* maxRun */
- bytestream_get_be32(&ptr); /* max coded frame size */
- bytestream_get_be32(&ptr); /* average bitrate */
- bytestream_get_be32(&ptr); /* samplerate */
+ alac->setinfo_max_samples_per_frame = bytestream2_get_be32u(&gb);
+ if (alac->setinfo_max_samples_per_frame >= UINT_MAX/4){
+ av_log(alac->avctx, AV_LOG_ERROR,
+ "setinfo_max_samples_per_frame too large\n");
+ return AVERROR_INVALIDDATA;
+ }
+ bytestream2_skipu(&gb, 1); // compatible version
+ alac->setinfo_sample_size = bytestream2_get_byteu(&gb);
+ alac->setinfo_rice_historymult = bytestream2_get_byteu(&gb);
+ alac->setinfo_rice_initialhistory = bytestream2_get_byteu(&gb);
+ 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;
}