[enc_v2]: Suppport user data set

User data set is for multiple user data with uuid.

Change-Id: Iad952961ab6242ff3a14f554410144bebd3801ba
Signed-off-by: sayon.chen <sayon.chen@rock-chips.com>
This commit is contained in:
sayon.chen
2020-10-21 11:48:22 +08:00
committed by Herman Chen
parent af5b4eb509
commit 5012336bc2
5 changed files with 84 additions and 21 deletions

View File

@@ -79,6 +79,7 @@ typedef enum MppMetaKey_e {
KEY_ROI_DATA = FOURCC_META('r', 'o', 'i', ' '), KEY_ROI_DATA = FOURCC_META('r', 'o', 'i', ' '),
KEY_OSD_DATA = FOURCC_META('o', 's', 'd', ' '), KEY_OSD_DATA = FOURCC_META('o', 's', 'd', ' '),
KEY_USER_DATA = FOURCC_META('u', 's', 'r', 'd'), KEY_USER_DATA = FOURCC_META('u', 's', 'r', 'd'),
KEY_USER_DATAS = FOURCC_META('u', 'r', 'd', 's'),
/* input motion list for smart p rate control */ /* input motion list for smart p rate control */
KEY_MV_LIST = FOURCC_META('m', 'v', 'l', 't'), KEY_MV_LIST = FOURCC_META('m', 'v', 'l', 't'),

View File

@@ -1101,4 +1101,15 @@ typedef struct MppEncUserData_t {
void *pdata; void *pdata;
} MppEncUserData; } MppEncUserData;
typedef struct MppEncUserDataFull_t {
RK_U32 len;
RK_U8 *uuid;
void *pdata;
} MppEncUserDataFull;
typedef struct MppEncUserDataSet_t {
RK_U32 count;
MppEncUserDataFull *datas;
} MppEncUserDataSet;
#endif /*__RK_VENC_CMD_H__*/ #endif /*__RK_VENC_CMD_H__*/

View File

