Defines | Functions

libavcodec/ivi_dsp.c File Reference

DSP functions (inverse transforms, motion compensation, wavelet recompostions) for Indeo Video Interactive codecs. More...

#include "avcodec.h"
#include "dsputil.h"
#include "dwt.h"
#include "ivi_common.h"
#include "ivi_dsp.h"

Go to the source code of this file.

Defines

#define IVI_SLANT_BFLY(s1, s2, o1, o2, t)
 butterfly operation for the inverse slant transform
#define IVI_IREFLECT(s1, s2, o1, o2, t)
 This is a reflection a,b = 1/2, 5/4 for the inverse slant transform.
#define IVI_SLANT_PART4(s1, s2, o1, o2, t)
 This is a reflection a,b = 1/2, 7/8 for the inverse slant transform.
#define IVI_INV_SLANT8(s1, s4, s8, s5, s2, s6, s3, s7, d1, d2, d3, d4, d5, d6, d7, d8, t0, t1, t2, t3, t4, t5, t6, t7, t8)
 inverse slant8 transform
#define IVI_INV_SLANT4(s1, s4, s2, s3, d1, d2, d3, d4, t0, t1, t2, t3, t4)
 inverse slant4 transform
#define COMPENSATE(x)   (x)
#define COMPENSATE(x)   ((x + 1)>>1)
#define COMPENSATE(x)   (x)
#define COMPENSATE(x)   ((x + 1)>>1)
#define COMPENSATE(x)   ((x + 1)>>1)
#define COMPENSATE(x)   ((x + 1)>>1)
#define IVI_MC_TEMPLATE(size, suffix, OP)
#define OP_PUT(a, b)   (a) = (b)
#define OP_ADD(a, b)   (a) += (b)

Functions

void ff_ivi_recompose53 (const IVIPlaneDesc *plane, uint8_t *dst, const int dst_pitch, const int num_bands)
 5/3 wavelet recomposition filter for Indeo5
void ff_ivi_inverse_slant_8x8 (const int32_t *in, int16_t *out, uint32_t pitch, const uint8_t *flags)
 two-dimensional inverse slant 8x8 transform
void ff_ivi_inverse_slant_4x4 (const int32_t *in, int16_t *out, uint32_t pitch, const uint8_t *flags)
 two-dimensional inverse slant 4x4 transform
void ff_ivi_dc_slant_2d (const int32_t *in, int16_t *out, uint32_t pitch, int blk_size)
 DC-only two-dimensional inverse slant transform.
void ff_ivi_row_slant8 (const int32_t *in, int16_t *out, uint32_t pitch, const uint8_t *flags)
 inverse 1D row slant transform
void ff_ivi_dc_row_slant (const int32_t *in, int16_t *out, uint32_t pitch, int blk_size)
 DC-only inverse row slant transform.
void ff_ivi_col_slant8 (const int32_t *in, int16_t *out, uint32_t pitch, const uint8_t *flags)
 inverse 1D column slant transform
void ff_ivi_dc_col_slant (const int32_t *in, int16_t *out, uint32_t pitch, int blk_size)
 DC-only inverse column slant transform.
void ff_ivi_put_pixels_8x8 (const int32_t *in, int16_t *out, uint32_t pitch, const uint8_t *flags)
 Copies the pixels into the frame buffer.
void ff_ivi_put_dc_pixel_8x8 (const int32_t *in, int16_t *out, uint32_t pitch, int blk_size)
 Copies the DC coefficient into the first pixel of the block and zeroes all others.
 IVI_MC_TEMPLATE (8, _no_delta, OP_PUT)
 IVI_MC_TEMPLATE (8, _delta, OP_ADD)
 IVI_MC_TEMPLATE (4, _no_delta, OP_PUT)
 IVI_MC_TEMPLATE (4, _delta, OP_ADD)

Detailed Description

DSP functions (inverse transforms, motion compensation, wavelet recompostions) for Indeo Video Interactive codecs.

