www.pudn.com > T264-src-0.02.zip > utility.h


/***************************************************************************** 
 * 
 *  T264 AVC CODEC 
 * 
 *  Copyright(C) 2004-2005 llcc  
 *               2004-2005 visionany  
 * 
 *  This program is free software ; you can redistribute it and/or modify 
 *  it under the terms of the GNU General Public License as published by 
 *  the Free Software Foundation ; either version 2 of the License, or 
 *  (at your option) any later version. 
 * 
 *  This program is distributed in the hope that it will be useful, 
 *  but WITHOUT ANY WARRANTY ; without even the implied warranty of 
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 *  GNU General Public License for more details. 
 * 
 *  You should have received a copy of the GNU General Public License 
 *  along with this program ; if not, write to the Free Software 
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
 * 
 ****************************************************************************/ 
 
#ifndef _UTILITY_H_ 
#define _UTILITY_H_ 
 
void* T264_malloc(int32_t size, int32_t alignment); 
void  T264_free(void* p); 
 
int32_t array_non_zero_count(int16_t *v, int32_t i_count); 
 
void expand8to16_c(uint8_t* src, int32_t src_stride, int32_t quarter_width, int32_t quarter_height, int16_t* dst); 
void contract16to8_c(int16_t* src, int32_t quarter_width, int32_t quarter_height, uint8_t* dst, int32_t dst_stride); 
void contract16to8add_c(int16_t* src, int32_t quarter_width, int32_t quarter_height, uint8_t* org, uint8_t* dst, int32_t dst_stride); 
void memcpy_stride_u_c(void* src, int32_t width, int32_t height, int32_t src_stride, void* dst, int32_t dst_stride); 
void expand8to16sub_c(uint8_t* pred, int32_t quarter_width, int32_t quarter_height, int16_t* dst, uint8_t* src, int32_t src_stride); 
uint32_t T264_satd_i16x16_u_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride); 
uint32_t T264_sad_u_16x16_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride); 
uint32_t T264_sad_u_16x8_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride); 
uint32_t T264_sad_u_8x16_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride); 
uint32_t T264_sad_u_8x8_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride); 
uint32_t T264_sad_u_8x4_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride); 
uint32_t T264_sad_u_4x8_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride); 
uint32_t T264_sad_u_4x4_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride); 
 
uint32_t T264_satd_u_16x16_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride); 
uint32_t T264_satd_u_16x8_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride); 
uint32_t T264_satd_u_8x16_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride); 
uint32_t T264_satd_u_8x8_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride); 
uint32_t T264_satd_u_8x4_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride); 
uint32_t T264_satd_u_4x8_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride); 
uint32_t T264_satd_u_4x4_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride); 
 
typedef void (*expand8to16_t)(uint8_t* src, int32_t src_stride, int32_t quarter_width, int32_t quarter_height, int16_t* dst); 
typedef void (*expand8to16sub_t)(uint8_t* pred, int32_t quarter_width, int32_t quarter_height, int16_t* dst, uint8_t* src, int32_t src_stride); 
typedef void (*contract16to8_t)(int16_t* src, int32_t quarter_width, int32_t quarter_height, uint8_t* dst, int32_t dst_stride); 
typedef void (*contract16to8add_t)(int16_t* src, int32_t quarter_width, int32_t quarter_height, uint8_t* org, uint8_t* dst, int32_t dst_stride); 
typedef void (*memcpy_stride_u_t)(void* src, int32_t width, int32_t height, int32_t src_stride, void* dst, int32_t dst_stride); 
typedef uint32_t (*T264_cmp_t)(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride); 
typedef uint32_t (*T264_satd_i16x16_u_t)(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride); 
 
////////////////////////////////////////////////////////////////////////// 
// inline  
static __inline void 
scan_zig_4x4(int16_t* zig, int16_t* dct) 
{ 
    zig[0]  = dct[0]; 
    zig[1]  = dct[1]; 
    zig[2]  = dct[4]; 
    zig[3]  = dct[8]; 
    zig[4]  = dct[5]; 
    zig[5]  = dct[2]; 
    zig[6]  = dct[3]; 
    zig[7]  = dct[6]; 
    zig[8]  = dct[9]; 
    zig[9]  = dct[12]; 
    zig[10] = dct[13]; 
    zig[11] = dct[10]; 
    zig[12] = dct[7]; 
    zig[13] = dct[11]; 
    zig[14] = dct[14]; 
    zig[15] = dct[15]; 
} 
 
static __inline void 
scan_zig_2x2(int16_t* zig, int16_t* dct) 
{ 
    zig[0] = dct[0]; 
    zig[1] = dct[1]; 
    zig[2] = dct[2]; 
    zig[3] = dct[3]; 
} 
 
////////////////////////////////////////////////////////////////////////// 
#endif