vpudec does not like "queue(2)"

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

vpudec does not like "queue(2)"

跳至解决方案
3,147 次查看
christapp
Contributor I

This is best demonstrated using an example:

export GST_DEBUG="*:2"

1) gst-launch playbin2 uri=http://media.w3.org/2010/05/sintel/trailer.webm

2) gst-launch playbin2 uri=http://media.w3.org/2010/05/sintel/trailer.webm video-sink="multiqueue ! mfw_v4lsink"

3) gst-launch playbin2 uri=http://media.w3.org/2010/05/sintel/trailer.webm video-sink="queue ! mfw_v4lsink"

4) gst-launch playbin2 uri=http://media.w3.org/2010/05/sintel/trailer.webm video-sink="queue2 ! mfw_v4lsink"

Playback for 1) and 2) is good, where as playback for 3) and 4) starts of choppy, stalls and gets lots of messages of the form:

0:00:00.472157023  7566 0x40d60150 WARN    vpudec vpudec.c:1578:gst_vpudec_chain: Got no frame buffer message, return 0x89, 10 frames in displaying queue!!

GST_DEBUG=GST_ELEMENT_FACTORY:3 shows that playbin2 without the video-sink property uses 'multiqueue'.

So, it looks as if something is going on with 'vpudec' when the pipeline includes a 'queue' or 'queue2' element.


This was running on a Wandboard Quad using an image built using Yocto.


Can anyone explain what's going on here?

标记 (3)
0 项奖励
回复
1 解答
1,910 次查看
jack_mao
NXP Employee
NXP Employee

hi,

  • 1) and 2) is same as 1) will also add multiqueue element between VPU dec and V4lsink.
  • 3) and 4) will add two queue between VPU dec and V4lsink. The pipeline is VPU dec->multiqueue->queue->V4lsink.
  • Multiqueue will hold 3 buffer in it.
  • V4lsink need hold 2 buffer in it.
  • VPU dec default plus 6 frame buffer.

  So if add one queue between VPU dec and V4lsink will cause not enough frame buffer to run. So you command should be video-sink="queue max-size-buffers=1 max-size-bytes=0 max-size-time=0 ! mfw_v4lsink"

在原帖中查看解决方案

0 项奖励
回复
5 回复数
1,911 次查看
jack_mao
NXP Employee
NXP Employee

hi,

  • 1) and 2) is same as 1) will also add multiqueue element between VPU dec and V4lsink.
  • 3) and 4) will add two queue between VPU dec and V4lsink. The pipeline is VPU dec->multiqueue->queue->V4lsink.
  • Multiqueue will hold 3 buffer in it.
  • V4lsink need hold 2 buffer in it.
  • VPU dec default plus 6 frame buffer.

  So if add one queue between VPU dec and V4lsink will cause not enough frame buffer to run. So you command should be video-sink="queue max-size-buffers=1 max-size-bytes=0 max-size-time=0 ! mfw_v4lsink"

0 项奖励
回复
1,911 次查看
christapp
Contributor I

Hi,

Thanks, that's sorted it :smileyhappy:

Could you please explain why there is a hard limit on the number of buffers in the pipeline? I thought that the limits were set by the elements and that it was this which set the limit in the pipeline.

0 项奖励
回复
1,911 次查看
jack_mao
NXP Employee
NXP Employee

the vpu buffers number can be set ,it should be in the VPU plugin, the default is 6, you could adjust it .

frame-plus          : set number of addtional frames for smoothly playback

                        flags: readable, writable

                        Integer. Range: 2 - 2147483647 Default: 6

0 项奖励
回复
1,911 次查看
LeonardoSandova
Specialist I

Another thread similar to this issue is https://community.freescale.com/message/339660

Leo

0 项奖励
回复
1,911 次查看
christapp
Contributor I

Yes, it could well be related. The steps I've given above are repeatable without the 'random' behavior mentioned on the other issue, but it does also seem to be related to buffers.

0 项奖励
回复