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

📄 resizeparameters.h

📁 JVT-Z203_jsvm.rar
💻 H
字号:

#ifndef _RESIZE_PARAMETERS_H_
#define _RESIZE_PARAMETERS_H_

#include "Typedefs.h"
#include "Macros.h"
#ifdef DOWN_CONVERT_STATIC
#include <iostream>
#include <assert.h>
#define ESS_NONE  0
#define ESS_SEQ   1
#define ESS_PICT  2
#else
#include "H264AVCCommonLib.h"

H264AVC_NAMESPACE_BEGIN

class SliceHeader;
class ResizeParameters;

#endif


#define SST_RATIO_1   0
#define SST_RATIO_2   1
#define SST_RATIO_3_2 2
#define SST_RATIO_X   3


__inline Int CeilLog2( Int i )
{
  Int s = 0; i--;
  while( i > 0 )
  {
    s++;
    i >>= 1;
  }
  return s;
}


class PictureParameters 
{
public:
  Void copy ( const PictureParameters& rcPicParam )
  {
    m_iScaledRefFrmWidth    = rcPicParam.m_iScaledRefFrmWidth;
    m_iScaledRefFrmHeight   = rcPicParam.m_iScaledRefFrmHeight;
    m_iLeftFrmOffset        = rcPicParam.m_iLeftFrmOffset;
    m_iTopFrmOffset         = rcPicParam.m_iTopFrmOffset;
    m_iRefLayerChromaPhaseX = rcPicParam.m_iRefLayerChromaPhaseX;
    m_iRefLayerChromaPhaseY = rcPicParam.m_iRefLayerChromaPhaseY;
  }
  const PictureParameters& operator = ( const PictureParameters& rcPicParam )
  {
    copy( rcPicParam );
    return *this;
  }

public:
  Int   m_iScaledRefFrmWidth;
  Int   m_iScaledRefFrmHeight;
  Int   m_iLeftFrmOffset;
  Int   m_iTopFrmOffset;
  Int   m_iRefLayerChromaPhaseX;
  Int   m_iRefLayerChromaPhaseY;
};


class ResizeParameters 
{
public:
    ResizeParameters()
      : m_iExtendedSpatialScalability ( ESS_NONE )
      , m_iLevelIdc                   ( 0 )
      , m_bFrameMbsOnlyFlag           ( true )
      , m_bFieldPicFlag               ( false )
      , m_bBotFieldFlag               ( false )
      , m_bIsMbAffFrame               ( false )
      , m_iFrameWidth                 ( 0 )
      , m_iFrameHeight                ( 0 )
      , m_iChromaPhaseX               ( 0 )
      , m_iChromaPhaseY               ( 0 )
      , m_iScaledRefFrmWidth          ( 0 )
      , m_iScaledRefFrmHeight         ( 0 )
      , m_iLeftFrmOffset              ( 0 )
      , m_iTopFrmOffset               ( 0 )
      , m_iRefLayerChromaPhaseX       ( 0 )
      , m_iRefLayerChromaPhaseY       ( 0 )
      , m_bRefLayerFrameMbsOnlyFlag   ( true )
      , m_bRefLayerFieldPicFlag       ( false )
      , m_bRefLayerBotFieldFlag       ( false )
      , m_bRefLayerIsMbAffFrame       ( false )
      , m_iRefLayerFrmWidth           ( 0 )
      , m_iRefLayerFrmHeight          ( 0 )
    { 
    };

#ifdef DOWN_CONVERT_STATIC
#else
    ErrVal  readPictureParameters     ( FILE* pFile, Bool bFrameMbsOnlyFlag );
    
    Void    updateCurrLayerParameters ( const SliceHeader&        rcSH );
    Void    updateRefLayerParameters  ( const SliceHeader&        rcSH );
    Void    updatePicParameters       ( const PictureParameters&  rcPP );

    Int     getLeftFrmOffset          ()  const { return m_iLeftFrmOffset; }
    Int     getTopFrmOffset           ()  const { return m_iTopFrmOffset; }
    Int     getRightFrmOffset         ()  const { return m_iFrameWidth  - m_iScaledRefFrmWidth  - m_iLeftFrmOffset; }
    Int     getBotFrmOffset           ()  const { return m_iFrameHeight - m_iScaledRefFrmHeight - m_iTopFrmOffset; }
#endif

