tor-browser

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

vp9shared.h (4049B)


      1 /*
      2 * VP9 compatible video decoder
      3 *
      4 * Copyright (C) 2013 Ronald S. Bultje <rsbultje gmail com>
      5 * Copyright (C) 2013 Clément Bœsch <u pkh me>
      6 *
      7 * This file is part of FFmpeg.
      8 *
      9 * FFmpeg 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 * FFmpeg 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 FFmpeg; if not, write to the Free Software
     21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
     22 */
     23 
     24 #ifndef AVCODEC_VP9SHARED_H
     25 #define AVCODEC_VP9SHARED_H
     26 
     27 #include <stddef.h>
     28 #include <stdint.h>
     29 
     30 #include "libavutil/mem_internal.h"
     31 
     32 #include "progressframe.h"
     33 #include "vp9.h"
     34 
     35 enum BlockPartition {
     36    PARTITION_NONE,    // [ ] <-.
     37    PARTITION_H,       // [-]   |
     38    PARTITION_V,       // [|]   |
     39    PARTITION_SPLIT,   // [+] --'
     40 };
     41 
     42 enum InterPredMode {
     43    NEARESTMV = 10,
     44    NEARMV    = 11,
     45    ZEROMV    = 12,
     46    NEWMV     = 13,
     47 };
     48 
     49 enum CompPredMode {
     50    PRED_SINGLEREF,
     51    PRED_COMPREF,
     52    PRED_SWITCHABLE,
     53 };
     54 
     55 typedef struct VP9mv {
     56    DECLARE_ALIGNED(4, int16_t, x);
     57    int16_t y;
     58 } VP9mv;
     59 
     60 typedef struct VP9mvrefPair {
     61    VP9mv mv[2];
     62    int8_t ref[2];
     63 } VP9mvrefPair;
     64 
     65 typedef struct VP9Frame {
     66    ProgressFrame tf;
     67    void *extradata;               ///< RefStruct reference
     68    uint8_t *segmentation_map;
     69    VP9mvrefPair *mv;
     70    int uses_2pass;
     71 
     72    void *hwaccel_picture_private; ///< RefStruct reference
     73 } VP9Frame;
     74 
     75 enum BlockLevel {
     76    BL_64X64,
     77    BL_32X32,
     78    BL_16X16,
     79    BL_8X8,
     80 };
     81 
     82 enum BlockSize {
     83    BS_64x64,
     84    BS_64x32,
     85    BS_32x64,
     86    BS_32x32,
     87    BS_32x16,
     88    BS_16x32,
     89    BS_16x16,
     90    BS_16x8,
     91    BS_8x16,
     92    BS_8x8,
     93    BS_8x4,
     94    BS_4x8,
     95    BS_4x4,
     96    N_BS_SIZES,
     97 };
     98 
     99 typedef struct VP9BitstreamHeader {
    100    // bitstream header
    101    uint8_t profile;
    102    uint8_t bpp;
    103    uint8_t keyframe;
    104    uint8_t invisible;
    105    uint8_t errorres;
    106    uint8_t intraonly;
    107    uint8_t resetctx;
    108    uint8_t refreshrefmask;
    109    uint8_t highprecisionmvs;
    110    enum FilterMode filtermode;
    111    uint8_t allowcompinter;
    112    uint8_t refreshctx;
    113    uint8_t parallelmode;
    114    uint8_t framectxid;
    115    uint8_t use_last_frame_mvs;
    116    uint8_t refidx[3];
    117    uint8_t signbias[3];
    118    uint8_t fixcompref;
    119    uint8_t varcompref[2];
    120    struct {
    121        uint8_t level;
    122        int8_t sharpness;
    123    } filter;
    124    struct {
    125        uint8_t enabled;
    126        uint8_t updated;
    127        int8_t mode[2];
    128        int8_t ref[4];
    129    } lf_delta;
    130    uint8_t yac_qi;
    131    int8_t ydc_qdelta, uvdc_qdelta, uvac_qdelta;
    132    uint8_t lossless;
    133 #define MAX_SEGMENT 8
    134    struct {
    135        uint8_t enabled;
    136        uint8_t temporal;
    137        uint8_t absolute_vals;
    138        uint8_t update_map;
    139        uint8_t prob[7];
    140        uint8_t pred_prob[3];
    141        struct {
    142            uint8_t q_enabled;
    143            uint8_t lf_enabled;
    144            uint8_t ref_enabled;
    145            uint8_t skip_enabled;
    146            uint8_t ref_val;
    147            int16_t q_val;
    148            int8_t lf_val;
    149            int16_t qmul[2][2];
    150            uint8_t lflvl[4][2];
    151        } feat[MAX_SEGMENT];
    152    } segmentation;
    153    enum TxfmMode txfmmode;
    154    enum CompPredMode comppredmode;
    155    struct {
    156        unsigned log2_tile_cols, log2_tile_rows;
    157        unsigned tile_cols, tile_rows;
    158    } tiling;
    159 
    160    int uncompressed_header_size;
    161    int compressed_header_size;
    162 } VP9BitstreamHeader;
    163 
    164 typedef struct VP9SharedContext {
    165    VP9BitstreamHeader h;
    166 
    167    ProgressFrame refs[8];
    168 #define CUR_FRAME 0
    169 #define REF_FRAME_MVPAIR 1
    170 #define REF_FRAME_SEGMAP 2
    171 #define BLANK_FRAME 3
    172    VP9Frame frames[4];
    173 } VP9SharedContext;
    174 
    175 #endif /* AVCODEC_VP9SHARED_H */