[Libav-user] AAC encoding error

Justin justin-zhao at qq.com
Sat Apr 13 09:14:35 CEST 2013

   The following short program can reproduce the problem. 
   Problem description: The avcodec_encode_audio2 firstly can be called sucessfully and return 0, but the got_output is 0 too. The second invoking avcodec_encode_audio2 will incur address accessing error. I very appreciates anyone who can help me, thanks very much.
#include "libavutil\Rational.h"
#include "libavutil\opt.h"
#include "libavutil\Imgutils.h"
#include "libswscale\Swscale.h"
#include "libavcodec\avcodec.h"
#include "libswresample\Swresample.h"
 int i, ret, got_output;
 AVCodec *codec;
 AVCodecContext *c;
 AVFrame *frame; 
 AVPacket pkt;
 AVDictionary *opts = NULL;
 uint8_t *srcdata[2];
 codec = avcodec_find_encoder(AV_CODEC_ID_AAC);
 if (!codec)  return;
 c = avcodec_alloc_context3(codec);
 if (!c)  return;
 c->bit_rate = 32000;
 c->sample_rate    = 22050;
 c->channel_layout = AV_CH_LAYOUT_STEREO;
 c->channels       = av_get_channel_layout_nb_channels(c->channel_layout);
 //c->frame_size = 1024;
 c->sample_fmt = AV_SAMPLE_FMT_FLTP;

 // open it 
 av_dict_set(&opts, "strict", "experimental", 0);
 ret = avcodec_open2(c, codec, &opts);
 if (ret < 0)
 frame = avcodec_alloc_frame();
 if (!frame)
 frame->nb_samples     = c->frame_size;
 frame->format         = c->sample_fmt;
 frame->channel_layout = c->channel_layout;
 srcdata[0] = (uint8_t *)malloc(4*c->frame_size);
 srcdata[1] = (uint8_t *)malloc(4*c->frame_size);
 memset(srcdata[0], 0, 4*c->frame_size);
 memset(srcdata[1], 0, 4*c->frame_size);
 frame->data[0] = srcdata[0];
 frame->data[1] = srcdata[1];
 for(i=0; i<2; i++)
  pkt.data = NULL;    // packet data will be allocated by the encoder
  pkt.size = 0;
  /* encode the samples */
  ret = avcodec_encode_audio2(c, &pkt, frame, &got_output);
Best Regards,


------------------ Original ------------------
From:  "andrey.krieger.utkin"<andrey.krieger.utkin at gmail.com>;
Date:  Fri, Apr 12, 2013 08:30 PM
To:  "Justin"<justin-zhao at qq.com>; 
Cc:  "This list is about using libavcodec, libavformat, libavutil,libavdevice and libavfilter."<libav-user at ffmpeg.org>; 
Subject:  Re: [Libav-user] AAC encoding error

It would be easier to help you if you provide short but complete
compilable (i.e. with main() and so on) snippet reproducing your
Libav-user mailing list
Libav-user at ffmpeg.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20130413/393381d6/attachment.html>

More information about the Libav-user mailing list