2013-04-22 66 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保證在內存中是連續的。