mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 17:16:50 +08:00
[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:
@@ -59,7 +59,9 @@ typedef struct {
|
|||||||
MppEncROICfg roi_cfg;
|
MppEncROICfg roi_cfg;
|
||||||
|
|
||||||
// input / output
|
// input / output
|
||||||
|
MppBufferGroup buf_grp;
|
||||||
MppBuffer frm_buf;
|
MppBuffer frm_buf;
|
||||||
|
MppBuffer pkt_buf;
|
||||||
MppEncSeiMode sei_mode;
|
MppEncSeiMode sei_mode;
|
||||||
MppEncHeaderMode header_mode;
|
MppEncHeaderMode header_mode;
|
||||||
MppBuffer osd_idx_buf;
|
MppBuffer osd_idx_buf;
|
||||||
@@ -714,6 +716,7 @@ MPP_RET test_mpp_run(MpiEncTestData *p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (!p->pkt_eos) {
|
while (!p->pkt_eos) {
|
||||||
|
MppMeta meta = NULL;
|
||||||
MppFrame frame = NULL;
|
MppFrame frame = NULL;
|
||||||
MppPacket packet = NULL;
|
MppPacket packet = NULL;
|
||||||
void *buf = mpp_buffer_get_ptr(p->frm_buf);
|
void *buf = mpp_buffer_get_ptr(p->frm_buf);
|
||||||
@@ -759,9 +762,13 @@ MPP_RET test_mpp_run(MpiEncTestData *p)
|
|||||||
else
|
else
|
||||||
mpp_frame_set_buffer(frame, p->frm_buf);
|
mpp_frame_set_buffer(frame, p->frm_buf);
|
||||||
|
|
||||||
if (p->osd_enable || p->user_data_enable || p->roi_enable) {
|
meta = mpp_frame_get_meta(frame);
|
||||||
MppMeta 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) {
|
if (p->user_data_enable) {
|
||||||
MppEncUserData user_data;
|
MppEncUserData user_data;
|
||||||
char *str = "this is user data\n";
|
char *str = "this is user data\n";
|
||||||
@@ -850,7 +857,7 @@ MPP_RET test_mpp_run(MpiEncTestData *p)
|
|||||||
p->frame_count, len);
|
p->frame_count, len);
|
||||||
|
|
||||||
if (mpp_packet_has_meta(packet)) {
|
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 temporal_id = 0;
|
||||||
RK_S32 lt_idx = -1;
|
RK_S32 lt_idx = -1;
|
||||||
|
|
||||||
@@ -902,13 +909,25 @@ int mpi_enc_test(MpiEncTestArgs *cmd)
|
|||||||
goto MPP_TEST_OUT;
|
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) {
|
if (ret) {
|
||||||
mpp_err_f("failed to get buffer for input frame ret %d\n", ret);
|
mpp_err_f("failed to get buffer for input frame ret %d\n", ret);
|
||||||
goto MPP_TEST_OUT;
|
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) {
|
if (ret) {
|
||||||
mpp_err_f("failed to get buffer for input osd index ret %d\n", ret);
|
mpp_err_f("failed to get buffer for input osd index ret %d\n", ret);
|
||||||
goto MPP_TEST_OUT;
|
goto MPP_TEST_OUT;
|
||||||
@@ -986,11 +1005,21 @@ MPP_TEST_OUT:
|
|||||||
p->frm_buf = NULL;
|
p->frm_buf = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (p->pkt_buf) {
|
||||||
|
mpp_buffer_put(p->pkt_buf);
|
||||||
|
p->pkt_buf = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (p->osd_idx_buf) {
|
if (p->osd_idx_buf) {
|
||||||
mpp_buffer_put(p->osd_idx_buf);
|
mpp_buffer_put(p->osd_idx_buf);
|
||||||
p->osd_idx_buf = NULL;
|
p->osd_idx_buf = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (p->buf_grp) {
|
||||||
|
mpp_buffer_group_put(p->buf_grp);
|
||||||
|
p->buf_grp = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
test_ctx_deinit(&p);
|
test_ctx_deinit(&p);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
Reference in New Issue
Block a user