Toybrick

标题: MPP多线程解码yuv数据异常问题 [打印本页]

作者: ah911017    时间: 2024-7-31 15:29
标题: MPP多线程解码yuv数据异常问题
本帖最后由 ah911017 于 2024-7-31 16:50 编辑

仿照mpp解码test demo,一个线程不断的输入H264 stream送给解码器,另外一个线程不断的取出解码后的YUV图片(后续作YUV转rgb图片送给显示屏)

发现解出来的yuv图片是同一帧的图像,还有很多是全屏蓝色。
有2个问题:
1、下面的解码流程是否哪里有异常?
2、p_temp_buff是原始H264码流,每一帧都是一副图,但是所有帧公用一块内存地址,使用完之后memset 0再存放新的图片帧,是不是这个内存使用不合理?


以下伪代码:
main函数初始化解码器跟packet
mpp_create
mpp_int
mpp_packet_init(&packet, NULL, 0)
保存packet到全局变量,用户多次的decode_put_packet

送码流线程thread input
每次一帧H264图片过来,执行
mpp_packet_set_data(packet, stream->p_temp_buff);
mpp_packet_set_size(packet, stream->buf_len);
mpp_packet_set_pos(packet, stream->p_temp_buff);
mpp_packet_set_length(packet, stream->buf_len);
mpp_packet_set_eos(packet);

mpi->decode_put_packet(ctx, packet);

取解码图片线程 thread  output
轮询获取解码后的的frame
mpi->decode_get_frame(ctx, &mpp_frame);
if(mpp_frame){
        dump_mpp_frame_to_file  保存yuv文件,用于验证解出来的图片
}


解码结束,mpi->reset(ctx),mpp_destroy(ctx); 释放packet,

作者: ah911017    时间: 2024-8-1 18:01
已解决.




欢迎光临 Toybrick (https://t.rock-chips.com/) Powered by Discuz! X3.3