Dirac - A Video Codec

Created by the British Broadcasting Corporation.


dirac::FrameBuffer Class Reference

Holds frames both for reference and to overcome reordering delay. More...

#include <frame_buffer.h>

List of all members.

Public Member Functions

Private Member Functions

Private Attributes


Detailed Description

The buffer holds frames in a stack to overcome both reordering due to bi-directional prediction and use as references for subsequence motion estimation. Frames, and components of frames, can be accessed by their frame numbers. GOP parameters can be included in the constructors so that frames can be given types (I frame, L1 frame or L2 frame) on being pushed onto the stack; alternatively, these parameters can be overridden.

Constructor & Destructor Documentation

dirac::FrameBuffer::FrameBuffer (  ) 

dirac::FrameBuffer::FrameBuffer ( ChromaFormat  cf,
const int  orig_xlen,
const int  orig_ylen,
const int  dwt_xlen,
const int  dwt_ylen,
const int  dwt_cxlen,
const int  dwt_cylen,
const unsigned int  luma_depth,
const unsigned int  chroma_depth,
bool  using_ac 
)

Creates a FrameBuffer using the chroma format. Suitable for compressing when there are no L2 frames, or when the temporal prediction structure is to be determined on the fly.

Parameters:
cf the Chroma format of frames in the buffer
orig_xlen the original luma width of frames in the buffer
orig_ylen the original luma height of frames in the buffer
dwt_xlen the padded luma width of frames in the buffer
dwt_ylen the padded luma height of frames in the buffer
dwt_cxlen the padded chroma width of frames in the buffer
dwt_cylen the padded chroma height of frames in the buffer
luma_depth the video depth of the luma comp in the buffer
chroma_depth the video depth of the chroma comp in the buffer
using_ac True if using Arithmetic coding to code coefficient data

dirac::FrameBuffer::FrameBuffer ( ChromaFormat  cf,
const int  numL1,
const int  L1sep,
const int  orig_xlen,
const int  orig_ylen,
const int  dwt_xlen,
const int  dwt_ylen,
const int  dwt_cxlen,
const int  dwt_cylen,
const unsigned int  luma_depth,
const unsigned int  chroma_depth,
bool  interlace,
bool  using_ac 
)

Creates a FrameBuffer using the chroma format, the number of L1 frames between I frames and the separation in frames between L1 frames. Suitable for compressing when there is a full GOP structure or when the temporal prediction structure is to be determined on the fly.

Parameters:
cf the Chroma format of frames in the buffer
numL1 the number of Layer 1 frames before the next I frame. 0 means that there is only one I frame.
L1sep the number of Layer 2 frames between Layer 1 frames
orig_xlen the original luma width of frames in the buffer
orig_ylen the original luma height of frames in the buffer
dwt_xlen the padded luma width of frames in the buffer
dwt_ylen the padded luma height of frames in the buffer
dwt_cxlen the padded chroma width of frames in the buffer
dwt_cylen the padded chroma height of frames in the buffer
luma_depth the video depth of the luma comp in the buffer
chroma_depth the video depth of the chroma comp in the buffer
interlace Set true if material is being coded in interlaced mode
using_ac True if using Arithmetic coding to code coefficient data

dirac::FrameBuffer::FrameBuffer ( const FrameBuffer cpy  ) 

Copy constructor. Removes the current contents of the frame buffer and copies in the contents of the initialising buffer.

dirac::FrameBuffer::~FrameBuffer (  ) 


Member Function Documentation

FrameBuffer& dirac::FrameBuffer::operator= ( const FrameBuffer rhs  ) 

Operator=. Assigns all elements of the rhs to the lhs.

Frame& dirac::FrameBuffer::GetFrame ( const unsigned int  fnum  ) 

const Frame& dirac::FrameBuffer::GetFrame ( const unsigned int  fnum  )  const

Frame& dirac::FrameBuffer::GetFrame ( const unsigned int  fnum,
bool &  is_present 
)

