1*437bfbebSnyanmisaka /* 2*437bfbebSnyanmisaka * 3*437bfbebSnyanmisaka * Copyright 2015 Rockchip Electronics Co. LTD 4*437bfbebSnyanmisaka * 5*437bfbebSnyanmisaka * Licensed under the Apache License, Version 2.0 (the "License"); 6*437bfbebSnyanmisaka * you may not use this file except in compliance with the License. 7*437bfbebSnyanmisaka * You may obtain a copy of the License at 8*437bfbebSnyanmisaka * 9*437bfbebSnyanmisaka * http://www.apache.org/licenses/LICENSE-2.0 10*437bfbebSnyanmisaka * 11*437bfbebSnyanmisaka * Unless required by applicable law or agreed to in writing, software 12*437bfbebSnyanmisaka * distributed under the License is distributed on an "AS IS" BASIS, 13*437bfbebSnyanmisaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*437bfbebSnyanmisaka * See the License for the specific language governing permissions and 15*437bfbebSnyanmisaka * limitations under the License. 16*437bfbebSnyanmisaka */ 17*437bfbebSnyanmisaka #ifndef __VP9D_CODEC_H__ 18*437bfbebSnyanmisaka #define __VP9D_CODEC_H__ 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka #include "mpp_frame.h" 21*437bfbebSnyanmisaka #include "hal_dec_task.h" 22*437bfbebSnyanmisaka 23*437bfbebSnyanmisaka #include "vp9d_syntax.h" 24*437bfbebSnyanmisaka 25*437bfbebSnyanmisaka typedef struct VP9ParseContext { 26*437bfbebSnyanmisaka RK_S32 n_frames; // 1-8 27*437bfbebSnyanmisaka RK_S32 size[8]; 28*437bfbebSnyanmisaka RK_S64 pts; 29*437bfbebSnyanmisaka } VP9ParseContext; 30*437bfbebSnyanmisaka #define MPP_PARSER_PTS_NB 4 31*437bfbebSnyanmisaka 32*437bfbebSnyanmisaka typedef struct SplitContext { 33*437bfbebSnyanmisaka RK_U8 *buffer; 34*437bfbebSnyanmisaka RK_U32 buffer_size; 35*437bfbebSnyanmisaka RK_S32 index; 36*437bfbebSnyanmisaka RK_S32 last_index; 37*437bfbebSnyanmisaka RK_U32 state; ///< contains the last few bytes in MSB order 38*437bfbebSnyanmisaka RK_S32 frame_start_found; 39*437bfbebSnyanmisaka RK_S32 overread; ///< the number of bytes which where irreversibly read from the next frame 40*437bfbebSnyanmisaka RK_S32 overread_index; ///< the index into ParseContext.buffer of the overread bytes 41*437bfbebSnyanmisaka RK_U64 state64; ///< contains the last 8 bytes in MSB order 42*437bfbebSnyanmisaka RK_S64 pts; /* pts of the current frame */ 43*437bfbebSnyanmisaka RK_S64 dts; /* dts of the current frame */ 44*437bfbebSnyanmisaka RK_S64 frame_offset; /* offset of the current frame */ 45*437bfbebSnyanmisaka RK_S64 cur_offset; /* current offset 46*437bfbebSnyanmisaka (incremented by each av_parser_parse()) */ 47*437bfbebSnyanmisaka RK_S64 next_frame_offset; /* offset of the next frame */ 48*437bfbebSnyanmisaka 49*437bfbebSnyanmisaka /* private data */ 50*437bfbebSnyanmisaka void *priv_data; 51*437bfbebSnyanmisaka RK_S64 last_pts; 52*437bfbebSnyanmisaka RK_S64 last_dts; 53*437bfbebSnyanmisaka RK_S32 fetch_timestamp; 54*437bfbebSnyanmisaka 55*437bfbebSnyanmisaka RK_S32 cur_frame_start_index; 56*437bfbebSnyanmisaka RK_S64 cur_frame_offset[MPP_PARSER_PTS_NB]; 57*437bfbebSnyanmisaka RK_S64 cur_frame_pts[MPP_PARSER_PTS_NB]; 58*437bfbebSnyanmisaka RK_S64 cur_frame_dts[MPP_PARSER_PTS_NB]; 59*437bfbebSnyanmisaka 60*437bfbebSnyanmisaka RK_S64 offset; ///< byte offset from starting packet start 61*437bfbebSnyanmisaka RK_S64 cur_frame_end[MPP_PARSER_PTS_NB]; 62*437bfbebSnyanmisaka /** 63*437bfbebSnyanmisaka * Set by parser to 1 for key frames and 0 for non-key frames. 64*437bfbebSnyanmisaka * It is initialized to -1, so if the parser doesn't set this flag, 65*437bfbebSnyanmisaka * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames 66*437bfbebSnyanmisaka * will be used. 67*437bfbebSnyanmisaka */ 68*437bfbebSnyanmisaka RK_S32 key_frame; 69*437bfbebSnyanmisaka RK_S32 eos; 70*437bfbebSnyanmisaka } SplitContext_t; 71*437bfbebSnyanmisaka 72*437bfbebSnyanmisaka typedef struct Vp9CodecContext { 73*437bfbebSnyanmisaka 74*437bfbebSnyanmisaka void *priv_data; /* VP9Context */ 75*437bfbebSnyanmisaka void *priv_data2; /* AVParserContext */ 76*437bfbebSnyanmisaka 77*437bfbebSnyanmisaka RK_S32 pix_fmt; 78*437bfbebSnyanmisaka 79*437bfbebSnyanmisaka RK_S32 profile; 80*437bfbebSnyanmisaka #define FF_PROFILE_VP9_0 0 81*437bfbebSnyanmisaka #define FF_PROFILE_VP9_1 1 82*437bfbebSnyanmisaka #define FF_PROFILE_VP9_2 2 83*437bfbebSnyanmisaka #define FF_PROFILE_VP9_3 3 84*437bfbebSnyanmisaka 85*437bfbebSnyanmisaka RK_S32 level; 86*437bfbebSnyanmisaka #define FF_LEVEL_UNKNOWN -99 87*437bfbebSnyanmisaka 88*437bfbebSnyanmisaka MppFrameColorSpace colorspace; 89*437bfbebSnyanmisaka 90*437bfbebSnyanmisaka MppFrameColorRange color_range; 91*437bfbebSnyanmisaka 92*437bfbebSnyanmisaka RK_S32 width, height; 93*437bfbebSnyanmisaka 94*437bfbebSnyanmisaka MppPacket pkt; 95*437bfbebSnyanmisaka 96*437bfbebSnyanmisaka // DXVA_segmentation_VP9 segmentation; 97*437bfbebSnyanmisaka DXVA_PicParams_VP9 pic_params; 98*437bfbebSnyanmisaka // DXVA_Slice_VPx_Short slice_short; 99*437bfbebSnyanmisaka RK_S32 eos; 100*437bfbebSnyanmisaka } Vp9CodecContext; 101*437bfbebSnyanmisaka 102*437bfbebSnyanmisaka #endif /*__VP9D_CODEC_H__*/ 103*437bfbebSnyanmisaka 104