FFmpeg:Avframe内存分配方式

1.第一种

        m_pFrameVideoOut = av_frame_alloc();
        m_pFrameVideoOut->format = AV_PIX_FMT_BGR24;
        m_pFrameVideoOut->width = m_VideoCodecCtx->width;
        m_pFrameVideoOut->height = m_VideoCodecCtx->height;
        if (av_image_alloc(m_pFrameVideoOut->data, m_pFrameVideoOut->linesize, m_pFrameVideoOut->width, m_pFrameVideoOut->height, AV_PIX_FMT_BGR24, 16) < 0)
        {
            return ;
        }

2.第二种

        m_pFrameVideoOut = av_frame_alloc();
        m_pFrameVideoOut->format = AV_PIX_FMT_BGR24;
        m_pFrameVideoOut->width = m_VideoCodecCtx->width;
        m_pFrameVideoOut->height = m_VideoCodecCtx->height;
        av_frame_get_buffer(m_pFrameVideoOut, 16);

 

3.第三种

    int bufferSize = av_image_get_buffer_size(AV_PIX_FMT_YUV420P, nWidth, nHeight, 1);;
    m_InputFrame = av_frame_alloc();
    m_InputFrame->width = nWidth;
    m_InputFrame->height = nHeight;
    m_InputFrame->format = AV_PIX_FMT_YUV420P;
    m_Buffer = (unsigned char *)av_malloc(bufferSize);
    av_image_fill_arrays(m_InputFrame->data, m_InputFrame->linesize, m_Buffer, AV_PIX_FMT_YUV420P, nWidth, nHeight, 1);

你可能感兴趣的:(FFmpeg)