Hello,
I have PCM data that I converted to FLT and I am trying to encode that to AAC. 
But the audio is twice as long as it should be and very bad. I can barely make 
it out.
This is my code below. audio_samples is an array of floats (between -1.0 and 
1.0). nb_samples is number of floats in the array.
I do not get any errors and the audio is encoded and saved to file. But, like I 
said, it is twice as long and horrible. I will appreciate any help.
Thanks!
static void write_audio_frame2(AVFormatContext *oc, AVStream *st,               
                int16_t *audio_samples, int nb_samples){    AVCodecContext *c;  
  AVPacket pkt = { 0 }; // data and size must be 0;    AVFrame *frame = 
av_frame_alloc();    int got_packet, ret;
    av_init_packet(&pkt);    c = st->codec;
    frame->format = st->codec->sample_fmt;    frame->nb_samples = nb_samples;   
 frame->channels = c->channels;    frame->channel_layout = c->channel_layout;   
 frame->sample_rate = c->sample_rate;    ret = avcodec_fill_audio_frame(frame, 
c->channels, c->sample_fmt,                             (uint8_t 
*)audio_samples,                             nb_samples *                       
      av_get_bytes_per_sample(c->sample_fmt) *                             
c->channels, 1);
    if (ret < 0) {        fprintf(stderr, "Error filling audio frame\n");       
 exit(1);    }    ret = avcodec_encode_audio2(c, &pkt, frame, &got_packet);    
if (ret < 0) {        fprintf(stderr, "Error encoding audio frame\n");        
exit(1);    }
    if (!got_packet){        return;    }
    pkt.stream_index = st->index;
    /* Write the compressed frame to the media file. */    if 
(av_interleaved_write_frame(oc, &pkt) != 0) {        fprintf(stderr, "Error 
while writing audio frame\n");        exit(1);    }    av_frame_free(&frame);}
_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to