tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

h264pred.h (4935B)


      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 / MPEG-4 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          14    ///< 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 // H.264/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 #define PART_NOT_AVAILABLE -2
     90 
     91 /**
     92 * Context for storing H.264 prediction functions
     93 */
     94 typedef struct H264PredContext {
     95    void(*pred4x4[9 + 3 + 3])(uint8_t *src, const uint8_t *topright,
     96                              ptrdiff_t stride);
     97    void(*pred8x8l[9 + 3])(uint8_t *src, int topleft, int topright,
     98                           ptrdiff_t stride);
     99    void(*pred8x8[4 + 3 + 4])(uint8_t *src, ptrdiff_t stride);
    100    void(*pred16x16[4 + 3 + 2])(uint8_t *src, ptrdiff_t stride);
    101 
    102    void(*pred4x4_add[2])(uint8_t *pix /*align  4*/,
    103                          int16_t *block /*align 16*/, ptrdiff_t stride);
    104    void(*pred8x8l_add[2])(uint8_t *pix /*align  8*/,
    105                           int16_t *block /*align 16*/, ptrdiff_t stride);
    106    void(*pred8x8l_filter_add[2])(uint8_t *pix /*align  8*/,
    107                           int16_t *block /*align 16*/, int topleft, int topright, ptrdiff_t stride);
    108    void(*pred8x8_add[3])(uint8_t *pix /*align  8*/,
    109                          const int *block_offset,
    110                          int16_t *block /*align 16*/, ptrdiff_t stride);
    111    void(*pred16x16_add[3])(uint8_t *pix /*align 16*/,
    112                            const int *block_offset,
    113                            int16_t *block /*align 16*/, ptrdiff_t stride);
    114 } H264PredContext;
    115 
    116 void ff_h264_pred_init(H264PredContext *h, int codec_id,
    117                       const int bit_depth, const int chroma_format_idc);
    118 void ff_h264_pred_init_aarch64(H264PredContext *h, int codec_id,
    119                               const int bit_depth,
    120                               const int chroma_format_idc);
    121 void ff_h264_pred_init_arm(H264PredContext *h, int codec_id,
    122                           const int bit_depth, const int chroma_format_idc);
    123 void ff_h264_pred_init_x86(H264PredContext *h, int codec_id,
    124                           const int bit_depth, const int chroma_format_idc);
    125 void ff_h264_pred_init_mips(H264PredContext *h, int codec_id,
    126                            const int bit_depth, const int chroma_format_idc);
    127 void ff_h264_pred_init_loongarch(H264PredContext *h, int codec_id,
    128                                 const int bit_depth, const int chroma_format_idc);
    129 
    130 #endif /* AVCODEC_H264PRED_H */