这是正确的,当我使用x264?

时间:2013-04-22 07:56:22

标签: x264 libx264

是否有权使用新的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) ;

1 个答案:

答案 0 :(得分:1)

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