Hi,
I suppose vpu_IsBusy() simply return status and don't care which process is running.
RM p4966
VPU supports up to 4 decoding/encoding processes simultaneously. Each process can
have a different format. The host processor creates and executes the specified process by
sending parameters and commands to the BIT processor through the VPU API.
Is there any VPU APIs to confirm which process alive?
Can anyone help me?
Dear Guanqiong
vpu_EncOpen() or vpu_EncOpen() may receives a handle but inquery such as vpu_IsBusy() or vpu_WaitForInt() have no arguments. So it seems impossible to know which instance is busy.
According to the encode/decode flow in i.MX5x_Linux_VPU_API.pdf, interrupt signaling is allowed.
After setting the corresponding bit on completion interrupt enable register, active instance and other instances also wait for this interrupt.
(Q) How other instances can recognize which process of instance completed?
If "interrupt reason register" provide such status, could you describe more details?
(Refer to the p72: When an interrupt is signaled, the application checks the source of the interrupt by checking the value of interrupt reason register.)
(Q) Is there any transcode(encode+decode simultaneously) sample code? Could you provide it to me?
Thanks.
1) because vpu is developed by the third-party company, the internal register isn't open to us, and all of function, we include them in the vpu lib, and you also can refer to the vpu driver(mxc_vpu.c)
2) you can use unit test, like mxc_vpu_test.out -D "..."&mxc_vpu_test.out -E "..."
Refer to the Reference Manual,
Since VPU is a multiple instance codec, the application requires this kind of
handle. Once the application receives a handle, the application must pass the handle to all subsequent decoder-related
functions.When writing a VPU driver, this handle can be regard as a device-ID or a port-ID of the VPU for each task.
Since the VPU can only perform one picture processing task at a time, the application task should check if VPU is ready
before starting a new picture operation. An application can easily terminate a single task on VPU by calling a function for
closing a certain instance.
for every task, one can refer to the decoding flow or encoding flow in the VPU API reference manual.