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

📄 newpred.hpp

📁 小波图像变换
💻 HPP
字号:
/**************************************************************************

This software module was originally developed by 

	Hideaki Kimata (NTT)


in the course of development of the MPEG-4 Video (ISO/IEC 14496-2) standard.
This software module is an implementation of a part of one or more MPEG-4 
Video (ISO/IEC 14496-2) tools as specified by the MPEG-4 Video (ISO/IEC 
14496-2) standard. 

ISO/IEC gives users of the MPEG-4 Video (ISO/IEC 14496-2) standard free 
license to this software module or modifications thereof for use in hardware
or software products claiming conformance to the MPEG-4 Video (ISO/IEC 
14496-2) standard. 

Those intending to use this software module in hardware or software products
are advised that its use may infringe existing patents. The original 
developer of this software module and his/her company, the subsequent 
editors and their companies, and ISO/IEC have no liability for use of this 
software module or modifications thereof in an implementation. Copyright is 
not released for non MPEG-4 Video (ISO/IEC 14496-2) standard conforming 
products. 

NTT retains full right to use the code for his/her own 
purpose, assign or donate the code to a third party and to inhibit third 
parties from using the code for non MPEG-4 Video (ISO/IEC 14496-2) standard
conforming products. This copyright notice must be included in all copies or
derivative works. 

Copyright (c) 1999.

Module Name:

	newpred.hpp

Abstract:

	Interface of the CNewPred class.

Revision History:

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

#if !defined(AFX_NEWPRED_H__2E698A43_7818_11D1_80C6_0000F82273F4__INCLUDED_)
#define AFX_NEWPRED_H__2E698A43_7818_11D1_80C6_0000F82273F4__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#ifdef __MFC_
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

#define new DEBUG_NEW				   
#endif // __MFC_

#define NP_REQUESTED_BACKWARD_MESSAGE_TYPE  3	// backchannel message type
#define ENC_BUFCNT 5							// number of encoder additional memory
#define DEC_BUFCNT 5							// number of decoder additional memory

#define NP_MAX_NUMSLICE	18					// maxium number of NP segmet
#define	INPUT_BUF_MAX	256
#define	MAX_NumGOB		NP_MAX_NUMSLICE

#define NUMBITS_NEWPRED_ENABLE						1
#define NUMBITS_REQUESTED_BACKWARD_MESSAGE_TYPE		2
#define NUMBITS_NEWPRED_SEGMENT_TYPE				1
#define NUMBITS_VOP_ID_FOR_PREDICTION_INDICATION	1

#define NUMBITS_VOP_ID_PLUS							3
#define NP_MAX_NUMBITS_VOP_ID						15 // maxium bit number of vop_id

#define	NP_MAX(x, y)		((x) >= (y) ? (x) : (y))

typedef struct NEWPRED_Slice_data {
	PixelC*		pchY;
	PixelC*		pchU;
	PixelC*		pchV;
} NEWPRED_dat;

typedef struct NEWPRED_Slice_buf {
	int			iSizeY;
	int			iSizeUV;
	int			vop_id;
	int			iSlice;
	NEWPRED_dat pdata;		// backup reference picture data
} NEWPRED_buf;

typedef struct NEWPRED_control {
	int		ref_tbl[0x800][MAX_NumGOB];
	NEWPRED_buf***	NPRefBuf;
	int*			ref;
} NEWPREDcnt;

typedef enum
{
	NP_ENCODER,
	NP_DECODER,
}	NP_WHO_AM_I;

typedef enum
{
	NP_VOP_HEADER,
	NP_VP_HEADER
}	NP_SYNTAX_TYPE;

class CNewPred
{
public:
	CNewPred();
	virtual ~CNewPred();

	Bool	CheckSlice(int iMBX, int iMBY, Bool bChkTop = TRUE);
	int		CNewPred::GetSliceNum(int iMBX, int iMBY);
	int		NextSliceHeadMBA(int iMBX, int iMBY);
	int		GetCurrentVOP_id();

	void	shiftBuffer(							// store reference picture memory
				int			vop_id,
				int			max_refsel
			);

	int		make_next_decbuf(
				NEWPREDcnt*	newpredCnt,
				int			vop_id,
				int			slice_no
			);

	int		NowMBA(int vp_id);

	void	CopyBuftoNPRefBuf(int iSlice, int iBufCnt);
	void	CopyBufUtoNPRefBufY(int iSlice, int iBufCnt);
	void	CopyBufUtoNPRefBufU(int iSlice, int iBufCnt);
	void	CopyBufUtoNPRefBufV(int iSlice, int iBufCnt);

	void 	*aalloc(int col, int row , int size);
	void 	afree(int** p);
	void	SetQBuf(									// set NP and Original reference picture memory
				CVOPU8YUVBA*	pRefQ0,
				CVOPU8YUVBA*	pRefQ1
			);

	void 	SetNPRefBuf(						// set data from reference to NP memory
				NEWPRED_buf**	pNewBuf,
				int				vop_id,
				int				iBufCnt
			);

	Bool	CopyNPtoVM(							// set data from NP to reference memory
				Int				iSlice_no,
				PixelC*			RefpointY,
				PixelC*			RefpointU,
				PixelC*			RefpointV
			);

	Bool	CopyNPtoPrev(
				Int				iSlice_no,
				PixelC*			RefpointY,
				PixelC*			RefpointU,
				PixelC*			RefpointV
			);

	void	ChangeRefOfSlice(					// padding reference picture
				const PixelC*	ppxlcRefY,
				const PixelC*	RefbufY,
				const PixelC*	ppxlcRefU,
				const PixelC*	RefbufU,
				const PixelC*	ppxlcRefV,
				const PixelC*	RefbufV,
				Int				iMBX,
				Int				iMBY,
				CRct			rctRefFrameY,
				CRct			rctRefFrameUV
			);

	void	ChangeRefOfSliceYUV(				// padding reference picture
				const PixelC*	ppxlcRef,
				const PixelC*	Refbuf0,
				Int				iMBX,
				Int				iMBY,
				CRct			RefSize,
				char			mode
			);

	void	CopyReftoBuf(						// backup reference picture to virtual memory
				const PixelC*	RefbufY,
				const PixelC*	RefbufU,
				const PixelC*	RefbufV,
				CRct			rctRefFrameY,
				CRct			rctRefFrameUV
			);

	void	CopyRefYtoBufY(const PixelC* ppxlcRefY, CRct RefSize);
	void	CopyBufYtoRefY(const PixelC* ppxlcRefY, CRct RefSize);
	void	CopyRefUtoBufU(const PixelC* ppxlcRefU, CRct RefSize);
	void	CopyBufUtoRefU(const PixelC* ppxlcRefU, CRct RefSize);
	void	CopyRefVtoBufV(const PixelC* ppxlcRefV, CRct RefSize);
	void	CopyBufVtoRefV(const PixelC* ppxlcRefV, CRct RefSize);

	void	GetSlicePoint(char * pchSlicePointParam);
	int		getwidth(){return(m_iWidth);}

	int CNewPred::SliceTailMBA(int iMBX, int iMBY);

#ifdef _DEBUG
	void cdecl NPDebugMessage( char* pszMsg, ... );
#endif

	/*
	 *  variable
	 */
	Bool			m_bNewPredEnable;
	int				m_iRequestedBackwardMessegeType;
	Bool			m_bNewPredSegmentType;
	int				m_iNumBuffEnc;
	int				m_iNumBuffDec;
	NP_WHO_AM_I		m_enumWho;
	NEWPREDcnt*		m_pNewPredControl;
	int				m_iNumSlice;
	NEWPRED_buf**	m_pShiftBufTmp;

	int				m_iAUsage;
	int				m_bShapeOnly;

	Int				m_iNPNumMBX, m_iNPNumMBY;
	int*			m_iHMBNum;

	UInt	m_maxVopID;

	PixelC*		m_pchNewPredRefY;
	PixelC*		m_pchNewPredRefU;
	PixelC*		m_pchNewPredRefV;

