Dirac - A Video Codec

Created by the British Broadcasting Corporation.


dirac::SequenceCompressor Class Reference

Compresses a sequence of frames/fields from a stream. More...

#include <seq_compress.h>

Inheritance diagram for dirac::SequenceCompressor:

dirac::FieldSequenceCompressor dirac::FrameSequenceCompressor

List of all members.

Public Member Functions

Protected Member Functions

Protected Attributes

Private Member Functions


Detailed Description

This class compresses a sequence of frames/fields, frame by frame. or field by field. It currently uses GOP parameters set in the encoder parameters in order to define the temporal prediction structure. A version to incorporate non-GOP structures is TBC.

This is an abstract class.


Constructor & Destructor Documentation

dirac::SequenceCompressor::SequenceCompressor ( StreamPicInput pin,
EncoderParams encp,
DiracByteStream dirac_byte_stream 
)

Creates a sequence compressor, and prepares to begin compressing with the first frame.Sets up frame padding in the picture input if necesary

Parameters:
pin an input stream containing a sequence of frames
encp parameters for the encoding process
dirac_byte_stream Output destination for compressed data

virtual dirac::SequenceCompressor::~SequenceCompressor (  )  [virtual]

Destructor. Must delete IO objects created by constructor.

dirac::SequenceCompressor::SequenceCompressor ( const SequenceCompressor cpy  )  [private]

Copy constructor is private and body-less. This class should not be copied.


Member Function Documentation

virtual bool dirac::SequenceCompressor::LoadNextFrame (  )  [pure virtual]

Load one frame of data into the Sequence Compressor. Sets m_all_done to true if no more data is available to be loaded. Input can be frame or field. So the child class will have to implement this function.

Returns:
true - if frame load succeeded. false - otherwise

Implemented in dirac::FrameSequenceCompressor, and dirac::FieldSequenceCompressor.

Frame& dirac::SequenceCompressor::CompressNextFrame (  ) 

This function codes the next frame in coding order and returns the next frame in display order. In general these will differ, and because of re-ordering there is a delay which needs to be imposed. This creates problems at the start and at the end of the sequence which must be dealt with. At the start we just keep outputting frame 0. At the end you will need to loop for longer to get all the frames out. It's up to the calling function to do something with the decoded frames as they come out -- write them to screen or to file, for example. . If coding is fast enough the compressed version could be watched real-time (with suitable buffering in the calling function to account for encode-time variations).

NOTE: LoadNextFrame must be called atleast once before invoking this method.

Returns:
reference to the next locally decoded frame available for display

const Frame* dirac::SequenceCompressor::GetFrameEncoded (  ) 

const MEData* dirac::SequenceCompressor::GetMEData (  ) 

DiracByteStats dirac::SequenceCompressor::EndSequence (  ) 

bool dirac::SequenceCompressor::Finished (  )  [inline]

Indicates whether or not the last frame in the sequence has been compressed.

Returns:
true if last frame has been compressed; false if not

void dirac::SequenceCompressor::Denoise ( Frame frame  )  [protected]

void dirac::SequenceCompressor::DenoiseComponent ( PicArray pic_data  )  [protected]

ValueType dirac::SequenceCompressor::Median ( const ValueType val_list,
const int  length 
) [protected]

virtual int dirac::SequenceCompressor::CodedToDisplay ( const int  pnum  )  [protected, pure virtual]

Uses the GOP parameters to convert frame numbers in coded order to display order. Pure virtual function. The child class will have to define it.

Parameters:
pnum the picture number in coded order

Implemented in dirac::FrameSequenceCompressor, and dirac::FieldSequenceCompressor.

void dirac::SequenceCompressor::MakeSequenceReport (  )  [protected]

virtual const Frame& dirac::SequenceCompressor::OriginalFrame ( int  frame_num  )  [inline, protected, virtual]

Reimplemented in dirac::FieldSequenceCompressor.

virtual void dirac::SequenceCompressor::CleanBuffers (  )  [protected, virtual]

Reimplemented in dirac::FieldSequenceCompressor.

virtual bool dirac::SequenceCompressor::IsNewAccessUnit (  )  [protected, pure virtual]

Implemented in dirac::FrameSequenceCompressor, and dirac::FieldSequenceCompressor.

virtual void dirac::SequenceCompressor::RateControlCompress ( Frame my_frame,
bool  is_a_cut 
) [protected, pure virtual]

Implemented in dirac::FrameSequenceCompressor, and dirac::FieldSequenceCompressor.

SequenceCompressor& dirac::SequenceCompressor::operator= ( const SequenceCompressor rhs  )  [private]

Assignment = is private and body-less. This class should not be assigned..


Member Data Documentation

bool dirac::SequenceCompressor::m_all_done [protected]

bool dirac::SequenceCompressor::m_just_finished [protected]

Flag which is false if we've been all-done for more than one frame, true otherwise (so that we can take actions on finishing once only).

SourceParams& dirac::SequenceCompressor::m_srcparams [protected]

EncoderParams& dirac::SequenceCompressor::m_encparams [protected]

StreamPicInput* dirac::SequenceCompressor::m_pic_in [protected]

FrameBuffer* dirac::SequenceCompressor::m_fbuffer [protected]

FrameBuffer* dirac::SequenceCompressor::m_mebuffer [protected]

int dirac::SequenceCompressor::m_current_display_fnum [protected]

int dirac::SequenceCompressor::m_current_code_fnum [protected]

int dirac::SequenceCompressor::m_show_fnum [protected]

int dirac::SequenceCompressor::m_last_frame_read [protected]

int dirac::SequenceCompressor::m_delay [protected]

QualityMonitor dirac::SequenceCompressor::m_qmonitor [protected]

RateController* dirac::SequenceCompressor::m_ratecontrol [protected]

FrameCompressor dirac::SequenceCompressor::m_fcoder [protected]

DiracByteStream& dirac::SequenceCompressor::m_dirac_byte_stream [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.