# Dirac - A Video Codec

Created by the British Broadcasting Corporation.

# 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 >:

List of all members.

## Public Member Functions

- GenericBandCodec (SubbandByteIO *subband_byteio, size_t number_of_contexts, const SubbandList &band_list, int band_num, const bool is_intra)
    Constructor.

## 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.
- void DecodeVal (CoeffArray &out_data, const int xpos, const int ypos)
    Decode an individual quantised value and perform inverse-quantisation.
- void CodeQuantIndexOffset (const int offset)
    Encode the offset for a code block quantiser.
- int DecodeQuantIndexOffset ()
    Decode the offset for a code block quantiser.
- void SetToVal (const CodeBlock &code_block, CoeffArray &coeff_data, const CoeffType val)
    Set a code block area to a given value.
- virtual void ClearBlock (const CodeBlock &code_block, CoeffArray &coeff_data)
    Set all block values to 0.
- 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".
- int ChooseInfoContext () const
    A function for choosing the context for "information bits".
- int ChooseSignContext (const CoeffArray &data, const int xpos, const int ypos) const
    A function for choosing the context for sign bits.

## Protected Attributes

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

## Private Member Functions

- GenericBandCodec (const GenericBandCodec &cpy)
    Private, bodyless copy constructor: class should not be copied.
- GenericBandCodec & operator= (const GenericBandCodec &rhs)
    Private, bodyless copy operator=: class should not be assigned.

### template<typename EntropyCodec>
class dirac::GenericBandCodec< EntropyCodec >

## Constructor & Destructor Documentation

template<typename EntropyCodec >

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

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().

template<typename EntropyCodec>

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

## Member Function Documentation

template<typename EntropyCodec >

int GenericBandCodec::ChooseFollowContext | ( | const int | bin_number | ) | const`[inline, protected]`

References dirac::GenericBandCodec< EntropyCodec >::m_nhood_nonzero, dirac::GenericBandCodec< EntropyCodec >::m_parent_notzero, 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.

Referenced by dirac::GenericBandCodec< EntropyCodec >::CodeVal(), and dirac::GenericBandCodec< EntropyCodec >::DecodeVal().

template<typename EntropyCodec >

int GenericBandCodec::ChooseInfoContext | ( |  | ) | const`[inline, protected]`

References dirac::INFO_CTX.

Referenced by dirac::GenericBandCodec< EntropyCodec >::CodeVal(), and dirac::GenericBandCodec< EntropyCodec >::DecodeVal().

template<typename EntropyCodec >

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

References dirac::GenericBandCodec< EntropyCodec >::m_node, dirac::SIGN0_CTX, dirac::SIGN_NEG_CTX, dirac::SIGN_POS_CTX, dirac::Subband::Xp(), and dirac::Subband::Yp().

Referenced by dirac::GenericBandCodec< EntropyCodec >::CodeVal(), and dirac::GenericBandCodec< EntropyCodec >::DecodeVal().

template<typename EntropyCodec >