protected:

	NP_WHO_AM_I		Who_Am_I();					// check wther encoder or decoder
	void			IncrementVopID();
	short			check_space(char* buf);
	void			check_comment(char* buf);

	/*
	 *  variable
	 */
	int*	m_piSlicePoint;
	int		m_iVopID;
	int		m_iNumBitsVopID;
	int		m_iVopID4Prediction_Indication;
	int		m_iVopID4Prediction;

	int		m_iWidth;
	int		m_iHeight;
	int		num_MB;
	int		m_iCurrentSlice;
	CRct	m_rctNPFrameY;
	CRct	m_rctNPFrameUV;

	UInt	m_uiFirstFrame;
	UInt	m_uiLastFrame;
	CVOPU8YUVBA*	m_pNPvopcRefQ0;
	CVOPU8YUVBA*	m_pNPvopcRefQ1;

	PixelC*	m_pDecbufY;
	PixelC*	m_pDecbufU;
	PixelC*	m_pDecbufV;

};
		
class CNewPredEncoder : public CNewPred
{
public:
	CNewPredEncoder();
	virtual ~CNewPredEncoder();
	void	SetObject(
			int				iNumBitsTimeIncr,
			int				iWidth,
			int				iHeight,
			UInt			uiVOId,
			char*			pchRefname,
			char*			pchSlicePointParam,
			Bool			bNewpredSegmentType,
			int				iAUsage,
			int				bShapeOnly,
			CVOPU8YUVBA*	pNPvopcRefQ0,
			CVOPU8YUVBA*	pNPvopcRefQ1,
			CRct			rctNPFrameY,
			CRct			rctNPFrameUV
		);

