mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-04 08:46:24 +08:00
[test]: modify mpi_dec_test for mjpeg decoding
1. clear input packet length when packet is copied 2. modify mjpeg advanced decoding path in mpi_dec_test 3. add numerator and denominator set prop function 4. remove extra log on first info change 5. fix eos process and buffer size check in advanced decoding flow 6. fix jpegd stream length config error Change-Id: Id6c26ebda090eb4076f27deaad4d61b4221f2653 Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
This commit is contained in:
@@ -153,6 +153,7 @@ int mpi_dec_test_decode_simple(MpiDecTestCmd *cmd)
|
||||
mpp_packet_write(packet, 0, buf, read_size);
|
||||
// reset pos
|
||||
mpp_packet_set_pos(packet, buf);
|
||||
mpp_packet_set_length(packet, read_size);
|
||||
// setup eos flag
|
||||
if (pkt_eos)
|
||||
mpp_packet_set_eos(packet);
|
||||
@@ -239,11 +240,6 @@ MPP_TEST_OUT:
|
||||
fp_input = NULL;
|
||||
}
|
||||
|
||||
if (MPP_OK == ret)
|
||||
mpp_log("mpi_dec_test success\n");
|
||||
else
|
||||
mpp_err("mpi_dec_test failed ret %d\n", ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -276,9 +272,9 @@ int mpi_dec_test_decode_advanced(MpiDecTestCmd *cmd)
|
||||
MppBuffer frm_buf = NULL;
|
||||
size_t packet_size = MPI_DEC_STREAM_SIZE;
|
||||
size_t read_size = 0;
|
||||
size_t file_size = 0;
|
||||
RK_U32 frame_count = 0;
|
||||
void *buf = NULL;
|
||||
(void)read_size;
|
||||
|
||||
MppBufferGroup frm_grp = NULL;
|
||||
MppBufferGroup pkt_grp = NULL;
|
||||
@@ -291,6 +287,12 @@ int mpi_dec_test_decode_advanced(MpiDecTestCmd *cmd)
|
||||
mpp_err("failed to open input file %s\n", cmd->file_input);
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
// get file size for MJPEG
|
||||
fseek(fp_input, 0L, SEEK_END);
|
||||
file_size = ftell(fp_input);
|
||||
rewind(fp_input);
|
||||
mpp_log("input file size %ld\n", file_size);
|
||||
}
|
||||
|
||||
if (cmd->have_output) {
|
||||
@@ -313,10 +315,6 @@ int mpi_dec_test_decode_advanced(MpiDecTestCmd *cmd)
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
fseek(fp_input, 0L, SEEK_END);
|
||||
packet_size = ftell(fp_input);
|
||||
fseek(fp_input, 0L, SEEK_SET);
|
||||
|
||||
RK_U32 frm_size = width * height * 3 / 2;
|
||||
ret = mpp_frame_init(&frame); /* output frame */
|
||||
if (MPP_OK != ret) {
|
||||
@@ -330,6 +328,11 @@ int mpi_dec_test_decode_advanced(MpiDecTestCmd *cmd)
|
||||
goto MPP_TEST_OUT;
|
||||
}
|
||||
|
||||
// NOTE: for mjpeg decoding send the whole file
|
||||
if (type == MPP_VIDEO_CodingMJPEG) {
|
||||
packet_size = file_size;
|
||||
}
|
||||
|
||||
ret = mpp_buffer_get(pkt_grp, &pkt_buf, packet_size);
|
||||
if (ret) {
|
||||
mpp_err("failed to get buffer for input frame ret %d\n", ret);
|
||||
@@ -366,11 +369,17 @@ int mpi_dec_test_decode_advanced(MpiDecTestCmd *cmd)
|
||||
while (!pkt_eos) {
|
||||
MppTask task = NULL;
|
||||
read_size = fread(buf, 1, packet_size, fp_input);
|
||||
/* if (read_size != packet_size || feof(fp_input)) {
|
||||
if (read_size != packet_size || feof(fp_input)) {
|
||||
mpp_log("found last packet\n");
|
||||
pkt_eos = 1;
|
||||
}*/
|
||||
pkt_eos = 1;
|
||||
}
|
||||
|
||||
// reset pos
|
||||
mpp_packet_set_pos(packet, buf);
|
||||
mpp_packet_set_length(packet, read_size);
|
||||
// setup eos flag
|
||||
if (pkt_eos)
|
||||
mpp_packet_set_eos(packet);
|
||||
|
||||
do {
|
||||
ret = mpi->dequeue(ctx, MPP_PORT_INPUT, &task); /* input queue */
|
||||
@@ -410,15 +419,22 @@ int mpi_dec_test_decode_advanced(MpiDecTestCmd *cmd)
|
||||
mpp_task_meta_get_frame(task, KEY_OUTPUT_FRAME, &frame_out);
|
||||
//mpp_assert(packet_out == packet);
|
||||
|
||||
if (frame) { /* write frame to file here */
|
||||
MppBuffer buf_out = mpp_frame_get_buffer(frame_out);
|
||||
void *ptr = mpp_buffer_get_ptr(buf_out);
|
||||
size_t len = mpp_buffer_get_size(buf_out);
|
||||
if (frame) {
|
||||
/* write frame to file here */
|
||||
MppBuffer buf_out = mpp_frame_get_buffer(frame_out);
|
||||
|
||||
if (fp_output)
|
||||
fwrite(ptr, 1, len, fp_output);
|
||||
if (buf_out) {
|
||||
void *ptr = mpp_buffer_get_ptr(buf_out);
|
||||
size_t len = mpp_buffer_get_size(buf_out);
|
||||
|
||||
mpp_log_f("decoded frame %d size %d\n", frame_count, len);
|
||||
if (fp_output)
|
||||
fwrite(ptr, 1, len, fp_output);
|
||||
|
||||
mpp_log("decoded frame %d size %d\n", frame_count, len);
|
||||
}
|
||||
|
||||
if (mpp_frame_get_eos(frame_out))
|
||||
mpp_log("found eos frame\n");
|
||||
}
|
||||
|
||||
ret = mpi->enqueue(ctx, MPP_PORT_OUTPUT, task); /* output queue */
|
||||
@@ -453,13 +469,13 @@ MPP_TEST_OUT:
|
||||
ctx = NULL;
|
||||
}
|
||||
|
||||
if (buf) {
|
||||
mpp_free(buf);
|
||||
buf = NULL;
|
||||
if (pkt_buf) {
|
||||
mpp_buffer_put(pkt_buf);
|
||||
pkt_buf = NULL;
|
||||
}
|
||||
|
||||
if (frm_buf) {
|
||||
mpp_free(frm_buf);
|
||||
mpp_buffer_put(frm_buf);
|
||||
frm_buf = NULL;
|
||||
}
|
||||
|
||||
@@ -473,11 +489,6 @@ MPP_TEST_OUT:
|
||||
fp_input = NULL;
|
||||
}
|
||||
|
||||
if (MPP_OK == ret)
|
||||
mpp_log_f("success\n");
|
||||
else
|
||||
mpp_err_f("failed ret %d\n", ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -628,11 +639,16 @@ int main(int argc, char **argv)
|
||||
mpp_env_set_u32("mpi_debug", cmd->debug);
|
||||
|
||||
if (cmd->type != MPP_VIDEO_CodingMJPEG) {
|
||||
mpi_dec_test_decode_simple(cmd);
|
||||
ret = mpi_dec_test_decode_simple(cmd);
|
||||
} else {
|
||||
mpi_dec_test_decode_advanced(cmd);
|
||||
ret = mpi_dec_test_decode_advanced(cmd);
|
||||
}
|
||||
|
||||
if (MPP_OK == ret)
|
||||
mpp_log("test success\n");
|
||||
else
|
||||
mpp_err("test failed ret %d\n", ret);
|
||||
|
||||
mpp_env_set_u32("mpi_debug", 0x0);
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user