xref: /rockchip-linux_mpp/mpp/hal/inc/mpp_enc_hal.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_HAL_H__
18*437bfbebSnyanmisaka #define __MPP_ENC_HAL_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include "hal_enc_task.h"
21*437bfbebSnyanmisaka #include "mpp_enc_cfg.h"
22*437bfbebSnyanmisaka #include "mpp_device.h"
23*437bfbebSnyanmisaka 
24*437bfbebSnyanmisaka typedef struct MppEncHalCfg_t {
25*437bfbebSnyanmisaka     // input for encoder
26*437bfbebSnyanmisaka     MppCodingType   coding;
27*437bfbebSnyanmisaka     MppEncCfgSet    *cfg;
28*437bfbebSnyanmisaka     MppCbCtx        *output_cb;
29*437bfbebSnyanmisaka     RK_S32          task_cnt;
30*437bfbebSnyanmisaka 
31*437bfbebSnyanmisaka     // output from enc_impl
32*437bfbebSnyanmisaka     MppClientType   type;
33*437bfbebSnyanmisaka     MppDev          dev;
34*437bfbebSnyanmisaka     RK_S32          cap_recn_out;
35*437bfbebSnyanmisaka     HalTaskGroup    tasks;
36*437bfbebSnyanmisaka } MppEncHalCfg;
37*437bfbebSnyanmisaka 
38*437bfbebSnyanmisaka typedef struct MppEncHalApi_t {
39*437bfbebSnyanmisaka     char            *name;
40*437bfbebSnyanmisaka     MppCodingType   coding;
41*437bfbebSnyanmisaka     RK_U32          ctx_size;
42*437bfbebSnyanmisaka     RK_U32          flag;
43*437bfbebSnyanmisaka 
44*437bfbebSnyanmisaka     MPP_RET (*init)(void *ctx, MppEncHalCfg *cfg);
45*437bfbebSnyanmisaka     MPP_RET (*deinit)(void *ctx);
46*437bfbebSnyanmisaka 
47*437bfbebSnyanmisaka     // prepare function after encoder config is set
48*437bfbebSnyanmisaka     MPP_RET (*prepare)(void *ctx);
49*437bfbebSnyanmisaka 
50*437bfbebSnyanmisaka     // configure function
51*437bfbebSnyanmisaka     MPP_RET (*get_task)(void *ctx, HalEncTask *task);
52*437bfbebSnyanmisaka     MPP_RET (*gen_regs)(void *ctx, HalEncTask *task);
53*437bfbebSnyanmisaka 
54*437bfbebSnyanmisaka     // hw operation function
55*437bfbebSnyanmisaka     MPP_RET (*start)(void *ctx, HalEncTask *task);
56*437bfbebSnyanmisaka     MPP_RET (*wait)(void *ctx, HalEncTask *task);
57*437bfbebSnyanmisaka     MPP_RET (*part_start)(void *ctx, HalEncTask *task);
58*437bfbebSnyanmisaka     MPP_RET (*part_wait)(void *ctx, HalEncTask *task);
59*437bfbebSnyanmisaka 
60*437bfbebSnyanmisaka     // return function
61*437bfbebSnyanmisaka     MPP_RET (*ret_task)(void *ctx, HalEncTask *task);
62*437bfbebSnyanmisaka } MppEncHalApi;
63*437bfbebSnyanmisaka 
64*437bfbebSnyanmisaka typedef void* MppEncHal;
65*437bfbebSnyanmisaka 
66*437bfbebSnyanmisaka #ifdef __cplusplus
67*437bfbebSnyanmisaka extern "C" {
68*437bfbebSnyanmisaka #endif
69*437bfbebSnyanmisaka 
70*437bfbebSnyanmisaka MPP_RET mpp_enc_hal_init(MppEncHal *ctx, MppEncHalCfg *cfg);
71*437bfbebSnyanmisaka MPP_RET mpp_enc_hal_deinit(MppEncHal ctx);
72*437bfbebSnyanmisaka 
73*437bfbebSnyanmisaka /* prepare after cfg */
74*437bfbebSnyanmisaka MPP_RET mpp_enc_hal_prepare(MppEncHal ctx);
75*437bfbebSnyanmisaka 
76*437bfbebSnyanmisaka MPP_RET mpp_enc_hal_get_task(MppEncHal ctx, HalEncTask *task);
77*437bfbebSnyanmisaka MPP_RET mpp_enc_hal_gen_regs(MppEncHal ctx, HalEncTask *task);
78*437bfbebSnyanmisaka 
79*437bfbebSnyanmisaka // start / wait hardware
80*437bfbebSnyanmisaka MPP_RET mpp_enc_hal_start(MppEncHal ctx, HalEncTask *task);
81*437bfbebSnyanmisaka MPP_RET mpp_enc_hal_wait(MppEncHal ctx, HalEncTask *task);
82*437bfbebSnyanmisaka MPP_RET mpp_enc_hal_part_start(MppEncHal ctx, HalEncTask *task);
83*437bfbebSnyanmisaka MPP_RET mpp_enc_hal_part_wait(MppEncHal ctx, HalEncTask *task);
84*437bfbebSnyanmisaka 
85*437bfbebSnyanmisaka MPP_RET mpp_enc_hal_ret_task(MppEncHal ctx, HalEncTask *task);
86*437bfbebSnyanmisaka 
87*437bfbebSnyanmisaka MPP_RET mpp_enc_hal_check_part_mode(MppEncHal ctx);
88*437bfbebSnyanmisaka 
89*437bfbebSnyanmisaka #ifdef __cplusplus
90*437bfbebSnyanmisaka }
91*437bfbebSnyanmisaka #endif
92*437bfbebSnyanmisaka 
93*437bfbebSnyanmisaka #endif /*__MPP_ENC_HAL_H__*/
94