HermanChen/mpp

mpp连续解码Jpeg问题

Opened this issue · 7 comments

Hi,rk3399 linux平台使用最新版本的mpp进行jpeg解码输出yuv420sp格式的jpg文件,发现在连续解码时,头两帧都是正常输出,但是从第3帧开始开始出现异常打印错误,而且从第4帧开始输出的文件全部都是和第3帧的jpg输出文件一样,出错日志如下:
mpp[22973]: mpi_dec_test: mpi_dec_test_decode the 1 decode
mpp[22973]: mpi_dec_test: decode_advanced 0x5592c2c0a0 decoded frame 0
mpp[22973]: mpi_dec_test: mpi_dec_test_decode the 2 decode
mpp[22973]: mpi_dec_test: decode_advanced 0x5592c2c0a0 decoded frame 1
mpp[22973]: mpi_dec_test: mpi_dec_test_decode the 3 decode
mpp[22973]: mpi_dec_test: decode_advanced 0x5592c2c0a0 decoded frame 2
mpp[22973]: mpi_dec_test: mpi_dec_test_decode the 4 decode
mpp[22973]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_wait IRQ TIMEOUT!
mpp[22973]: mpi_dec_test: decode_advanced 0x5592c2c0a0 decoded frame 3
mpp[22973]: mpi_dec_test: mpi_dec_test_decode the 5 decode
mpp[22973]: HAL_JPEG_VDPU2: hal_jpegd_vdpu2_wait IRQ TIMEOUT!
mpp[22973]: mpi_dec_test: decode_advanced 0x5592c2c0a0 decoded frame 4
mpp[22973]: mpi_dec_test: mpi_dec_test_decode the final decode over

就是从第3帧开始,一旦出现打印HAL_JPEG_VDPU2: hal_jpegd_vdpu2_wait IRQ TIMEOUT!后,解码输出的文件就不对了,请问这个错误该怎么解决。

纠正一下,应该是从第4帧解码开始出现的错误打印

这个问题请问大概是什么原因造成的?

麻烦提供一下测试文件?

好的,就连续的解码这个jpg文件就可以了:
百度网盘链接:https://pan.baidu.com/s/1LbM2zQX4k95EYlIvIZvLoA
提取码:r4z0

为了测试连续解码,我把demo中的代码增加了几行:
在mpi_dec_test.c文件中的mpi_dec_test_decode()函数中大概第677行中的while (!data.eos)里面,新增了多次调用decode_advanced(),具体如下:
while (!data.eos) {
mpp_err_f("the 1 decode\n");
decode_advanced(&data);
fseek(data.fp_input, 0L, SEEK_END);
file_size = ftell(data.fp_input);
rewind(data.fp_input);
mpp_err_f("the 2 decode\n");
decode_advanced(&data);
fseek(data.fp_input, 0L, SEEK_END);
file_size = ftell(data.fp_input);
rewind(data.fp_input);
mpp_err_f("the 3 decode\n");
decode_advanced(&data);
fseek(data.fp_input, 0L, SEEK_END);
file_size = ftell(data.fp_input);
rewind(data.fp_input);
mpp_err_f("the 4 decode\n");
decode_advanced(&data);
fseek(data.fp_input, 0L, SEEK_END);
file_size = ftell(data.fp_input);
rewind(data.fp_input);
mpp_err_f("the 5 decode\n");
decode_advanced(&data);
mpp_err_f("the final decode over\n");
}

Hi:
你提供的百度网盘链接失效了,麻烦重新提供下

你好,Jpg文件新的百度网盘链接如下:

链接:https://pan.baidu.com/s/1Mpg0URLYLUwBa0c5WsYL1g
提取码:16lw

Hi:
提供下你本地最新mpp的版本信息?
另外,要测试连续解同一帧jpeg的话,请合入如下修改,再进一步测试下看看。

用以下命令测试(加入-n 参数 指定重复编多少帧):
mpi_dec_test -i t2020.jpg -w 2448 -h 2048 -t 8 -n 10 -o 2448x2048.yuv

diff --git a/test/mpi_dec_test.c b/test/mpi_dec_test.c
index f8c9557c..cd5f0d22 100644
--- a/test/mpi_dec_test.c
+++ b/test/mpi_dec_test.c
@@ -473,6 +473,14 @@ static int decode_advanced(MpiDecLoopData *data)
                 dump_mpp_frame_to_file(frame, data->fp_output);
 
             mpp_log("%p decoded frame %d\n", ctx, data->frame_count);
+
+            if (data->frame_num > 0 && data->frame_count < data->frame_num) {
+                data->eos = 0;
+                clearerr(data->fp_input);
+                rewind(data->fp_input);
+            }else{
+                data->eos = 1;
+            }
             data->frame_count++;
 
             if (mpp_frame_get_eos(frame_out))