# Dirac - A Video Codec

Created by the British Broadcasting Corporation.

Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | List of all members
dirac::GenericBandCodec< EntropyCodec > Class Template Reference

A template class for coding and decoding wavelet subband data.

`#include <band_codec.h>`

Inheritance diagram for dirac::GenericBandCodec< EntropyCodec >:
[legend]
Collaboration diagram for dirac::GenericBandCodec< EntropyCodec >:
[legend]

## Public Member Functions
| GenericBandCodec (SubbandByteIO *subband_byteio, size_t number_of_contexts, const SubbandList &band_list, int band_num, const bool is_intra)
| Constructor. More...

## Protected Member Functions
void | CodeVal (CoeffArray &in_data, const int xpos, const int ypos, const CoeffType val)
| Code an individual quantised value and perform inverse-quantisation. More...
void | DecodeVal (CoeffArray &out_data, const int xpos, const int ypos)
| Decode an individual quantised value and perform inverse-quantisation. More...
void | CodeQuantIndexOffset (const int offset)
| Encode the offset for a code block quantiser. More...
int | DecodeQuantIndexOffset ()
| Decode the offset for a code block quantiser. More...
void | SetToVal (const CodeBlock &code_block, CoeffArray &coeff_data, const CoeffType val)
| Set a code block area to a given value. More...
virtual void | ClearBlock (const CodeBlock &code_block, CoeffArray &coeff_data)
| Set all block values to 0. More...
virtual void | DoWorkCode (CoeffArray &in_data)
virtual void | DoWorkDecode (CoeffArray &out_data)
virtual void | CodeCoeffBlock (const CodeBlock &code_block, CoeffArray &in_data)
virtual void | DecodeCoeffBlock (const CodeBlock &code_block, CoeffArray &out_data)
virtual void | CodeCoeff (CoeffArray &in_data, const int xpos, const int ypos)
virtual void | DecodeCoeff (CoeffArray &in_data, const int xpos, const int ypos)
int | ChooseFollowContext (const int bin_number) const
| A function for choosing the context for "follow bits". More...
int | ChooseInfoContext () const
| A function for choosing the context for "information bits". More...
int | ChooseSignContext (const CoeffArray &data, const int xpos, const int ypos) const
| A function for choosing the context for sign bits. More...

## Protected Attributes
bool | m_is_intra
| Flag indicating whether the band comes from an intra picture. More...
int | m_bnum
| variables More...
const Subband | m_node
| the subband being coded More...
int | m_last_qf_idx
| the quantisation index of the last codeblock More...
int | m_qf
| quantisation value More...
CoeffType | m_offset
| reconstruction point More...
bool | m_nhood_nonzero
| True if neighbours non-zero. More...
Subband | m_pnode
| the parent subband More...
int | m_pxpos
| position of the parent coefficient More...
int | m_pypos
bool | m_parent_notzero
| True if the parent of a coeff is not zero. More...

## Private Member Functions
| GenericBandCodec (const GenericBandCodec &cpy)
| Private, bodyless copy constructor: class should not be copied. More...
GenericBandCodec & | operator= (const GenericBandCodec &rhs)
| Private, bodyless copy operator=: class should not be assigned. More...

## Constructor & Destructor Documentation

## ◆ GenericBandCodec() [1/2]

template<typename EntropyCodec >

GenericBandCodec::GenericBandCodec | ( | SubbandByteIO * | subband_byteio,
|  | size_t | number_of_contexts,
|  | const SubbandList & | band_list,
|  | int | band_num,
|  | const bool | is_intra
| ) |  |

Constructor for encoding.

Creates a BandCodec object to encode subband data

Parameters

  subband_byteio | input/output for the encoded bits
  number_of_contexts | the number of contexts used in the encoding process
  band_list | the set of all the subbands
  band_num | the number of the subband being coded
  is_intra | Flag indicating whether the band comes from an intra picture

References dirac::GenericBandCodec< EntropyCodec >::m_node, dirac::GenericBandCodec< EntropyCodec >::m_pnode, and dirac::Subband::Parent().

## ◆ GenericBandCodec() [2/2]

template<typename EntropyCodec >

dirac::GenericBandCodec< EntropyCodec >::GenericBandCodec | ( | const GenericBandCodec< EntropyCodec > & | cpy | ) |
| private

## Member Function Documentation

## ◆ ChooseFollowContext()

template<typename EntropyCodec >

