xref: /rockchip-linux_mpp/mpp/codec/dec/vp9/vp9d_codec.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
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