# Dirac - A Video Codec

Created by the British Broadcasting Corporation.

# dirac::MotionCompensator Class Reference

Abstract Motion compensator class. More...

`#include <mot_comp.h>`

Inheritance diagram for dirac::MotionCompensator:

List of all members.

## Public Member Functions

- MotionCompensator (const PicturePredParams &ppp)
    Constructor.
- virtual ~MotionCompensator ()
    Destructor.
- void CompensatePicture (const AddOrSub direction, const MvData &mv_data, Picture *in_pic, Picture *refsptr[2])
    Compensate a picture.

## Static Public Member Functions

- static void CompensatePicture (const PicturePredParams &ppp, const AddOrSub direction, const MvData &mv_data, Picture *in_pic, Picture *refptr[2])
    Convenience function to perform motion compensation on a picture.

## Protected Attributes

- PicturePredParams m_predparams
    The codec parameters.
- ChromaFormat m_cformat
    The chroma format.
- bool luma_or_chroma
- AddOrSub m_add_or_sub
- OLBParams m_bparams
- TwoDArray< ValueType > * m_block_weights
- TwoDArray< ValueType > * m_macro_block_weights
- TwoDArray< ValueType > * m_sub_block_weights

## Private Member Functions

- MotionCompensator (const MotionCompensator &cpy)
- MotionCompensator & operator= (const MotionCompensator &rhs)
- void CompensateComponent (Picture *pic, Picture *refsptr[2], const MvData &mv_data, const CompSort cs)
    Motion-compensate a component.
- void DCBlock (TwoDArray< ValueType > &block_data, const ValueType dc)
    Recalculate the weight matrix and store other key block related parameters.
- void ReConfig ()
- void CalculateWeights (int xbsep, int ybsep, TwoDArray< ValueType > *wt_array)
- void CreateBlock (int xbsep, int ybsep, bool FullX, bool FullY, TwoDArray< ValueType > &WeightArray)
    Calculates a weighting block.
- void FlipX (const TwoDArray< ValueType > &Original, TwoDArray< ValueType > &Flipped)
    Flips the values in an array in the x direction.
- void FlipY (const TwoDArray< ValueType > &Original, TwoDArray< ValueType > &Flipped)
    Flips the values in an array in the y direction.
- virtual void CompensateBlock (TwoDArray< ValueType > &pic_data, const ImageCoords &pos, const ImageCoords &orig_pic_size, PredMode block_mode, ValueType dc, const PicArray &ref1up_data, const MVector &mv1, const PicArray &ref2up_data, const MVector &mv2, const TwoDArray< ValueType > &Weights)
- virtual void BlockPixelPred (TwoDArray< ValueType > &block_data, const ImageCoords &pos, const ImageCoords &orig_pic_size, const PicArray &refup_data, const MVector &mv)=0
    Predict pixels in a block. Pure virtual. SubClasses need to define it.
- void AdjustBlockByRefWeights (TwoDArray< ValueType > &val1_block, TwoDArray< ValueType > &val2_block, PredMode block_mode)
- void AdjustBlockBySpatialWeights (TwoDArray< ValueType > &val_block, const ImageCoords &pos, const TwoDArray< ValueType > &wt_array)

## Detailed Description

Motion compensator class, for doing motion compensation with two references and overlapped blocks, using raised-cosine roll-off. This is an abstract class. It must be sub-classed and the BlockPixelPred must be defined in the sub-classes.

## Constructor & Destructor Documentation

dirac::MotionCompensator::MotionCompensator | ( | const PicturePredParams & | ppp | ) |

Constructor initialises using codec parameters.

virtual dirac::MotionCompensator::~MotionCompensator | ( |  | ) | `[virtual]`

dirac::MotionCompensator::MotionCompensator | ( | const MotionCompensator & | cpy | ) | `[private]`

## Member Function Documentation

void dirac::MotionCompensator::AdjustBlockByRefWeights | ( | TwoDArray< ValueType > & | val1_block,
|  | TwoDArray< ValueType > & | val2_block,
|  | PredMode | block_mode |
| ) |  |  | `[private]`

void dirac::MotionCompensator::AdjustBlockBySpatialWeights | ( | TwoDArray< ValueType > & | val_block,
|  | const ImageCoords & | pos,
|  | const TwoDArray< ValueType > & | wt_array |
| ) |  |  | `[private]`

virtual void dirac::MotionCompensator::BlockPixelPred | ( | TwoDArray< ValueType > & | block_data,
|  | const ImageCoords & | pos,
|  | const ImageCoords & | orig_pic_size,
|  | const PicArray & | refup_data,
|  | const MVector & | mv |
| ) |  |  | `[private, pure virtual]`