int GenericBandCodec::ChooseFollowContext | ( | const int | bin_number | ) | const
| inline protected

References dirac::NZ_FBIN1nz_CTX, dirac::NZ_FBIN1z_CTX, dirac::NZ_FBIN2_CTX, dirac::NZ_FBIN3_CTX, dirac::NZ_FBIN4_CTX, dirac::NZ_FBIN5_CTX, dirac::NZ_FBIN6plus_CTX, dirac::Z_FBIN1nz_CTX, dirac::Z_FBIN1z_CTX, dirac::Z_FBIN2_CTX, dirac::Z_FBIN3_CTX, dirac::Z_FBIN4_CTX, dirac::Z_FBIN5_CTX, and dirac::Z_FBIN6plus_CTX.

## ◆ ChooseInfoContext()

template<typename EntropyCodec >

int GenericBandCodec::ChooseInfoContext
| inline protected

References dirac::INFO_CTX.

## ◆ ChooseSignContext()

template<typename EntropyCodec >

int GenericBandCodec::ChooseSignContext | ( | const CoeffArray & | data,
|  | const int | xpos,
|  | const int | ypos
| ) |  | const
| inline protected

References dirac::SIGN0_CTX, dirac::SIGN_NEG_CTX, and dirac::SIGN_POS_CTX.

## ◆ ClearBlock()

template<typename EntropyCodec >

void GenericBandCodec::ClearBlock | ( | const CodeBlock & | code_block,
|  | CoeffArray & | coeff_data
| ) |  |
| protected virtual

Reimplemented in dirac::GenericIntraDCBandCodec< EntropyCodec >, dirac::GenericIntraDCBandCodec< ArithCodec< CoeffArray > >, and dirac::GenericIntraDCBandCodec< ArithCodecToVLCAdapter >.

References dirac::CodeBlock::Xend(), dirac::CodeBlock::Xstart(), dirac::CodeBlock::Yend(), and dirac::CodeBlock::Ystart().

## ◆ CodeCoeff()

template<typename EntropyCodec >

void GenericBandCodec::CodeCoeff | ( | CoeffArray & | in_data,
|  | const int | xpos,
|  | const int | ypos
| ) |  |
| protected virtual

Reimplemented in dirac::IntraDCBandCodec, and dirac::IntraDCBandVLC.

## ◆ CodeCoeffBlock()

template<typename EntropyCodec >

void GenericBandCodec::CodeCoeffBlock | ( | const CodeBlock & | code_block,
|  | CoeffArray & | in_data
| ) |  |
| protected virtual

References dirac::CodeBlock::QuantIndex(), dirac::CodeBlock::Xend(), dirac::CodeBlock::Xstart(), dirac::CodeBlock::Yend(), and dirac::CodeBlock::Ystart().

## ◆ CodeQuantIndexOffset()

template<typename EntropyCodec >

void GenericBandCodec::CodeQuantIndexOffset | ( | const int | offset | ) |
| protected

## ◆ CodeVal()

template<typename EntropyCodec >

void GenericBandCodec::CodeVal | ( | CoeffArray & | in_data,
|  | const int | xpos,
|  | const int | ypos,
|  | const CoeffType | val
| ) |  |
| inline protected

## ◆ DecodeCoeff()

template<typename EntropyCodec >

void GenericBandCodec::DecodeCoeff | ( | CoeffArray & | in_data,
|  | const int | xpos,
|  | const int | ypos
| ) |  |
| protected virtual

Reimplemented in dirac::IntraDCBandCodec.

## ◆ DecodeCoeffBlock()

template<typename EntropyCodec >

void GenericBandCodec::DecodeCoeffBlock | ( | const CodeBlock & | code_block,
|  | CoeffArray & | out_data
| ) |  |
| protected virtual

Reimplemented in dirac::GenericIntraDCBandCodec< EntropyCodec >, dirac::GenericIntraDCBandCodec< ArithCodec< CoeffArray > >, and dirac::GenericIntraDCBandCodec< ArithCodecToVLCAdapter >.

References DIRAC_THROW_EXCEPTION, dirac::ERR_UNSUPPORTED_STREAM_DATA, dirac::SEVERITY_PICTURE_ERROR, dirac::CodeBlock::Xend(), dirac::CodeBlock::Xstart(), dirac::CodeBlock::Yend(), and dirac::CodeBlock::Ystart().

Referenced by dirac::GenericIntraDCBandCodec< EntropyCodec >::DecodeCoeffBlock().

