/* * VP9 compatible video decoder * * Copyright (C) 2013 Ronald S. Bultje * Copyright (C) 2013 Clément Bœsch * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef AVCODEC_VP9_H #define AVCODEC_VP9_H #include enum BlockLevel { BL_64X64, BL_32X32, BL_16X16, BL_8X8, }; enum BlockPartition { PARTITION_NONE, // [ ] <-. PARTITION_H, // [-] | PARTITION_V, // [|] | PARTITION_SPLIT, // [+] --' }; enum BlockSize { BS_64x64, BS_64x32, BS_32x64, BS_32x32, BS_32x16, BS_16x32, BS_16x16, BS_16x8, BS_8x16, BS_8x8, BS_8x4, BS_4x8, BS_4x4, N_BS_SIZES, }; enum TxfmMode { TX_4X4, TX_8X8, TX_16X16, TX_32X32, N_TXFM_SIZES, TX_SWITCHABLE = N_TXFM_SIZES, N_TXFM_MODES }; enum TxfmType { DCT_DCT, DCT_ADST, ADST_DCT, ADST_ADST, N_TXFM_TYPES }; enum IntraPredMode { VERT_PRED, HOR_PRED, DC_PRED, DIAG_DOWN_LEFT_PRED, DIAG_DOWN_RIGHT_PRED, VERT_RIGHT_PRED, HOR_DOWN_PRED, VERT_LEFT_PRED, HOR_UP_PRED, TM_VP8_PRED, LEFT_DC_PRED, TOP_DC_PRED, DC_128_PRED, DC_127_PRED, DC_129_PRED, N_INTRA_PRED_MODES }; enum InterPredMode { NEARESTMV = 10, NEARMV = 11, ZEROMV = 12, NEWMV = 13, }; enum FilterMode { FILTER_8TAP_SMOOTH, FILTER_8TAP_REGULAR, FILTER_8TAP_SHARP, FILTER_BILINEAR, FILTER_SWITCHABLE, }; enum CompPredMode { PRED_SINGLEREF, PRED_COMPREF, PRED_SWITCHABLE, }; typedef struct VP9BitstreamHeader { // bitstream header uint8_t profile; uint8_t keyframe; uint8_t invisible; uint8_t errorres; uint8_t intraonly; uint8_t resetctx; uint8_t refreshrefmask; uint8_t highprecisionmvs; enum FilterMode filtermode; uint8_t allowcompinter; uint8_t refreshctx; uint8_t parallelmode; uint8_t framectxid; uint8_t use_last_frame_mvs; uint8_t refidx[3]; uint8_t signbias[3]; uint8_t fixcompref; uint8_t varcompref[2]; struct { uint8_t level; int8_t sharpness; } filter; struct { uint8_t enabled; uint8_t updated; int8_t mode[2]; int8_t ref[4]; } lf_delta; uint8_t yac_qi; int8_t ydc_qdelta, uvdc_qdelta, uvac_qdelta; uint8_t lossless; #define MAX_SEGMENT 8 struct { uint8_t enabled; uint8_t temporal; uint8_t absolute_vals; uint8_t update_map; uint8_t prob[7]; uint8_t pred_prob[3]; struct { uint8_t q_enabled; uint8_t lf_enabled; uint8_t ref_enabled; uint8_t skip_enabled; uint8_t ref_val; int16_t q_val; int8_t lf_val; int16_t qmul[2][2]; uint8_t lflvl[4][2]; } feat[MAX_SEGMENT]; } segmentation; enum TxfmMode txfmmode; enum CompPredMode comppredmode; struct { unsigned log2_tile_cols, log2_tile_rows; unsigned tile_cols, tile_rows; } tiling; int uncompressed_header_size; int compressed_header_size; } VP9BitstreamHeader; typedef struct VP9SharedContext { VP9BitstreamHeader h; } VP9SharedContext; #endif /* AVCODEC_VP9_H */