Implemented in dirac::MotionCompensator_Pixel, dirac::MotionCompensator_HalfPixel, dirac::MotionCompensator_QuarterPixel, and dirac::MotionCompensator_EighthPixel.

void dirac::MotionCompensator::CalculateWeights | ( | int | xbsep,
|  | int | ybsep,
|  | TwoDArray< ValueType > * | wt_array |
| ) |  |  | `[private]`

virtual void dirac::MotionCompensator::CompensateBlock | ( | TwoDArray< ValueType > & | pic_data,
|  | const ImageCoords & | pos,
|  | const ImageCoords & | orig_pic_size,
|  | PredMode | block_mode,
|  | ValueType | dc,
|  | const PicArray & | ref1up_data,
|  | const MVector & | mv1,
|  | const PicArray & | ref2up_data,
|  | const MVector & | mv2,
|  | const TwoDArray< ValueType > & | Weights |
| ) |  |  | `[private, virtual]`

void dirac::MotionCompensator::CompensateComponent | ( | Picture * | pic,
|  | Picture * | refsptr[2],
|  | const MvData & | mv_data,
|  | const CompSort | cs |
| ) |  |  | `[private]`

void dirac::MotionCompensator::CompensatePicture | ( | const AddOrSub | direction,
|  | const MvData & | mv_data,
|  | Picture * | in_pic,
|  | Picture * | refsptr[2] |
| ) |  |  |

Perform motion compensated addition/subtraction on a picture using parameters

Parameters:

  | direction | whether we're subtracting or adding `
  | mv_data | the motion vector data
  | in_pic | Pointer to picture being motion compensated
  | refsptr | Array of pointers to reference pictures.

static void dirac::MotionCompensator::CompensatePicture | ( | const PicturePredParams & | ppp,
|  | const AddOrSub | direction,
|  | const MvData & | mv_data,
|  | Picture * | in_pic,
|  | Picture * | refptr[2] |
| ) |  |  | `[static]`

Static function that motion compensates a picture. It uses the MV precision value in the PicturePredParams to instantiate the appropriate MotionCompensation sub-class.

Parameters:

  | ppp | Picture prediction parameters
  | direction | whether we're subtracting or adding
  | mv_data | the motion vector data
  | in_pic | Pointer to picture being motion compensated
  | refptr | Array of pointers to reference pictures.

void dirac::MotionCompensator::CreateBlock | ( | int | xbsep,
|  | int | ybsep,
|  | bool | FullX,
|  | bool | FullY,
|  | TwoDArray< ValueType > & | WeightArray |
| ) |  |  | `[private]`

Params defines the block parameters so the relevant weighting arrays can be created. FullX and FullY refer to whether the weight should be adjusted for the edge of an image. eg. 1D Weighting shapes in x direction FullX true FullX false ******** * * * * * *

void dirac::MotionCompensator::DCBlock | ( | TwoDArray< ValueType > & | block_data,
|  | const ValueType | dc |
| ) |  |  | `[private]`

DC-compensate an individual block

void dirac::MotionCompensator::FlipX | ( | const TwoDArray< ValueType > & | Original,
|  | TwoDArray< ValueType > & | Flipped |
| ) |  |  | `[private]`

void dirac::MotionCompensator::FlipY | ( | const TwoDArray< ValueType > & | Original,
|  | TwoDArray< ValueType > & | Flipped |
| ) |  |  | `[private]`

MotionCompensator& dirac::MotionCompensator::operator= | ( | const MotionCompensator & | rhs | ) | `[private]`

void dirac::MotionCompensator::ReConfig | ( |  | ) | `[private]`

## Member Data Documentation

bool dirac::MotionCompensator::luma_or_chroma`[protected]`

AddOrSub dirac::MotionCompensator::m_add_or_sub`[protected]`

TwoDArray<ValueType>* dirac::MotionCompensator::m_block_weights`[protected]`

OLBParams dirac::MotionCompensator::m_bparams`[protected]`

ChromaFormat dirac::MotionCompensator::m_cformat`[protected]`

TwoDArray<ValueType>* dirac::MotionCompensator::m_macro_block_weights`[protected]`

PicturePredParams dirac::MotionCompensator::m_predparams`[protected]`

TwoDArray<ValueType>* dirac::MotionCompensator::m_sub_block_weights`[protected]`

The documentation for this class was generated from the following file:

- mot_comp.h

© 2004 British Broadcasting Corporation. Dirac code licensed under the Mozilla Public License (MPL) Version 1.1.
HTML documentation generated by Dimitri van Heesch's excellent Doxygen tool.