/* * Copyright 2015 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 __MPP_ENC_H__ #define __MPP_ENC_H__ #include "rk_type.h" #include "mpp_err.h" #include "rk_mpi_cmd.h" /* * Configure of encoder is separated into four parts. * * 1. Rate control parameter * This is quality and bitrate request from user. * For controller only * * 2. Data source MppFrame parameter * This is data source buffer information. * For both controller and hal * * 3. Video codec infomation * This is user custormized stream information. * For hal only * * 4. Extra parameter * including: * PreP : encoder Preprocess configuration * ROI : Region Of Interest * OSD : On Screen Display * MD : Motion Detection * extra : SEI for h.264 / Exif for mjpeg * For hal only * * The module transcation flow is as follows: * * + + * User | Mpi/Mpp | EncImpl * | | Hal * | | * +----------+ | +---------+ | +------------+ * | | | | +-----RcCfg-----> | * | RcCfg +---------> | | | EncImpl | * | | | | | +-Frame-----> | * +----------+ | | | | | +---+-----^--+ * | | | | | | | * | | | | | | | * +----------+ | | | | | syntax | * | | | | | | | | | * | MppFrame +---------> MppEnc +---+ | | result * | | | | | | | | | * +----------+ | | | | | | | * | | | | | +---v-----+--+ * | | | +-Frame-----> | * +----------+ | | | | | | * | | | | +---CodecCfg----> Hal | * | CodecCfg +---------> | | | | * | | | | <-----Extra-----> | * +----------+ | +---------+ | +------------+ * | | * | | * + + * * The function call flow is shown below: * * mpi mpp_enc controller hal * + + + + * | | | | * | | | | * +----------init------------> | | * | | | | * | | | | * | PrepCfg | | | * +---------control----------> PrepCfg | | * | +-----control-----> | * | | | PrepCfg | * | +--------------------------control--------> * | | | allocate * | | | buffer * | | | | * | RcCfg | | | * +---------control----------> RcCfg | | * | +-----control-----> | * | | rc_init | * | | | | * | | | | * | CodecCfg | | | * +---------control----------> | CodecCfg | * | +--------------------------control--------> * | | | generate * | | | sps/pps * | | | Get extra info | * | +--------------------------control--------> * | Get extra info | | | * +---------control----------> | | * | | | | * | | | | * | ROICfg | | | * +---------control----------> | ROICfg | * | +--------------------------control--------> * | | | | * | OSDCfg | | | * +---------control----------> | OSDCfg | * | +--------------------------control--------> * | | | | * | MDCfg | | | * +---------control----------> | MDCfg | * | +--------------------------control--------> * | | | | * | Set extra info | | | * +---------control----------> | Set extra info | * | +--------------------------control--------> * | | | | * | task | | | * +----------encode----------> task | | * | +-----encode------> | * | | encode | * | | | syntax | * | +--------------------------gen_reg--------> * | | | | * | | | | * | +---------------------------start---------> * | | | | * | | | | * | +---------------------------wait----------> * | | | | * | | callback | | * | +-----------------> | * +--OSD-MD--encode----------> | | * | . | | | * | . | | | * | . | | | * +--OSD-MD--encode----------> | | * | | | | * +----------deinit----------> | | * + + + + */ typedef void* MppEnc; typedef struct MppEncInitCfg_t { MppCodingType coding; RK_S32 task_cnt; void *mpp; } MppEncInitCfg; #ifdef __cplusplus extern "C" { #endif MPP_RET mpp_enc_init_v2(MppEnc *ctx, MppEncInitCfg *cfg); MPP_RET mpp_enc_deinit_v2(MppEnc ctx); MPP_RET mpp_enc_start_v2(MppEnc ctx); MPP_RET mpp_enc_start_async(MppEnc ctx); MPP_RET mpp_enc_stop_v2(MppEnc ctx); MPP_RET mpp_enc_control_v2(MppEnc ctx, MpiCmd cmd, void *param); MPP_RET mpp_enc_notify_v2(MppEnc ctx, RK_U32 flag); MPP_RET mpp_enc_reset_v2(MppEnc ctx); #ifdef __cplusplus } #endif #endif /*__MPP_ENC_H__*/