summaryrefslogtreecommitdiff
path: root/libavcodec/utils.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2012-05-07 16:56:20 +0200
committerAnton Khirnov <anton@khirnov.net>2012-05-09 17:47:11 +0200
commitc22953b8a3abc1ddd02e2f468845dc2bf0e45253 (patch)
treee4e302b8e5ba78cebefcf4aae8e63089edee2d55 /libavcodec/utils.c
parenta5117a2444f3e636ff824ea467bc828d482c68fc (diff)
lavc: check that extended_data is properly set in avcodec_encode_audio2().
Diffstat (limited to 'libavcodec/utils.c')
-rw-r--r--libavcodec/utils.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 9631c99899..9ec4a9e848 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -908,6 +908,7 @@ int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx,
const AVFrame *frame,
int *got_packet_ptr)
{
+ AVFrame tmp;
AVFrame *padded_frame = NULL;
int ret;
int user_packet = !!avpkt->data;
@@ -920,6 +921,22 @@ int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx,
return 0;
}
+ /* ensure that extended_data is properly set */
+ if (frame && !frame->extended_data) {
+ if (av_sample_fmt_is_planar(avctx->sample_fmt) &&
+ avctx->channels > AV_NUM_DATA_POINTERS) {
+ av_log(avctx, AV_LOG_ERROR, "Encoding to a planar sample format, "
+ "with more than %d channels, but extended_data is not set.\n",
+ AV_NUM_DATA_POINTERS);
+ return AVERROR(EINVAL);
+ }
+ av_log(avctx, AV_LOG_WARNING, "extended_data is not set.\n");
+
+ tmp = *frame;
+ tmp.extended_data = tmp.data;
+ frame = &tmp;
+ }
+
/* check for valid frame size */
if (frame) {
if (avctx->codec->capabilities & CODEC_CAP_SMALL_LAST_FRAME) {