⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encodeframe.c

📁 adi bf533视频编码程序
💻 C
字号:
#include "enum.h"
#include "ippVideoEncoderMPEG4.h"
#include "global_declare.h"
#include <stdio.h>

extern struct ippBitStream                cBS;
extern struct mp4_VideoObjectLayer        VOL;
extern struct mp4_VideoObjectPlane        VOP;
extern void EncodeIVOP(void);
extern void EncodePVOP(void);
//extern void EncodeBVOP();
extern void ExpandFrame(Ipp8u *pY, Ipp8u *pU, Ipp8u *pV);
//extern void EncodeVOPSH_Header();
extern void EncodeVOP_Header(void);
extern void EncodeStuffingBitsAlign(void);
extern void EncodeZeroBitsAlign(void);

/*********************************************/
//extern     int        mNumOfFrames;
extern     int     mPVOPfcodeForw;
//extern     int     mBVOPfcodeForw;		__070613_2__no_bvop
//extern     int     mBVOPfcodeBack;		__070613_2__no_bvop
extern    Ipp8u  **mPtrY, **mPtrU, **mPtrV;
extern    Ipp8u     *mCurrPtrY, *mCurrPtrU, *mCurrPtrV;
extern    Ipp8u     *mForwPtrY, *mForwPtrU, *mForwPtrV;
extern    Ipp8u     *mBackPtrY, *mBackPtrU, *mBackPtrV;
extern    unsigned int        VideoEncoderMPEG4_mFrameCount;
//extern	int     mQuantIVOP, mQuantPVOP, mQuantBVOP, mQuantSVOP;
extern	int     mQuantIVOP, mQuantPVOP;				//----no bvop, no svop;
//extern    int     mIVOPdist, mPVOPdist, mBVOPdist;	__070613_2__no_bvop
extern    int     mIVOPdist, mPVOPdist;	
extern    int     mVOPtime;
//extern    int     mIndxBVOP, mTRB, mTRD;			__070613_2__no_bvop;

/*********************************************/
//added by gary
extern void flush_shifter(void);

/*********************************************/

void EncodeFrame()
{
    int    isIVOP, isPVOP;
    Ipp8u *tmpPtr;

	isIVOP = !(VideoEncoderMPEG4_mFrameCount % mIVOPdist);
	mCurrPtr656 = mPtr656[cur_enc_buf_i];
	
    if (isIVOP) 
    {
        restore_MB_get_MB_refwin(
        		MB_buffer[0], mCurrPtrY, mCurrPtrU, mCurrPtrV,
        		mCurrPtr656, MB_buffer[0], 
        		NULL, NULL, NULL,
        		NULL, NULL, NULL,
        		0x02
        );
        
		VOP.vop_quant = mQuantIVOP;
		VOP.vop_coding_type = MP4_VOP_TYPE_I;
		VOP.vop_coded = 1;
		VOP.vop_time_increment = mVOPtime;
		EncodeVOP_Header();
		EncodeIVOP();
		ExpandFrame(mCurrPtrY, mCurrPtrU, mCurrPtrV);
		
	} 
	else 
	{
        restore_MB_get_MB_refwin(
        		MB_buffer[0], mCurrPtrY, mCurrPtrU, mCurrPtrV,
        		mCurrPtr656, MB_buffer[0], 
        		mForwPtrY-16*mStepLuma-16, 
        		mForwPtrU-8*mStepChroma-8, 
        		mForwPtrV-8*mStepChroma-8, 
        		refwin_Y, refwin_U, refwin_V,
        		0x03
        );	    
	    
		VOP.vop_quant = mQuantPVOP;
		VOP.vop_coding_type = MP4_VOP_TYPE_P;
		VOP.vop_coded = 1;
		VOP.vop_fcode_forward = mPVOPfcodeForw;
		VOP.vop_time_increment = mVOPtime;
		EncodeVOP_Header();
		EncodePVOP();
        ExpandFrame(mCurrPtrY, mCurrPtrU, mCurrPtrV);
	}
 
	EncodeStuffingBitsAlign();
	flush_shifter();
	
    cur_enc_buf_i = (cur_enc_buf_i + 1) & 0x3;
    
    tmpPtr = mCurrPtrY; mCurrPtrY = mForwPtrY; mForwPtrY = tmpPtr;
    tmpPtr = mCurrPtrU; mCurrPtrU = mForwPtrU; mForwPtrU = tmpPtr;
    tmpPtr = mCurrPtrV; mCurrPtrV = mForwPtrV; mForwPtrV = tmpPtr;
     
    VideoEncoderMPEG4_mFrameCount++;
    //changed by gary, to alternate frame rate;
    //mVOPtime ++;
    mVOPtime += (bypass_dist+1);
    if (mVOPtime >= VOL.vop_time_increment_resolution)
    mVOPtime -= VOL.vop_time_increment_resolution;
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -