Blend

该示例演示 PPE 的渲染功能。

环境需求

该示例的环境需求,可参考 环境需求

硬件连线

在此示例工程的演示中,无需进行额外的物理连线。

配置选项

可以通过调整以下参数来变更渲染结果:

透明度遮罩

透明度遮罩的开闭和强弱可以通过输入图片结构体中的如下参数进行调整:

source.global_alpha_en = 0;  /* 0: Disable alpha mask, 1: Enable alpha mask */
source.global_alpha = 0xFF;  /* Value from 0 to 255 */

颜色键值

用于过滤的颜色键值的开闭和键值可以通过输入图片结构体中的如下参数进行调整:

source.color_key_en = 0;    /* 0: Disable color key, 1: Enable color key */
source.color_key_value = 0; /* Key value to be filtered */

坐标平移

平移量在 ppe_translate_t 类型的变量中决定:

ppe_translate_t position = {.x = 0,.y = 0};  /* Position translation */

渲染模式

渲染模式可以通过如下参数进行调整:

PPE_Blend(&source, &target, &trans, PPE_SRC_OVER_MODE); /* Blend mode */

备注

支持以下渲染模式:

  • PPE_SRC_OVER_MODE

  • PPE_BYPASS_MODE

编译和下载

该示例的编译和下载流程,可参考 编译和下载

测试验证

渲染成功

当示例工程执行完成后,PPE的渲染结果将与模拟数据进行比较。若在DebugAnalyzer窗口中观察到如下日志,表明渲染成功:

PPE blend test passed 0

渲染失败

当示例工程执行完成后,PPE的渲染结果将与模拟数据进行比较。若在DebugAnalyzer窗口中观察到如下日志,表明渲染失败:

Data mismatch, expect 0x%40406427, actual 0x%12345678
PPE blend test failed {error code}

{error code}的描述可以在 PPE_ERR 中找到。

代码介绍

该章节主要介绍示例中的初始化和相应功能实现的代码和流程说明。

源码路径

工程文件和源码路径如下:

  • 工程路径: sdk\samples\peripheral\ppe\blend\proj

  • 源码路径: sdk\samples\peripheral\ppe\blend\src

初始化

初始化流程包含在 PPE_test() 中。

  1. 初始化存储前景信息和背景信息的结构体 ppe_buffer_t 中的数据。

ppe_buffer_t target, source;
memset(&target, 0, sizeof(ppe_buffer_t));
memset(&source, 0, sizeof(ppe_buffer_t));
  1. 在前景的 ppe_buffer_t 结构体中填充信息, 颜色键值透明度遮罩 也在此处完成设定。

source.address = (uint32_t) source_buffer;
source.memory = source_buffer;
source.color_key_en = DISABLE;
source.color_key_value = 0;
source.global_alpha_en = 0;
source.global_alpha = 0xFF;
source.format = PPE_ABGR8888;
source.width = 64;
source.height = 64;
source.stride = source.width;
  1. 在背景的 ppe_buffer_t 结构体中填充信息。

target.address = (uint32_t) target_buffer;
target.memory = target_buffer;
target.format = PPE_ABGR8888;
target.width = 64;
target.height = 64;
target.stride = target.width;
  1. 在决定图片的偏移量和渲染模式后,调用API PPE_Blend() 开始进行渲染。

ppe_translate_t trans = {.x = 0, .y = 0};
PPE_ERR err = PPE_Blend(&source, &target, &trans, PPE_SRC_OVER_MODE);

功能实现

当函数 PPE_Blend() 执行完成后,PPE运算的结果将会与仿真模拟的运算结果进行比较。如果产生数据不相符的情况,错误的数据会如 测试验证 章节所示在DebugAnalyzer工具中显示。