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

📄 illuminationcompensation.h

📁 JMVM MPEG MVC/3DAV 测试平台 国际通用标准
💻 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 + -