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