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.

90 lines
3.3KB

  1. /*
  2. * H.26L/H.264/AVC/JVT/14496-10/... encoder/decoder
  3. * Copyright (c) 2003-2010 Michael Niedermayer <michaelni@gmx.at>
  4. *
  5. * This file is part of Libav.
  6. *
  7. * Libav 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. * Libav 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 Libav; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20. */
  21. #include "libavutil/attributes.h"
  22. #include "h264qpel.h"
  23. #define BIT_DEPTH 8
  24. #include "h264qpel_template.c"
  25. #undef BIT_DEPTH
  26. #define BIT_DEPTH 9
  27. #include "h264qpel_template.c"
  28. #undef BIT_DEPTH
  29. #define BIT_DEPTH 10
  30. #include "h264qpel_template.c"
  31. #undef BIT_DEPTH
  32. av_cold void ff_h264qpel_init(H264QpelContext *c, int bit_depth)
  33. {
  34. #undef FUNCC
  35. #define FUNCC(f, depth) f ## _ ## depth ## _c
  36. #define dspfunc2(PFX, IDX, NUM, depth) \
  37. c->PFX ## _pixels_tab[IDX][ 0] = FUNCC(PFX ## NUM ## _mc00, depth); \
  38. c->PFX ## _pixels_tab[IDX][ 1] = FUNCC(PFX ## NUM ## _mc10, depth); \
  39. c->PFX ## _pixels_tab[IDX][ 2] = FUNCC(PFX ## NUM ## _mc20, depth); \
  40. c->PFX ## _pixels_tab[IDX][ 3] = FUNCC(PFX ## NUM ## _mc30, depth); \
  41. c->PFX ## _pixels_tab[IDX][ 4] = FUNCC(PFX ## NUM ## _mc01, depth); \
  42. c->PFX ## _pixels_tab[IDX][ 5] = FUNCC(PFX ## NUM ## _mc11, depth); \
  43. c->PFX ## _pixels_tab[IDX][ 6] = FUNCC(PFX ## NUM ## _mc21, depth); \
  44. c->PFX ## _pixels_tab[IDX][ 7] = FUNCC(PFX ## NUM ## _mc31, depth); \
  45. c->PFX ## _pixels_tab[IDX][ 8] = FUNCC(PFX ## NUM ## _mc02, depth); \
  46. c->PFX ## _pixels_tab[IDX][ 9] = FUNCC(PFX ## NUM ## _mc12, depth); \
  47. c->PFX ## _pixels_tab[IDX][10] = FUNCC(PFX ## NUM ## _mc22, depth); \
  48. c->PFX ## _pixels_tab[IDX][11] = FUNCC(PFX ## NUM ## _mc32, depth); \
  49. c->PFX ## _pixels_tab[IDX][12] = FUNCC(PFX ## NUM ## _mc03, depth); \
  50. c->PFX ## _pixels_tab[IDX][13] = FUNCC(PFX ## NUM ## _mc13, depth); \
  51. c->PFX ## _pixels_tab[IDX][14] = FUNCC(PFX ## NUM ## _mc23, depth); \
  52. c->PFX ## _pixels_tab[IDX][15] = FUNCC(PFX ## NUM ## _mc33, depth)
  53. #define SET_QPEL(depth) \
  54. dspfunc2(put_h264_qpel, 0, 16, depth); \
  55. dspfunc2(put_h264_qpel, 1, 8, depth); \
  56. dspfunc2(put_h264_qpel, 2, 4, depth); \
  57. dspfunc2(put_h264_qpel, 3, 2, depth); \
  58. dspfunc2(avg_h264_qpel, 0, 16, depth); \
  59. dspfunc2(avg_h264_qpel, 1, 8, depth); \
  60. dspfunc2(avg_h264_qpel, 2, 4, depth)
  61. switch (bit_depth) {
  62. default:
  63. SET_QPEL(8);
  64. break;
  65. case 9:
  66. SET_QPEL(9);
  67. break;
  68. case 10:
  69. SET_QPEL(10);
  70. break;
  71. }
  72. if (ARCH_AARCH64)
  73. ff_h264qpel_init_aarch64(c, bit_depth);
  74. if (ARCH_ARM)
  75. ff_h264qpel_init_arm(c, bit_depth);
  76. if (ARCH_PPC)
  77. ff_h264qpel_init_ppc(c, bit_depth);
  78. if (ARCH_X86)
  79. ff_h264qpel_init_x86(c, bit_depth);
  80. }