Definition in file ivi_dsp.c.


Define Documentation

#define COMPENSATE (   x  )     (x)
#define COMPENSATE (   x  )     (x)
#define COMPENSATE (   x  )     ((x + 1)>>1)
#define COMPENSATE (   x  )     ((x + 1)>>1)
#define COMPENSATE (   x  )     ((x + 1)>>1)
#define COMPENSATE (   x  )     ((x + 1)>>1)
#define IVI_INV_SLANT4 (   s1,
  s4,
  s2,
  s3,
  d1,
  d2,
  d3,
  d4,
  t0,
  t1,
  t2,
  t3,
  t4 
)
Value:
{\
    IVI_SLANT_BFLY(s1, s2, t1, t2, t0); IVI_IREFLECT  (s4, s3, t4, t3, t0);\
\
    IVI_SLANT_BFLY(t1, t4, t1, t4, t0); IVI_SLANT_BFLY(t2, t3, t2, t3, t0);\
    d1 = COMPENSATE(t1);\
    d2 = COMPENSATE(t2);\
    d3 = COMPENSATE(t3);\
    d4 = COMPENSATE(t4);}

inverse slant4 transform

Definition at line 222 of file ivi_dsp.c.

Referenced by ff_ivi_inverse_slant_4x4().

#define IVI_INV_SLANT8 (   s1,
  s4,
  s8,
  s5,
  s2,
  s6,
  s3,
  s7,
  d1,
  d2,
  d3,
  d4,
  d5,
  d6,
  d7,
  d8,
  t0,
  t1,
  t2,
  t3,
  t4,
  t5,
  t6,
  t7,
  t8 
)
Value:

inverse slant8 transform

Definition at line 202 of file ivi_dsp.c.

Referenced by ff_ivi_col_slant8(), ff_ivi_inverse_slant_8x8(), and ff_ivi_row_slant8().

#define IVI_IREFLECT (   s1,
  s2,
  o1,
  o2,
  t 
)
Value:
t  = ((s1 + s2*2 + 2) >> 2) + s1;\
    o2 = ((s1*2 - s2 + 2) >> 2) - s2;\
    o1 = t;\

This is a reflection a,b = 1/2, 5/4 for the inverse slant transform.

Definition at line 188 of file ivi_dsp.c.

#define IVI_MC_TEMPLATE (   size,
  suffix,
  OP 
)

Definition at line 426 of file ivi_dsp.c.

#define IVI_SLANT_BFLY (   s1,
  s2,
  o1,
  o2,
  t 
)
Value:
t  = s1 - s2;\
    o1 = s1 + s2;\
    o2 = t;\

butterfly operation for the inverse slant transform

Definition at line 182 of file ivi_dsp.c.

#define IVI_SLANT_PART4 (   s1,
  s2,
  o1,
  o2,
  t 
)
Value:
t  = s2 + ((s1*4  - s2 + 4) >> 3);\
    o2 = s1 + ((-s1 - s2*4 + 4) >> 3);\
    o1 = t;\

This is a reflection a,b = 1/2, 7/8 for the inverse slant transform.

Definition at line 194 of file ivi_dsp.c.

#define OP_ADD (   a,
  b 
)    (a) += (b)

Definition at line 462 of file ivi_dsp.c.

#define OP_PUT (   a,
  b 
)    (a) = (b)

Definition at line 461 of file ivi_dsp.c.


Function Documentation

void ff_ivi_col_slant8 ( const int32_t *  in,
int16_t *  out,
uint32_t  pitch,
const uint8_t *  flags 
)

inverse 1D column slant transform

Parameters:
in [in] pointer to the vector of transform coefficients
out [out] pointer to the output buffer (frame)
pitch [in] pitch to move to the next y line
flags [in] pointer to the array of column flags: != 0 - non_empty column, 0 - empty one (this array must be filled by caller)

Definition at line 362 of file ivi_dsp.c.