	Int		SetVPData(
		NP_SYNTAX_TYPE	mode,
		int		*md_iVopID,	
		int		*md_iNumBitsVopID,
		int		*md_iVopID4Prediction_Indication,
		int		*md_iVopID4Prediction
		);
	
	NEWPREDcnt*		initNEWPREDcnt(
		UInt		uiVO_id
		);
	void	endNEWPREDcnt(
				NEWPREDcnt*	newpredCnt
		);
	void	makeNextRef(
				NEWPREDcnt*	newpredCnt,
				int			slice_no
		);
	void	makeNextBuf(
				NEWPREDcnt*	newpredCnt,
				int			vop_id,
				int			slice_no
		);

	void	load_ref_ind();


protected:
	char	refname[INPUT_BUF_MAX];

	struct	{
		int		iHeader;
		int		iData;
	}	m_stSliceSize[NP_MAX_NUMSLICE];
};

class CNewPredDecoder : public CNewPred
{
public:
	CNewPredDecoder();
	virtual ~CNewPredDecoder();
	void	SetObject(
			int				iNumBitsTimeIncr,
			int				iWidth,
			int				iHeight,
			char*			pchSlicePointParam,
			Bool			bNewpredSegmentType,
			int				iAUsage,
			int				bShapeOnly,
			CVOPU8YUVBA*	pNPvopcRefQ0,
			CVOPU8YUVBA*	pNPvopcRefQ1,
			CRct			rctNPFrameY,
			CRct			rctNPFrameUV
		);

	Bool	GetRef(
		NP_SYNTAX_TYPE	mode,
		VOPpredType type,
		int		md_iVopID,	
		int		md_iVopID4Prediction_Indication,
		int		md_iVopID4Prediction
		);						

	NEWPREDcnt*	initNEWPREDcnt();

	void	endNEWPREDcnt(NEWPREDcnt* newpredCnt);

	void	ResetObject(int iCurrentVOP_id)
	{
		m_iVopID = iCurrentVOP_id;
	}

protected:
	int				m_DecoderError;
};

#endif // !defined(AFX_NEWPRED_H__2E698A43_7818_11D1_80C6_0000F82273F4__INCLUDED_)

⌨️ 快捷键说明

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