utility.h
上传用户:sunbaby
上传日期:2013-05-31
资源大小:242k
文件大小:5k
源码类别:

mpeg/mp3

开发平台:

Visual C++

  1. /*****************************************************************************
  2.  *
  3.  *  T264 AVC CODEC
  4.  *
  5.  *  Copyright(C) 2004-2005 llcc <lcgate1@yahoo.com.cn>
  6.  *               2004-2005 visionany <visionany@yahoo.com.cn>
  7.  *
  8.  *  This program is free software ; you can redistribute it and/or modify
  9.  *  it under the terms of the GNU General Public License as published by
  10.  *  the Free Software Foundation ; either version 2 of the License, or
  11.  *  (at your option) any later version.
  12.  *
  13.  *  This program is distributed in the hope that it will be useful,
  14.  *  but WITHOUT ANY WARRANTY ; without even the implied warranty of
  15.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  *  GNU General Public License for more details.
  17.  *
  18.  *  You should have received a copy of the GNU General Public License
  19.  *  along with this program ; if not, write to the Free Software
  20.  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  21.  *
  22.  ****************************************************************************/
  23. #ifndef _UTILITY_H_
  24. #define _UTILITY_H_
  25. void* T264_malloc(int32_t size, int32_t alignment);
  26. void  T264_free(void* p);
  27. int32_t array_non_zero_count(int16_t *v, int32_t i_count);
  28. void expand8to16_c(uint8_t* src, int32_t src_stride, int32_t quarter_width, int32_t quarter_height, int16_t* dst);
  29. void contract16to8_c(int16_t* src, int32_t quarter_width, int32_t quarter_height, uint8_t* dst, int32_t dst_stride);
  30. void contract16to8add_c(int16_t* src, int32_t quarter_width, int32_t quarter_height, uint8_t* org, uint8_t* dst, int32_t dst_stride);
  31. void memcpy_stride_u_c(void* src, int32_t width, int32_t height, int32_t src_stride, void* dst, int32_t dst_stride);
  32. void expand8to16sub_c(uint8_t* pred, int32_t quarter_width, int32_t quarter_height, int16_t* dst, uint8_t* src, int32_t src_stride);
  33. uint32_t T264_satd_i16x16_u_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  34. uint32_t T264_sad_u_16x16_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  35. uint32_t T264_sad_u_16x8_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  36. uint32_t T264_sad_u_8x16_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  37. uint32_t T264_sad_u_8x8_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  38. uint32_t T264_sad_u_8x4_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  39. uint32_t T264_sad_u_4x8_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  40. uint32_t T264_sad_u_4x4_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  41. uint32_t T264_satd_u_16x16_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  42. uint32_t T264_satd_u_16x8_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  43. uint32_t T264_satd_u_8x16_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  44. uint32_t T264_satd_u_8x8_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  45. uint32_t T264_satd_u_8x4_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  46. uint32_t T264_satd_u_4x8_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  47. uint32_t T264_satd_u_4x4_c(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  48. //////////////////////////////////////////////////////////////////////////
  49. // inline 
  50. static __inline void
  51. scan_zig_4x4(int16_t* zig, int16_t* dct)
  52. {
  53.     zig[0]  = dct[0];
  54.     zig[1]  = dct[1];
  55.     zig[2]  = dct[4];
  56.     zig[3]  = dct[8];
  57.     zig[4]  = dct[5];
  58.     zig[5]  = dct[2];
  59.     zig[6]  = dct[3];
  60.     zig[7]  = dct[6];
  61.     zig[8]  = dct[9];
  62.     zig[9]  = dct[12];
  63.     zig[10] = dct[13];
  64.     zig[11] = dct[10];
  65.     zig[12] = dct[7];
  66.     zig[13] = dct[11];
  67.     zig[14] = dct[14];
  68.     zig[15] = dct[15];
  69. }
  70. // inline 
  71. static __inline void
  72. unscan_zig_4x4(int16_t* zig, int16_t* dct)
  73. {
  74.     dct[0]  = zig[0] ;
  75.     dct[1]  = zig[1] ;
  76.     dct[4]  = zig[2] ;
  77.     dct[8]  = zig[3] ;
  78.     dct[5]  = zig[4] ;
  79.     dct[2]  = zig[5] ;
  80.     dct[3]  = zig[6] ;
  81.     dct[6]  = zig[7] ;
  82.     dct[9]  = zig[8] ;
  83.     dct[12] = zig[9] ;
  84.     dct[13] = zig[10];
  85.     dct[10] = zig[11];
  86.     dct[7]  = zig[12];
  87.     dct[11] = zig[13];
  88.     dct[14] = zig[14];
  89.     dct[15] = zig[15];
  90. }
  91. static __inline void
  92. scan_zig_2x2(int16_t* zig, int16_t* dct)
  93. {
  94.     zig[0] = dct[0];
  95.     zig[1] = dct[1];
  96.     zig[2] = dct[2];
  97.     zig[3] = dct[3];
  98. }
  99. static __inline void
  100. unscan_zig_2x2(int16_t* zig, int16_t* dct)
  101. {
  102.     dct[0] = zig[0];
  103.     dct[1] = zig[1];
  104.     dct[2] = zig[2];
  105.     dct[3] = zig[3];
  106. }
  107. //////////////////////////////////////////////////////////////////////////
  108. #endif