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.

147 lines
5.4KB

  1. /*
  2. * BlackFin halfpel functions
  3. *
  4. * Copyright (C) 2007 Marc Hoffman <marc.hoffman@analog.com>
  5. * Copyright (c) 2006 Michael Benjamin <michael.benjamin@analog.com>
  6. *
  7. * This file is part of Libav.
  8. *
  9. * Libav is free software; you can redistribute it and/or
  10. * modify it under the terms of the GNU Lesser General Public
  11. * License as published by the Free Software Foundation; either
  12. * version 2.1 of the License, or (at your option) any later version.
  13. *
  14. * Libav is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  17. * Lesser General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU Lesser General Public
  20. * License along with Libav; if not, write to the Free Software
  21. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  22. */
  23. #include <stddef.h>
  24. #include <stdint.h>
  25. #include "libavutil/attributes.h"
  26. #include "libavutil/bfin/attributes.h"
  27. #include "libavcodec/hpeldsp.h"
  28. #include "pixels.h"
  29. void ff_bfin_put_pixels8uc_no_rnd(uint8_t *block, const uint8_t *s0,
  30. const uint8_t *s1, int line_size,
  31. int h) attribute_l1_text;
  32. void ff_bfin_put_pixels16uc_no_rnd(uint8_t *block, const uint8_t *s0,
  33. const uint8_t *s1, int line_size,
  34. int h) attribute_l1_text;
  35. static void bfin_put_pixels8(uint8_t *block, const uint8_t *pixels,
  36. ptrdiff_t line_size, int h)
  37. {
  38. ff_bfin_put_pixels8uc(block, pixels, pixels, line_size, line_size, h);
  39. }
  40. static void bfin_put_pixels8_x2(uint8_t *block, const uint8_t *pixels,
  41. ptrdiff_t line_size, int h)
  42. {
  43. ff_bfin_put_pixels8uc(block, pixels, pixels + 1, line_size, line_size, h);
  44. }
  45. static void bfin_put_pixels8_y2(uint8_t *block, const uint8_t *pixels,
  46. ptrdiff_t line_size, int h)
  47. {
  48. ff_bfin_put_pixels8uc(block, pixels, pixels + line_size,
  49. line_size, line_size, h);
  50. }
  51. static void bfin_put_pixels8_xy2(uint8_t *block, const uint8_t *s0,
  52. ptrdiff_t line_size, int h)
  53. {
  54. ff_bfin_z_put_pixels8_xy2(block, s0, line_size, line_size, h);
  55. }
  56. static void bfin_put_pixels16(uint8_t *block, const uint8_t *pixels,
  57. ptrdiff_t line_size, int h)
  58. {
  59. ff_bfin_put_pixels16uc(block, pixels, pixels, line_size, line_size, h);
  60. }
  61. static void bfin_put_pixels16_x2(uint8_t *block, const uint8_t *pixels,
  62. ptrdiff_t line_size, int h)
  63. {
  64. ff_bfin_put_pixels16uc(block, pixels, pixels + 1, line_size, line_size, h);
  65. }
  66. static void bfin_put_pixels16_y2(uint8_t *block, const uint8_t *pixels,
  67. ptrdiff_t line_size, int h)
  68. {
  69. ff_bfin_put_pixels16uc(block, pixels, pixels + line_size,
  70. line_size, line_size, h);
  71. }
  72. static void bfin_put_pixels16_xy2(uint8_t *block, const uint8_t *s0,
  73. ptrdiff_t line_size, int h)
  74. {
  75. ff_bfin_z_put_pixels16_xy2(block, s0, line_size, line_size, h);
  76. }
  77. static void bfin_put_pixels8_no_rnd(uint8_t *block, const uint8_t *pixels,
  78. ptrdiff_t line_size, int h)
  79. {
  80. ff_bfin_put_pixels8uc_no_rnd(block, pixels, pixels, line_size, h);
  81. }
  82. static void bfin_put_pixels8_x2_no_rnd(uint8_t *block, const uint8_t *pixels,
  83. ptrdiff_t line_size, int h)
  84. {
  85. ff_bfin_put_pixels8uc_no_rnd(block, pixels, pixels + 1, line_size, h);
  86. }
  87. static void bfin_put_pixels8_y2_no_rnd(uint8_t *block, const uint8_t *pixels,
  88. ptrdiff_t line_size, int h)
  89. {
  90. ff_bfin_put_pixels8uc_no_rnd(block, pixels, pixels + line_size,
  91. line_size, h);
  92. }
  93. static void bfin_put_pixels16_no_rnd(uint8_t *block, const uint8_t *pixels,
  94. ptrdiff_t line_size, int h)
  95. {
  96. ff_bfin_put_pixels16uc_no_rnd(block, pixels, pixels, line_size, h);
  97. }
  98. static void bfin_put_pixels16_x2_no_rnd(uint8_t *block, const uint8_t *pixels,
  99. ptrdiff_t line_size, int h)
  100. {
  101. ff_bfin_put_pixels16uc_no_rnd(block, pixels, pixels + 1, line_size, h);
  102. }
  103. static void bfin_put_pixels16_y2_no_rnd(uint8_t *block, const uint8_t *pixels,
  104. ptrdiff_t line_size, int h)
  105. {
  106. ff_bfin_put_pixels16uc_no_rnd(block, pixels, pixels + line_size,
  107. line_size, h);
  108. }
  109. av_cold void ff_hpeldsp_init_bfin(HpelDSPContext *c, int flags)
  110. {
  111. c->put_pixels_tab[0][0] = bfin_put_pixels16;
  112. c->put_pixels_tab[0][1] = bfin_put_pixels16_x2;
  113. c->put_pixels_tab[0][2] = bfin_put_pixels16_y2;
  114. c->put_pixels_tab[0][3] = bfin_put_pixels16_xy2;
  115. c->put_pixels_tab[1][0] = bfin_put_pixels8;
  116. c->put_pixels_tab[1][1] = bfin_put_pixels8_x2;
  117. c->put_pixels_tab[1][2] = bfin_put_pixels8_y2;
  118. c->put_pixels_tab[1][3] = bfin_put_pixels8_xy2;
  119. c->put_no_rnd_pixels_tab[1][0] = bfin_put_pixels8_no_rnd;
  120. c->put_no_rnd_pixels_tab[1][1] = bfin_put_pixels8_x2_no_rnd;
  121. c->put_no_rnd_pixels_tab[1][2] = bfin_put_pixels8_y2_no_rnd;
  122. c->put_no_rnd_pixels_tab[0][0] = bfin_put_pixels16_no_rnd;
  123. c->put_no_rnd_pixels_tab[0][1] = bfin_put_pixels16_x2_no_rnd;
  124. c->put_no_rnd_pixels_tab[0][2] = bfin_put_pixels16_y2_no_rnd;
  125. }