Dirac - A Video Codec

Created by the British Broadcasting Corporation.


Public Member Functions | Static Public Member Functions | Protected Attributes | Private Member Functions | List of all members
dirac::MotionCompensator Class Referenceabstract

Abstract Motion compensator class. More...

#include <mot_comp.h>

Inheritance diagram for dirac::MotionCompensator:
Inheritance graph
[legend]
Collaboration diagram for dirac::MotionCompensator:
Collaboration graph
[legend]

Public Member Functions

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

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. More...
 

Protected Attributes

PicturePredParams m_predparams
 The codec parameters. More...
 
ChromaFormat m_cformat
 The chroma format. More...
 
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)
 
MotionCompensatoroperator= (const MotionCompensator &rhs)
 
void CompensateComponent (Picture *pic, Picture *refsptr[2], const MvData &mv_data, const CompSort cs)
 Motion-compensate a component. More...
 
void DCBlock (TwoDArray< ValueType > &block_data, const ValueType dc)
 Recalculate the weight matrix and store other key block related parameters. More...
 
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. More...
 
void FlipX (const TwoDArray< ValueType > &Original, TwoDArray< ValueType > &Flipped)
 Flips the values in an array in the x direction. More...
 
void FlipY (const TwoDArray< ValueType > &Original, TwoDArray< ValueType > &Flipped)
 Flips the values in an array in the y direction. More...
 
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. More...
 
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

◆ MotionCompensator() [1/2]

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

Constructor initialises using codec parameters.

◆ ~MotionCompensator()

virtual dirac::MotionCompensator::~MotionCompensator ( )
virtual

◆ MotionCompensator() [2/2]

dirac::MotionCompensator::MotionCompensator ( const MotionCompensator cpy)
private

Member Function Documentation

◆ AdjustBlockByRefWeights()

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

◆ AdjustBlockBySpatialWeights()

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

◆ BlockPixelPred()

virtual void dirac::MotionCompensator::BlockPixelPred ( TwoDArray< ValueType > &  block_data,
const ImageCoords pos,
const ImageCoords orig_pic_size,
const PicArray refup_data,
const MVector mv 
)
privatepure virtual

◆ CalculateWeights()

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

◆ CompensateBlock()

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 
)
privatevirtual

◆ CompensateComponent()

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

◆ CompensatePicture() [1/2]

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_datathe motion vector data
in_picPointer to picture being motion compensated
refsptrArray of pointers to reference pictures.

◆ CompensatePicture() [2/2]

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
pppPicture prediction parameters
directionwhether we're subtracting or adding
mv_datathe motion vector data
in_picPointer to picture being motion compensated
refptrArray of pointers to reference pictures.

◆ CreateBlock()

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


  • *
    • *
      • *

◆ DCBlock()

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

DC-compensate an individual block

◆ FlipX()

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

◆ FlipY()

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

◆ operator=()

MotionCompensator & dirac::MotionCompensator::operator= ( const MotionCompensator rhs)
private

◆ ReConfig()

void dirac::MotionCompensator::ReConfig ( )
private

Member Data Documentation

◆ luma_or_chroma

bool dirac::MotionCompensator::luma_or_chroma
protected

◆ m_add_or_sub

AddOrSub dirac::MotionCompensator::m_add_or_sub
protected

◆ m_block_weights

TwoDArray<ValueType>* dirac::MotionCompensator::m_block_weights
protected

◆ m_bparams

OLBParams dirac::MotionCompensator::m_bparams
protected

◆ m_cformat

ChromaFormat dirac::MotionCompensator::m_cformat
protected

◆ m_macro_block_weights

TwoDArray<ValueType>* dirac::MotionCompensator::m_macro_block_weights
protected

◆ m_predparams

PicturePredParams dirac::MotionCompensator::m_predparams
protected

◆ m_sub_block_weights

TwoDArray<ValueType>* dirac::MotionCompensator::m_sub_block_weights
protected

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

© 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.