Toybrick
标题:
PX30 MJPEG视频硬解问题
[打印本页]
作者:
ah911017
时间:
2024-8-7 11:37
标题:
PX30 MJPEG视频硬解问题
PX30板子是否支持decode_put_packet + decode_get_frame的简单方式去解码MJPEG视频流?
还是如RK3399一样,必须使用advanced的dequeue+enqueue+poll的方式处理?
作者:
ah911017
时间:
2024-8-7 14:31
已在redmine上发帖找到答案,jpeg与非jpeg解码方式不同
作者:
jefferyzhang
时间:
2024-8-7 14:35
jpeg只支持q/dq的方式,他其实是不同的IP核
作者:
ah911017
时间:
2024-8-8 11:02
jefferyzhang 发表于 2024-8-7 14:35
jpeg只支持q/dq的方式,他其实是不同的IP核
我把这种高级的 方式改成2个线程,发现poll不到解出的数据,伪代码如下:
mpp_buffer_get(NULL, &frm_buf, length)
mpp_frame_set_buffer(
frame
, frm_buf)
mpp_create(&ctx, &mpi);
mpp_init(ctx, MPP_CTX_DEC, MPP_VIDEO_CodingMJPEG)
mpp_dec_cfg_init(&cfg)
mpi->control(ctx, MPP_DEC_GET_CFG, cfg)
MppFrameFormat frame_fmt = MPP_FRAME_FMT_RGB;
mpi->control(ctx, MPP_DEC_SET_OUTPUT_FORMAT, &frame_fmt);
解码线程input_thread:
mpp_buffer_get(NULL, &frm_in_buf, length);
memcpy(mpp_buffer_get_ptr(frm_in_buf), jpeg_stream_buf, stream_buf_len);
mpp_packet_init_with_buffer(&packet, frm_in_buf);
mpi->poll(ctx, MPP_PORT_INPUT, MPP_POLL_NON_BLOCK);
mpi->dequeue(ctx, MPP_PORT_INPUT, &task);
mpp_task_meta_set_packet(task, KEY_INPUT_PACKET, packet);
mpp_task_meta_set_frame(task, KEY_OUTPUT_FRAME,
frame
);
mpi->enqueue(ctx, MPP_PORT_INPUT, task);
获取解码图片线程out_thread
mpi->poll(ctx, MPP_PORT_OUTPUT, MPP_POLL_NON_BLOCK);
mpi->dequeue(ctx, MPP_PORT_OUTPUT, &task);
if (task) {
mpp_task_meta_get_frame(task, KEY_OUTPUT_FRAME, &frame_out);
frame
送给rag模块缩放旋转等,再拷贝内存送至上次UI显示
}
其中
frame
始终是同一块MppBuffer
作者:
jefferyzhang
时间:
2024-8-8 11:20
请自行参考mpp/test下的sample来写
欢迎光临 Toybrick (https://t.rock-chips.com/)
Powered by Discuz! X3.3