HermanChen / mpp

Rockchip MPP(Media Process Platfrom)
172 stars 72 forks source link

RK3399 解码速度控制 #43

Open czcl opened 2 years ago

czcl commented 2 years ago

线程A 往mpp解码器送数据 调用函数 decode_put_packet(ffmpeg 拉流) 线程B 解码数据 调用函数 decode_get_frame 结果存放到std::list 中 线程C 正常从std::list 中读取并显示出来

显示正常,不丢帧,不报错,但是我想控制解码器的速度,有时候有用到解码后的数据做一些其他事情比较耗时 这样导致std::list 生产的快,消费的满,导致数据丢失,尝试在线程A中添加延时发现线程B mpp_frame_get_errinfo出错 尝试在B线程添加延时,发现线程A decode_put_packet 报错 MPP_ERR_BUFFER_FULL

请问如何控制mpp 解码的速度??

mpp.cpp 中的 Mpp::start(),Mpp::stop(),Mpp::pause(),Mpp::resume() 是空实现,请问这个是为了控制速度么,什么时候可以实现

谢谢

HermanChen commented 2 years ago

在 put_packet 失败的时候,说明解码已经来不及了,可以在失败之后 sleep 一下再送,这样可以控制速度了

czcl commented 2 years ago

你好当我看到的时候我会自动回复您

czcl commented 2 years ago

好的我尝试一下看看

czcl commented 2 years ago

经过尝试,发现依旧有跳帧问题(跳帧4秒左右)

使用最新的mpp代码,线程A 往mpp解码器送数据 调用函数 decode_put_packet(ffmpeg 拉流) 线程B 解码数据 调用函数 decode_get_frame 结果存放到std::list 中 线程C 正常从std::list 中读取并显示出来 正常显示有丢帧但是在允许范围之内,是因为主动丢帧 在线程B中使用sleep,来控制std::list 程序处理上没有发现队列满的情况,但是有跳帧问题(4秒作用),网络流正常的 请问mpp会自动丢帧么,在 decode_put_packet 和decode_get_frame 都不报错的情况下