/* * Copyright 2020 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_IMPL_H__ #define __MPP_ENC_IMPL_H__ #include "enc_impl.h" #include "mpp_enc_hal.h" #include "mpp_enc_ref.h" #include "mpp_enc_refs.h" #include "mpp_device.h" #include "rc.h" #include "hal_info.h" typedef union MppEncHeaderStatus_u { RK_U32 val; struct { RK_U32 ready : 1; RK_U32 added_by_ctrl : 1; RK_U32 added_by_mode : 1; RK_U32 added_by_change : 1; }; } MppEncHeaderStatus; typedef struct RcApiStatus_t { RK_U32 rc_api_inited : 1; RK_U32 rc_api_updated : 1; RK_U32 rc_api_user_cfg : 1; } RcApiStatus; typedef struct MppEncImpl_t { MppCodingType coding; EncImpl impl; MppEncHal enc_hal; /* device from hal */ MppDev dev; HalInfo hal_info; RK_S64 time_base; RK_S64 time_end; RK_S32 frame_count; RK_S32 hal_info_updated; /* * Rate control plugin parameters */ RcApiStatus rc_status; RK_S32 rc_api_updated; RK_S32 rc_cfg_updated; RcApiBrief rc_brief; RcCtx rc_ctx; /* * thread input / output context */ MppThread *thread_enc; void *mpp; MppPort input; MppPort output; MppTask task_in; MppTask task_out; MppFrame frame; MppPacket packet; RK_U32 low_delay_part_mode; RK_U32 low_delay_output; /* output callback for slice output */ MppCbCtx output_cb; /* base task information */ HalTaskGroup tasks; HalTaskHnd hnd; EncAsyncTaskInfo *async; RK_U32 task_idx; RK_S64 task_pts; MppBuffer frm_buf; MppBuffer pkt_buf; MppBuffer md_info; // internal status and protection Mutex lock; RK_U32 reset_flag; sem_t enc_reset; RK_U32 wait_count; RK_U32 work_count; RK_U32 status_flag; RK_U32 notify_flag; /* control process */ RK_U32 cmd_send; RK_U32 cmd_recv; MpiCmd cmd; void *param; MPP_RET *cmd_ret; sem_t cmd_start; sem_t cmd_done; // legacy support for MPP_ENC_GET_EXTRA_INFO MppPacket hdr_pkt; void *hdr_buf; RK_U32 hdr_len; MppEncHeaderStatus hdr_status; MppEncHeaderMode hdr_mode; MppEncSeiMode sei_mode; /* information for debug prefix */ const char *version_info; RK_S32 version_length; char *rc_cfg_info; RK_S32 rc_cfg_pos; RK_S32 rc_cfg_length; RK_S32 rc_cfg_size; /* cpb parameters */ MppEncRefs refs; MppEncRefFrmUsrCfg frm_cfg; /* two-pass deflicker parameters */ RK_U32 support_hw_deflicker; EncRcTaskInfo rc_info_prev; /* Encoder configure set */ MppEncCfgSet cfg; } MppEncImpl; #ifdef __cplusplus extern "C" { #endif void *mpp_enc_thread(void *data); void *mpp_enc_async_thread(void *data); MPP_RET mpp_enc_callback(const char *caller, void *ctx, RK_S32 cmd, void *param); #ifdef __cplusplus } #endif #endif /*__MPP_ENC_IMPL_H__*/