#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_HAAR_BFLY(s1, s2, o1, o2, t) |
| butterfly operation for the inverse Haar transform | |
| #define | INV_HAAR8(s1, s5, s3, s7, s2, s4, s6, s8, d1, d2, d3, d4, d5, d6, d7, d8, t0, t1, t2, t3, t4, t5, t6, t7, t8) |
| inverse 8-point Haar transform | |
| #define | INV_HAAR4(s1, s3, s5, s7) |
| inverse 4-point Haar transform | |
| #define | COMPENSATE(x) (x) |
| #define | COMPENSATE(x) (x) |
| #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_recompose_haar (const IVIPlaneDesc *plane, uint8_t *dst, const int dst_pitch, const int num_bands) |
| Haar wavelet recomposition filter for Indeo 4. | |
| void | ff_ivi_inverse_haar_8x8 (const int32_t *in, int16_t *out, uint32_t pitch, const uint8_t *flags) |
| two-dimensional inverse Haar 8x8 transform for Indeo 4 | |
| void | ff_ivi_dc_haar_2d (const int32_t *in, int16_t *out, uint32_t pitch, int blk_size) |
| DC-only two-dimensional inverse Haar transform for Indeo 4. | |
| 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) |
| Copy 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) |
| Copy the DC coefficient into the first pixel of the block and zero all others. | |
Definition in file ivi_dsp.c.
| #define COMPENSATE | ( | x | ) | ((x + 1)>>1) |
| #define COMPENSATE | ( | x | ) | ((x + 1)>>1) |
| #define COMPENSATE | ( | x | ) | ((x + 1)>>1) |
| #define COMPENSATE | ( | x | ) | (x) |
| #define COMPENSATE | ( | x | ) | ((x + 1)>>1) |
| #define COMPENSATE | ( | x | ) | (x) |
| #define COMPENSATE | ( | x | ) | (x) |
| #define COMPENSATE | ( | x | ) | (x) |
| #define INV_HAAR4 | ( | s1, | |||
| s3, | |||||
| s5, | |||||
| s7 | ) |
Value:
{\
HAAR_BFLY(s1, s5); HAAR_BFLY(s1, s3); HAAR_BFLY(s5, s7);\
s1 = COMPENSATE(s1);\
s3 = COMPENSATE(s3);\
s5 = COMPENSATE(s5);\
s7 = COMPENSATE(s7); }
| #define INV_HAAR8 | ( | s1, | |||
| s5, | |||||
| s3, | |||||
| s7, | |||||
| s2, | |||||
| s4, | |||||
| s6, | |||||
| s8, | |||||
| d1, | |||||
| d2, | |||||
| d3, | |||||
| d4, | |||||
| d5, | |||||
| d6, | |||||
| d7, | |||||
| d8, | |||||
| t0, | |||||
| t1, | |||||
| t2, | |||||
| t3, | |||||
| t4, | |||||
| t5, | |||||
| t6, | |||||
| t7, | |||||
| t8 | ) |
Value:
{\
t1 = s1 << 1; t5 = s5 << 1;\
IVI_HAAR_BFLY(t1, t5, t1, t5, t0); IVI_HAAR_BFLY(t1, s3, t1, t3, t0);\
IVI_HAAR_BFLY(t5, s7, t5, t7, t0); IVI_HAAR_BFLY(t1, s2, t1, t2, t0);\
IVI_HAAR_BFLY(t3, s4, t3, t4, t0); IVI_HAAR_BFLY(t5, s6, t5, t6, t0);\
IVI_HAAR_BFLY(t7, s8, t7, t8, t0);\
d1 = COMPENSATE(t1);\
d2 = COMPENSATE(t2);\
d3 = COMPENSATE(t3);\
d4 = COMPENSATE(t4);\
d5 = COMPENSATE(t5);\
d6 = COMPENSATE(t6);\
d7 = COMPENSATE(t7);\
d8 = COMPENSATE(t8); }
Definition at line 236 of file ivi_dsp.c.
Referenced by ff_ivi_inverse_haar_8x8().
| #define IVI_HAAR_BFLY | ( | s1, | |||
| s2, | |||||
| o1, | |||||
| o2, | |||||
| t | ) |
| #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);}
Definition at line 369 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:
{\
IVI_SLANT_PART4(s4, s5, t4, t5, t0);\
\
IVI_SLANT_BFLY(s1, t5, t1, t5, t0); IVI_SLANT_BFLY(s2, s6, t2, t6, t0);\
IVI_SLANT_BFLY(s7, s3, t7, t3, t0); IVI_SLANT_BFLY(t4, s8, t4, t8, t0);\
\
IVI_SLANT_BFLY(t1, t2, t1, t2, t0); IVI_IREFLECT (t4, t3, t4, t3, t0);\
IVI_SLANT_BFLY(t5, t6, t5, t6, t0); IVI_IREFLECT (t8, t7, t8, t7, t0);\
IVI_SLANT_BFLY(t1, t4, t1, t4, t0); IVI_SLANT_BFLY(t2, t3, t2, t3, t0);\
IVI_SLANT_BFLY(t5, t8, t5, t8, t0); IVI_SLANT_BFLY(t6, t7, t6, t7, t0);\
d1 = COMPENSATE(t1);\
d2 = COMPENSATE(t2);\
d3 = COMPENSATE(t3);\
d4 = COMPENSATE(t4);\
d5 = COMPENSATE(t5);\
d6 = COMPENSATE(t6);\
d7 = COMPENSATE(t7);\
d8 = COMPENSATE(t8);}
Definition at line 349 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 | ) |
| #define IVI_SLANT_BFLY | ( | s1, | |||
| s2, | |||||
| o1, | |||||
| o2, | |||||
| t | ) |
| #define IVI_SLANT_PART4 | ( | s1, | |||
| s2, | |||||
| o1, | |||||
| o2, | |||||
| t | ) |
| void ff_ivi_col_slant8 | ( | const int32_t * | in, | |
| int16_t * | out, | |||
| uint32_t | pitch, | |||
| const uint8_t * | flags | |||
| ) |
inverse 1D column slant transform
| [in] | in | pointer to the vector of transform coefficients |
| [out] | out | pointer to the output buffer (frame) |
| [in] | pitch | pitch to move to the next y line |
| [in] | flags | pointer to the array of column flags: != 0 - non_empty column, 0 - empty one (this array must be filled by caller) |
Definition at line 509 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 536 of file ivi_dsp.c.
Referenced by decode_gop_header().
| void ff_ivi_dc_haar_2d | ( | const int32_t * | in, | |
| int16_t * | out, | |||
| uint32_t | pitch, | |||
| int | blk_size | |||
| ) |
DC-only two-dimensional inverse Haar transform for Indeo 4.
Performing the inverse transform in this case is equivalent to spreading DC_coeff >> 3 over the whole block.
| [in] | in | pointer to the dc coefficient |
| [out] | out | pointer to the output buffer (frame) |
| [in] | pitch | pitch to move to the next y line |
| [in] | blk_size | transform block size |
| 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 491 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.
| [in] | in | pointer to the dc coefficient |
| [out] | out | pointer to the output buffer (frame) |
| [in] | pitch | pitch to move to the next y line |
| [in] | blk_size | transform block size |
Definition at line 458 of file ivi_dsp.c.
Referenced by decode_gop_header().
| void ff_ivi_inverse_haar_8x8 | ( | const int32_t * | in, | |
| int16_t * | out, | |||
| uint32_t | pitch, | |||
| const uint8_t * | flags | |||
| ) |
two-dimensional inverse Haar 8x8 transform for Indeo 4
| [in] | in | pointer to the vector of transform coefficients |
| [out] | out | pointer to the output buffer (frame) |
| [in] | pitch | pitch to move to the next y line |
| [in] | flags | pointer to the array of column flags: != 0 - non_empty column, 0 - empty one (this array must be filled by caller) |
| 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
| [in] | in | pointer to the vector of transform coefficients |
| [out] | out | pointer to the output buffer (frame) |
| [in] | pitch | pitch to move to the next y line |
| [in] | flags | pointer to the array of column flags: != 0 - non_empty column, 0 - empty one (this array must be filled by caller) |
Definition at line 418 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
| [in] | in | pointer to the vector of transform coefficients |
| [out] | out | pointer to the output buffer (frame) |
| [in] | pitch | pitch to move to the next y line |
| [in] | flags | pointer to the array of column flags: != 0 - non_empty column, 0 - empty one (this array must be filled by caller) |
Definition at line 378 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 | |||
| ) |
Copy the DC coefficient into the first pixel of the block and zero all others.
Definition at line 560 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 | |||
| ) |
Copy the pixels into the frame buffer.
Definition at line 550 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
| [in] | plane | pointer to the descriptor of the plane being processed |
| [out] | dst | pointer to the destination buffer |
| [in] | dst_pitch | pitch of the destination buffer |
| [in] | num_bands | number of wavelet bands to be processed |
Definition at line 35 of file ivi_dsp.c.
Referenced by decode_frame().
| void ff_ivi_recompose_haar | ( | const IVIPlaneDesc * | plane, | |
| uint8_t * | dst, | |||
| const int | dst_pitch, | |||
| const int | num_bands | |||
| ) |
Haar wavelet recomposition filter for Indeo 4.
| [in] | plane | pointer to the descriptor of the plane being processed |
| [out] | dst | pointer to the destination buffer |
| [in] | dst_pitch | pitch of the destination buffer |
| [in] | num_bands | number of wavelet bands to be processed |
Definition at line 181 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
| [in] | in | pointer to the vector of transform coefficients |
| [out] | out | pointer to the output buffer (frame) |
| [in] | pitch | pitch to move to the next y line |
| [in] | flags | pointer to the array of column flags (unused here) |
Definition at line 471 of file ivi_dsp.c.
Referenced by decode_gop_header().
1.5.8