I have been trying to display some VC1 video decoded with the VPU using the IPU on an imx6q.
This works perfectly when I take the decoded video from the VPU, copy it into a userspace buffer, and then copy that into a buffer allocated by IPU_ALLOC. If I then setup a IPU task to do a colorspace conversion from YUV_420P to RGB32, and use the framebuffer as the physical output address, I get a nice picture displayed on screen with the correct colors.
Obviously this isn't very efficient with all those copies going on. So I decided to use the physical address of the VPU buffer as input physical address for the IPU. The IPU task is configured completely the same way as above, only the physical input address now points to the VPU buffer's physical address. According to several code examples I found, this should work. However, it doesn't, I get an image which is green. You can see the shape of things in the image, but all the color is green, so it looks like the Y plane is taken into account during the conversion but the U and V planes aren't. The fact that it is green, probably means that 0 is used as a default value for the U and V values.
This doesn't make any sense at all. If the IPU couldn't access the VPU buffer, then you would see nothing, but only the Y plane seems to be read from the VPU buffer.
Has anybody got an idea what I could be doing wrong ?