void ff_ivi_dc_col_slant ( const int32_t *  in,
int16_t *  out,
uint32_t  pitch,
int  blk_size 
)

DC-only inverse column slant transform.

Definition at line 389 of file ivi_dsp.c.

void ff_ivi_dc_row_slant ( const int32_t *  in,
int16_t *  out,
uint32_t  pitch,
int  blk_size 
)

DC-only inverse row slant transform.

Definition at line 344 of file ivi_dsp.c.

void ff_ivi_dc_slant_2d ( const int32_t *  in,
int16_t *  out,
uint32_t  pitch,
int  blk_size 
)

DC-only two-dimensional inverse slant transform.

Performing the inverse slant transform in this case is equivalent to spreading (DC_coeff + 1)/2 over the whole block. It works much faster than performing the slant transform on a vector of zeroes.

Parameters:
in [in] pointer to the dc coefficient
out [out] pointer to the output buffer (frame)
pitch [in] pitch to move to the next y line
blk_size [in] transform block size

Definition at line 311 of file ivi_dsp.c.

void ff_ivi_inverse_slant_4x4 ( const int32_t *  in,
int16_t *  out,
uint32_t  pitch,
const uint8_t *  flags 
)

two-dimensional inverse slant 4x4 transform

Parameters:
in [in] pointer to the vector of transform coefficients
out [out] pointer to the output buffer (frame)
pitch [in] pitch to move to the next y line
flags [in] pointer to the array of column flags: != 0 - non_empty column, 0 - empty one (this array must be filled by caller)

Definition at line 271 of file ivi_dsp.c.

void ff_ivi_inverse_slant_8x8 ( const int32_t *  in,
int16_t *  out,
uint32_t  pitch,
const uint8_t *  flags 
)

two-dimensional inverse slant 8x8 transform

Parameters:
in [in] pointer to the vector of transform coefficients
out [out] pointer to the output buffer (frame)
pitch [in] pitch to move to the next y line
flags [in] pointer to the array of column flags: != 0 - non_empty column, 0 - empty one (this array must be filled by caller)

Definition at line 231 of file ivi_dsp.c.

Referenced by decode_gop_header().

void ff_ivi_put_dc_pixel_8x8 ( const int32_t *  in,
int16_t *  out,
uint32_t  pitch,
int  blk_size 
)

Copies the DC coefficient into the first pixel of the block and zeroes all others.

Definition at line 413 of file ivi_dsp.c.

void ff_ivi_put_pixels_8x8 ( const int32_t *  in,
int16_t *  out,
uint32_t  pitch,
const uint8_t *  flags 
)

Copies the pixels into the frame buffer.

Definition at line 403 of file ivi_dsp.c.

void ff_ivi_recompose53 ( const IVIPlaneDesc plane,
uint8_t *  dst,
const int  dst_pitch,
const int  num_bands 
)

5/3 wavelet recomposition filter for Indeo5

Parameters:
plane [in] pointer to the descriptor of the plane being processed
dst [out] pointer to the destination buffer
dst_pitch [in] pitch of the destination buffer
num_bands [in] number of wavelet bands to be processed

Definition at line 35 of file ivi_dsp.c.

Referenced by decode_frame().

void ff_ivi_row_slant8 ( const int32_t *  in,
int16_t *  out,
uint32_t  pitch,
const uint8_t *  flags 
)

inverse 1D row slant transform

Parameters:
in [in] pointer to the vector of transform coefficients
out [out] pointer to the output buffer (frame)
pitch [in] pitch to move to the next y line
flags [in] pointer to the array of column flags (unused here)

Definition at line 324 of file ivi_dsp.c.

IVI_MC_TEMPLATE ( ,
_no_delta  ,
OP_PUT   
)
IVI_MC_TEMPLATE ( ,
_delta  ,
OP_ADD   
)
IVI_MC_TEMPLATE ( ,
_no_delta  ,
OP_PUT   
)
IVI_MC_TEMPLATE ( ,
_delta  ,
OP_ADD   
)