    Bool  getCroppingChangeFlag() const
    {
      return ( m_iExtendedSpatialScalability == ESS_PICT );
    }
    Bool  getCroppingFlag() const
    {
      ROTRS( m_iExtendedSpatialScalability == ESS_PICT,   true );
      ROFRS( m_iLeftFrmOffset == 0,                       true );
      ROFRS( m_iTopFrmOffset  == 0,                       true );
      ROFRS( m_iFrameWidth    == m_iScaledRefFrmWidth,    true );
      ROFRS( m_iFrameHeight   == m_iScaledRefFrmHeight,   true );
      return false;
    }
    Bool  getSpatialResolutionChangeFlag() const
    {
      ROTRS( m_iExtendedSpatialScalability == ESS_PICT,                 true );
      ROFRS( m_bFieldPicFlag         == m_bRefLayerFieldPicFlag,        true );
      ROFRS( m_bIsMbAffFrame         == m_bRefLayerIsMbAffFrame,        true );
      ROFRS( ( m_iLeftFrmOffset %                          16   ) == 0, true );
      ROFRS( ( m_iTopFrmOffset  % ( m_bIsMbAffFrame ? 32 : 16 ) ) == 0, true );
      ROFRS( m_iRefLayerFrmWidth     == m_iScaledRefFrmWidth,           true );
      ROFRS( m_iRefLayerFrmHeight    == m_iScaledRefFrmHeight,          true );
      ROFRS( m_iRefLayerChromaPhaseX == m_iChromaPhaseX,                true );
      ROFRS( m_iRefLayerChromaPhaseY == m_iChromaPhaseY,                true );
      return false;
    }
    Bool  getRestrictedSpatialResolutionChangeFlag() const
    {
      ROFRS( m_bFieldPicFlag      == m_bRefLayerFieldPicFlag,                                                     false );
      ROFRS( m_bIsMbAffFrame      == m_bRefLayerIsMbAffFrame,                                                     false );
      ROFRS( ( m_iLeftFrmOffset %                          16   ) == 0,                                           false );
      ROFRS( ( m_iTopFrmOffset  % ( m_bIsMbAffFrame ? 32 : 16 ) ) == 0,                                           false );
      ROFRS( m_iRefLayerFrmHeight == m_iScaledRefFrmHeight || 2 * m_iRefLayerFrmHeight == m_iScaledRefFrmHeight,  false );
      ROFRS( m_iRefLayerFrmWidth  == m_iScaledRefFrmWidth  || 2 * m_iRefLayerFrmWidth  == m_iScaledRefFrmWidth,   false );
      return true;
    }

public:
  //===== parameters of current layer =====
  Int   m_iExtendedSpatialScalability;
  Int   m_iLevelIdc;
  Bool  m_bFrameMbsOnlyFlag;
  Bool  m_bFieldPicFlag;
  Bool  m_bBotFieldFlag;
  Bool  m_bIsMbAffFrame;
  Int   m_iFrameWidth;
  Int   m_iFrameHeight;
  Int   m_iChromaPhaseX;
  Int   m_iChromaPhaseY;
  Int   m_iScaledRefFrmWidth;     // also in PictureParameters
  Int   m_iScaledRefFrmHeight;    // also in PictureParameters
  Int   m_iLeftFrmOffset;         // also in PictureParameters
  Int   m_iTopFrmOffset;          // also in PictureParameters
  Int   m_iRefLayerChromaPhaseX;  // also in PictureParameters
  Int   m_iRefLayerChromaPhaseY;  // also in PictureParameters

  //===== parameters for base layer =====
  Bool  m_bRefLayerFrameMbsOnlyFlag;
  Bool  m_bRefLayerFieldPicFlag;
  Bool  m_bRefLayerBotFieldFlag;
  Bool  m_bRefLayerIsMbAffFrame;
  Int   m_iRefLayerFrmWidth;
  Int   m_iRefLayerFrmHeight;
};


#ifdef DOWN_CONVERT_STATIC
#else
H264AVC_NAMESPACE_END
#endif

#endif 

⌨️ 快捷键说明

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