Skip to content

Commit

Permalink
add new api
Browse files Browse the repository at this point in the history
  • Loading branch information
jiale-gdyd committed Oct 20, 2022
1 parent a2b2f48 commit 12df233
Show file tree
Hide file tree
Showing 15 changed files with 1,681 additions and 274 deletions.
34 changes: 34 additions & 0 deletions project/3rdparty/include/media/drm_media_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,17 +101,51 @@ int drm_mpi_vdec_create_channel(int channel, const drm_vdec_chn_attr_t *pstAttr)
int drm_mpi_venc_destroy_channel(int channel);
int drm_mpi_venc_create_channel(int channel, drm_venc_chn_attr_t *stVencChnAttr);

int drm_mpi_venc_create_jpeg_light_channel(int channel, drm_venc_chn_attr_t *stVencChnAttr);

int drm_mpi_venc_set_gop(int channel, uint32_t u32Gop);
int drm_mpi_venc_set_gop_mode(int channel, drm_venc_gop_attr_t *pstGopModeAttr);
int drm_mpi_venc_set_fps(int channel, uint8_t u8OutNum, uint8_t u8OutDen, uint8_t u8InNum, uint8_t u8InDen);
int drm_mpi_venc_set_bitrate(int channel, uint32_t u32BitRate, uint32_t u32MinBitRate, uint32_t u32MaxBitRate);
int drm_mpi_venc_set_avc_profile(int channel, uint32_t u32Profile, uint32_t u32Level);
int drm_mpi_venc_set_resolution(int channel, drm_venc_resolution_param_t stResolutionParam);
int drm_mpi_venc_set_rotation(int channel, drm_venc_rotation_e rotation_rate);
int drm_mpi_venc_set_rc_mode(int channel, drm_venc_rc_mode_e RcMode);
int drm_mpi_venc_set_rc_quality(int channel, drm_venc_rc_quality_e RcQuality);

int drm_mpi_venc_request_idr(int channel, bool bInstant);

int drm_mpi_venc_get_channel_attribute(int channel, drm_venc_chn_attr_t *stVencChnAttr);
int drm_mpi_venc_set_channel_attribute(int channel, drm_venc_chn_attr_t *stVencChnAttr);

int drm_mpi_venc_get_channel_parameter(int channel, drm_venc_chn_param_t *stVencChnParam);
int drm_mpi_venc_set_channel_parameter(int channel, drm_venc_chn_param_t *stVencChnParam);

int drm_mpi_venc_get_rc_parameter(int channel, drm_venc_rc_param_t *pstRcParam);
int drm_mpi_venc_set_rc_parameter(int channel, drm_venc_rc_param_t *pstRcParam);

int drm_mpi_venc_set_jpeg_parameter(int channel, drm_venc_jpeg_param_t *pstJpegParam);

int drm_mpi_venc_insert_userdata(int channel, uint8_t *pu8Data, uint32_t u32Len);

int drm_mpi_venc_get_roi_attribute(int channel, drm_venc_roi_attr_t *pstRoiAttr, int roi_index07);
int drm_mpi_venc_set_roi_attribute(int channel, const drm_venc_roi_attr_t *pstRoiAttr, int region_cnt);

int drm_mpi_venc_get_fd(int channel);
int drm_mpi_venc_query_status(int channel, drm_venc_chn_status_t *pstStatus);

int drm_mpi_venc_get_super_frame_strategy(int channel, drm_venc_superframe_cfg_t *pstSuperFrmParam);
int drm_mpi_venc_set_super_frame_strategy(int channel, const drm_venc_superframe_cfg_t *pstSuperFrmParam);

int drm_mpi_venc_start_recv_frame(int channel, const drm_recv_pic_param_t *pstRecvParam);

int drm_mpi_venc_region_init(int channel, drm_venc_color_tbl_t *stColorTbl);

