📄 illuminationcompensation.h
字号:
#ifndef __ICLibStatic
#define __ICLibStatic
#include <math.h>
H264AVC_NAMESPACE_BEGIN
typedef struct
{
short sOffset;
short sIcAct;
} IcpInMs;
class H264AVCCOMMONLIB_API Icp
{
private:
protected:
short m_sOffset; // offset original
short m_sSymbolOffset; // offset symbol
short m_sPredOffset; // offset predictor
short m_sIcAct; // IC switch
short m_sPredIcAct; // IC switch predictor //JVT-W031
public:
Icp () { reset(); };
Icp (double offset)
{
m_sOffset = (short) offset;
m_sSymbolOffset = 0;
m_sPredOffset = 0;
m_sIcAct = 0;
m_sPredIcAct = 0; //JVT-W031
};
~Icp () {};
void reset()
{
m_sOffset = 0;
m_sSymbolOffset = 0;
m_sPredOffset = 0;
m_sIcAct = 0;
m_sPredIcAct = 0; //JVT-W031
};
void setOffset (short offset) { m_sOffset = offset; };
void setSymbolOffset (short symOffset) { m_sSymbolOffset = symOffset; };
void setPredOffset (short offset) { m_sPredOffset = offset; };
void setIcAct (short IcAct) { m_sIcAct = IcAct; };
void setPredIcAct (short IcAct) { m_sPredIcAct = IcAct; }; //JVT-W031
short getOffset() const { return m_sOffset; };
short getSymbolOffset() const { return m_sSymbolOffset; };
short getPredOffset() const { return m_sPredOffset; };
short getIcAct () const { return m_sIcAct; };
short getPredIcAct () const { return m_sPredIcAct; }; //JVT-W031
};
class H264AVCCOMMONLIB_API MbIcp
{
private:
protected:
Icp m_acIcp[16];
public:
MbIcp() { reset(); };
~MbIcp() { };
void reset();
void setAllIcp( const Icp& rcIcp );
void setAllIcAct( bool IcOn );
const Icp& getIcp() const { return m_acIcp[0]; };
const Icp& getIcp( ParIdx8x8 eParIdx ) const { return m_acIcp[eParIdx]; };
const Icp& getIcp( int blockY4x4, int blockX4x4 );
Icp& getIcp() { return m_acIcp[0]; };
Icp& getIcp( ParIdx8x8 eParIdx ) { return m_acIcp[eParIdx]; };
short getIcAct()
{
return ( m_acIcp[0].getIcAct() || m_acIcp[2].getIcAct() ||
m_acIcp[8].getIcAct() || m_acIcp[10].getIcAct() );
};
short getIcAct( ParIdx8x8 eParIdx ) { return m_acIcp[eParIdx].getIcAct(); };
const short getIcAct() const
{
return ( m_acIcp[0].getIcAct() || m_acIcp[2].getIcAct() ||
m_acIcp[8].getIcAct() || m_acIcp[10].getIcAct() );
};
const short getIcAct( ParIdx8x8 eParIdx ) const { return m_acIcp[eParIdx].getIcAct(); };
short getIcAct( int blockY4x4, int blockX4x4 );
void copyFrom( const MbIcp& cMbIcp );
void calcIcOffset16x ( IcpInMs& rsIcpInMs, XPel* pucCur, XPel* pucRef, Int iStride, Int iRows, Int iStartPos );
void calcIcOffset8x ( IcpInMs& rsIcpInMs, XPel* pucCur, XPel* pucRef, Int iStride, Int iRows, Int iStartPosX, Int iStartPosY );
};
inline void MbIcp::reset()
{
m_acIcp[0].reset(); m_acIcp[1].reset();
m_acIcp[2].reset(); m_acIcp[3].reset();
m_acIcp[4].reset(); m_acIcp[5].reset();
m_acIcp[6].reset(); m_acIcp[7].reset();
m_acIcp[8].reset(); m_acIcp[9].reset();
m_acIcp[10].reset(); m_acIcp[11].reset();
m_acIcp[12].reset(); m_acIcp[13].reset();
m_acIcp[14].reset(); m_acIcp[15].reset();
}
inline void MbIcp::setAllIcp( const Icp& rcIcp )
{
const register Icp cIcp = rcIcp;
m_acIcp[ 0 ] = cIcp;
m_acIcp[ 1 ] = cIcp;
m_acIcp[ 2 ] = cIcp;
m_acIcp[ 3 ] = cIcp;
m_acIcp[ 4 ] = cIcp;
m_acIcp[ 5 ] = cIcp;
m_acIcp[ 6 ] = cIcp;
m_acIcp[ 7 ] = cIcp;
m_acIcp[ 8 ] = cIcp;
m_acIcp[ 9 ] = cIcp;
m_acIcp[ 10 ] = cIcp;
m_acIcp[ 11 ] = cIcp;
m_acIcp[ 12 ] = cIcp;
m_acIcp[ 13 ] = cIcp;
m_acIcp[ 14 ] = cIcp;
m_acIcp[ 15 ] = cIcp;
}
inline void MbIcp::setAllIcAct( bool IcOn )
{
const register short icon = IcOn ? 1 : 0;
m_acIcp[ 0 ].setIcAct(icon);
m_acIcp[ 1 ].setIcAct(icon);
m_acIcp[ 2 ].setIcAct(icon);
m_acIcp[ 3 ].setIcAct(icon);
m_acIcp[ 4 ].setIcAct(icon);
m_acIcp[ 5 ].setIcAct(icon);
m_acIcp[ 6 ].setIcAct(icon);
m_acIcp[ 7 ].setIcAct(icon);
m_acIcp[ 8 ].setIcAct(icon);
m_acIcp[ 9 ].setIcAct(icon);
m_acIcp[ 10 ].setIcAct(icon);
m_acIcp[ 11 ].setIcAct(icon);
m_acIcp[ 12 ].setIcAct(icon);
m_acIcp[ 13 ].setIcAct(icon);
m_acIcp[ 14 ].setIcAct(icon);
m_acIcp[ 15 ].setIcAct(icon);
}
inline const Icp& MbIcp::getIcp( int blockY4x4, int blockX4x4 )
{
int blkIdx8x8 = ((blockY4x4>>1)<<1) + (blockX4x4>>1);
ParIdx8x8 eParIdx = ( blkIdx8x8==3 ? PART_8x8_3 : blkIdx8x8==2 ? PART_8x8_2 : blkIdx8x8==1 ? PART_8x8_1 : PART_8x8_0 );
return this->getIcp( eParIdx );
}
inline short MbIcp::getIcAct( int blockY4x4, int blockX4x4 )
{
int blkIdx8x8 = ((blockY4x4>>1)<<1) + (blockX4x4>>1);
ParIdx8x8 eParIdx = ( blkIdx8x8==3 ? PART_8x8_3 : blkIdx8x8==2 ? PART_8x8_2 : blkIdx8x8==1 ? PART_8x8_1 : PART_8x8_0 );
return this->getIcAct( eParIdx );
}
H264AVC_NAMESPACE_END
#endif //__ICLibStatic
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -