# Dirac - A Video Codec

Created by the British Broadcasting Corporation.

Public Member Functions | Static Public Member Functions | Protected Attributes | Private Member Functions
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_EighthPixel, dirac::MotionCompensator_QuarterPixel, dirac::MotionCompensator_HalfPixel, and dirac::MotionCompensator_Pixel.

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

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::CompensatePicture | ( | const AddOrSub | direction,
|  | const MvData & | mv_data,
|  | Picture * | in_pic,
|  | Picture * | refsptr[2]
| ) |  |

        Perform motion compensated addition/subtraction on a picture using
        parameters
        \param    direction whether we're subtracting or adding

`

Parameters:

  mv_data | the motion vector data
  in_pic | Pointer to picture being motion compensated
  refsptr | 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.