0

这是使用新的 x264 api 的权利吗,我想得到一个框架,并用 x264 对其进行编码,然后将其保存到 .264 文件中?但我不知道这是对的吗?

picIn.img.plane[0] = pInBuffer ;
picIn.img.plane[1] = pInBuffer +m_VideoEncParam.nWidth*m_VideoEncParam.nHeight ;
picIn.img.plane[2] = pInBuffer +m_VideoEncParam.nWidth*m_VideoEncParam.nHeight*5/4 ;

picIn.img.i_stride[0] = m_VideoEncParam.nWidth ;
picIn.img.i_stride[1] = m_VideoEncParam.nWidth /2 ;
picIn.img.i_stride[2] = m_VideoEncParam.nWidth /2 ;

nRet = x264_encoder_encode(
                            m_pX264Handle,
                            &pNal,
                            &nNalCount,
                            &picIn,
                            &picOut);
if (nRet<0)
{
    return -1 ;
}

for (int i = 0 ;i<nNalCount ; i++)
{


    //memcpy(pOut+nLenOut,&pNal[i],pNal[i].i_payload) ;
    x264_nal_encode(m_pX264Handle,pOutBuffer+nLenOut,&pNal[i]);
    nLenOut += pNal[i].i_payload ;
}
int nSize = 0 ;
FILE *pFile = fopen(pchFileName,"w") ;
if (!pFile)
{
    return -1 ;
}
nSize = fwrite(pOutBuffer,1,nLenOut,pFile) ;
fclose(pFile) ;
4

1 回答 1

1

不,至少在输出时调用 x264_nal_encode 是不对的。当前(不超过 2 年)版本的 libx264 返回已转义的 nals(仅在 nalu_process 回调功能的情况下才需要 x264_nal_encode)。此外,您不需要计算 NAL 大小的总和,因为正 nRet 值已经是这个总和。您可以直接使用 nRet 大小编写 pNal[0].p_payload,因为 API 保证所有输出 NAL 的有效负载在内存中是连续的。

于 2013-04-22T15:51:47.283 回答