I am using raw data API for receiving video of remote participants and sending video of the local participant.
When sending video with ZoomSDKRawDataSender I noticed unusually high CPU usage by zlt.framework
I also noticed that CPU usage of zlt.framework increases when remote users make my camera bigger (for example by pinning it) in their desktop Zoom client, and decreases when they make the camera smaller (unpinning)
It looks like zlt.framework performs a decoding/encoding for Zoom SDK and probably we use it in a wrong way, maybe not passing some expected flag or passing video frames in a wrong format, causing zlt.framework to do additional post-processing.
Could you please advice what options and what format of video frames should we use with ZoomSDK to optimize performance?
Some additional information about formats and options that I used in converting step:
Frame info - height: 1080, width: 1920, rowBytes: 7680;
originalBuffer
- initial CVPixelBuffer;
permuteMap
- [3, 2, 1, 0];
outInfo
- vImage_ARGBToYpCbCr
object filed by vImageConvert_ARGBToYpCbCr_GenerateConversion
(code snippet below):
var conversionError = vImageConvert_ARGBToYpCbCr_GenerateConversion(
kvImage_ARGBToYpCbCrMatrix_ITU_R_601_4,
&pixelRange,
&outInfo,
kvImageARGB8888,
kvImage420Yp8_Cb8_Cr8,
vImage_Flags(kvImageNoFlags)
)
Finally original CVPixelBuffer
converts using vImageConvert_ARGB8888To420Yp8_Cb8_Cr8
(code snippet below):
var conversionError = vImageConvert_ARGB8888To420Yp8_Cb8_Cr8(
&originalBuffer,
&destYp,
&destCb,
&destCr,
&outInfo,
permuteMap,
vImage_Flags(kvImageNoFlags)
)
Than destYp
, destCb
, destCr
concat in one UnsafeMutablePointer<CChar>
to be sent using ZoomSDKRawDataSender
.
Thank you!