void GenericBandCodec::ClearBlock | ( | const CodeBlock & | code_block,
|  | CoeffArray & | coeff_data |
| ) |  |  | `[inline, 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().

Referenced by dirac::GenericBandCodec< EntropyCodec >::DoWorkCode(), and dirac::GenericBandCodec< EntropyCodec >::DoWorkDecode().

template<typename EntropyCodec >

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

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

References dirac::GenericBandCodec< EntropyCodec >::CodeVal().

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

template<typename EntropyCodec >

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

References dirac::GenericBandCodec< EntropyCodec >::CodeCoeff(), dirac::GenericBandCodec< EntropyCodec >::CodeQuantIndexOffset(), dirac::GenericBandCodec< EntropyCodec >::m_is_intra, dirac::GenericBandCodec< EntropyCodec >::m_last_qf_idx, dirac::GenericBandCodec< EntropyCodec >::m_nhood_nonzero, dirac::GenericBandCodec< EntropyCodec >::m_node, dirac::GenericBandCodec< EntropyCodec >::m_offset, dirac::GenericBandCodec< EntropyCodec >::m_parent_notzero, dirac::GenericBandCodec< EntropyCodec >::m_pnode, dirac::GenericBandCodec< EntropyCodec >::m_pxpos, dirac::GenericBandCodec< EntropyCodec >::m_pypos, dirac::GenericBandCodec< EntropyCodec >::m_qf, dirac::Subband::Parent(), dirac::CodeBlock::QuantIndex(), dirac::Subband::UsingMultiQuants(), dirac::CodeBlock::Xend(), dirac::Subband::Xp(), dirac::CodeBlock::Xstart(), dirac::CodeBlock::Yend(), dirac::Subband::Yp(), and dirac::CodeBlock::Ystart().

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

template<typename EntropyCodec >

void GenericBandCodec::CodeQuantIndexOffset | ( | const int | offset | ) | `[inline, protected]`

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

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

template<typename EntropyCodec >

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

References dirac::GenericBandCodec< EntropyCodec >::ChooseFollowContext(), dirac::GenericBandCodec< EntropyCodec >::ChooseInfoContext(), dirac::GenericBandCodec< EntropyCodec >::ChooseSignContext(), dirac::GenericBandCodec< EntropyCodec >::m_offset, and dirac::GenericBandCodec< EntropyCodec >::m_qf.

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

template<typename EntropyCodec >

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

Reimplemented in dirac::IntraDCBandCodec.

References dirac::GenericBandCodec< EntropyCodec >::DecodeVal().

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

template<typename EntropyCodec >

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

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

References dirac::GenericBandCodec< EntropyCodec >::DecodeCoeff(), dirac::GenericBandCodec< EntropyCodec >::DecodeQuantIndexOffset(), DIRAC_THROW_EXCEPTION, dirac::ERR_UNSUPPORTED_STREAM_DATA, dirac::GenericBandCodec< EntropyCodec >::m_is_intra, dirac::GenericBandCodec< EntropyCodec >::m_last_qf_idx, dirac::GenericBandCodec< EntropyCodec >::m_nhood_nonzero, dirac::GenericBandCodec< EntropyCodec >::m_node, dirac::GenericBandCodec< EntropyCodec >::m_offset, dirac::GenericBandCodec< EntropyCodec >::m_parent_notzero, dirac::GenericBandCodec< EntropyCodec >::m_pnode, dirac::GenericBandCodec< EntropyCodec >::m_pxpos, dirac::GenericBandCodec< EntropyCodec >::m_pypos, dirac::GenericBandCodec< EntropyCodec >::m_qf, dirac::Subband::Parent(), dirac::Subband::QuantIndex(), dirac::SEVERITY_PICTURE_ERROR, dirac::Subband::UsingMultiQuants(), dirac::CodeBlock::Xend(), dirac::Subband::Xp(), dirac::CodeBlock::Xstart(), dirac::CodeBlock::Yend(), dirac::Subband::Yp(), and dirac::CodeBlock::Ystart().

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

template<typename EntropyCodec >

int GenericBandCodec::DecodeQuantIndexOffset | ( |  | ) | `[inline, protected]`

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

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

template<typename EntropyCodec >

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

References dirac::GenericBandCodec< EntropyCodec >::ChooseFollowContext(), dirac::GenericBandCodec< EntropyCodec >::ChooseInfoContext(), dirac::GenericBandCodec< EntropyCodec >::ChooseSignContext(), dirac::GenericBandCodec< EntropyCodec >::m_offset, and dirac::GenericBandCodec< EntropyCodec >::m_qf.

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

template<typename EntropyCodec >

void GenericBandCodec::DoWorkCode | ( | CoeffArray & | in_data | ) | `[inline, protected, virtual]`

Reimplemented in dirac::IntraDCBandCodec.

References dirac::BLOCK_SKIP_CTX, dirac::GenericBandCodec< EntropyCodec >::ClearBlock(), dirac::GenericBandCodec< EntropyCodec >::CodeCoeffBlock(), dirac::Subband::GetCodeBlocks(), and dirac::GenericBandCodec< EntropyCodec >::m_node.

template<typename EntropyCodec >

void GenericBandCodec::DoWorkDecode | ( | CoeffArray & | out_data | ) | `[inline, protected, virtual]`

Reimplemented in dirac::IntraDCBandCodec.

References dirac::BLOCK_SKIP_CTX, dirac::GenericBandCodec< EntropyCodec >::ClearBlock(), dirac::GenericBandCodec< EntropyCodec >::DecodeCoeffBlock(), dirac::Subband::GetCodeBlocks(), dirac::GenericBandCodec< EntropyCodec >::m_node, and dirac::CodeBlock::SetSkip().

template<typename EntropyCodec>

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

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

template<typename EntropyCodec>

int dirac::GenericBandCodec< EntropyCodec >::m_bnum`[protected]`

template<typename EntropyCodec>

bool dirac::GenericBandCodec< EntropyCodec >::m_is_intra`[protected]`

Referenced by dirac::GenericBandCodec< EntropyCodec >::CodeCoeffBlock(), and dirac::GenericBandCodec< EntropyCodec >::DecodeCoeffBlock().

template<typename EntropyCodec>

int dirac::GenericBandCodec< EntropyCodec >::m_last_qf_idx`[protected]`

Referenced by dirac::GenericBandCodec< EntropyCodec >::CodeCoeffBlock(), and dirac::GenericBandCodec< EntropyCodec >::DecodeCoeffBlock().

template<typename EntropyCodec>

bool dirac::GenericBandCodec< EntropyCodec >::m_nhood_nonzero`[protected]`

Referenced by dirac::GenericBandCodec< EntropyCodec >::ChooseFollowContext(), dirac::GenericBandCodec< EntropyCodec >::CodeCoeffBlock(), and dirac::GenericBandCodec< EntropyCodec >::DecodeCoeffBlock().

template<typename EntropyCodec>

const Subband dirac::GenericBandCodec< EntropyCodec >::m_node`[protected]`

Referenced by dirac::GenericBandCodec< EntropyCodec >::ChooseSignContext(), dirac::GenericBandCodec< EntropyCodec >::CodeCoeffBlock(), dirac::GenericBandCodec< EntropyCodec >::DecodeCoeffBlock(), dirac::GenericBandCodec< EntropyCodec >::DoWorkCode(), dirac::GenericBandCodec< EntropyCodec >::DoWorkDecode(), and dirac::GenericBandCodec< EntropyCodec >::GenericBandCodec().

template<typename EntropyCodec>

CoeffType dirac::GenericBandCodec< EntropyCodec >::m_offset`[protected]`

Referenced by dirac::GenericBandCodec< EntropyCodec >::CodeCoeffBlock(), dirac::GenericBandCodec< EntropyCodec >::CodeVal(), dirac::GenericBandCodec< EntropyCodec >::DecodeCoeffBlock(), and dirac::GenericBandCodec< EntropyCodec >::DecodeVal().

template<typename EntropyCodec>

bool dirac::GenericBandCodec< EntropyCodec >::m_parent_notzero`[protected]`

Referenced by dirac::GenericBandCodec< EntropyCodec >::ChooseFollowContext(), dirac::GenericBandCodec< EntropyCodec >::CodeCoeffBlock(), and dirac::GenericBandCodec< EntropyCodec >::DecodeCoeffBlock().

template<typename EntropyCodec>

Subband dirac::GenericBandCodec< EntropyCodec >::m_pnode`[protected]`

Referenced by dirac::GenericBandCodec< EntropyCodec >::CodeCoeffBlock(), dirac::GenericBandCodec< EntropyCodec >::DecodeCoeffBlock(), and dirac::GenericBandCodec< EntropyCodec >::GenericBandCodec().

template<typename EntropyCodec>

int dirac::GenericBandCodec< EntropyCodec >::m_pxpos`[protected]`

Referenced by dirac::GenericBandCodec< EntropyCodec >::CodeCoeffBlock(), and dirac::GenericBandCodec< EntropyCodec >::DecodeCoeffBlock().

template<typename EntropyCodec>

int dirac::GenericBandCodec< EntropyCodec >::m_pypos`[protected]`

Referenced by dirac::GenericBandCodec< EntropyCodec >::CodeCoeffBlock(), and dirac::GenericBandCodec< EntropyCodec >::DecodeCoeffBlock().

template<typename EntropyCodec>

int dirac::GenericBandCodec< EntropyCodec >::m_qf`[protected]`

Referenced by dirac::GenericBandCodec< EntropyCodec >::CodeCoeffBlock(), dirac::GenericBandCodec< EntropyCodec >::CodeVal(), dirac::GenericBandCodec< EntropyCodec >::DecodeCoeffBlock(), and dirac::GenericBandCodec< EntropyCodec >::DecodeVal().

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.