mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 17:16:50 +08:00
[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:
@@ -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'),
|
||||||
|
@@ -1097,8 +1097,19 @@ typedef struct MppEncOSDData_t {
|
|||||||
} MppEncOSDData;
|
} MppEncOSDData;
|
||||||
|
|
||||||
typedef struct MppEncUserData_t {
|
typedef struct MppEncUserData_t {
|
||||||
RK_U32 len;
|
RK_U32 len;
|
||||||
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__*/
|
||||||
|
@@ -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, },
|
||||||
|
@@ -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
|
||||||
|
@@ -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) {
|
||||||
|
Reference in New Issue
Block a user