@@ -46,6 +46,7 @@ static MppMetaDef meta_defs[] = {
{ KEY_ROI_DATA, TYPE_PTR, }, { KEY_ROI_DATA, TYPE_PTR, },
{ KEY_OSD_DATA, TYPE_PTR, }, { KEY_OSD_DATA, TYPE_PTR, },
{ KEY_USER_DATA, TYPE_PTR, }, { KEY_USER_DATA, TYPE_PTR, },
{ KEY_USER_DATAS, TYPE_PTR, },
{ KEY_MV_LIST, TYPE_PTR, }, { KEY_MV_LIST, TYPE_PTR, },
{ KEY_ENC_MARK_LTR, TYPE_S32, }, { KEY_ENC_MARK_LTR, TYPE_S32, },

View File

@@ -203,6 +203,11 @@ static RK_U8 uuid_usr_data[16] = {
0x85, 0xd9, 0xb2, 0xa2, 0x4f, 0xa1, 0x19, 0x5b, 0x85, 0xd9, 0xb2, 0xa2, 0x4f, 0xa1, 0x19, 0x5b,
}; };
static RK_U8 uuid_debug_info[16] = {
0x57, 0x68, 0x97, 0x80, 0xe7, 0x0c, 0x4b, 0x65,
0xa9, 0x06, 0xae, 0x29, 0x94, 0x11, 0xcd, 0x9a
};
static void reset_hal_enc_task(HalEncTask *task) static void reset_hal_enc_task(HalEncTask *task)
{ {
memset(task, 0, sizeof(*task)); memset(task, 0, sizeof(*task));
@@ -709,6 +714,47 @@ static void update_rc_cfg_log(MppEncImpl *impl, const char* fmt, ...)
va_end(args); va_end(args);
} }
static void update_user_datas(EncImpl impl, MppPacket packet, MppFrame frame, HalEncTask *hal_task)
{
MppMeta frm_meta = mpp_frame_get_meta(frame);
MppEncUserData *user_data = NULL;
MppEncUserDataSet *user_datas = NULL;
RK_S32 length = 0;
mpp_meta_get_ptr(frm_meta, KEY_USER_DATA, (void**)&user_data);
if (user_data) {
if (user_data->pdata && user_data->len) {
enc_impl_add_prefix(impl, packet, &length, uuid_usr_data,
user_data->pdata, user_data->len);
hal_task->sei_length += length;
hal_task->length += length;
} else
mpp_err_f("failed to insert user data %p len %d\n",
user_data->pdata, user_data->len);
}
mpp_meta_get_ptr(frm_meta, KEY_USER_DATAS, (void**)&user_datas);
if (user_datas && user_datas->count) {
RK_U32 i = 0;
for (i = 0; i < user_datas->count; i++) {
MppEncUserDataFull *user_data_v2 = &user_datas->datas[i];
if (user_data_v2->pdata && user_data_v2->len) {
if (user_data_v2->uuid)
enc_impl_add_prefix(impl, packet, &length, user_data_v2->uuid,
user_data_v2->pdata, user_data_v2->len);
else
enc_impl_add_prefix(impl, packet, &length, uuid_debug_info,
user_data_v2->pdata, user_data_v2->len);
hal_task->sei_length += length;
hal_task->length += length;
}
}
}
}
static void set_rc_cfg(RcCfg *cfg, MppEncCfgSet *cfg_set) static void set_rc_cfg(RcCfg *cfg, MppEncCfgSet *cfg_set)
{ {
MppEncRcCfg *rc = &cfg_set->rc; MppEncRcCfg *rc = &cfg_set->rc;
@@ -906,24 +952,7 @@ static MPP_RET mpp_enc_normal(Mpp *mpp, EncTask *task)
} }
if (mpp_frame_has_meta(frame)) { if (mpp_frame_has_meta(frame)) {
MppMeta frm_meta = mpp_frame_get_meta(frame); update_user_datas(impl, packet, frame, hal_task);
MppEncUserData *user_data = NULL;
mpp_meta_get_ptr(frm_meta, KEY_USER_DATA, (void**)&user_data);
if (user_data) {
if (user_data->pdata && user_data->len) {
RK_S32 length = 0;
enc_impl_add_prefix(impl, packet, &length, uuid_usr_data,
user_data->pdata, user_data->len);
hal_task->sei_length += length;
hal_task->length += length;
} else
mpp_err_f("failed to insert user data %p len %d\n",
user_data->pdata, user_data->len);
}
} }
// check for user data adding // check for user data adding

View File

@@ -470,8 +470,8 @@ MPP_RET test_mpp_enc_cfg_setup(MpiEncTestData *p)
} }
} }
mpp_env_get_u32("osd_enable", &p->user_data_enable, 0);
mpp_env_get_u32("roi_enable", &p->roi_enable, 0); mpp_env_get_u32("roi_enable", &p->roi_enable, 0);
mpp_env_get_u32("user_data_enable", &p->user_data_enable, 0);
RET: RET:
return ret; return ret;
@@ -599,6 +599,27 @@ MPP_RET test_mpp_run(MpiEncTestData *p)
user_data.len = strlen(str) + 1; user_data.len = strlen(str) + 1;
mpp_meta_set_ptr(meta, KEY_USER_DATA, &user_data); mpp_meta_set_ptr(meta, KEY_USER_DATA, &user_data);
} }
static RK_U8 uuid_debug_info[16] = {
0x57, 0x68, 0x97, 0x80, 0xe7, 0x0c, 0x4b, 0x65,
0xa9, 0x06, 0xae, 0x29, 0x94, 0x11, 0xcd, 0x9a
};
MppEncUserDataSet data_group;
MppEncUserDataFull datas[2];
char *str1 = "this is user data 1\n";
char *str2 = "this is user data 2\n";
data_group.count = 2;
datas[0].len = strlen(str1) + 1;
datas[0].pdata = str1;
datas[0].uuid = uuid_debug_info;
datas[1].len = strlen(str2) + 1;
datas[1].pdata = str2;
datas[1].uuid = uuid_debug_info;
data_group.datas = datas;
mpp_meta_set_ptr(meta, KEY_USER_DATAS, &data_group);
} }
if (p->osd_enable) { if (p->osd_enable) {