const Frame& dirac::FrameBuffer::GetFrame ( const unsigned int  fnum,
bool &  is_present 
) const

bool dirac::FrameBuffer::IsFrameAvail ( const unsigned int  fnum  )  const

PicArray& dirac::FrameBuffer::GetComponent ( const unsigned int  frame_num,
CompSort  c 
)

const PicArray& dirac::FrameBuffer::GetComponent ( const unsigned int  frame_num,
CompSort  c 
) const

PicArray& dirac::FrameBuffer::GetUpComponent ( const unsigned int  frame_num,
CompSort  c 
)

const PicArray& dirac::FrameBuffer::GetUpComponent ( const unsigned int  frame_num,
CompSort  c 
) const

std::vector<int> dirac::FrameBuffer::Members (  )  const

void dirac::FrameBuffer::PushFrame ( const unsigned int  frame_num  ) 

Put a new frame into the top of the buffer. Frame parameters associated with the frame will be the built-in parameters for the buffer.

Parameters:
frame_num the number of the frame being inserted

void dirac::FrameBuffer::PushFrame ( const FrameParams fp  ) 

Put a new frame into the top of the buffer. Frame parameters associated with the frame will be as given by the frame parameter object.

void dirac::FrameBuffer::PushFrame ( const Frame frame  ) 

Put a copy of a new frame into the top of the buffer.

void dirac::FrameBuffer::SetRetiredFrameNum ( const int  show_fnum,
const int  current_coded_fnum 
)

Indicate which frame which has been output and which is no longer required for reference. Expiry times are set in each frame's frame parameters.

Parameters:
show_fnum frame number in display order that can be output
current_coded_fnum frame number in display order of frame currently being coded

void dirac::FrameBuffer::CleanAll ( const int  show_fnum,
const int  current_coded_fnum 
)

Delete frames which have been output and which are no longer required for reference. Expiry times are set in each frame's frame parameters.

Parameters:
show_fnum frame number in display order that can be output
current_coded_fnum frame number in display order of frame currently being coded

void dirac::FrameBuffer::CleanRetired ( const int  show_fnum,
const int  current_coded_fnum 
)

Delete frames which have been output and retired reference frames. Expiry times are set in each frame's frame parameters.

Parameters:
show_fnum frame number in display order that can be output
current_coded_fnum frame number in display order of frame currently being coded

void dirac::FrameBuffer::Clean ( int  fnum  ) 

Delete frame.

Parameters:
fnum frame number in display order to be deleted from frame buffer

const FrameParams& dirac::FrameBuffer::GetFParams (  )  const [inline]

FrameParams& dirac::FrameBuffer::GetFParams (  )  [inline]

void dirac::FrameBuffer::SetFrameParams ( const unsigned int  fnum  ) 

void dirac::FrameBuffer::Remove ( const unsigned int  fnum  )  [private]

Remove a frame with a given frame number (in display order) from the buffer. Searches through the buffer and removes frame(s) with that number.

void dirac::FrameBuffer::SetProgressiveFrameParams ( const unsigned int  fnum  )  [private]

void dirac::FrameBuffer::SetInterlacedFrameParams ( const unsigned int  fnum  )  [private]


Member Data Documentation

int dirac::FrameBuffer::m_ref_count [private]

std::vector<Frame*> dirac::FrameBuffer::m_frame_data [private]

std::vector<bool> dirac::FrameBuffer::m_frame_in_use [private]

std::map<unsigned int,unsigned int> dirac::FrameBuffer::m_fnum_map [private]

FrameParams dirac::FrameBuffer::m_fparams [private]

unsigned int dirac::FrameBuffer::m_num_L1 [private]

unsigned int dirac::FrameBuffer::m_L1_sep [private]

unsigned int dirac::FrameBuffer::m_gop_len [private]

bool dirac::FrameBuffer::m_interlace [private]

bool dirac::FrameBuffer::m_using_ac [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.