diff --git a/inc/vpu.h b/inc/vpu.h index 7e0273ec..c8f186d0 100644 --- a/inc/vpu.h +++ b/inc/vpu.h @@ -112,6 +112,7 @@ typedef enum { int VPUClientInit(VPU_CLIENT_TYPE type); RK_S32 VPUClientRelease(int socket); RK_S32 VPUClientSendReg(int socket, RK_U32 *regs, RK_U32 nregs); +RK_S32 VPUClientSendReg2(RK_S32 socket, RK_S32 offset, RK_S32 size, void *param); RK_S32 VPUClientWaitResult(int socket, RK_U32 *regs, RK_U32 nregs, VPU_CMD_TYPE *cmd, RK_S32 *len); RK_S32 VPUClientGetHwCfg(int socket, RK_U32 *cfg, RK_U32 cfg_size); RK_S32 VPUClientGetIOMMUStatus(); diff --git a/mpp/hal/rkenc/h264e/hal_h264e_rkv.c b/mpp/hal/rkenc/h264e/hal_h264e_rkv.c index a9bdf07b..28e0c4db 100644 --- a/mpp/hal/rkenc/h264e/hal_h264e_rkv.c +++ b/mpp/hal/rkenc/h264e/hal_h264e_rkv.c @@ -18,7 +18,6 @@ #include #include -#include #include "vpu.h" #include "mpp_common.h" @@ -41,9 +40,8 @@ #define RKVENC_IS_TYPE_B(x) ((x)==RKVENC_FRAME_TYPE_B || (x)==RKVENC_FRAME_TYPE_BREF) #define RKVENC_IS_DISPOSABLE(type) ( type == RKVENC_FRAME_TYPE_B ) -#define H264E_IOC_MAGIC 'l' -#define H264E_IOC_CUSTOM_BASE 0x1000 -#define H264E_IOC_SET_OSD_PLT _IOW(H264E_IOC_MAGIC, H264E_IOC_CUSTOM_BASE+1, MppEncOSDPlt) +#define H264E_IOC_CUSTOM_BASE 0x1000 +#define H264E_IOC_SET_OSD_PLT (H264E_IOC_CUSTOM_BASE + 1) const RK_S32 h264e_csp_idx_map[H264E_RKV_CSP_BUTT] = {RKV_H264E_CSP2_BGRA, RKV_H264E_CSP2_BGR, RKV_H264E_CSP2_RGB, 0, RKV_H264E_CSP2_NV16, RKV_H264E_CSP2_I422, RKV_H264E_CSP2_NV12, @@ -296,24 +294,6 @@ static RK_U32 reg_idx2addr_map[132] = { }; #endif -static MPP_RET hal_h264e_rkv_cfg_hardware(RK_S32 socket, RK_U32 cmd, void *param) -{ - RK_S32 ret = 0; - - if (param == NULL) { - h264e_hal_log_err("input param is NULL"); - return MPP_ERR_NULL_PTR; - } - - ret = (RK_S32)ioctl(socket, cmd, param); - if (ret) { - h264e_hal_log_err("ioctl H264E_IOC_SET_OSDL_PLT failed ret %d", ret); - return MPP_NOK; - } - - return MPP_OK; -} - static h264e_hal_rkv_csp_info hal_h264e_rkv_convert_csp(RK_S32 src_type) { MppFrameFormat src_fmt = (MppFrameFormat)src_type; @@ -2636,7 +2616,7 @@ static MPP_RET hal_h264e_rkv_set_osd_plt(h264e_hal_context *ctx, void *param) h264e_hal_debug_enter(); if (plt->buf) { ctx->osd_plt_type = 0; - if (MPP_OK != hal_h264e_rkv_cfg_hardware(ctx->vpu_socket, H264E_IOC_SET_OSD_PLT, param)) { + if (MPP_OK != VPUClientSendReg2(ctx->vpu_socket, H264E_IOC_SET_OSD_PLT, sizeof(MppEncOSDPlt), param)) { h264e_hal_log_err("set osd plt error"); return MPP_NOK; } diff --git a/mpp/hal/worker/libvpu/vpu.c b/mpp/hal/worker/libvpu/vpu.c index 7b85f6ff..9bc94b32 100644 --- a/mpp/hal/worker/libvpu/vpu.c +++ b/mpp/hal/worker/libvpu/vpu.c @@ -28,11 +28,13 @@ #include "vpu.h" #define VPU_IOC_MAGIC 'l' + #define VPU_IOC_SET_CLIENT_TYPE _IOW(VPU_IOC_MAGIC, 1, unsigned long) #define VPU_IOC_GET_HW_FUSE_STATUS _IOW(VPU_IOC_MAGIC, 2, unsigned long) #define VPU_IOC_SET_REG _IOW(VPU_IOC_MAGIC, 3, unsigned long) #define VPU_IOC_GET_REG _IOW(VPU_IOC_MAGIC, 4, unsigned long) #define VPU_IOC_PROBE_IOMMU_STATUS _IOR(VPU_IOC_MAGIC, 5, unsigned long) +#define VPU_IOC_WRITE(nr, size) _IOC(_IOC_WRITE, VPU_IOC_MAGIC, (nr), (size)) typedef struct VPUReq { RK_U32 *req; @@ -140,6 +142,22 @@ RK_S32 VPUClientSendReg(int socket, RK_U32 *regs, RK_U32 nregs) return ret; } +RK_S32 VPUClientSendReg2(RK_S32 socket, RK_S32 offset, RK_S32 size, void *param) +{ + RK_S32 ret = 0; + + if (param == NULL) { + mpp_err_f("input param is NULL"); + return 1; + } + + ret = (RK_S32)ioctl(socket, VPU_IOC_WRITE(offset, size), param); + if (ret) + mpp_err_f("ioctl VPU_IOC_WRITE failed ret %d", ret); + + return ret; +} + RK_S32 VPUClientWaitResult(int socket, RK_U32 *regs, RK_U32 nregs, VPU_CMD_TYPE *cmd, RK_S32 *len) { VPU_SERVICE_TEST;