int drm_mpi_venc_region_set_bitmap(int channel, const drm_osd_region_info_t *pstRgnInfo, const drm_bitmap_t *pstBitmap);
int drm_mpi_venc_region_set_cover(int channel, const drm_osd_region_info_t *pstRgnInfo, const drm_cover_info_t *pstCoverInfo);
int drm_mpi_venc_region_set_coverEx(int channel, const drm_osd_region_info_t *pstRgnInfo, const drm_cover_info_t *pstCoverInfo);
int drm_mpi_venc_region_set_palette_id(int channel, const drm_osd_region_info_t *pstRgnInfo, const drm_osd_color_palette_buf_t *pstColPalBuf);

#ifdef __cplusplus
}
#endif
Expand Down
4 changes: 2 additions & 2 deletions project/3rdparty/include/media/drm_media_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,12 +80,12 @@ typedef enum {
DRM_SAMPLE_FMT_NB
} DrmSampleFormat, drm_sample_format_e;

typedef struct rkSIZE_S {
typedef struct SIZE_S {
uint32_t u32Width;
uint32_t u32Height;
} drm_size_t;

typedef struct rkRECT_S {
typedef struct RECT_S {
int32_t s32X;
int32_t s32Y;
uint32_t u32Width;
Expand Down
2 changes: 1 addition & 1 deletion project/3rdparty/include/media/drm_media_vdec.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ typedef struct VDEC_ATTR_VIDEO_S {

} drm_video_vdec_attr_t;

typedef struct rkVDEC_CHN_ATTR_S {
typedef struct VDEC_CHN_ATTR_S {
drm_codec_type_e enCodecType;
drm_video_mode_e enMode;
drm_video_decodec_mode_e enDecodecMode;
Expand Down
1,306 changes: 1,260 additions & 46 deletions project/3rdparty/source/media/media/drm_media_api.cpp

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ typedef enum MotionLevel_e {
MOTION_LEVEL_UNKNOW_SCENE = 3,
} MotionLevel;

extern RK_S32 ctu_madp_cnt_thd[6][8];
extern RK_S32 madp_num_map[5][4];
//extern RK_S32 ctu_madp_cnt_thd[6][8];
//extern RK_S32 madp_num_map[5][4];

#endif
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
obj-y += hal_h264e_vepu541.o
obj-n += hal_h264e_vepu580_tune.o
obj-y += hal_h264e_vepu580_tune.o
obj-y += hal_h264e_vepu580.o
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#define MODULE_TAG "hal_h264e_vepu580"

#include <string.h>
#include <stdlib.h>

#include "../../../../osal/inc/mpp_env.h"
#include "../../../../osal/inc/mpp_mem.h"
Expand All @@ -36,77 +36,78 @@
#include "../common/vepu541_common.h"
#include "hal_h264e_vepu580_reg.h"
#include "../../../base/inc/mpp_enc_cb_param.h"

#define DUMP_REG 0
#define MAX_TASK_CNT 2

typedef struct HalH264eVepu580Ctx_t {
MppEncCfgSet *cfg;

MppDev dev;
RK_S32 frame_cnt;
RK_U32 task_cnt;

/* buffers management */
HalBufs hw_recn;
RK_S32 pixel_buf_fbc_hdr_size;
RK_S32 pixel_buf_fbc_bdy_size;
RK_S32 pixel_buf_size;
RK_S32 thumb_buf_size;
RK_S32 max_buf_cnt;
MppDevRegOffCfgs *offsets;

/* external line buffer over 4K */
MppBufferGroup ext_line_buf_grp;
MppBuffer ext_line_bufs[MAX_TASK_CNT];
RK_S32 ext_line_buf_size;

/* syntax for input from enc_impl */
RK_U32 updated;
H264eSps *sps;
H264ePps *pps;
H264eDpb *dpb;
H264eSlice *slice;
H264eFrmInfo *frms;
H264eReorderInfo *reorder;
H264eMarkingInfo *marking;
H264ePrefixNal *prefix;

/* syntax for output to enc_impl */
EncRcTaskInfo hal_rc_cfg;

/* roi */
void *roi_data;

/* osd */
Vepu541OsdCfg osd_cfg;

/* finetune */
void *tune;

/* two-pass deflicker */
MppBuffer buf_pass1;

/* register */
HalVepu580RegSet *regs_sets;

/* frame parallel info */
RK_S32 task_idx;
RK_S32 curr_idx;
RK_S32 prev_idx;
HalVepu580RegSet *regs_set;
MppBuffer ext_line_buf;

/* slice low delay output callback */
MppCbCtx *output_cb;
RK_S32 poll_slice_max;
RK_S32 poll_cfg_size;
MppDevPollCfg *poll_cfgs;
} HalH264eVepu580Ctx;

#define CHROMA_KLUT_TAB_SIZE (24 * sizeof(RK_U32))

static RK_U32 h264e_klut_weight[30] = {
#include "hal_h264e_vepu580_private.h"

// #define DUMP_REG 0
// #define MAX_TASK_CNT 2

// typedef struct HalH264eVepu580Ctx_t {
// MppEncCfgSet *cfg;

// MppDev dev;
// RK_S32 frame_cnt;
// RK_U32 task_cnt;

// /* buffers management */
// HalBufs hw_recn;
// RK_S32 pixel_buf_fbc_hdr_size;
// RK_S32 pixel_buf_fbc_bdy_size;
// RK_S32 pixel_buf_size;
// RK_S32 thumb_buf_size;
// RK_S32 max_buf_cnt;
// MppDevRegOffCfgs *offsets;

// /* external line buffer over 4K */
// MppBufferGroup ext_line_buf_grp;
// MppBuffer ext_line_bufs[MAX_TASK_CNT];
// RK_S32 ext_line_buf_size;

// /* syntax for input from enc_impl */
// RK_U32 updated;
// H264eSps *sps;
// H264ePps *pps;
// H264eDpb *dpb;
// H264eSlice *slice;
// H264eFrmInfo *frms;
// H264eReorderInfo *reorder;
// H264eMarkingInfo *marking;
// H264ePrefixNal *prefix;

// /* syntax for output to enc_impl */
// EncRcTaskInfo hal_rc_cfg;

// /* roi */
// void *roi_data;

// /* osd */
// Vepu541OsdCfg osd_cfg;

// /* finetune */
// void *tune;

// /* two-pass deflicker */
// MppBuffer buf_pass1;

// /* register */
// HalVepu580RegSet *regs_sets;

// /* frame parallel info */
// RK_S32 task_idx;
// RK_S32 curr_idx;
// RK_S32 prev_idx;
// HalVepu580RegSet *regs_set;
// MppBuffer ext_line_buf;

// /* slice low delay output callback */
// MppCbCtx *output_cb;
// RK_S32 poll_slice_max;
// RK_S32 poll_cfg_size;
// MppDevPollCfg *poll_cfgs;
// } HalH264eVepu580Ctx;

// #define CHROMA_KLUT_TAB_SIZE (24 * sizeof(RK_U32))

/*static*/ RK_U32 h264e_klut_weight[30] = {
0x0a000010, 0x00064000, 0x14000020, 0x000c8000,
0x28000040, 0x00194000, 0x50800080, 0x0032c000,
0xa1000100, 0x00658000, 0x42800200, 0x00cb0001,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
#ifndef __HAL_H264E_VEPU580_PRIVATE_H__
#define __HAL_H264E_VEPU580_PRIVATE_H__

#include <string.h>
#include <stdlib.h>

#include "../../../../osal/inc/mpp_env.h"
#include "../../../../osal/inc/mpp_mem.h"
#include "../../../../osal/inc/mpp_common.h"
#include "../../../base/inc/mpp_frame_impl.h"
#include "../../../base/inc/mpp_packet_impl.h"
#include "../../../codec/inc/mpp_rc.h"

#include "../../../codec/enc/h264/h264e_sps.h"
#include "../../../codec/enc/h264/h264e_pps.h"
#include "../../../codec/enc/h264/h264e_dpb.h"
#include "../../../codec/enc/h264/h264e_slice.h"

#include "../../common/h264/hal_h264e_debug.h"
#include "../../common/hal_bufs.h"
#include "../../inc/mpp_enc_hal.h"
#include "../common/vepu541_common.h"
#include "hal_h264e_vepu580_reg.h"
#include "../../../base/inc/mpp_enc_cb_param.h"

#define DUMP_REG 0
#define MAX_TASK_CNT 2

#define CHROMA_KLUT_TAB_SIZE (24 * sizeof(RK_U32))

typedef struct HalH264eVepu580Ctx_t {
MppEncCfgSet *cfg;

MppDev dev;
RK_S32 frame_cnt;
RK_U32 task_cnt;

/* buffers management */
HalBufs hw_recn;
RK_S32 pixel_buf_fbc_hdr_size;
RK_S32 pixel_buf_fbc_bdy_size;
RK_S32 pixel_buf_size;
RK_S32 thumb_buf_size;
RK_S32 max_buf_cnt;
MppDevRegOffCfgs *offsets;

/* external line buffer over 4K */
MppBufferGroup ext_line_buf_grp;
MppBuffer ext_line_bufs[MAX_TASK_CNT];
RK_S32 ext_line_buf_size;

/* syntax for input from enc_impl */
RK_U32 updated;
H264eSps *sps;
H264ePps *pps;
H264eDpb *dpb;
H264eSlice *slice;
H264eFrmInfo *frms;
H264eReorderInfo *reorder;
H264eMarkingInfo *marking;
H264ePrefixNal *prefix;

/* syntax for output to enc_impl */
EncRcTaskInfo hal_rc_cfg;

/* roi */
void *roi_data;

/* osd */
Vepu541OsdCfg osd_cfg;

/* finetune */
void *tune;

/* two-pass deflicker */
MppBuffer buf_pass1;

/* register */
HalVepu580RegSet *regs_sets;

/* frame parallel info */
RK_S32 task_idx;
RK_S32 curr_idx;
RK_S32 prev_idx;
HalVepu580RegSet *regs_set;
MppBuffer ext_line_buf;

/* slice low delay output callback */
MppCbCtx *output_cb;
RK_S32 poll_slice_max;
RK_S32 poll_cfg_size;
MppDevPollCfg *poll_cfgs;
} HalH264eVepu580Ctx;

extern RK_U32 h264e_klut_weight[30];

#endif
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#include "../common/vepu580_tune.h"
#include "hal_h264e_vepu580_private.h"

#define HAL_H264E_DBG_CONTENT (0x00000200)
#define hal_h264e_dbg_content(fmt, ...) hal_h264e_dbg_f(HAL_H264E_DBG_CONTENT, fmt, ## __VA_ARGS__)
Expand Down Expand Up @@ -47,7 +47,7 @@ typedef struct HalH264eVepu580Tune_t {

static RK_S32 mb_avg_madp_thd[6] = {192, 128, 64, 192, 128, 64};

RK_S32 ctu_madp_cnt_thd[6][8] = {
static RK_S32 ctu_madp_cnt_thd[6][8] = {
{50, 100, 130, 50, 100, 550, 500, 550},
{100, 150, 200, 80, 120, 500, 450, 550},
{150, 200, 250, 100, 150, 450, 400, 450},
Expand All @@ -56,7 +56,7 @@ RK_S32 ctu_madp_cnt_thd[6][8] = {
{150, 200, 250, 100, 150, 450, 400, 450}
};

RK_S32 madp_num_map[5][4] = {
static RK_S32 madp_num_map[5][4] = {
{0, 0, 0, 1},
{0, 0, 1, 0},
{0, 0, 1, 1},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
obj-y += hal_h265e_vepu541.o
obj-n += hal_h265e_vepu580_tune.o
obj-y += hal_h265e_vepu580_tune.o
obj-y += hal_h265e_vepu580.o
Loading

0 comments on commit 12df233

Please sign in to comment.