该算法实现为逐像素复制函数,它读取每个输入通道并将其写入相应的输出通道。该算法期望输入和输出图像平面大小匹配,即,它不会进行色度上/下采样。此外,该算法不会在输入和输出格式之间进行任何颜色或像素范围转换。但是,它会进行整数值和浮点值之间的转换。下溢和溢出按照 C 语言对此类类型转换的规则进行处理。有关图像格式转换(包括正确的颜色转换),请参阅 转换图像格式。
运行混合通道算法。每个输入通道 (RGB) 都映射到 3 个输出图像中对应的通道,即,第一个图像的 R 通道接收输入的 R 通道,第二个图像的 G 通道接收输入的 G 通道,依此类推。其他输出通道保持不变,并保持其原始内容,在本例中,全部为零。结果是 3 个彩色图像,分别显示输入图像的红色、绿色和蓝色通道。
初始化输入和输出映射数组,以便将每个输入通道 (RGB) 映射到 3 个输出图像中对应的通道,即,第一个图像的 R 通道接收输入的 R 通道,第二个图像的 G 通道接收输入的 G 通道,依此类推。其他输出通道保持不变,并保持其原始内容,在本例中,全部为零。结果是 3 个彩色图像,分别显示输入图像的红色、绿色和蓝色通道。
int mappingIn[3] = {0, 1, 2};
int mappingOut[3] = {0, 4, 8};
将算法及其参数提交到流。它将由 CPU 后端执行。在此示例中,有一个输入图像、三个输出图像和 3 个通道的映射。
VPIStatus vpiSubmitMixChannels(VPIStream stream, uint64_t backend, VPIImage *inputs, int numInputs, VPIImage *outputs, int numOutputs, const int *inMapping, const int *outMapping, int numMapping)