xref: /rockchip-linux_mpp/mpp/codec/inc/mpp_enc.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2015 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_ENC_H__
18*437bfbebSnyanmisaka #define __MPP_ENC_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include "rk_type.h"
21*437bfbebSnyanmisaka #include "mpp_err.h"
22*437bfbebSnyanmisaka #include "rk_mpi_cmd.h"
23*437bfbebSnyanmisaka 
24*437bfbebSnyanmisaka /*
25*437bfbebSnyanmisaka  * Configure of encoder is separated into four parts.
26*437bfbebSnyanmisaka  *
27*437bfbebSnyanmisaka  * 1. Rate control parameter
28*437bfbebSnyanmisaka  *    This is quality and bitrate request from user.
29*437bfbebSnyanmisaka  *    For controller only
30*437bfbebSnyanmisaka  *
31*437bfbebSnyanmisaka  * 2. Data source MppFrame parameter
32*437bfbebSnyanmisaka  *    This is data source buffer information.
33*437bfbebSnyanmisaka  *    For both controller and hal
34*437bfbebSnyanmisaka  *
35*437bfbebSnyanmisaka  * 3. Video codec infomation
36*437bfbebSnyanmisaka  *    This is user custormized stream information.
37*437bfbebSnyanmisaka  *    For hal only
38*437bfbebSnyanmisaka  *
39*437bfbebSnyanmisaka  * 4. Extra parameter
40*437bfbebSnyanmisaka  *    including:
41*437bfbebSnyanmisaka  *    PreP  : encoder Preprocess configuration
42*437bfbebSnyanmisaka  *    ROI   : Region Of Interest
43*437bfbebSnyanmisaka  *    OSD   : On Screen Display
44*437bfbebSnyanmisaka  *    MD    : Motion Detection
45*437bfbebSnyanmisaka  *    extra : SEI for h.264 / Exif for mjpeg
46*437bfbebSnyanmisaka  *    For hal only
47*437bfbebSnyanmisaka  *
48*437bfbebSnyanmisaka  * The module transcation flow is as follows:
49*437bfbebSnyanmisaka  *
50*437bfbebSnyanmisaka  *                 +                      +
51*437bfbebSnyanmisaka  *     User        |      Mpi/Mpp         |         EncImpl
52*437bfbebSnyanmisaka  *                 |                      |            Hal
53*437bfbebSnyanmisaka  *                 |                      |
54*437bfbebSnyanmisaka  * +----------+    |    +---------+       |       +------------+
55*437bfbebSnyanmisaka  * |          |    |    |         +-----RcCfg----->            |
56*437bfbebSnyanmisaka  * |  RcCfg   +--------->         |       |       | EncImpl |
57*437bfbebSnyanmisaka  * |          |    |    |         |   +-Frame----->            |
58*437bfbebSnyanmisaka  * +----------+    |    |         |   |   |       +---+-----^--+
59*437bfbebSnyanmisaka  *                 |    |         |   |   |           |     |
60*437bfbebSnyanmisaka  *                 |    |         |   |   |           |     |
61*437bfbebSnyanmisaka  * +----------+    |    |         |   |   |        syntax   |
62*437bfbebSnyanmisaka  * |          |    |    |         |   |   |           |     |
63*437bfbebSnyanmisaka  * | MppFrame +--------->  MppEnc +---+   |           |   result
64*437bfbebSnyanmisaka  * |          |    |    |         |   |   |           |     |
65*437bfbebSnyanmisaka  * +----------+    |    |         |   |   |           |     |
66*437bfbebSnyanmisaka  *                 |    |         |   |   |       +---v-----+--+
67*437bfbebSnyanmisaka  *                 |    |         |   +-Frame----->            |
68*437bfbebSnyanmisaka  * +----------+    |    |         |       |       |            |
69*437bfbebSnyanmisaka  * |          |    |    |         +---CodecCfg---->    Hal     |
70*437bfbebSnyanmisaka  * | CodecCfg +--------->         |       |       |            |
71*437bfbebSnyanmisaka  * |          |    |    |         <-----Extra----->            |
72*437bfbebSnyanmisaka  * +----------+    |    +---------+       |       +------------+
73*437bfbebSnyanmisaka  *                 |                      |
74*437bfbebSnyanmisaka  *                 |                      |
75*437bfbebSnyanmisaka  *                 +                      +
76*437bfbebSnyanmisaka  *
77*437bfbebSnyanmisaka  * The function call flow is shown below:
78*437bfbebSnyanmisaka  *
79*437bfbebSnyanmisaka  *  mpi                      mpp_enc         controller                  hal
80*437bfbebSnyanmisaka  *   +                          +                 +                       +
81*437bfbebSnyanmisaka  *   |                          |                 |                       |
82*437bfbebSnyanmisaka  *   |                          |                 |                       |
83*437bfbebSnyanmisaka  *   +----------init------------>                 |                       |
84*437bfbebSnyanmisaka  *   |                          |                 |                       |
85*437bfbebSnyanmisaka  *   |                          |                 |                       |
86*437bfbebSnyanmisaka  *   |         PrepCfg          |                 |                       |
87*437bfbebSnyanmisaka  *   +---------control---------->     PrepCfg     |                       |
88*437bfbebSnyanmisaka  *   |                          +-----control----->                       |
89*437bfbebSnyanmisaka  *   |                          |                 |        PrepCfg        |
90*437bfbebSnyanmisaka  *   |                          +--------------------------control-------->
91*437bfbebSnyanmisaka  *   |                          |                 |                    allocate
92*437bfbebSnyanmisaka  *   |                          |                 |                     buffer
93*437bfbebSnyanmisaka  *   |                          |                 |                       |
94*437bfbebSnyanmisaka  *   |          RcCfg           |                 |                       |
95*437bfbebSnyanmisaka  *   +---------control---------->      RcCfg      |                       |
96*437bfbebSnyanmisaka  *   |                          +-----control----->                       |
97*437bfbebSnyanmisaka  *   |                          |              rc_init                    |
98*437bfbebSnyanmisaka  *   |                          |                 |                       |
99*437bfbebSnyanmisaka  *   |                          |                 |                       |
100*437bfbebSnyanmisaka  *   |         CodecCfg         |                 |                       |
101*437bfbebSnyanmisaka  *   +---------control---------->                 |        CodecCfg       |
102*437bfbebSnyanmisaka  *   |                          +--------------------------control-------->
103*437bfbebSnyanmisaka  *   |                          |                 |                    generate
104*437bfbebSnyanmisaka  *   |                          |                 |                    sps/pps
105*437bfbebSnyanmisaka  *   |                          |                 |     Get extra info    |
106*437bfbebSnyanmisaka  *   |                          +--------------------------control-------->
107*437bfbebSnyanmisaka  *   |      Get extra info      |                 |                       |
108*437bfbebSnyanmisaka  *   +---------control---------->                 |                       |
109*437bfbebSnyanmisaka  *   |                          |                 |                       |
110*437bfbebSnyanmisaka  *   |                          |                 |                       |
111*437bfbebSnyanmisaka  *   |         ROICfg           |                 |                       |
112*437bfbebSnyanmisaka  *   +---------control---------->                 |        ROICfg         |
113*437bfbebSnyanmisaka  *   |                          +--------------------------control-------->
114*437bfbebSnyanmisaka  *   |                          |                 |                       |
115*437bfbebSnyanmisaka  *   |         OSDCfg           |                 |                       |
116*437bfbebSnyanmisaka  *   +---------control---------->                 |        OSDCfg         |
117*437bfbebSnyanmisaka  *   |                          +--------------------------control-------->
118*437bfbebSnyanmisaka  *   |                          |                 |                       |
119*437bfbebSnyanmisaka  *   |          MDCfg           |                 |                       |
120*437bfbebSnyanmisaka  *   +---------control---------->                 |         MDCfg         |
121*437bfbebSnyanmisaka  *   |                          +--------------------------control-------->
122*437bfbebSnyanmisaka  *   |                          |                 |                       |
123*437bfbebSnyanmisaka  *   |      Set extra info      |                 |                       |
124*437bfbebSnyanmisaka  *   +---------control---------->                 |     Set extra info    |
125*437bfbebSnyanmisaka  *   |                          +--------------------------control-------->
126*437bfbebSnyanmisaka  *   |                          |                 |                       |
127*437bfbebSnyanmisaka  *   |           task           |                 |                       |
128*437bfbebSnyanmisaka  *   +----------encode---------->      task       |                       |
129*437bfbebSnyanmisaka  *   |                          +-----encode------>                       |
130*437bfbebSnyanmisaka  *   |                          |              encode                     |
131*437bfbebSnyanmisaka  *   |                          |                 |        syntax         |
132*437bfbebSnyanmisaka  *   |                          +--------------------------gen_reg-------->
133*437bfbebSnyanmisaka  *   |                          |                 |                       |
134*437bfbebSnyanmisaka  *   |                          |                 |                       |
135*437bfbebSnyanmisaka  *   |                          +---------------------------start--------->
136*437bfbebSnyanmisaka  *   |                          |                 |                       |
137*437bfbebSnyanmisaka  *   |                          |                 |                       |
138*437bfbebSnyanmisaka  *   |                          +---------------------------wait---------->
139*437bfbebSnyanmisaka  *   |                          |                 |                       |
140*437bfbebSnyanmisaka  *   |                          |    callback     |                       |
141*437bfbebSnyanmisaka  *   |                          +----------------->                       |
142*437bfbebSnyanmisaka  *   +--OSD-MD--encode---------->                 |                       |
143*437bfbebSnyanmisaka  *   |             .            |                 |                       |
144*437bfbebSnyanmisaka  *   |             .            |                 |                       |
145*437bfbebSnyanmisaka  *   |             .            |                 |                       |
146*437bfbebSnyanmisaka  *   +--OSD-MD--encode---------->                 |                       |
147*437bfbebSnyanmisaka  *   |                          |                 |                       |
148*437bfbebSnyanmisaka  *   +----------deinit---------->                 |                       |
149*437bfbebSnyanmisaka  *   +                          +                 +                       +
150*437bfbebSnyanmisaka  */
151*437bfbebSnyanmisaka 
152*437bfbebSnyanmisaka typedef void* MppEnc;
153*437bfbebSnyanmisaka 
154*437bfbebSnyanmisaka typedef struct MppEncInitCfg_t {
155*437bfbebSnyanmisaka     MppCodingType       coding;
156*437bfbebSnyanmisaka     RK_S32              task_cnt;
157*437bfbebSnyanmisaka     void                *mpp;
158*437bfbebSnyanmisaka } MppEncInitCfg;
159*437bfbebSnyanmisaka 
160*437bfbebSnyanmisaka #ifdef __cplusplus
161*437bfbebSnyanmisaka extern "C" {
162*437bfbebSnyanmisaka #endif
163*437bfbebSnyanmisaka 
164*437bfbebSnyanmisaka MPP_RET mpp_enc_init_v2(MppEnc *ctx, MppEncInitCfg *cfg);
165*437bfbebSnyanmisaka MPP_RET mpp_enc_deinit_v2(MppEnc ctx);
166*437bfbebSnyanmisaka 
167*437bfbebSnyanmisaka MPP_RET mpp_enc_start_v2(MppEnc ctx);
168*437bfbebSnyanmisaka MPP_RET mpp_enc_start_async(MppEnc ctx);
169*437bfbebSnyanmisaka MPP_RET mpp_enc_stop_v2(MppEnc ctx);
170*437bfbebSnyanmisaka 
171*437bfbebSnyanmisaka MPP_RET mpp_enc_control_v2(MppEnc ctx, MpiCmd cmd, void *param);
172*437bfbebSnyanmisaka MPP_RET mpp_enc_notify_v2(MppEnc ctx, RK_U32 flag);
173*437bfbebSnyanmisaka MPP_RET mpp_enc_reset_v2(MppEnc ctx);
174*437bfbebSnyanmisaka 
175*437bfbebSnyanmisaka #ifdef __cplusplus
176*437bfbebSnyanmisaka }
177*437bfbebSnyanmisaka #endif
178*437bfbebSnyanmisaka 
179*437bfbebSnyanmisaka #endif /*__MPP_ENC_H__*/
180