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