📄 encodeframe.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 + -