Пример #1
0
Bool
VUI::ChromaLocationInfo::isSame( const VUI::ChromaLocationInfo& rcChromaLocationInfo )  const
{
  ROFRS( m_bChromaLocationInfoPresentFlag ==  rcChromaLocationInfo.m_bChromaLocationInfoPresentFlag,  false );
  ROFRS( m_bChromaLocationInfoPresentFlag,                                                            true  );
  ROFRS( m_uiChromaLocationFrame          ==  rcChromaLocationInfo.m_uiChromaLocationFrame,           false );
  ROFRS( m_uiChromaLocationField          ==  rcChromaLocationInfo.m_uiChromaLocationField,           false );
  return true;
}
Пример #2
0
Bool
VUI::TimingInfo::isSame( const VUI::TimingInfo& rcTimingInfo )  const
{
  ROFRS( m_bTimingInfoPresentFlag ==  rcTimingInfo.m_bTimingInfoPresentFlag,  false );
  ROFRS( m_bTimingInfoPresentFlag,                                            true  );
  ROFRS( m_uiNumUnitsInTick       ==  rcTimingInfo.m_uiNumUnitsInTick,        false );
  ROFRS( m_uiTimeScale            ==  rcTimingInfo.m_uiTimeScale,             false );
  ROFRS( m_bFixedFrameRateFlag    ==  rcTimingInfo.m_bFixedFrameRateFlag,     false );
  return true;
}
Пример #3
0
ErrVal ReadBitstreamFile::releasePacket( BinData* pcBinData )
{
  ROFRS( pcBinData, Err::m_nOK );
  pcBinData->deleteData();
  delete pcBinData;
  return Err::m_nOK;
}
Пример #4
0
Bool ReconstructionBypass::xRequiresOutsidePadding( UInt uiMbX, UInt uiMbY, UInt uiFrameWidth, UInt uiFrameHeight, Bool bMbAff, UInt uiOrgMask, UInt* pauiMask )
{
  AOT( uiMbX >= uiFrameWidth  );
  AOT( uiMbY >= uiFrameHeight );

  //===== reset mask =====
  for( UInt uiIndex = 0; uiIndex < 9; uiIndex++ )
  {
    pauiMask[uiIndex] = MSYS_UINT_MAX;
  }

  //===== quick check =====
  uiMbY             >>= ( bMbAff ? 1 : 0 );
  uiFrameHeight     >>= ( bMbAff ? 1 : 0 );
  Bool  bLeftBorder   = ( uiMbX == 0 );
  Bool  bRightBorder  = ( uiMbX == uiFrameWidth  - 1 );
  Bool  bTopBorder    = ( uiMbY == 0 );
  Bool  bBottomBorder = ( uiMbY == uiFrameHeight - 1 );
  ROFRS ( bLeftBorder || bRightBorder || bTopBorder || bBottomBorder, false );

  //===== update masks and return =====
#define UPDATE_MASK(b,d) if((b)) { if( xOutshiftMask( bMbAff, (d), uiOrgMask, pauiMask[(d)] ) != Err::m_nOK ) assert( 0 ); }
  UPDATE_MASK( bLeftBorder  && bTopBorder,    0 );
  UPDATE_MASK(                 bTopBorder,    1 );
  UPDATE_MASK( bRightBorder && bTopBorder,    2 );
  UPDATE_MASK( bLeftBorder,                   3 );
  UPDATE_MASK( bRightBorder,                  5 );
  UPDATE_MASK( bLeftBorder  && bBottomBorder, 6 );
  UPDATE_MASK(                 bBottomBorder, 7 );
  UPDATE_MASK( bRightBorder && bBottomBorder, 8 );
#undef UPDATE_MASK
  return true;
}
Пример #5
0
ErrVal VUI::BitstreamRestriction::read( HeaderSymbolReadIf *pcReadIf )
{
  RNOKS( pcReadIf->getFlag( m_bBitstreamRestrictionFlag,           "VUI: bitstream_restriction_flag"));
  ROFRS( m_bBitstreamRestrictionFlag, Err::m_nOK );

  RNOKS( pcReadIf->getFlag( m_bMotionVectorsOverPicBoundariesFlag, "VUI: motion_vectors_over_pic_boundaries_flag"));

  RNOKS( pcReadIf->getUvlc( m_uiMaxBytesPerPicDenom,               "VUI: max_bytes_per_pic_denom"));
  ROTRS( m_uiMaxBytesPerPicDenom > 16, Err::m_nInvalidParameter );

  RNOKS( pcReadIf->getUvlc( m_uiMaxBitsPerMbDenom,                 "VUI: max_bits_per_mb_denom"));
  ROTRS( m_uiMaxBitsPerMbDenom > 16, Err::m_nInvalidParameter );

  RNOKS( pcReadIf->getUvlc( m_uiLog2MaxMvLengthHorizontal,         "VUI: log2_max_mv_length_horizontal"));
  ROTRS( m_uiLog2MaxMvLengthHorizontal > 16, Err::m_nInvalidParameter );

  RNOKS( pcReadIf->getUvlc( m_uiLog2MaxMvLengthVertical,           "VUI: log2_max_mv_length_vertical"));
  ROTRS( m_uiLog2MaxMvLengthVertical > 16, Err::m_nInvalidParameter );

  RNOKS( pcReadIf->getUvlc( m_uiMaxDecFrameReordering,             "VUI: max_dec_frame_reordering"));

  UInt uiTmp;
  RNOKS( pcReadIf->getUvlc( uiTmp,                                 "VUI: max_dec_frame_buffering"));
  ROTRS(uiTmp>16, Err::m_nInvalidParameter);
  ROTRS(getMaxDecFrameReordering() > uiTmp, Err::m_nInvalidParameter);
  setMaxDecFrameBuffering(uiTmp);

  return Err::m_nOK;
}
Пример #6
0
ErrVal MbCoder::xWriteIntraPredModes( MbDataAccess& rcMbDataAccess )
{
  ROFRS( rcMbDataAccess.getMbData().isIntra(), Err::m_nOK );

  if( rcMbDataAccess.getMbData().isIntra4x4() )
  {
    if( rcMbDataAccess.getSH().getPPS().getTransform8x8ModeFlag() )
    {
      RNOK( m_pcMbSymbolWriteIf->transformSize8x8Flag( rcMbDataAccess ) );
    }

    if( rcMbDataAccess.getMbData().isTransformSize8x8() )
    {
      for( B8x8Idx cIdx; cIdx.isLegal(); cIdx++ )
      {
        RNOK( m_pcMbSymbolWriteIf->intraPredModeLuma( rcMbDataAccess, cIdx ) );
      }
    }
    else
    {
      for( S4x4Idx cIdx; cIdx.isLegal(); cIdx++ )
      {
        RNOK( m_pcMbSymbolWriteIf->intraPredModeLuma( rcMbDataAccess, cIdx ) );
      }
    }
  }

  if( rcMbDataAccess.getMbData().isIntra4x4() || rcMbDataAccess.getMbData().isIntra16x16() )
  {
    RNOK( m_pcMbSymbolWriteIf->intraPredModeChroma( rcMbDataAccess ) );
  }

  return Err::m_nOK;
}
Пример #7
0
Bool
VUI::BitstreamRestriction::isSame( const VUI::BitstreamRestriction& rcBitstreamRestriction )  const
{
  ROFRS( m_bBitstreamRestrictionFlag            ==  rcBitstreamRestriction.m_bBitstreamRestrictionFlag,           false );
  ROFRS( m_bBitstreamRestrictionFlag,                                                                             true  );
  ROFRS( m_bMotionVectorsOverPicBoundariesFlag  ==  rcBitstreamRestriction.m_bMotionVectorsOverPicBoundariesFlag, false );
  ROFRS( m_uiMaxBytesPerPicDenom                ==  rcBitstreamRestriction.m_uiMaxBytesPerPicDenom,               false );
  ROFRS( m_uiMaxBitsPerMbDenom                  ==  rcBitstreamRestriction.m_uiMaxBitsPerMbDenom,                 false );
  ROFRS( m_uiLog2MaxMvLengthHorizontal          ==  rcBitstreamRestriction.m_uiLog2MaxMvLengthHorizontal,         false );
  ROFRS( m_uiLog2MaxMvLengthVertical            ==  rcBitstreamRestriction.m_uiLog2MaxMvLengthVertical,           false );
  ROFRS( m_uiMaxDecFrameReordering              ==  rcBitstreamRestriction.m_uiMaxDecFrameReordering,             false );
  ROFRS( m_uiMaxDecFrameBuffering               ==  rcBitstreamRestriction.m_uiMaxDecFrameBuffering,              false );
  return true;
}
Пример #8
0
Bool
VUI::VideoSignalType::isSame( const VUI::VideoSignalType& rcVideoSignalType )  const
{
  ROFRS( m_bVideoSignalTypePresentFlag    ==  rcVideoSignalType.m_bVideoSignalTypePresentFlag,    false );
  ROFRS( m_bVideoSignalTypePresentFlag,                                                           true  );
  ROFRS( m_uiVideoFormat                  ==  rcVideoSignalType.m_uiVideoFormat,                  false );
  ROFRS( m_bVideoFullRangeFlag            ==  rcVideoSignalType.m_bVideoFullRangeFlag,            false );
  ROFRS( m_bColourDescriptionPresentFlag  ==  rcVideoSignalType.m_bColourDescriptionPresentFlag,  false );
  ROFRS( m_bColourDescriptionPresentFlag,                                                         true  );
  ROFRS( m_uiColourPrimaries              ==  rcVideoSignalType.m_uiColourPrimaries,              false );
  ROFRS( m_uiTransferCharacteristics      ==  rcVideoSignalType.m_uiTransferCharacteristics,      false );
  ROFRS( m_uiMatrixCoefficients           ==  rcVideoSignalType.m_uiMatrixCoefficients,           false );
  return true;
}
Пример #9
0
ErrVal VUI::ChromaLocationInfo::write( HeaderSymbolWriteIf* pcWriteIf ) const
{
  RNOK( pcWriteIf->writeFlag( m_bChromaLocationInfoPresentFlag, "VUI: chroma_location_info_present_flag"));
  ROFRS( m_bChromaLocationInfoPresentFlag, Err::m_nOK );

  RNOK( pcWriteIf->writeUvlc( m_uiChromaLocationFrame,          "VUI: chroma_location_frame"));
  RNOK( pcWriteIf->writeUvlc( m_uiChromaLocationField,          "VUI: chroma_location_field"));
  return Err::m_nOK;
}
Пример #10
0
Bool
RefPicIdc::isValid() const
{
  ROTRS( m_ePicType == NOT_SPECIFIED,                         false );
  const Frame* pcFrame = m_pcFrame->getPic( m_ePicType );
  AOF  ( pcFrame );
  ROFRS( pcFrame->getPoc() == m_iPoc,                         false );
  return true;
}
Пример #11
0
ErrVal VUI::TimingInfo::read( HeaderSymbolReadIf *pcReadIf )
{
  RNOKS( pcReadIf->getFlag( m_bTimingInfoPresentFlag,            "VUI: timing_info_present_flag"));
  ROFRS( m_bTimingInfoPresentFlag, Err::m_nOK );

  RNOKS( pcReadIf->getCode( m_uiNumUnitsInTick, 32,              "VUI: num_units_in_tick"));
  RNOKS( pcReadIf->getCode( m_uiTimeScale, 32,                   "VUI: time_scale"));
  RNOKS( pcReadIf->getFlag( m_bFixedFrameRateFlag,               "VUI: fixed_frame_rate_flag"));
  return Err::m_nOK;
}
Пример #12
0
ErrVal VUI::TimingInfo::write( HeaderSymbolWriteIf* pcWriteIf ) const
{
  RNOK( pcWriteIf->writeFlag( m_bTimingInfoPresentFlag,         "VUI: timing_info_present_flag"));
  ROFRS( m_bTimingInfoPresentFlag, Err::m_nOK );

  RNOK( pcWriteIf->writeCode( m_uiNumUnitsInTick, 32,           "VUI: num_units_in_tick"));
  RNOK( pcWriteIf->writeCode( m_uiTimeScale, 32,                "VUI: time_scale"));
  RNOK( pcWriteIf->writeFlag( m_bFixedFrameRateFlag,            "VUI: fixed_frame_rate_flag"));
  return Err::m_nOK;
}
Пример #13
0
ErrVal VUI::ChromaLocationInfo::read( HeaderSymbolReadIf *pcReadIf )
{
  RNOKS( pcReadIf->getFlag( m_bChromaLocationInfoPresentFlag,    "VUI: chroma_location_info_present_flag"));
  ROFRS( m_bChromaLocationInfoPresentFlag, Err::m_nOK );

  RNOKS( pcReadIf->getUvlc( m_uiChromaLocationFrame,             "VUI: chroma_location_frame"));
  ROTRS( m_uiChromaLocationFrame>3, Err::m_nInvalidParameter);
  RNOKS( pcReadIf->getUvlc( m_uiChromaLocationField,             "VUI: chroma_location_field"));
  ROTRS( m_uiChromaLocationField>3, Err::m_nInvalidParameter);
  return Err::m_nOK;
}
Пример #14
0
Bool
VUI::isSameExceptHRDParametersAndSVCExt( const VUI& rcVUI )  const
{
  ROFRS( m_bVuiParametersPresentFlag    == rcVUI.m_bVuiParametersPresentFlag, false );
  ROFRS( m_bVuiParametersPresentFlag,                                         true  );
  ROFRS( m_bOverscanInfoPresentFlag     == rcVUI.m_bOverscanInfoPresentFlag,  false );
  if( m_bOverscanInfoPresentFlag )
  {
    ROFRS( m_bOverscanAppropriateFlag   == rcVUI.m_bOverscanAppropriateFlag,  false );
  }
  ROFRS( m_cAspectRatioInfo       .isSame( rcVUI.m_cAspectRatioInfo       ),  false );
  ROFRS( m_cVideoSignalType       .isSame( rcVUI.m_cVideoSignalType       ),  false );
  ROFRS( m_cChromaLocationInfo    .isSame( rcVUI.m_cChromaLocationInfo    ),  false );
  ROFRS( m_cBitstreamRestriction  .isSame( rcVUI.m_cBitstreamRestriction  ),  false );
  return true;
}
Пример #15
0
ErrVal VUI::BitstreamRestriction::write( HeaderSymbolWriteIf* pcWriteIf ) const
{
  RNOK( pcWriteIf->writeFlag( m_bBitstreamRestrictionFlag,              "VUI: bitstream_restriction_flag"));
  ROFRS( m_bBitstreamRestrictionFlag, Err::m_nOK );

  RNOK( pcWriteIf->writeFlag( getMotionVectorsOverPicBoundariesFlag(),  "VUI: motion_vectors_over_pic_boundaries_flag"));
  RNOK( pcWriteIf->writeUvlc( getMaxBytesPerPicDenom(),                 "VUI: max_bytes_per_pic_denom"));
  RNOK( pcWriteIf->writeUvlc( getMaxBitsPerMbDenom(),                   "VUI: max_bits_per_mb_denom"));
  RNOK( pcWriteIf->writeUvlc( getLog2MaxMvLengthHorizontal(),           "VUI: log2_max_mv_length_horizontal"));
  RNOK( pcWriteIf->writeUvlc( getLog2MaxMvLengthVertical(),             "VUI: log2_max_mv_length_vertical"));
  RNOK( pcWriteIf->writeUvlc( getMaxDecFrameReordering(),               "VUI: max_dec_frame_reordering"));
  RNOK( pcWriteIf->writeUvlc( getMaxDecFrameBuffering(),                "VUI: max_dec_frame_buffering"));
  return Err::m_nOK;
}
Пример #16
0
ErrVal VUI::AspectRatioInfo::write( HeaderSymbolWriteIf* pcWriteIf ) const
{
  RNOK( pcWriteIf->writeFlag( m_bAspectRatioInfoPresentFlag,    "VUI: aspect_ratio_info_present_flag"));
  ROFRS( m_bAspectRatioInfoPresentFlag, Err::m_nOK );

  RNOK( pcWriteIf->writeCode( m_uiAspectRatioIdc, 8,            "VUI: aspect_ratio_idc"));

  if( 0xFF == m_uiAspectRatioIdc ) //Extendet_SAR
  {
    RNOK( pcWriteIf->writeCode( m_uiSarWith, 16,                "VUI: sar_width"));
    RNOK( pcWriteIf->writeCode( m_uiSarHeight, 16,              "VUI: sar_height"));
  }
  return Err::m_nOK;
}
Пример #17
0
ErrVal VUI::VideoSignalType::write( HeaderSymbolWriteIf* pcWriteIf ) const
{
  RNOK( pcWriteIf->writeFlag( m_bVideoSignalTypePresentFlag,    "VUI: video_signal_type_present_flag"));
  ROFRS( m_bVideoSignalTypePresentFlag, Err::m_nOK );

  RNOK( pcWriteIf->writeCode( m_uiVideoFormat, 3,               "VUI: video_format"));
  RNOK( pcWriteIf->writeFlag( m_bVideoFullRangeFlag,            "VUI: video_full_range_flag"));
  RNOK( pcWriteIf->writeFlag( m_bColourDescriptionPresentFlag,  "VUI: colour_description_present_flag"));
  if( m_bColourDescriptionPresentFlag )
  {
    RNOK( pcWriteIf->writeCode( m_uiColourPrimaries, 8,         "VUI: colour_primaries"));
    RNOK( pcWriteIf->writeCode( m_uiTransferCharacteristics, 8, "VUI: transfer_characteristics"));
    RNOK( pcWriteIf->writeCode( m_uiMatrixCoefficients, 8,      "VUI: matrix_coefficients"));
  }
  return Err::m_nOK;
}
Пример #18
0
Bool
VUI::AspectRatioInfo::isSame( const VUI::AspectRatioInfo& rcAspectRatioInfo )  const
{
  ROFRS( m_bAspectRatioInfoPresentFlag  ==  rcAspectRatioInfo.m_bAspectRatioInfoPresentFlag,  false );
  ROFRS( m_bAspectRatioInfoPresentFlag,                                                       true  );
  ROFRS( m_uiAspectRatioIdc             ==  rcAspectRatioInfo.m_uiAspectRatioIdc,             false );
  ROFRS( m_uiAspectRatioIdc             ==  255,                                              true  );
  ROFRS( m_uiSarWith                    ==  rcAspectRatioInfo.m_uiSarWith,                    false );
  ROFRS( m_uiSarHeight                  ==  rcAspectRatioInfo.m_uiSarHeight,                  false );
  return true;
}
Пример #19
0
ErrVal VUI::AspectRatioInfo::read( HeaderSymbolReadIf *pcReadIf )
{
  RNOKS( pcReadIf->getFlag( m_bAspectRatioInfoPresentFlag,       "VUI: aspect_ratio_info_present_flag"));
  ROFRS( m_bAspectRatioInfoPresentFlag, Err::m_nOK );

  RNOKS( pcReadIf->getCode( m_uiAspectRatioIdc, 8,               "VUI: aspect_ratio_idc"));

  if( m_uiAspectRatioIdc == 0xFF ) //Extendet_SAR
  {
    RNOKS( pcReadIf->getCode( m_uiSarWith, 16,                   "VUI: sar_width"));
    ROTRS(0 == m_uiSarWith, Err::m_nInvalidParameter);

    RNOKS( pcReadIf->getCode( m_uiSarHeight, 16,                 "VUI: sar_height"));
    ROTRS(0 == m_uiSarHeight, Err::m_nInvalidParameter);
  }
  return Err::m_nOK;
}
Пример #20
0
ErrVal
MbParser::xReadIntraPredModes( MbDataAccess& rcMbDataAccess )
{
  ROFRS( rcMbDataAccess.getMbData().isIntra(), Err::m_nOK );

  if( rcMbDataAccess.getMbData().isIntra4x4() )
  {
    if( rcMbDataAccess.getSH().getPPS().getTransform8x8ModeFlag() )
    {
      DECRNOK( m_pcMbSymbolReadIf->transformSize8x8Flag( rcMbDataAccess ) );
    }

    if( rcMbDataAccess.getMbData().isTransformSize8x8() )
    {
      for( B8x8Idx cIdx; cIdx.isLegal(); cIdx++ )
      {
        DECRNOK( m_pcMbSymbolReadIf->intraPredModeLuma8x8( rcMbDataAccess, cIdx ) );
      }
    }
    else
    {
      for( S4x4Idx cIdx; cIdx.isLegal(); cIdx++ )
      {
        DECRNOK( m_pcMbSymbolReadIf->intraPredModeLuma( rcMbDataAccess, cIdx ) );
      }
    }
  }

  if( rcMbDataAccess.getMbData().isIntra4x4() || rcMbDataAccess.getMbData().isIntra16x16() )
  {
    if( rcMbDataAccess.getSH().getSPS().getChromaFormatIdc() )
    {
      DECRNOK( m_pcMbSymbolReadIf->intraPredModeChroma( rcMbDataAccess ) );
    }
    else
    {
      rcMbDataAccess.getMbData().setChromaPredMode( 0 ); // DC prediction
    }
  }

  return Err::m_nOK;
}
Пример #21
0
Bool
MbParser::xCheckSkipSliceMb( MbDataAccess& rcMbDataAccess, UInt uiNumMbRead, Bool& rbEndOfSlice )
{
  ROFRS( rcMbDataAccess.getSH().getSliceSkipFlag(), false );

  MbData& rcMbData = rcMbDataAccess.getMbData();
  rcMbData.setSkipFlag          ( false );
  rcMbData.setBLSkipFlag        ( true );
  rcMbData.setResidualPredFlag  ( true );
  rcMbData.setMbExtCbp          ( 0 );
  rcMbData.setFwdBwd            ( 0 );
  rcMbDataAccess.resetQp        ();
  rcMbDataAccess.getMbMotionData( LIST_0 ).clear( BLOCK_NOT_PREDICTED );
  rcMbDataAccess.getMbMotionData( LIST_1 ).clear( BLOCK_NOT_PREDICTED );
  rcMbDataAccess.getMbMvdData   ( LIST_0 ).clear();
  rcMbDataAccess.getMbMvdData   ( LIST_1 ).clear();

  rbEndOfSlice = ( uiNumMbRead >= rcMbDataAccess.getSH().getNumMbsInSliceMinus1() );
  return true;
}
Пример #22
0
ErrVal
MbCoder::xWriteMotionPredFlags( MbDataAccess&  rcMbDataAccess,
                                MbMode         eMbMode,
                                ListIdx        eLstIdx )
{ 
  AOT_DBG( rcMbDataAccess.getMbData().isIntra() );

  ROFRS  ( rcMbDataAccess.getSH().getAdaptivePredictionFlag (), Err::m_nOK );

  switch( eMbMode )
  {
  case MODE_SKIP:
    {
      break;
    }

  case MODE_16x16:
    {
      if( rcMbDataAccess.getMbData().isBlockFwdBwd( B_8x8_0, eLstIdx) )
      {
        RNOK( m_pcMbSymbolWriteIf->motionPredFlag( rcMbDataAccess, eLstIdx ) );
      }
      break;
    }

  case MODE_16x8:
    {
      if( rcMbDataAccess.getMbData().isBlockFwdBwd( B_8x8_0, eLstIdx) )
      {
        RNOK( m_pcMbSymbolWriteIf->motionPredFlag( rcMbDataAccess, eLstIdx, PART_16x8_0 ) );
      }

      if( rcMbDataAccess.getMbData().isBlockFwdBwd( B_8x8_2, eLstIdx) )
      {
        RNOK( m_pcMbSymbolWriteIf->motionPredFlag( rcMbDataAccess, eLstIdx, PART_16x8_1 ) );
      }
      break;
    }

  case MODE_8x16:
    {
      if( rcMbDataAccess.getMbData().isBlockFwdBwd( B_8x8_0, eLstIdx) )
      {
        RNOK( m_pcMbSymbolWriteIf->motionPredFlag( rcMbDataAccess, eLstIdx, PART_8x16_0 ) );
      }

      if( rcMbDataAccess.getMbData().isBlockFwdBwd( B_8x8_1, eLstIdx) )
      {
        RNOK( m_pcMbSymbolWriteIf->motionPredFlag( rcMbDataAccess, eLstIdx, PART_8x16_1 ) );
      }
      break;
    }

  case MODE_8x8:
  case MODE_8x8ref0:
    {
      for( B8x8Idx c8x8Idx; c8x8Idx.isLegal(); c8x8Idx++ )
      {
        if( BLK_SKIP != rcMbDataAccess.getMbData().getBlkMode   ( c8x8Idx.b8x8Index() ) &&
           rcMbDataAccess             .getMbData().isBlockFwdBwd( c8x8Idx.b8x8Index(), eLstIdx) )
        {
          RNOK( m_pcMbSymbolWriteIf->motionPredFlag( rcMbDataAccess, eLstIdx, c8x8Idx.b8x8() ) );
        }
      }
      break;
    }

  default:
    {
      AF();
      return Err::m_nERR;
    }
  }

  return Err::m_nOK;
}
Пример #23
0
ErrVal
MbParser::xReadMotionPredFlags( MbDataAccess&  rcMbDataAccess,
                                MbMode         eMbMode,
                                ListIdx        eLstIdx )
{
  ROTRS( rcMbDataAccess.getSH     ().getNoInterLayerPredFlag(),  Err::m_nOK );
  ROFRS( rcMbDataAccess.getMbData ().getInCropWindowFlag(),      Err::m_nOK );

  MbMotionData& rcMbMotionData = rcMbDataAccess.getMbMotionData( eLstIdx );

  rcMbMotionData.setMotPredFlag( rcMbDataAccess.getSH().getDefaultMotionPredictionFlag() );
  ROFRS ( rcMbDataAccess.getSH().getAdaptiveMotionPredictionFlag(), Err::m_nOK );

  //--- clear ---
  rcMbMotionData.setMotPredFlag( false );

  if( rcMbDataAccess.getMbData().isIntra() )
  {
    return Err::m_nOK;
  }

  switch( eMbMode )
  {
  case MODE_SKIP:
    {
      break;
    }
  case MODE_16x16:
    {
      if( rcMbDataAccess.getMbData().isBlockFwdBwd( B_8x8_0, eLstIdx ) )
      {
        DECRNOK( m_pcMbSymbolReadIf->motionPredFlag( rcMbDataAccess, eLstIdx ) );
      }
      break;
    }
  case MODE_16x8:
    {
      if( rcMbDataAccess.getMbData().isBlockFwdBwd( B_8x8_0, eLstIdx ) )
      {
        DECRNOK( m_pcMbSymbolReadIf->motionPredFlag( rcMbDataAccess, eLstIdx, PART_16x8_0 ) );
      }

      if( rcMbDataAccess.getMbData().isBlockFwdBwd( B_8x8_2, eLstIdx ) )
      {
        DECRNOK( m_pcMbSymbolReadIf->motionPredFlag( rcMbDataAccess, eLstIdx, PART_16x8_1 ) );
      }
      break;
    }
  case MODE_8x16:
    {
      if( rcMbDataAccess.getMbData().isBlockFwdBwd( B_8x8_0, eLstIdx ) )
      {
        DECRNOK( m_pcMbSymbolReadIf->motionPredFlag( rcMbDataAccess, eLstIdx, PART_8x16_0 ) );
      }

      if( rcMbDataAccess.getMbData().isBlockFwdBwd( B_8x8_1, eLstIdx ) )
      {
        DECRNOK( m_pcMbSymbolReadIf->motionPredFlag( rcMbDataAccess, eLstIdx, PART_8x16_1 ) );
      }
      break;
    }
  case MODE_8x8:
  case MODE_8x8ref0:
    {
      for( B8x8Idx c8x8Idx; c8x8Idx.isLegal(); c8x8Idx++ )
      {
        if( BLK_SKIP != rcMbDataAccess.getMbData().getBlkMode   ( c8x8Idx.b8x8Index() ) &&
            rcMbDataAccess            .getMbData().isBlockFwdBwd( c8x8Idx.b8x8Index(), eLstIdx ) )
        {
          DECRNOK( m_pcMbSymbolReadIf->motionPredFlag( rcMbDataAccess, eLstIdx, c8x8Idx.b8x8() ) );
        }
      }
      break;
    }
  default:
    {
      AF();
      return Err::m_nERR;
    }
  }

  return Err::m_nOK;
}