summaryrefslogtreecommitdiffstats
path: root/libavcodec/libdcadec.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2015-03-29 12:47:10 +0200
committerMichael Niedermayer <michaelni@gmx.at>2015-03-29 13:01:26 +0200
commit93704e09c77e991e18c8bc1f0ab7f1e03062150e (patch)
tree79708be5bda73fe13855cbab2d7be6c5c84aa03b /libavcodec/libdcadec.c
parent97a407f696ae212d53b77ab7e37e0be749e3167e (diff)
parent72025ac36c740f031d7e413041fdfe97087c83c4 (diff)
downloadffmpeg-streaming-93704e09c77e991e18c8bc1f0ab7f1e03062150e.zip
ffmpeg-streaming-93704e09c77e991e18c8bc1f0ab7f1e03062150e.tar.gz
Merge commit '72025ac36c740f031d7e413041fdfe97087c83c4'
* commit '72025ac36c740f031d7e413041fdfe97087c83c4': lavc: add libdcadec decoder Conflicts: Changelog configure libavcodec/Makefile libavcodec/allcodecs.c libavcodec/libdcadec.c See: 519868de7d9c99876efcaf57d6a9683c22732cde Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/libdcadec.c')
-rw-r--r--libavcodec/libdcadec.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/libavcodec/libdcadec.c b/libavcodec/libdcadec.c
index a28b983..6e89262 100644
--- a/libavcodec/libdcadec.c
+++ b/libavcodec/libdcadec.c
@@ -25,6 +25,7 @@
#include "libavutil/channel_layout.h"
#include "libavutil/common.h"
#include "libavutil/opt.h"
+
#include "avcodec.h"
#include "dca.h"
#include "dca_syncwords.h"
@@ -48,6 +49,10 @@ static int dcadec_decode_frame(AVCodecContext *avctx, void *data,
int input_size = avpkt->size;
/* convert bytestream syntax to RAW BE format if required */
+ if (input_size < 8) {
+ av_log(avctx, AV_LOG_ERROR, "Input size too small\n");
+ return AVERROR_INVALIDDATA;
+ }
mrk = AV_RB32(input);
if (mrk != DCA_SYNCWORD_CORE_BE && mrk != DCA_SYNCWORD_SUBSTREAM) {
s->buffer = av_fast_realloc(s->buffer, &s->buffer_size, avpkt->size + FF_INPUT_BUFFER_PADDING_SIZE);
@@ -75,11 +80,16 @@ static int dcadec_decode_frame(AVCodecContext *avctx, void *data,
avctx->channel_layout = channel_mask;
avctx->sample_rate = sample_rate;
- av_assert0(bits_per_sample >= 16 && bits_per_sample <= 24);
+ av_assert0(bits_per_sample >= 16);
if (bits_per_sample == 16)
avctx->sample_fmt = AV_SAMPLE_FMT_S16P;
- else
+ else if (bits_per_sample <= 24)
avctx->sample_fmt = AV_SAMPLE_FMT_S32P;
+ else {
+ av_log(avctx, AV_LOG_ERROR, "Unsupported number of bits per sample: %d\n",
+ bits_per_sample);
+ return AVERROR(ENOSYS);
+ }
avctx->bits_per_raw_sample = bits_per_sample;
OpenPOWER on IntegriCloud