[mpi_enc_test]: Change encoder demo to zero-copy

NOTE: It is important to clear output packet length to zero.
Or set packet pos and length to required valid value.

Change-Id: I8ddea1ee3c198bbd17381618b82ec5efab1d366e
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
This commit is contained in:
Herman Chen
2020-09-03 15:03:47 +08:00
parent 7530a91324
commit fecdc20b7a

View File

@@ -59,7 +59,9 @@ typedef struct {
MppEncROICfg roi_cfg;
// input / output
MppBufferGroup buf_grp;
MppBuffer frm_buf;
MppBuffer pkt_buf;
MppEncSeiMode sei_mode;
MppEncHeaderMode header_mode;
MppBuffer osd_idx_buf;
@@ -714,6 +716,7 @@ MPP_RET test_mpp_run(MpiEncTestData *p)
}
while (!p->pkt_eos) {
MppMeta meta = NULL;
MppFrame frame = NULL;
MppPacket packet = NULL;
void *buf = mpp_buffer_get_ptr(p->frm_buf);
@@ -759,9 +762,13 @@ MPP_RET test_mpp_run(MpiEncTestData *p)
else
mpp_frame_set_buffer(frame, p->frm_buf);
if (p->osd_enable || p->user_data_enable || p->roi_enable) {
MppMeta meta = mpp_frame_get_meta(frame);
meta = mpp_frame_get_meta(frame);
mpp_packet_init_with_buffer(&packet, p->pkt_buf);
/* NOTE: It is important to clear output packet length!! */
mpp_packet_set_length(packet, 0);
mpp_meta_set_packet(meta, KEY_OUTPUT_PACKET, packet);
if (p->osd_enable || p->user_data_enable || p->roi_enable) {
if (p->user_data_enable) {
MppEncUserData user_data;
char *str = "this is user data\n";
@@ -850,7 +857,7 @@ MPP_RET test_mpp_run(MpiEncTestData *p)
p->frame_count, len);
if (mpp_packet_has_meta(packet)) {
MppMeta meta = mpp_packet_get_meta(packet);
meta = mpp_packet_get_meta(packet);
RK_S32 temporal_id = 0;
RK_S32 lt_idx = -1;
@@ -902,13 +909,25 @@ int mpi_enc_test(MpiEncTestArgs *cmd)
goto MPP_TEST_OUT;
}
ret = mpp_buffer_get(NULL, &p->frm_buf, p->frame_size + p->header_size);
ret = mpp_buffer_group_get_internal(&p->buf_grp, MPP_BUFFER_TYPE_DRM);
if (ret) {
mpp_err_f("failed to get mpp buffer group ret %d\n", ret);
goto MPP_TEST_OUT;
}
ret = mpp_buffer_get(p->buf_grp, &p->frm_buf, p->frame_size + p->header_size);
if (ret) {
mpp_err_f("failed to get buffer for input frame ret %d\n", ret);
goto MPP_TEST_OUT;
}
ret = mpp_buffer_get(NULL, &p->osd_idx_buf, p->osd_idx_size);
ret = mpp_buffer_get(p->buf_grp, &p->pkt_buf, p->frame_size);
if (ret) {
mpp_err_f("failed to get buffer for output packet ret %d\n", ret);
goto MPP_TEST_OUT;
}
ret = mpp_buffer_get(p->buf_grp, &p->osd_idx_buf, p->osd_idx_size);
if (ret) {
mpp_err_f("failed to get buffer for input osd index ret %d\n", ret);
goto MPP_TEST_OUT;
@@ -986,11 +1005,21 @@ MPP_TEST_OUT:
p->frm_buf = NULL;
}
if (p->pkt_buf) {
mpp_buffer_put(p->pkt_buf);
p->pkt_buf = NULL;
}
if (p->osd_idx_buf) {
mpp_buffer_put(p->osd_idx_buf);
p->osd_idx_buf = NULL;
}
if (p->buf_grp) {
mpp_buffer_group_put(p->buf_grp);
p->buf_grp = NULL;
}
test_ctx_deinit(&p);
return ret;