This allows vp9dsp.h to only include the VP9 types header, and not the decoder skeleton interface which is for hardware decoders (dxva2/vaapi).tags/n3.3
| @@ -21,6 +21,7 @@ | |||
| #include <stdint.h> | |||
| #include "libavutil/attributes.h" | |||
| #include "libavutil/internal.h" | |||
| #include "libavutil/arm/cpu.h" | |||
| #include "vp9dsp_init.h" | |||
| @@ -21,6 +21,7 @@ | |||
| #include <stdint.h> | |||
| #include "libavutil/attributes.h" | |||
| #include "libavutil/internal.h" | |||
| #include "libavutil/arm/cpu.h" | |||
| #include "libavcodec/vp9dsp.h" | |||
| #include "vp9dsp_init.h" | |||
| @@ -23,7 +23,7 @@ | |||
| #include "libavutil/avassert.h" | |||
| #include "libavutil/pixdesc.h" | |||
| #include "vp9.h" | |||
| #include "vp9shared.h" | |||
| // The headers above may include w32threads.h, which uses the original | |||
| // _WIN32_WINNT define, while dxva2_internal.h redefines it to target a | |||
| @@ -24,7 +24,7 @@ | |||
| #include "hwaccel.h" | |||
| #include "vaapi_decode.h" | |||
| #include "vp9.h" | |||
| #include "vp9shared.h" | |||
| static VASurfaceID vaapi_vp9_surface_id(const VP9Frame *vf) | |||
| { | |||
| @@ -24,13 +24,6 @@ | |||
| #ifndef AVCODEC_VP9_H | |||
| #define AVCODEC_VP9_H | |||
| #include <stddef.h> | |||
| #include <stdint.h> | |||
| #include "avcodec.h" | |||
| #include "thread.h" | |||
| #include "vp56.h" | |||
| enum TxfmMode { | |||
| TX_4X4, | |||
| TX_8X8, | |||
| @@ -73,142 +66,8 @@ enum FilterMode { | |||
| FILTER_8TAP_REGULAR, | |||
| FILTER_8TAP_SHARP, | |||
| FILTER_BILINEAR, | |||
| FILTER_SWITCHABLE, | |||
| }; | |||
| enum BlockPartition { | |||
| PARTITION_NONE, // [ ] <-. | |||
| PARTITION_H, // [-] | | |||
| PARTITION_V, // [|] | | |||
| PARTITION_SPLIT, // [+] --' | |||
| }; | |||
| enum InterPredMode { | |||
| NEARESTMV = 10, | |||
| NEARMV = 11, | |||
| ZEROMV = 12, | |||
| NEWMV = 13, | |||
| }; | |||
| enum CompPredMode { | |||
| PRED_SINGLEREF, | |||
| PRED_COMPREF, | |||
| PRED_SWITCHABLE, | |||
| N_FILTERS, | |||
| FILTER_SWITCHABLE = N_FILTERS, | |||
| }; | |||
| typedef struct VP9mvrefPair { | |||
| VP56mv mv[2]; | |||
| int8_t ref[2]; | |||
| } VP9mvrefPair; | |||
| typedef struct VP9Frame { | |||
| ThreadFrame tf; | |||
| AVBufferRef *extradata; | |||
| uint8_t *segmentation_map; | |||
| VP9mvrefPair *mv; | |||
| int uses_2pass; | |||
| AVBufferRef *hwaccel_priv_buf; | |||
| void *hwaccel_picture_private; | |||
| } VP9Frame; | |||
| enum BlockLevel { | |||
| BL_64X64, | |||
| BL_32X32, | |||
| BL_16X16, | |||
| BL_8X8, | |||
| }; | |||
| 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, | |||
| }; | |||
| typedef struct VP9BitstreamHeader { | |||
| // bitstream header | |||
| uint8_t profile; | |||
| uint8_t bpp; | |||
| 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; | |||
| ThreadFrame refs[8]; | |||
| #define CUR_FRAME 0 | |||
| #define REF_FRAME_MVPAIR 1 | |||
| #define REF_FRAME_SEGMAP 2 | |||
| VP9Frame frames[3]; | |||
| } VP9SharedContext; | |||
| #endif /* AVCODEC_VP9_H */ | |||
| @@ -32,6 +32,7 @@ | |||
| #include "vp9.h" | |||
| #include "vp9dsp.h" | |||
| #include "vp9shared.h" | |||
| enum MVJoint { | |||
| MV_JOINT_ZERO, | |||
| @@ -111,13 +111,13 @@ typedef struct VP9DSPContext { | |||
| * | |||
| * dst/stride are aligned by hsize | |||
| */ | |||
| vp9_mc_func mc[5][4][2][2][2]; | |||
| vp9_mc_func mc[5][N_FILTERS][2][2][2]; | |||
| /* | |||
| * for scalable MC, first 3 dimensions identical to above, the other two | |||
| * don't exist since it changes per stepsize. | |||
| */ | |||
| vp9_scaled_mc_func smc[5][4][2]; | |||
| vp9_scaled_mc_func smc[5][N_FILTERS][2]; | |||
| } VP9DSPContext; | |||
| extern const int16_t ff_vp9_subpel_filters[3][16][8]; | |||
| @@ -0,0 +1,169 @@ | |||
| /* | |||
| * VP9 compatible video decoder | |||
| * | |||
| * Copyright (C) 2013 Ronald S. Bultje <rsbultje gmail com> | |||
| * Copyright (C) 2013 Clément Bœsch <u pkh me> | |||
| * | |||
| * 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_VP9SHARED_H | |||
| #define AVCODEC_VP9SHARED_H | |||
| #include <stddef.h> | |||
| #include <stdint.h> | |||
| #include "vp9.h" | |||
| #include "thread.h" | |||
| #include "vp56.h" | |||
| enum BlockPartition { | |||
| PARTITION_NONE, // [ ] <-. | |||
| PARTITION_H, // [-] | | |||
| PARTITION_V, // [|] | | |||
| PARTITION_SPLIT, // [+] --' | |||
| }; | |||
| enum InterPredMode { | |||
| NEARESTMV = 10, | |||
| NEARMV = 11, | |||
| ZEROMV = 12, | |||
| NEWMV = 13, | |||
| }; | |||
| enum CompPredMode { | |||
| PRED_SINGLEREF, | |||
| PRED_COMPREF, | |||
| PRED_SWITCHABLE, | |||
| }; | |||
| typedef struct VP9mvrefPair { | |||
| VP56mv mv[2]; | |||
| int8_t ref[2]; | |||
| } VP9mvrefPair; | |||
| typedef struct VP9Frame { | |||
| ThreadFrame tf; | |||
| AVBufferRef *extradata; | |||
| uint8_t *segmentation_map; | |||
| VP9mvrefPair *mv; | |||
| int uses_2pass; | |||
| AVBufferRef *hwaccel_priv_buf; | |||
| void *hwaccel_picture_private; | |||
| } VP9Frame; | |||
| enum BlockLevel { | |||
| BL_64X64, | |||
| BL_32X32, | |||
| BL_16X16, | |||
| BL_8X8, | |||
| }; | |||
| 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, | |||
| }; | |||
| typedef struct VP9BitstreamHeader { | |||
| // bitstream header | |||
| uint8_t profile; | |||
| uint8_t bpp; | |||
| 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; | |||
| ThreadFrame refs[8]; | |||
| #define CUR_FRAME 0 | |||
| #define REF_FRAME_MVPAIR 1 | |||
| #define REF_FRAME_SEGMAP 2 | |||
| VP9Frame frames[3]; | |||
| } VP9SharedContext; | |||
| #endif /* AVCODEC_VP9SHARED_H */ | |||