You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
4.0KB

  1. /*
  2. * Copyright (c) 2000, 2001 Fabrice Bellard
  3. * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
  4. *
  5. * This file is part of FFmpeg.
  6. *
  7. * FFmpeg is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2.1 of the License, or (at your option) any later version.
  11. *
  12. * FFmpeg is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with FFmpeg; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20. */
  21. #define DEF_HPEL(OPNAME, OP) \
  22. static inline void FUNCC(OPNAME ## _pixels2)(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h){\
  23. int i;\
  24. for(i=0; i<h; i++){\
  25. OP(*((pixel2*)(block )), AV_RN2P(pixels ));\
  26. pixels+=line_size;\
  27. block +=line_size;\
  28. }\
  29. }\
  30. static inline void FUNCC(OPNAME ## _pixels4)(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h){\
  31. int i;\
  32. for(i=0; i<h; i++){\
  33. OP(*((pixel4*)(block )), AV_RN4P(pixels ));\
  34. pixels+=line_size;\
  35. block +=line_size;\
  36. }\
  37. }\
  38. static inline void FUNCC(OPNAME ## _pixels8)(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h){\
  39. int i;\
  40. for(i=0; i<h; i++){\
  41. OP(*((pixel4*)(block )), AV_RN4P(pixels ));\
  42. OP(*((pixel4*)(block+4*sizeof(pixel))), AV_RN4P(pixels+4*sizeof(pixel)));\
  43. pixels+=line_size;\
  44. block +=line_size;\
  45. }\
  46. }\
  47. \
  48. static inline void FUNC(OPNAME ## _pixels8_l2)(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, \
  49. int src_stride1, int src_stride2, int h){\
  50. int i;\
  51. for(i=0; i<h; i++){\
  52. pixel4 a,b;\
  53. a= AV_RN4P(&src1[i*src_stride1 ]);\
  54. b= AV_RN4P(&src2[i*src_stride2 ]);\
  55. OP(*((pixel4*)&dst[i*dst_stride ]), rnd_avg_pixel4(a, b));\
  56. a= AV_RN4P(&src1[i*src_stride1+4*sizeof(pixel)]);\
  57. b= AV_RN4P(&src2[i*src_stride2+4*sizeof(pixel)]);\
  58. OP(*((pixel4*)&dst[i*dst_stride+4*sizeof(pixel)]), rnd_avg_pixel4(a, b));\
  59. }\
  60. }\
  61. \
  62. static inline void FUNC(OPNAME ## _pixels4_l2)(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, \
  63. int src_stride1, int src_stride2, int h){\
  64. int i;\
  65. for(i=0; i<h; i++){\
  66. pixel4 a,b;\
  67. a= AV_RN4P(&src1[i*src_stride1 ]);\
  68. b= AV_RN4P(&src2[i*src_stride2 ]);\
  69. OP(*((pixel4*)&dst[i*dst_stride ]), rnd_avg_pixel4(a, b));\
  70. }\
  71. }\
  72. \
  73. static inline void FUNC(OPNAME ## _pixels2_l2)(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, \
  74. int src_stride1, int src_stride2, int h){\
  75. int i;\
  76. for(i=0; i<h; i++){\
  77. pixel4 a,b;\
  78. a= AV_RN2P(&src1[i*src_stride1 ]);\
  79. b= AV_RN2P(&src2[i*src_stride2 ]);\
  80. OP(*((pixel2*)&dst[i*dst_stride ]), rnd_avg_pixel4(a, b));\
  81. }\
  82. }\
  83. \
  84. static inline void FUNC(OPNAME ## _pixels16_l2)(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, \
  85. int src_stride1, int src_stride2, int h){\
  86. FUNC(OPNAME ## _pixels8_l2)(dst , src1 , src2 , dst_stride, src_stride1, src_stride2, h);\
  87. FUNC(OPNAME ## _pixels8_l2)(dst+8*sizeof(pixel), src1+8*sizeof(pixel), src2+8*sizeof(pixel), dst_stride, src_stride1, src_stride2, h);\
  88. }\
  89. \
  90. CALL_2X_PIXELS(FUNCC(OPNAME ## _pixels16) , FUNCC(OPNAME ## _pixels8) , 8*sizeof(pixel))
  91. #define op_avg(a, b) a = rnd_avg_pixel4(a, b)
  92. #define op_put(a, b) a = b
  93. DEF_HPEL(avg, op_avg)
  94. DEF_HPEL(put, op_put)
  95. #undef op_avg
  96. #undef op_put