2016-05-10 6 views
1

В настоящее время я пытаюсь закодировать некоторые необработанные аудиоданные с некоторым видео в контейнере avi.FFmpeg: Кодирование PCM 16 аудиоданных Ошибка распределения

Видеокодек используется mpeg4, и я хотел бы использовать PCM_16LE для аудиокодека, но я столкнулся с проблемой относительно AVCodec-> FRAME_SIZE параметра для звуковых образцов.

После выполнения правильного распределения, я пытаюсь выделить аудиокадр и для кодека AV_CODEC_ID_PCM_S16LE. У меня нет кодека frame_size, необходимого для получения размера буфера выборки. Поэтому размер буфера выборки огромен, и я просто не могу выделить такое количество памяти. Кто-нибудь знает, как обойти эту проблему и как вручную вычислить frame_size?

frame = av_frame_alloc(); 
    if(!frame) 
    { 
     return NULL; 
    } 

    //Problem is right here with the frame_size 
    frame->nb_samples = m_pAudioCodecContext->frame_size; 
    frame->format = m_pAudioStream->codec->sample_fmt; 
    frame->channel_layout = m_pAudioStream->codec->channel_layout; 

    //The codec gives us the frame size, in samples, so we can calculate the size of the samples buffer in bytes 
    //This returns a huge value due to a null frame_size 
    m_audioSampleBufferSize = av_samples_get_buffer_size(NULL, 
                 m_pAudioCodecContext->channels, 
                 m_pAudioCodecContext->frame_size, 
                 m_pAudioCodecContext->sample_fmt, 
                 0); 

Спасибо за вашу помощь,

Роберт

ответ

3

Как вы можете видеть в pcm_encode_init function in pcm.c

Все pcm кодеры имеют frame_size = 0;. Зачем?

Потому что во всех форматах PCM «De facto» нет такой вещи, как фрейм, нет сжатия по своей природе PCM.

Поэтому вы должны сами решить, сколько образцов вы хотите хранить в буфере

 Смежные вопросы

  • Нет связанных вопросов^_^