2013-04-22 67 views
0

这是正确的使用新的x264 API,我想获得一个框架,并用x264编码,然后将其保存到.264文件? 但我不知道这是对的吗?这是正确的,当我使用x264?

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) ; 
+3

那么,它的工作? – JJJ 2013-04-22 08:06:53

回答

1

不,这是不正确的,至少在输出中调用x264_nal_encode。 libx264的当前版本(不超过2年)返回已经转义的nals(只有在nalu_process回调函数中才需要x264_nal_encode)。你也不需要计算NAL大小的总和,因为正的nRet值已经是这个总和。并且您可以直接写入nRet大小的pNal [0] .p_pload,因为所有输出NAL的有效负载都通过API保证在内存中是连续的。