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

📄 type_basic.cpp

📁 完整的RTP RTSP代码库
💻 CPP
字号:
/*************************************************************************This software module was originally developed by 	Ming-Chieh Lee (mingcl@microsoft.com), Microsoft Corporation	Wei-ge Chen (wchen@microsoft.com), Microsoft Corporation	Bruce Lin (blin@microsoft.com), Microsoft Corporation	Chuang Gu (chuanggu@microsoft.com), Microsoft Corporation	(date: March, 1996)and edited by    Fujitsu Laboratories Ltd. (contact: Eishi Morimatsu)in the course of development of the MPEG-4 Video (ISO/IEC 14496-2). This software module is an implementation of a part of one or more MPEG-4 Video tools as specified by the MPEG-4 Video. ISO/IEC gives users of the MPEG-4 Video free license to this software module or modifications thereof for use in hardware or software products claiming conformance to the MPEG-4 Video. 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 conforming products. Microsoft 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 conforming products. This copyright notice must be included in all copies or derivative works. Copyright (c) 1996, 1997.Module Name:	basic.cppAbstract:    Basic types:		Data types, CSite, CVector2D, CRct, CPixel, CMotionVector, CMatrix3x3DRevision History:	Sep.06	1999 : RRV added by Eishi Morimatsu (Fujitsu Laboratories Ltd.) *************************************************************************/#include "header.h"#include "basic.hpp"#include "string.h"#include "stdlib.h"#include "math.h"#ifdef __MFC_#ifdef _DEBUG#undef THIS_FILEstatic char BASED_CODE THIS_FILE[] = __FILE__;#endif#define new DEBUG_NEW				   #endif // __MFC_/////////////////////////////////////////////// //  Space// /////////////////////////////////////////////CSite CSite::operator + (const CSite& st) const{	return CSite (x + st.x, y + st.y);}CSite CSite::operator - (const CSite& st) const{	return CSite (x - st.x, y - st.y);}CSite CSite::operator * (const CSite& st) const{	return CSite (x * st.x, y * st.y);}CSite CSite::operator * (Int scale) const{	return CSite (x * scale, y * scale);}CSite CSite::operator / (const CSite& st) const{	assert (st.x != 0 && st.y != 0);	return CSite (x / st.x, y / st.y);}CSite CSite::operator / (Int scale) const{		assert (scale != 0);	CoordI xNew = (x > 0) ? (Int) ((Double) (x / scale) + .5)						  : (Int) ((Double) (x / scale) - .5);	CoordI yNew = (y > 0) ? (Int) ((Double) (y / scale) + .5)						  : (Int) ((Double) (y / scale) - .5);	return CSite (xNew, yNew);}CSite CSite::operator % (const CSite& st) const{	return CSite (x % st.x, y % st.y);}Void CSite::operator = (const CSite& st){	x = st.x;	y = st.y;}CRct::CRct (const CSite& st1, const CSite& st2){	left = min (st1.x, st2.x);	right = max (st1.x, st2.x);	top = min (st1.y, st2.y);	bottom = max (st1.y, st2.y);	width = right - left;}CRct::CRct (const CSite& st, Int radiusX, Int radiusY){	left = st.x - radiusX; 	top = st.y - radiusY; 	right= st.x + radiusX + 1; 	bottom = st.y + radiusY + 1;	width = 2 * radiusX + 1;}CRct::CRct (const CSiteD& stdLeftTop, const CSiteD& stdRightTop, const CSiteD& stdLeftBottom, const CSiteD& stdRightBottom){	left = min ((CoordI) floor (stdLeftTop.x), (CoordI) floor (stdRightTop.x));	left = min (left, (CoordI) floor (stdLeftBottom.x));	left = min (left, (CoordI) floor (stdRightBottom.x));	top = min ((CoordI) floor (stdLeftTop.y), (CoordI) floor (stdRightTop.y));	top = min (top, (CoordI) floor (stdLeftBottom.y));	top = min (top, (CoordI) floor (stdRightBottom.y));	right = max ((CoordI) ceil (stdLeftTop.x), (CoordI) floor (stdRightTop.x));	right = max (right, (CoordI) ceil (stdLeftBottom.x));	right = max (right, (CoordI) ceil (stdRightBottom.x));	bottom = max ((CoordI) ceil (stdLeftTop.y), (CoordI) floor (stdRightTop.y));	bottom = max (bottom, (CoordI) ceil (stdLeftBottom.y));	bottom = max (bottom, (CoordI) ceil (stdRightBottom.y));	width = right - left;}Void CRct::transpose (){	Int wid = width;	Int hei = height ();	right = left + hei;	bottom = top + wid;	width = right - left;}Void CRct::rightRotate (){	CSite st = center ();	Int radiusY = width >> 1;	Int radiusX = height () >> 1;	left = st.x - radiusX; 	top = st.y - radiusY; 	right= st.x + radiusX + 1; 	bottom = st.y + radiusY + 1;	width = right - left;}Void CRct::clip (const CRct& rc) // intersection operation{	if (empty ()) return; 	if (rc.empty ()) *this = rc;	if (left < rc.left) left = rc.left; 	if (top < rc.top) top = rc.top; 	if (right > rc.right) right = rc.right; 	if (bottom > rc.bottom) bottom = rc.bottom; 	width = right - left;}Void CRct::include (const CRct& rc) // union operation{	if (empty ()) *this = rc;	if (rc.empty ()) return; 	if (left > rc.left) left = rc.left; 	if (top > rc.top) top = rc.top; 	if (right < rc.right) right = rc.right; 	if (bottom < rc.bottom) bottom = rc.bottom; 	width = right - left;}Void CRct::include (const CSite& s){	if (!valid ()) 		*this = CRct (s); 	else {		left = min (s.x, left);		top  = min (s.y, top);		right = max (s.x + 1, right);		bottom = max (s.y + 1, bottom);	}	width = right - left;}Void CRct::operator = (const CRct& rc){	left = rc.left;	top = rc.top; 	right = rc.right;	bottom = rc.bottom;	width = rc.width;}Bool CRct::operator == (const CRct& rc) const{	return 		left == rc.left && 		top == rc.top && 		right == rc.right && 		bottom == rc.bottom; }Bool CRct::operator <= (const CRct& rc) const{	return 		left >= rc.left && 		top >= rc.top && 		right <= rc.right && 		bottom <= rc.bottom; }Bool CRct::operator >= (const CRct& rc) const{	return 		left <= rc.left && 		top <= rc.top && 		right >= rc.right && 		bottom >= rc.bottom; }	CRct CRct::operator / (Int scale) const{	Int roundR = (right >= 0) ? scale - 1 : 1 - scale;	Int roundB = (bottom >= 0) ? scale - 1 : 1 - scale;	return CRct (left / scale, top / scale, (right + roundR) / scale, (bottom + roundB) / scale);}CRct CRct::downSampleBy2 () const{	return CRct (left / 2, top / 2, right / 2, bottom / 2);}CRct CRct::upSampleBy2 () const{	return CRct (left * 2, top * 2, right * 2, bottom * 2);}CRct CRct::operator * (Int scale) const{	return CRct (left * scale, top * scale, right * scale, bottom * scale);}Void CMotionVector::operator = (const CMotionVector& mv){	memcpy (this, &mv, sizeof (CMotionVector));}Void CMotionVector::operator = (const CVector& vctHalfPel){	m_vctTrueHalfPel = vctHalfPel;	computeMV ();	}CMotionVector CMotionVector::operator + (const CMotionVector& mv)	const{	CVector vctHalfPel = trueMVHalfPel () + mv.trueMVHalfPel ();	return CMotionVector (vctHalfPel);}CMotionVector CMotionVector::operator - (const CMotionVector& mv)	const{	CVector vctHalfPel = trueMVHalfPel () - mv.trueMVHalfPel ();	return CMotionVector (vctHalfPel);}CMotionVector::CMotionVector (const CVector& vctHalfPel){	m_vctTrueHalfPel = vctHalfPel;	computeMV ();	}Bool CMotionVector::isZero () const{	if (m_vctTrueHalfPel.x == 0 && m_vctTrueHalfPel.y == 0)		return TRUE;	else 		return FALSE;}Void CMotionVector::computeTrueMV (){	m_vctTrueHalfPel.x = iMVX * 2 + iHalfX;	m_vctTrueHalfPel.y = iMVY * 2 + iHalfY;}Void CMotionVector::computeMV (){	iMVX = m_vctTrueHalfPel.x / 2;	iMVY = m_vctTrueHalfPel.y / 2;	iHalfX = m_vctTrueHalfPel.x - iMVX * 2;	iHalfY = m_vctTrueHalfPel.y - iMVY * 2;}Void CMotionVector::setToZero (Void){	memset (this, 0, sizeof (*this));}// RRV insertionVoid CMotionVector::scaleup (){	if(m_vctTrueHalfPel.x == 0){		m_vctTrueHalfPel_x2.x = 0;	}	else if(m_vctTrueHalfPel.x > 0){		m_vctTrueHalfPel_x2.x = 2 *m_vctTrueHalfPel.x -1;	}	else{		m_vctTrueHalfPel_x2.x = 2 *m_vctTrueHalfPel.x +1;	}	if(m_vctTrueHalfPel.y == 0){		m_vctTrueHalfPel_x2.y = 0;	}	else if(m_vctTrueHalfPel.y > 0){		m_vctTrueHalfPel_x2.y = 2 *m_vctTrueHalfPel.y -1;	}	else{		m_vctTrueHalfPel_x2.y = 2 *m_vctTrueHalfPel.y +1;	}}// ~RRV

⌨️ 快捷键说明

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