xref: /rockchip-linux_mpp/mpp/inc/mpp_enc_cfg.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1 /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2 /*
3  * Copyright (c) 2015 Rockchip Electronics Co., Ltd.
4  */
5 
6 #ifndef __MPP_ENC_CFG_H__
7 #define __MPP_ENC_CFG_H__
8 
9 #include "rk_venc_cfg.h"
10 #include "rk_venc_cmd.h"
11 #include "rk_venc_ref.h"
12 #include "mpp_rc_defs.h"
13 
14 #include "kmpp_obj.h"
15 
16 /*
17  * MppEncCfgSet shows the relationship between different configuration
18  * Due to the huge amount of configurable parameters we need to setup
19  * only minimum amount of necessary parameters.
20  *
21  * For normal user rc and prep config are enough.
22  */
23 #define POS_TO_FLAG(p, pos) ((rk_u8*)(p) + ((rk_u32)(pos) & 0xffff))
24 #define POS_TO_ELEM(p, pos) ((rk_u8*)(p) + ((rk_u32)(pos) >> 16))
25 
26 typedef struct MppEncCfgSet_t {
27     MppEncBaseCfg       base;
28 
29     // esential config
30     MppEncPrepCfg       prep;
31     MppEncRcCfg         rc;
32 
33     // hardware related config
34     MppEncHwCfg         hw;
35 
36     // codec detail config
37     MppEncH264Cfg       h264;
38     MppEncH265Cfg       h265;
39     MppEncJpegCfg       jpeg;
40     MppEncVp8Cfg        vp8;
41 
42     MppEncSliceSplit    split;
43     MppEncRefCfg        ref_cfg;
44     union {
45         MppEncROICfg    roi;
46         /* for kmpp venc roi */
47         MppEncROICfgLegacy roi_legacy;
48     };
49     /* for kmpp venc osd */
50     MppEncOSDData3      osd;
51     MppEncOSDPltCfg     plt_cfg;
52     MppEncOSDPlt        plt_data;
53     /* for kmpp venc ref */
54     MppEncRefParam      ref_param;
55 
56     // quality fine tuning config
57     MppEncFineTuneCfg   tune;
58 } MppEncCfgSet;
59 
60 #ifdef __cplusplus
61 extern "C" {
62 #endif
63 
64 rk_u32 *mpp_enc_cfg_prep_change(MppEncCfgSet *cfg);
65 rk_u32 *mpp_enc_cfg_rc_change(MppEncCfgSet *cfg);
66 rk_u32 *mpp_enc_cfg_hw_change(MppEncCfgSet *cfg);
67 rk_u32 *mpp_enc_cfg_tune_change(MppEncCfgSet *cfg);
68 rk_u32 *mpp_enc_cfg_h264_change(MppEncCfgSet *cfg);
69 rk_u32 *mpp_enc_cfg_h265_change(MppEncCfgSet *cfg);
70 rk_u32 *mpp_enc_cfg_jpeg_change(MppEncCfgSet *cfg);
71 rk_u32 *mpp_enc_cfg_vp8_change(MppEncCfgSet *cfg);
72 
73 #define KMPP_OBJ_NAME               mpp_enc_cfg
74 #define KMPP_OBJ_INTF_TYPE          MppEncCfg
75 #include "kmpp_obj_func.h"
76 
77 #ifdef __cplusplus
78 }
79 #endif
80 
81 #endif /*__MPP_ENC_CFG_H__*/
82