[Libav-user] AAC encoding error
Andrey Utkin
andrey.krieger.utkin at gmail.com
Sun Apr 14 23:37:04 CEST 2013
Hi Justin,
I have just tried your code. With trivial changes to make it compile
at work fine at my linux installation, it looks as posted below.
I have to say it doesn't fail for me, it runs cleanly and returns
normal retcode 0. Valgrind does not find any failures, too. So i won't
further investigate this, as i am not really into windows.
Good luck investigating your issue.
#include "libavutil/rational.h"
#include "libavutil/opt.h"
#include "libavutil/imgutils.h"
#include "libswscale/swscale.h"
#include "libavcodec/avcodec.h"
#include "libswresample/swresample.h"
#include "libavutil/log.h"
// gcc -O0 -g -ggdb justin.c -lavcodec -o justin
main()
{
int i, ret, got_output;
AVCodec *codec;
AVCodecContext *c;
AVFrame *frame;
AVPacket pkt;
AVDictionary *opts = NULL;
uint8_t *srcdata[2];
av_log_set_level(AV_LOG_DEBUG);
avcodec_register_all();
codec = avcodec_find_encoder_by_name("aac");
if (!codec) return 1;
c = avcodec_alloc_context3(codec);
if (!c) return 1;
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->sample_fmt = AV_SAMPLE_FMT_FLTP;
// open it
av_dict_set(&opts, "strict", "experimental", 0);
ret = avcodec_open2(c, codec, &opts);
if (ret < 0)
return 1;
av_dict_free(&opts);
frame = avcodec_alloc_frame();
if (!frame)
return 1;
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++)
{
av_init_packet(&pkt);
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);
av_free_packet(&pkt);
}
return 0;
}
More information about the Libav-user
mailing list