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 + 1)>>1)

#define COMPENSATE (  )     ((x + 1)>>1)

#define COMPENSATE (  )     ((x + 1)>>1)

#define COMPENSATE (  )     (x)

#define COMPENSATE (  )     ((x + 1)>>1)

#define COMPENSATE (  )     (x)

#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,
 )     (a) += (b)

Definition at line 462 of file ivi_dsp.c.

#define OP_PUT ( a,
 )     (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.

Referenced by decode_gop_header().

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.

Referenced by decode_gop_header().

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.

Referenced by decode_gop_header().

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.

Referenced by decode_gop_header().

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.

Referenced by decode_gop_header().

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.

Referenced by decode_gop_header().

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.

Referenced by decode_gop_header().

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.

Referenced by decode_gop_header().

IVI_MC_TEMPLATE ( ,
_delta  ,
OP_ADD   
)

IVI_MC_TEMPLATE ( ,
_no_delta  ,
OP_PUT   
)

IVI_MC_TEMPLATE ( ,
_delta  ,
OP_ADD   
)

IVI_MC_TEMPLATE ( ,
_no_delta  ,
OP_PUT   
)


Generated on Fri Oct 26 02:36:52 2012 for FFmpeg by  doxygen 1.5.8