⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 utility.h

📁 T264是中国的视频编码自由组织合力开发的264编解码程序
💻 H
字号:
/*****************************************************************************
 *
 *  T264 AVC CODEC
 *
 *  Copyright(C) 2004-2005 llcc <lcgate1@yahoo.com.cn>
 *               2004-2005 visionany <visionany@yahoo.com.cn>
 *
 *  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);

//////////////////////////////////////////////////////////////////////////
// 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];
}

// inline 
static __inline void
unscan_zig_4x4(int16_t* zig, int16_t* dct)
{
    dct[0]  = zig[0] ;
    dct[1]  = zig[1] ;
    dct[4]  = zig[2] ;
    dct[8]  = zig[3] ;
    dct[5]  = zig[4] ;
    dct[2]  = zig[5] ;
    dct[3]  = zig[6] ;
    dct[6]  = zig[7] ;
    dct[9]  = zig[8] ;
    dct[12] = zig[9] ;
    dct[13] = zig[10];
    dct[10] = zig[11];
    dct[7]  = zig[12];
    dct[11] = zig[13];
    dct[14] = zig[14];
    dct[15] = zig[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];
}

static __inline void
unscan_zig_2x2(int16_t* zig, int16_t* dct)
{
    dct[0] = zig[0];
    dct[1] = zig[1];
    dct[2] = zig[2];
    dct[3] = zig[3];
}
//////////////////////////////////////////////////////////////////////////
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -