Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * H.26L/H.264/AVC/JVT/14496-10/... encoder/decoder
  3.  * Copyright (c) 2003 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.  
  22. /**
  23.  * @file
  24.  * H.264 / AVC / MPEG4 prediction functions.
  25.  * @author Michael Niedermayer <michaelni@gmx.at>
  26.  */
  27.  
  28. #ifndef AVCODEC_H264PRED_H
  29. #define AVCODEC_H264PRED_H
  30.  
  31. #include <stddef.h>
  32. #include <stdint.h>
  33.  
  34. /**
  35.  * Prediction types
  36.  */
  37. //@{
  38. #define VERT_PRED              0
  39. #define HOR_PRED               1
  40. #define DC_PRED                2
  41. #define DIAG_DOWN_LEFT_PRED    3
  42. #define DIAG_DOWN_RIGHT_PRED   4
  43. #define VERT_RIGHT_PRED        5
  44. #define HOR_DOWN_PRED          6
  45. #define VERT_LEFT_PRED         7
  46. #define HOR_UP_PRED            8
  47.  
  48. // DC edge (not for VP8)
  49. #define LEFT_DC_PRED           9
  50. #define TOP_DC_PRED           10
  51. #define DC_128_PRED           11
  52.  
  53. // RV40 specific
  54. #define DIAG_DOWN_LEFT_PRED_RV40_NODOWN   12
  55. #define HOR_UP_PRED_RV40_NODOWN           13
  56. #define VERT_LEFT_PRED_RV40_NODOWN        14
  57.  
  58. // VP8 specific
  59. #define TM_VP8_PRED            9    ///< "True Motion", used instead of plane
  60. #define VERT_VP8_PRED         10    ///< for VP8, #VERT_PRED is the average of
  61.                                     ///< (left col+cur col x2+right col) / 4;
  62.                                     ///< this is the "unaveraged" one
  63. #define HOR_VP8_PRED          11    ///< unaveraged version of #HOR_PRED, see
  64.                                     ///< #VERT_VP8_PRED for details
  65. #define DC_127_PRED           12
  66. #define DC_129_PRED           13
  67.  
  68. #define DC_PRED8x8             0
  69. #define HOR_PRED8x8            1
  70. #define VERT_PRED8x8           2
  71. #define PLANE_PRED8x8          3
  72.  
  73. // DC edge
  74. #define LEFT_DC_PRED8x8        4
  75. #define TOP_DC_PRED8x8         5
  76. #define DC_128_PRED8x8         6
  77.  
  78. // H264/SVQ3 (8x8) specific
  79. #define ALZHEIMER_DC_L0T_PRED8x8  7
  80. #define ALZHEIMER_DC_0LT_PRED8x8  8
  81. #define ALZHEIMER_DC_L00_PRED8x8  9
  82. #define ALZHEIMER_DC_0L0_PRED8x8 10
  83.  
  84. // VP8 specific
  85. #define DC_127_PRED8x8         7
  86. #define DC_129_PRED8x8         8
  87. //@}
  88.  
  89. /**
  90.  * Context for storing H.264 prediction functions
  91.  */
  92. typedef struct H264PredContext {
  93.     void(*pred4x4[9 + 3 + 3])(uint8_t *src, const uint8_t *topright,
  94.                               ptrdiff_t stride);
  95.     void(*pred8x8l[9 + 3])(uint8_t *src, int topleft, int topright,
  96.                            ptrdiff_t stride);
  97.     void(*pred8x8[4 + 3 + 4])(uint8_t *src, ptrdiff_t stride);
  98.     void(*pred16x16[4 + 3 + 2])(uint8_t *src, ptrdiff_t stride);
  99.  
  100.     void(*pred4x4_add[2])(uint8_t *pix /*align  4*/,
  101.                           int16_t *block /*align 16*/, ptrdiff_t stride);
  102.     void(*pred8x8l_add[2])(uint8_t *pix /*align  8*/,
  103.                            int16_t *block /*align 16*/, ptrdiff_t stride);
  104.     void(*pred8x8_add[3])(uint8_t *pix /*align  8*/,
  105.                           const int *block_offset,
  106.                           int16_t *block /*align 16*/, ptrdiff_t stride);
  107.     void(*pred16x16_add[3])(uint8_t *pix /*align 16*/,
  108.                             const int *block_offset,
  109.                             int16_t *block /*align 16*/, ptrdiff_t stride);
  110. } H264PredContext;
  111.  
  112. void ff_h264_pred_init(H264PredContext *h, int codec_id,
  113.                        const int bit_depth, const int chroma_format_idc);
  114. void ff_h264_pred_init_arm(H264PredContext *h, int codec_id,
  115.                            const int bit_depth, const int chroma_format_idc);
  116. void ff_h264_pred_init_x86(H264PredContext *h, int codec_id,
  117.                            const int bit_depth, const int chroma_format_idc);
  118.  
  119. #endif /* AVCODEC_H264PRED_H */
  120.