## ◆ DecodeQuantIndexOffset()

template<typename EntropyCodec >

int GenericBandCodec::DecodeQuantIndexOffset
| protected

References dirac::Q_OFFSET_FOLLOW_CTX, dirac::Q_OFFSET_INFO_CTX, and dirac::Q_OFFSET_SIGN_CTX.

## ◆ DecodeVal()

template<typename EntropyCodec >

void GenericBandCodec::DecodeVal | ( | CoeffArray & | out_data,
|  | const int | xpos,
|  | const int | ypos
| ) |  |
| inline protected

## ◆ DoWorkCode()

template<typename EntropyCodec >

void GenericBandCodec::DoWorkCode | ( | CoeffArray & | in_data | ) |
| protected virtual

Reimplemented in dirac::IntraDCBandCodec.

References dirac::BLOCK_SKIP_CTX, dirac::TwoDArray< T >::FirstX(), dirac::TwoDArray< T >::FirstY(), dirac::TwoDArray< T >::LastX(), dirac::TwoDArray< T >::LastY(), dirac::TwoDArray< T >::LengthX(), and dirac::TwoDArray< T >::LengthY().

## ◆ DoWorkDecode()

template<typename EntropyCodec >

void GenericBandCodec::DoWorkDecode | ( | CoeffArray & | out_data | ) |
| protected virtual

Reimplemented in dirac::IntraDCBandCodec.

References dirac::BLOCK_SKIP_CTX, dirac::TwoDArray< T >::FirstX(), dirac::TwoDArray< T >::FirstY(), dirac::TwoDArray< T >::LastX(), dirac::TwoDArray< T >::LastY(), dirac::TwoDArray< T >::LengthX(), dirac::TwoDArray< T >::LengthY(), and dirac::CodeBlock::SetSkip().

## ◆ operator=()

template<typename EntropyCodec >

GenericBandCodec & dirac::GenericBandCodec< EntropyCodec >::operator= | ( | const GenericBandCodec< EntropyCodec > & | rhs | ) |
| private

## ◆ SetToVal()

template<typename EntropyCodec >

void GenericBandCodec::SetToVal | ( | const CodeBlock & | code_block,
|  | CoeffArray & | coeff_data,
|  | const CoeffType | val
| ) |  |
| inline protected

References dirac::CodeBlock::Xend(), dirac::CodeBlock::Xstart(), dirac::CodeBlock::Yend(), and dirac::CodeBlock::Ystart().

## Member Data Documentation

## ◆ m_bnum

template<typename EntropyCodec >

int dirac::GenericBandCodec< EntropyCodec >::m_bnum
| protected

## ◆ m_is_intra

template<typename EntropyCodec >

bool dirac::GenericBandCodec< EntropyCodec >::m_is_intra
| protected

## ◆ m_last_qf_idx

template<typename EntropyCodec >

int dirac::GenericBandCodec< EntropyCodec >::m_last_qf_idx
| protected

## ◆ m_nhood_nonzero

template<typename EntropyCodec >

bool dirac::GenericBandCodec< EntropyCodec >::m_nhood_nonzero
| protected

## ◆ m_node

template<typename EntropyCodec >

const Subband dirac::GenericBandCodec< EntropyCodec >::m_node
| protected

Referenced by dirac::GenericBandCodec< EntropyCodec >::GenericBandCodec().

## ◆ m_offset

template<typename EntropyCodec >

CoeffType dirac::GenericBandCodec< EntropyCodec >::m_offset
| protected

## ◆ m_parent_notzero

template<typename EntropyCodec >

bool dirac::GenericBandCodec< EntropyCodec >::m_parent_notzero
| protected

## ◆ m_pnode

template<typename EntropyCodec >

Subband dirac::GenericBandCodec< EntropyCodec >::m_pnode
| protected

Referenced by dirac::GenericBandCodec< EntropyCodec >::GenericBandCodec().

## ◆ m_pxpos

template<typename EntropyCodec >

int dirac::GenericBandCodec< EntropyCodec >::m_pxpos
| protected

## ◆ m_pypos

template<typename EntropyCodec >

int dirac::GenericBandCodec< EntropyCodec >::m_pypos
| protected

## ◆ m_qf

template<typename EntropyCodec >

int dirac::GenericBandCodec< EntropyCodec >::m_qf
| protected

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

- band_codec.h
- band_codec_template.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.