[libav-commits] lavc: check that extended_data is properly set in avcodec_encode_audio2().

Anton Khirnov git at libav.org
Wed May 9 18:10:56 CEST 2012


Module: libav
Branch: master
Commit: c22953b8a3abc1ddd02e2f468845dc2bf0e45253

Author:    Anton Khirnov <anton at khirnov.net>
Committer: Anton Khirnov <anton at khirnov.net>
Date:      Mon May  7 16:56:20 2012 +0200

lavc: check that extended_data is properly set in avcodec_encode_audio2().

---

 libavcodec/utils.c |   17 +++++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)

diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 9631c99..9ec4a9e 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) {



More information about the libav-commits mailing list