|
本帖最后由 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,
|
|