xref: /rockchip-linux_mpp/mpp/inc/mpp_dec_cfg.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2020 Rockchip Electronics Co. LTD
3*437bfbebSnyanmisaka  *
4*437bfbebSnyanmisaka  * Licensed under the Apache License, Version 2.0 (the "License");
5*437bfbebSnyanmisaka  * you may not use this file except in compliance with the License.
6*437bfbebSnyanmisaka  * You may obtain a copy of the License at
7*437bfbebSnyanmisaka  *
8*437bfbebSnyanmisaka  *      http://www.apache.org/licenses/LICENSE-2.0
9*437bfbebSnyanmisaka  *
10*437bfbebSnyanmisaka  * Unless required by applicable law or agreed to in writing, software
11*437bfbebSnyanmisaka  * distributed under the License is distributed on an "AS IS" BASIS,
12*437bfbebSnyanmisaka  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*437bfbebSnyanmisaka  * See the License for the specific language governing permissions and
14*437bfbebSnyanmisaka  * limitations under the License.
15*437bfbebSnyanmisaka  */
16*437bfbebSnyanmisaka 
17*437bfbebSnyanmisaka #ifndef __MPP_DEC_CFG_H__
18*437bfbebSnyanmisaka #define __MPP_DEC_CFG_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include "mpp_frame.h"
21*437bfbebSnyanmisaka #include "rk_vdec_cmd.h"
22*437bfbebSnyanmisaka 
23*437bfbebSnyanmisaka typedef enum MppDecCfgChange_e {
24*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_TYPE              = (1 << 0),
25*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_CODING            = (1 << 1),
26*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_HW_TYPE           = (1 << 2),
27*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_BATCH_MODE        = (1 << 3),
28*437bfbebSnyanmisaka 
29*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_OUTPUT_FORMAT     = (1 << 8),
30*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_FAST_OUT          = (1 << 9),
31*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_FAST_PARSE        = (1 << 10),
32*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_SPLIT_PARSE       = (1 << 11),
33*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_INTERNAL_PTS      = (1 << 12),
34*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_SORT_PTS          = (1 << 13),
35*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_DISABLE_ERROR     = (1 << 14),
36*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_ENABLE_VPROC      = (1 << 15),
37*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_ENABLE_FAST_PLAY  = (1 << 16),
38*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_ENABLE_HDR_META   = (1 << 17),
39*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_ENABLE_THUMBNAIL  = (1 << 18),
40*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_ENABLE_MVC        = (1 << 19),
41*437bfbebSnyanmisaka     /* disable dpb discontinuous check */
42*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_DISABLE_DPB_CHECK = (1 << 20),
43*437bfbebSnyanmisaka     /* reserve high bit for global config */
44*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_DISABLE_THREAD    = (1 << 28),
45*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_CODEC_MODE        = (1 << 29),
46*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_DIS_ERR_CLR_MARK  = (1 << 30),
47*437bfbebSnyanmisaka 
48*437bfbebSnyanmisaka     MPP_DEC_CFG_CHANGE_ALL               = (0xFFFFFFFF),
49*437bfbebSnyanmisaka } MppDecCfgChange;
50*437bfbebSnyanmisaka 
51*437bfbebSnyanmisaka typedef enum MppVprocMode_e {
52*437bfbebSnyanmisaka     MPP_VPROC_MODE_NONE                  = 0,
53*437bfbebSnyanmisaka     /*
54*437bfbebSnyanmisaka      * Deinterlacing interlaced video stream only.
55*437bfbebSnyanmisaka      * If video is marked as progressive, it won't be deinterlaced.
56*437bfbebSnyanmisaka      */
57*437bfbebSnyanmisaka     MPP_VPROC_MODE_DEINTELACE            = (1 << 0),
58*437bfbebSnyanmisaka     /*
59*437bfbebSnyanmisaka      * Both interlaced and progressive video will be sending to Vproc for Detection.
60*437bfbebSnyanmisaka      * - For progressive vide, output directly during detection and adjust later
61*437bfbebSnyanmisaka      *       according to IEP result.
62*437bfbebSnyanmisaka      * - For interlaced video, interlaceing directly and adjust later according to
63*437bfbebSnyanmisaka      *       IEP result.
64*437bfbebSnyanmisaka      */
65*437bfbebSnyanmisaka     MPP_VPROC_MODE_DETECTION             = (1 << 1),
66*437bfbebSnyanmisaka     MPP_VPROC_MODE_ALL                   = (0xFFFFFFFF),
67*437bfbebSnyanmisaka } MppVprocMode;
68*437bfbebSnyanmisaka 
69*437bfbebSnyanmisaka typedef enum FastPlayMode_e {
70*437bfbebSnyanmisaka     MPP_DISABLE_FAST_PLAY,
71*437bfbebSnyanmisaka     MPP_ENABLE_FAST_PLAY,
72*437bfbebSnyanmisaka     // first gop fast play when poc include negative value, otherwise enable fast play all time
73*437bfbebSnyanmisaka     MPP_ENABLE_FAST_PLAY_ONCE,
74*437bfbebSnyanmisaka } FastPlayMode;
75*437bfbebSnyanmisaka 
76*437bfbebSnyanmisaka typedef struct MppDecBaseCfg_t {
77*437bfbebSnyanmisaka     RK_U64              change;
78*437bfbebSnyanmisaka 
79*437bfbebSnyanmisaka     MppCtxType          type;
80*437bfbebSnyanmisaka     MppCodingType       coding;
81*437bfbebSnyanmisaka     RK_S32              hw_type;
82*437bfbebSnyanmisaka     RK_U32              batch_mode;
83*437bfbebSnyanmisaka 
84*437bfbebSnyanmisaka     MppFrameFormat      out_fmt;
85*437bfbebSnyanmisaka     RK_U32              fast_out;
86*437bfbebSnyanmisaka     RK_U32              fast_parse;
87*437bfbebSnyanmisaka     RK_U32              split_parse;
88*437bfbebSnyanmisaka     RK_U32              internal_pts;
89*437bfbebSnyanmisaka     RK_U32              sort_pts;
90*437bfbebSnyanmisaka     RK_U32              disable_error;
91*437bfbebSnyanmisaka     RK_U32              enable_vproc;   /* MppVprocMode */
92*437bfbebSnyanmisaka     RK_U32              enable_fast_play;
93*437bfbebSnyanmisaka     RK_U32              enable_hdr_meta;
94*437bfbebSnyanmisaka     RK_U32              enable_thumbnail;
95*437bfbebSnyanmisaka     RK_U32              enable_mvc;
96*437bfbebSnyanmisaka     RK_U32              disable_dpb_chk;
97*437bfbebSnyanmisaka     RK_U32              disable_thread;
98*437bfbebSnyanmisaka     RK_U32              codec_mode;
99*437bfbebSnyanmisaka     RK_U32              dis_err_clr_mark;
100*437bfbebSnyanmisaka } MppDecBaseCfg;
101*437bfbebSnyanmisaka 
102*437bfbebSnyanmisaka typedef enum MppDecCbCfgChange_e {
103*437bfbebSnyanmisaka     MPP_DEC_CB_CFG_CHANGE_PKT_RDY       = (1 << 0),
104*437bfbebSnyanmisaka     MPP_DEC_CB_CFG_CHANGE_FRM_RDY       = (1 << 1),
105*437bfbebSnyanmisaka 
106*437bfbebSnyanmisaka     MPP_DEC_CB_CFG_CHANGE_ALL           = (0xFFFFFFFF),
107*437bfbebSnyanmisaka } MppDecCbCfgChange;
108*437bfbebSnyanmisaka 
109*437bfbebSnyanmisaka typedef struct MppDecCbCfg_t {
110*437bfbebSnyanmisaka     RK_U64              change;
111*437bfbebSnyanmisaka 
112*437bfbebSnyanmisaka     /* notify packet process done and can accept new packet */
113*437bfbebSnyanmisaka     MppExtCbFunc        pkt_rdy_cb;
114*437bfbebSnyanmisaka     MppExtCbCtx         pkt_rdy_ctx;
115*437bfbebSnyanmisaka     RK_S32              pkt_rdy_cmd;
116*437bfbebSnyanmisaka 
117*437bfbebSnyanmisaka     /* notify frame ready for output */
118*437bfbebSnyanmisaka     MppExtCbFunc        frm_rdy_cb;
119*437bfbebSnyanmisaka     MppExtCbCtx         frm_rdy_ctx;
120*437bfbebSnyanmisaka     RK_S32              frm_rdy_cmd;
121*437bfbebSnyanmisaka } MppDecCbCfg;
122*437bfbebSnyanmisaka 
123*437bfbebSnyanmisaka typedef struct MppDecStatusCfg_t {
124*437bfbebSnyanmisaka     RK_U32              hal_support_fast_mode;
125*437bfbebSnyanmisaka     RK_U32              hal_task_count;
126*437bfbebSnyanmisaka     RK_U32              vproc_task_count;
127*437bfbebSnyanmisaka } MppDecStatusCfg;
128*437bfbebSnyanmisaka 
129*437bfbebSnyanmisaka typedef struct MppDecCfgSet_t {
130*437bfbebSnyanmisaka     MppDecBaseCfg       base;
131*437bfbebSnyanmisaka     MppDecStatusCfg     status;
132*437bfbebSnyanmisaka     MppDecCbCfg         cb;
133*437bfbebSnyanmisaka } MppDecCfgSet;
134*437bfbebSnyanmisaka 
135*437bfbebSnyanmisaka #ifdef __cplusplus
136*437bfbebSnyanmisaka extern "C" {
137*437bfbebSnyanmisaka #endif
138*437bfbebSnyanmisaka 
139*437bfbebSnyanmisaka rk_s32 mpp_dec_cfg_set_default(void *entry, KmppObj obj, const char *caller);
140*437bfbebSnyanmisaka 
141*437bfbebSnyanmisaka #ifdef __cplusplus
142*437bfbebSnyanmisaka }
143*437bfbebSnyanmisaka #endif
144*437bfbebSnyanmisaka 
145*437bfbebSnyanmisaka #endif /* __MPP_DEC_CFG_H__ */
146