c++ FFmpeg:编码PCM 16音频数据分配错误

zhte4eai  于 2023-10-21  发布在  其他
关注(0)|答案(1)|浏览(143)

我目前正试图编码一些原始音频数据与一些视频内的avi容器。
使用的视频编解码器是mpeg4,我想使用PCM_16LE的音频编解码器,但我面临着一个问题,有关AVCodec->帧大小参数的音频样本。
在完成所有正确的分配后,我尝试分配音频帧,对于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);

谢谢你的帮助
罗伯特

vc9ivgsu

vc9ivgsu1#

正如您在pcm.c中的pcm_encode_init函数中所看到的,
所有pcm编码器都有frame_size = 0;。为什么?为什么?
因为在所有的PCM格式“事实上”没有像帧这样的东西,没有压缩的性质PCM
所以你应该自己决定你想在缓冲区中存储多少样本

相关问题