Enable/Disable dmaproxy Module
dmaproxy is a loaded module and there is no gstreamer parameter to control this. In the PetaLinux BSP, it is auto-loaded on bootup and therefore, omxh264enc/omxh265enc uses dmaproxy. If you want to remove the dmaproxy functionality, use rmmod dmaproxy.
The encoder OMX component uses dmaproxy APIs for data transfer while reconstructing the complete encoded output frame. The dmaproxy internally uses Xilinx ZDMA APIs via the standard Linux kernel DMA framework for data transfer.
If dmaproxy is not loaded, then the encoder OMX component uses a CPU copy during the reconstruction of complete encoded o/p frame.
Multi-stream Support in dmaproxy Module
dmaproxy uses zynqmp-dma channels. So, the number of multi-stream supported by dmaproxy depends on the available free zynqmp-dma channel in that design/build. Usually 8/16 zynqmp-dma channels are available in ZCU106.
Further Optimization with dmaproxy Usage
By default, all interrupts are served by cpu0 so that dmaproxy is used in the most optimized way (mostly in multi-stream use cases). It is recommended that you distribute zynqmp-dma interrupts across all CPUs. To do so, follow these steps:
- Find the zynqmp-dma interrupt used by dmaproxy in cat /proc/interrupts.
- Change its affinity value to move it to a different CPU code.
echo X > /proc/irq/<irq number>/smp_affinity