最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

H.2编码算法的完整源代码二

来源:动视网 责编:小OO 时间:2025-10-01 18:40:09
文档

H.2编码算法的完整源代码二

H.2编码算法的完整源代码二文件:VideoEncoderX2.hclassCVideoEncoderX2:{public:CVideoEncoderX2(void);~CVideoEncoderX2(void);virtualboolConnect(CVideoEnDecodeNotify*pNotify,constCVideoEnDecodeItem&Item);virtualvoidRelease(void);virtualvoidEncode(BYTE*pInDat
推荐度:
导读H.2编码算法的完整源代码二文件:VideoEncoderX2.hclassCVideoEncoderX2:{public:CVideoEncoderX2(void);~CVideoEncoderX2(void);virtualboolConnect(CVideoEnDecodeNotify*pNotify,constCVideoEnDecodeItem&Item);virtualvoidRelease(void);virtualvoidEncode(BYTE*pInDat
H.2编码算法的完整源代码二

文件:VideoEncoderX2.h

class CVideoEncoderX2 : 

{

public:

 CVideoEncoderX2(void);

 ~CVideoEncoderX2(void);

 virtual bool Connect(CVideoEnDecodeNotify* pNotify, const CVideoEnDecodeItem& Item);

 virtual void Release(void);

 virtual void Encode(BYTE* pInData, int nLen, BYTE* pOutBuf, int& nOutLen, int& nKeyFrame);

private:

  x2_picture_t m_Pic;

  x2_t *h;

  x2_param_t param;

  void Flush(void);

};

文件:VideoEncoderX2.cpp

bool CVideoEncoderX2::Connect(CVideoEnDecodeNotify* pNotify, const CVideoEnDecodeItem& Item)

{

 CBase::Connect(pNotify, Item);

 ParseSize(Item.m_stSize);

 x2_param_default( ¶m );

 param.i_threads = 1;

 param.i_frame_total = 0;

 param.i_width  = m_nWidth;

 param.i_height = m_nHeight;

 param.i_keyint_min = Item.m_nKeyInterval;

 param.i_keyint_max = Item.m_nKeyInterval * 10;

 param.i_fps_num = Item.m_nFps;*/

 param.i_log_level = X2_LOG_NONE;

if( ( h = x2_encoder_open( ¶m ) ) == NULL )

    {

        return false;

    }

    /* Create a new pic */

    x2_picture_alloc( &m_Pic, X2_CSP_I420, param.i_width, param.i_height );

 return true;

}

void CVideoEncoderX2::Release(void)

{

 Flush();

 x2_picture_clean( &m_Pic );

    x2_encoder_close( h );

 CBase::Release();

}

void CVideoEncoderX2::Encode(BYTE* pInData, int nLen, BYTE* pOutBuf, int& nOutLen, int& nKeyFrame)

{

 if(nLen != param.i_width * param.i_height * 3)

  return;

 param.i_frame_total ++;

 memcpy(m_Pic.img.plane[0], pInData, param.i_width * param.i_height);

 memcpy(m_Pic.img.plane[1], pInData + param.i_width * param.i_height, param.i_width * param.i_height / 4);

 memcpy(m_Pic.img.plane[2], pInData + param.i_width * param.i_height * 5 / 4, param.i_width * param.i_height / 4);   

 m_Pic.i_pts = (int_t)param.i_frame_total * param.i_fps_den;

 static x2_picture_t pic_out;

    x2_nal_t *nal = NULL;

    int i_nal, i;

    if( &m_Pic )

    {

        m_Pic.i_type = X2_TYPE_AUTO;

        m_Pic.i_qpplus1 = 0;

    }

 //TraceTime("x2_encoder_encode begin");

if( x2_encoder_encode( h, &nal, &i_nal, &m_Pic, &pic_out ) < 0 ) {

  return;

    }

 //TraceTime("x2_encoder_encode   end");

 int nOutCanUse = nOutLen;

 nOutLen = 0;

for( i = 0; i < i_nal; i++ )

    {

  int i_size = 0;

if( ( i_size = x2_nal_encode( pOutBuf + nOutLen, &nOutCanUse, 1, &nal[i] ) ) > 0 )

  {

   nOutLen += i_size;

   nOutCanUse -= i_size;

  } 

 }

nKeyFrame = pic_out.i_type==X2_TYPE_IDR;// || (pic_out.i_type==X2_TYPE_I && coCfg->x2_max_ref_frames==1);

}

void CVideoEncoderX2::Flush(void)

{

 x2_picture_t pic_out;

    x2_nal_t *nal;

    int i_nal, i;

    int i_file = 0;

if( x2_encoder_encode( h, &nal, &i_nal, NULL, &pic_out ) < 0 ){

    }

}

文档

H.2编码算法的完整源代码二

H.2编码算法的完整源代码二文件:VideoEncoderX2.hclassCVideoEncoderX2:{public:CVideoEncoderX2(void);~CVideoEncoderX2(void);virtualboolConnect(CVideoEnDecodeNotify*pNotify,constCVideoEnDecodeItem&Item);virtualvoidRelease(void);virtualvoidEncode(BYTE*pInDat
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top