|
地板
楼主 |
发表于 2024-8-8 11:02:22
|
只看该作者
我把这种高级的 方式改成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
|
|