The Video Mixer supports two modes of operation, which require two different programming models.
- Auto Restart Mode (Default)
- The driver initialization routine configures the Video Mixer for auto restart mode. In
this mode, after the current frame is processed the core automatically triggers the start
of the next frame processing. Consequently, the core can keep on processing frames without
any software intervention, with settings applied when the core was started. This mode is
used when there is no need to make frame synchronous changes to the core registers. This
is the case if streaming layers are being used.
You can switch to Auto Restart Mode, at any time, by disabling the interrupts, using the
XVMix_InterruptDisable
API. - Interrupt Mode
- When using memory layers, frame synchronous changes to the layer memory buffer address
are key for the correct operation of the Video Mixer, that is, reading from memory needs
to be synchronized with writing to memory by for example a graphics engine. In this case,
the interrupt mode should be used. In this mode, the interrupt (IRQ) port of the core
needs to be connected to a system interrupt controller.
When an interrupt is triggered, the core interrupt service routine (ISR) checks to confirm if current frame processing is complete. It then calls a user programmable callback function, if a callback function has been registered. In the callback function, the register settings for the next frame should be programmed, that is, what layer buffer address a layer should read next from. Finally, the interrupt service routine triggers the core to start processing the next frame.
You can switch to Auto Restart
Mode, at any time, by disabling the interrupts, using the XVMix_InterruptDisable
API.
An application must perform the following tasks to configure the core for Interrupt mode.
- Register the core ISR routine
XVMix_InterruptHandler
with the system interrupt controller. - Register the application callback
function that should be called within the interrupt context. This
can be done using the API
XVMix_SetCallback
. - Enable the interrupts by calling provided API
XVMix_InterruptEnable
.