hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*
 * Copyright 2016 Rockchip Electronics Co. LTD
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
#ifndef __RC_H__
#define __RC_H__
 
#include "mpp_err.h"
 
#include "mpp_rc_api.h"
 
/*
 * Mpp rate control principle
 *
 * 1. Rate control information is composed by these parts:
 *    a. configuration from mpp user.
 *    b. frame level target bitrate calculated by different RC model.
 *    c. block level hardware related configuration to hardware.
 *    d. statistic information from hardware after one frame is encoded.
 *
 * 2. All the above informatioin is storaged and managed by RcDataCtx in mpp
 *    framework. All these information is shared in encoder and hal module.
 *
 * 3. User (no matter developer or end user) defined rate control should based
 *    on these Rate control information and implement its own rate control
 *    strategy module by providing their own RcImplApi.
 */
 
/*
 * Relation between mpp_enc / enc_impl / hal / RcApi / RcImplApi / RcData
 *
 *  +-----------+
 *  |  mpp_enc  |
 *  +-----+-----+
 *        |
 *  +-----+-----+   +-----------+   +-----------+
 *  |  enc_impl +--->   RcApi   +---> RcImplApi |
 *  +-----+-----+   +-----+-----+   +-----+-----+
 *        |      \ /      |               |
 *        |       +       |               |
 *        |      / \      |               |
 *  +-----v-----+   +-----v-----+         |
 *  |    hal    +--->  RcData   <---------+
 *  +-----------+   +-----------+
 */
 
typedef void* RcCtx;
 
#ifdef __cplusplus
extern "C" {
#endif
 
MPP_RET rc_init(RcCtx *ctx, MppCodingType type, const char **request_name);
MPP_RET rc_deinit(RcCtx ctx);
 
/* update rc control  */
MPP_RET rc_update_usr_cfg(RcCtx ctx, RcCfg *cfg);
 
/* Frame rate convertion */
MPP_RET rc_frm_check_drop(RcCtx ctx, EncRcTask *task);
/* Frame reenc check */
MPP_RET rc_frm_check_reenc(RcCtx ctx, EncRcTask *task);
 
/* Frame level rate and quality control */
MPP_RET rc_frm_start(RcCtx ctx, EncRcTask *task);
MPP_RET rc_frm_end(RcCtx ctx, EncRcTask *task);
 
MPP_RET rc_hal_start(RcCtx ctx, EncRcTask *task);
MPP_RET rc_hal_end(RcCtx ctx, EncRcTask *task);
 
#ifdef __cplusplus
}
#endif
 
#endif /* __RC_H__ */