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

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 _SSE2_H_
  24. #define _SSE2_H_
  25. int32_t T264_detect_cpu();
  26. // 16x16 luma
  27. void T264_predict_16x16_mode_0_sse2 (uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  28. void T264_predict_16x16_mode_1_sse2 (uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  29. void T264_predict_16x16_mode_2_sse2 (uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  30. void T264_predict_16x16_mode_20_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  31. void T264_predict_16x16_mode_21_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  32. void T264_predict_16x16_mode_22_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  33. void T264_predict_16x16_mode_3_sse2 (uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  34. // 4x4 luma
  35. void T264_predict_4x4_mode_0_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  36. void T264_predict_4x4_mode_1_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  37. void T264_predict_4x4_mode_2_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  38. void T264_predict_4x4_mode_20_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  39. void T264_predict_4x4_mode_21_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  40. void T264_predict_4x4_mode_22_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  41. void T264_predict_4x4_mode_3_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  42. void T264_predict_4x4_mode_4_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  43. void T264_predict_4x4_mode_5_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  44. void T264_predict_4x4_mode_6_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  45. void T264_predict_4x4_mode_7_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  46. void T264_predict_4x4_mode_8_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  47. // 8x8 chroma
  48. void T264_predict_8x8_mode_0_sse2 (uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  49. void T264_predict_8x8_mode_1_sse2 (uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  50. void T264_predict_8x8_mode_2_sse2 (uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  51. void T264_predict_8x8_mode_20_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  52. void T264_predict_8x8_mode_21_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  53. void T264_predict_8x8_mode_22_sse2(uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  54. void T264_predict_8x8_mode_3_sse2 (uint8_t* dst, int32_t dst_stride, uint8_t* top, uint8_t* left);
  55. // dct & quant
  56. void dct4x4_mmx(int16_t* data);
  57. void dct4x4dc_mmx(int16_t* data);
  58. void idct4x4_mmx(int16_t* data);
  59. void idct4x4dc_mmx(int16_t* data);
  60. void quant4x4_sse2(int16_t* data, const int32_t Qp, int32_t is_intra);
  61. void quant4x4dc_sse2(int16_t* data, const int32_t Qp);
  62. void quant2x2dc_sse2(int16_t* data, const int32_t Qp, int32_t is_intra);
  63. void iquant4x4_sse2(int16_t* data, const int32_t Qp);
  64. void iquant4x4dc_sse2(int16_t* data, const int32_t Qp);
  65. void iquant2x2dc_sse2(int16_t* data, const int32_t Qp);
  66. // me
  67. void T264_eighth_pixel_mc_u_sse2(uint8_t* src, int32_t src_stride, uint8_t* dst, int16_t mvx, int16_t mvy, int32_t width, int32_t height);
  68. void interpolate_halfpel_h_sse2(uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t width, int32_t height);
  69. void interpolate_halfpel_v_sse2(uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t width, int32_t height);
  70. void interpolate_halfpel_hv_sse2(uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t width, int32_t height);
  71. void T264_pia_u_16x16_sse2(uint8_t* p1, uint8_t* p2, int32_t p1_stride, int32_t p2_stride, uint8_t* dst, int32_t dst_stride);
  72. void T264_pia_u_16x8_sse2(uint8_t* p1, uint8_t* p2, int32_t p1_stride, int32_t p2_stride, uint8_t* dst, int32_t dst_stride);
  73. void T264_pia_u_16x16_sse(uint8_t* p1, uint8_t* p2, int32_t p1_stride, int32_t p2_stride, uint8_t* dst, int32_t dst_stride);
  74. void T264_pia_u_16x8_sse(uint8_t* p1, uint8_t* p2, int32_t p1_stride, int32_t p2_stride, uint8_t* dst, int32_t dst_stride);
  75. void T264_pia_u_8x16_sse(uint8_t* p1, uint8_t* p2, int32_t p1_stride, int32_t p2_stride, uint8_t* dst, int32_t dst_stride);
  76. void T264_pia_u_8x8_sse(uint8_t* p1, uint8_t* p2, int32_t p1_stride, int32_t p2_stride, uint8_t* dst, int32_t dst_stride);
  77. void T264_pia_u_8x4_sse(uint8_t* p1, uint8_t* p2, int32_t p1_stride, int32_t p2_stride, uint8_t* dst, int32_t dst_stride);
  78. void T264_pia_u_4x8_mmx(uint8_t* p1, uint8_t* p2, int32_t p1_stride, int32_t p2_stride, uint8_t* dst, int32_t dst_stride);
  79. void T264_pia_u_4x4_mmx(uint8_t* p1, uint8_t* p2, int32_t p1_stride, int32_t p2_stride, uint8_t* dst, int32_t dst_stride);
  80. // utility
  81. void expand8to16_sse2(uint8_t* src, int32_t src_stride, int32_t quarter_width, int32_t quarter_height, int16_t* dst);
  82. void contract16to8_sse2(int16_t* src, int32_t quarter_width, int32_t quarter_height, uint8_t* dst, int32_t dst_stride);
  83. void contract16to8add_sse2(int16_t* src, int32_t quarter_width, int32_t quarter_height, uint8_t* org, uint8_t* dst, int32_t dst_stride);
  84. void memcpy_stride_u_sse2(void* src, int32_t width, int32_t height, int32_t src_stride, void* dst, int32_t dst_stride);
  85. void expand8to16sub_sse2(uint8_t* pred, int32_t quarter_width, int32_t quarter_height, int16_t* dst, uint8_t* src, int32_t src_stride);
  86. uint32_t T264_sad_u_16x16_sse2(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  87. uint32_t T264_sad_u_16x8_sse2(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  88. uint32_t T264_sad_u_8x16_sse(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  89. uint32_t T264_sad_u_8x8_sse(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  90. uint32_t T264_sad_u_8x4_sse(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  91. uint32_t T264_sad_u_4x8_sse(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  92. uint32_t T264_sad_u_4x4_sse(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  93. uint32_t T264_satd_16x16_u_sse2(uint8_t* src, int32_t src_stride, uint8_t* data, int32_t dst_stride);
  94. void contract16to8_4x4_mmx(uint16_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride);
  95. void contract16to8_mmx(int16_t* src, int32_t quarter_width, int32_t quarter_height, uint8_t* dst, int32_t dst_stride);
  96. void contract16to8add_4x4_mmx(uint16_t* src,uint8_t* pred, int32_t pred_stride,uint8_t* dst, int32_t dst_stride);
  97. void contract16to8add_mmx(int16_t* src, int32_t quarter_width, int32_t quarter_height, uint8_t* pred, uint8_t* dst, int32_t dst_stride);
  98. void expand8to16sub_4x4_mmx(uint8_t* pred,int32_t pred_stride,int8_t* src,int32_t src_stride,uint16_t* dst);
  99. void expand8to16sub_mmx(uint8_t* pred, int32_t quarter_width, int32_t quarter_height, int16_t* dst , uint8_t* src, int32_t src_stride);
  100. void T264_emms_mmx();
  101. #endif