cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Highlighted
618 Views
Registered: ‎07-18-2019

ZCU104 - Video Mixer - Layer 1 Memory-Mapped not displaying GUI written to Buffer Address

Jump to solution

I'm using a ZCU104 Dev Kit. This is a different and independent issue that the one I previously posted

I modified the HDMI Rx/Tx Example to include a Video Mixer IP Block placed in-between the v_tpg_ss_0 Block and the tx_video_axis_reg_slice Block. The Video Mixer is set up for a streamed master layer and one additional memory-mapped layer, and an AXI Interconnect Block connects m_axi_mm_video1 to the Ultrascale+ Processor Block. Everything synthesizes and implements without issue.

I've modified xhdmi_example.h and xhdmi_example.c to include initialization and configuration of the Video Mixer. I've also written a static test GUI that is just a pattern in black and white with the values written in RGBX (0x00BBGGRR) format. I use memcpy() to write the GUI to the Layer 1 Buffer Address and have confirmed that it is writing to that memory location. However, when running the program, the Layer 1 Block is either all gray or has some color banding -- it is not representative of what I've written to memory.

I'm trying to figure out what I'm doing wrong or if the layer is pointing to the wrong location.

Tags (3)
0 Kudos
1 Solution

Accepted Solutions
Highlighted
385 Views
Registered: ‎07-18-2019

Found the solution!

Everything was writing to the right memory locations as expected. I needed to change the XVMix_SetLayerWindow() stride parameter for Layer 1 to be 512 -- the window is 128x256, and I originally set the stride to 0, but setting it to 512 displayed the window perfectly.

View solution in original post

4 Replies
Highlighted
Moderator
Moderator
527 Views
Registered: ‎11-09-2015

Hi a.j.czubak@briteseed.com 

Maybe you are writting to the cache memory but the Video Mixer is not.

I would try to make sure the cache is disabled when you write the pattern in the memory.

This is something I have covered in my Video Series 26: Examples of advanced uses of the AXI VDMA IP (refer to example 2 and example 3)


Florent
Product Application Engineer - Xilinx Technical Support EMEA
**~ Don't forget to reply, give kudos, and accept as solution.~**
Highlighted
516 Views
Registered: ‎07-18-2019
I added the two lines to disable and re-enable the cache, and now I'm one major step closer to closing this issue out. What I'm currently seeing now is that instead of a specific image that I set up in the overlay_gui.c file, what I'm seeing is the first line of that file repeated over all lines. I debugged by changing just the first four values of the array in overlay_gui.c, and sure enough, instead of just changing the first four pixels, it's changing the first four columns.

I did some additional debugging to check other memory locations before re-enabling the cache to see if the values I intended are writing to the correct locations, and they are. So now I need to figure out why only the first line repeated is displaying and not the full array that I have set up.
0 Kudos
Highlighted
Moderator
Moderator
485 Views
Registered: ‎11-09-2015

HI a.j.czubak@briteseed.com 

I would recommend you to use XSCT (use mrd <address>) tool and read into the memory to see what it the content there

 


Florent
Product Application Engineer - Xilinx Technical Support EMEA
**~ Don't forget to reply, give kudos, and accept as solution.~**
0 Kudos
Highlighted
386 Views
Registered: ‎07-18-2019

Found the solution!

Everything was writing to the right memory locations as expected. I needed to change the XVMix_SetLayerWindow() stride parameter for Layer 1 to be 512 -- the window is 128x256, and I originally set the stride to 0, but setting it to 512 displayed the window perfectly.

View solution in original post