diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-03-26 20:34:29 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-03-26 20:52:52 +0200 |
commit | 7e496e154583b5fe11ccf04b833c418b22f05ca4 (patch) | |
tree | 51ff1dc2484ab90ede1d715d30e935ce22b1af7d /libavcodec/alac.c | |
parent | 60497cb984221268ef95d2b63476f4f3379fb7e2 (diff) | |
parent | 72ccfb3cb7a85d35cfe2c99ab53e981974e599cd (diff) | |
download | ffmpeg-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.c | 39 |
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; } |