Dirac - A Video Codec

Created by the British Broadcasting Corporation.


ModeDecider Class Reference

Decides between macroblock and block prediction modes. More...

#include <me_mode_decn.h>

List of all members.

Public Member Functions

Private Member Functions

Private Attributes


Detailed Description

Loops over all the macroblocks and decides on the best modes. A macroblock is a square of 16 blocks. There are three possible splitting levels: level 0 means the macroblock is considered as a single block; level 1 means the macroblock is considered as 4 larger blocks, termed sub-macroblocks; level 0 means the macroblock is split right down to blocks.

In addition there is a common_ref mode which if true means the prediction mode of all units within the MB are the same (e.g. all sub-MBs are predicted only from reference 1). In deciding which modes to adopt, the ModeDecider object calculates costs for all permutations, doing motion estimation for the level 1 and level 0 modes as these have not been calculated before.

The process of decision for each is as follows. For each MB, we loop over the levels, and call DoLevelDecn. DoLevelDecn does motion estimation if it's necessary. Then it assumes that we don't have a common block mode and calls DoUnitDecn which finds the best mode for each unit in the MB at that level, individually. Then we consider the case where we say that all the modes will be the same, and call DoCommonMode to see if we'll get a lower cost. Then when we've got a best cost for that level we go up to the next one.


Constructor & Destructor Documentation

ModeDecider::ModeDecider const EncoderParams encp  ) 
 

The constructor creates arrays for handling the motion vector data at splitting levels 0 and 1, as motion estimation must be performed for these levels.

ModeDecider::~ModeDecider  ) 
 

The destructor destroys the classes created in the constructor

ModeDecider::ModeDecider const ModeDecider cpy  )  [private]
 


Member Function Documentation

float ModeDecider::DoCommonMode PredMode predmode,
const int  level
[private]
 

void ModeDecider::DoLevelDecn int  level  )  [private]
 

void ModeDecider::DoMBDecn  )  [private]
 

void ModeDecider::DoME const int  xpos,
const int  ypos,
const int  level
[private]
 

void ModeDecider::DoModeDecn const FrameBuffer my_buffer,
int  frame_num,
MEData me_data
 

Does the mode decision /param my_buffer the buffer of all the relevant frames /param frame_num the frame number for which motion estimation is being done /param mvd the motion vector data into which decisions will be written

float ModeDecider::DoUnitDecn const int  xpos,
const int  ypos,
const int  level
[private]
 

ValueType ModeDecider::GetDCPred int  xblock,
int  yblock
[private]
 

float ModeDecider::GetDCVar const ValueType  dc_val,
const ValueType  dc_pred
[private]
 

float ModeDecider::ModeCost const int  xindex,
const int  yindex,
const PredMode  predmode
[private]
 

ModeDecider& ModeDecider::operator= const ModeDecider rhs  )  [private]
 


Member Data Documentation

FrameSort ModeDecider::fsort [private]
 

BiBChkBlockDiffUp* ModeDecider::m_bicheckdiff [private]
 

const EncoderParams& ModeDecider::m_encparams [private]
 

IntraBlockDiff* ModeDecider::m_intradiff [private]
 

float ModeDecider::m_lambda [private]
 

OneDArray<float> ModeDecider::m_level_factor [private]
 

OneDArray< MEData* > ModeDecider::m_me_data_set [private]
 

OneDArray<float> ModeDecider::m_mode_factor [private]
 

const PicArray* ModeDecider::m_pic_data [private]
 

const PicArray* ModeDecider::m_ref1_updata [private]
 

const PicArray* ModeDecider::m_ref2_updata [private]
 

int ModeDecider::m_xmb_loc [private]
 

int ModeDecider::m_ymb_loc [private]
 

int ModeDecider::num_refs [private]
 


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.