跳转至

lite_surface

lite_surface 模块提供轻量级绘图表面抽象,支持基本图形绘制与像素缓冲区管理。

Class Summary

OHOS::LiteSurface

图形模块的 LiteSurface 类,提供媒体显示相关的缓冲区管理功能

Functions

OHOS::LiteSurface

SetQueueSize

void SetQueueSize(uint8_t queueSize) override

功能说明

  • 核心用途:设置可分配给 LiteSurface 的缓冲区数量
  • 设计目的:控制生产者-消费者模式下可同时持有的缓冲区数量上限
  • 使用场景:在播放视频前配置缓冲区队列大小,仅在缓冲区未分配时调用有效

入参

名称 参数类型 详细说明 约束取值范围
queueSize uint8_t 待设置的缓冲区数量 1 ~ maxQueueSize_(4);超过 maxQueueSize_ 时被截断为 maxQueueSize_

GetQueueSize

uint8_t GetQueueSize() override

功能说明

  • 核心用途:获取 LiteSurface 可分配的缓冲区数量
  • 设计目的:供调用者查询当前配置的队列大小
  • 使用场景:配置确认、缓冲区状态查询

返回值

  • 返回类型:uint8_t

返回当前配置的缓冲区队列大小

返回值 触发场景
0 未设置队列大小
1~4 已设置的队列大小值

SetWidthAndHeight

void SetWidthAndHeight(uint32_t width, uint32_t height) override

功能说明

  • 核心用途:设置 LiteSurface 的宽度和高度,用于计算步幅和缓冲区大小
  • 设计目的:在分配缓冲区前配置显示分辨率参数
  • 使用场景:仅在缓冲区未分配时调用,缓冲区已分配后调用无效

入参

名称 参数类型 详细说明 约束取值范围
width uint32_t LiteSurface 宽度,单位为像素 (0, 7680]
height uint32_t LiteSurface 高度,单位为像素 (0, 7680]

GetWidth

uint32_t GetWidth() override

功能说明

  • 核心用途:获取 LiteSurface 的宽度
  • 设计目的:供调用者查询当前配置的宽度值
  • 使用场景:缓冲区参数确认、显示布局计算

返回值

  • 返回类型:uint32_t

返回 LiteSurface 宽度,单位为像素

返回值 触发场景
0 未设置宽度
>0 已设置的宽度值

GetHeight

uint32_t GetHeight() override

功能说明

  • 核心用途:获取 LiteSurface 的高度
  • 设计目的:供调用者查询当前配置的高度值
  • 使用场景:缓冲区参数确认、显示布局计算

返回值

  • 返回类型:uint32_t

返回 LiteSurface 高度,单位为像素

返回值 触发场景
0 未设置高度
>0 已设置的高度值

SetFormat

void SetFormat(uint32_t format) override

功能说明

  • 核心用途:设置 LiteSurface 的像素格式
  • 设计目的:指定缓冲区的像素编码格式,用于视频渲染时的格式匹配
  • 使用场景:仅在缓冲区未分配时调用,缓冲区已分配后调用无效

入参

名称 参数类型 详细说明 约束取值范围
format uint32_t 待设置的像素格式 参考 PixelFormat 枚举值

GetFormat

uint32_t GetFormat() override

功能说明

  • 核心用途:获取 LiteSurface 的像素格式
  • 设计目的:供调用者查询当前配置的像素格式
  • 使用场景:格式确认、渲染管线参数匹配

返回值

  • 返回类型:uint32_t

返回当前像素格式

返回值 触发场景
PIXEL_FMT_BUTT 未设置格式(默认值)
其他 已设置的像素格式值

SetUsage

void SetUsage(uint32_t usage) override

功能说明

  • 核心用途:设置缓冲区的使用场景(本实现为空操作)
  • 设计目的:保持与 Surface 基类接口的一致性,LiteSurface 中未实现 usage 逻辑
  • 使用场景:调用后无实际效果,仅满足接口契约

入参

名称 参数类型 详细说明 约束取值范围
usage uint32_t 缓冲区使用场景标识 参考 BUFFER_CONSUMER_USAGE 枚举值

GetUsage

uint32_t GetUsage() override

功能说明

  • 核心用途:获取缓冲区的使用场景(本实现固定返回 0)
  • 设计目的:保持与 Surface 基类接口的一致性,LiteSurface 中未实现 usage 逻辑
  • 使用场景:调用后始终返回 0

返回值

  • 返回类型:uint32_t

返回使用场景标识,固定返回 0

返回值 触发场景
0 始终返回 0

SetUserData

void SetUserData(const std::string& key, const std::string& value) override

功能说明

  • 核心用途:以键值对格式设置 LiteSurface 用户数据
  • 设计目的:支持扩展属性的存储,如视频旋转信息等
  • 使用场景:存储 Surface 级别的自定义元数据;用户数据条数上限为 100

入参

名称 参数类型 详细说明 约束取值范围
key const std::string& 键值对的键名,入参只读引用 非空字符串
value const std::string& 键值对的值,入参只读引用 非空字符串

GetUserData

std::string GetUserData(const std::string& key) override

功能说明

  • 核心用途:根据键名获取 LiteSurface 用户数据
  • 设计目的:查询之前通过 SetUserData 存储的扩展属性
  • 使用场景:读取 Surface 级别的自定义元数据

入参

名称 参数类型 详细说明 约束取值范围
key const std::string& 待查询的键名,入参只读引用 非空字符串

返回值

  • 返回类型:std::string

返回键名对应的值

返回值 触发场景
空字符串 键名不存在
非空字符串 键名对应的值

RegisterConsumerListener

void RegisterConsumerListener(IBufferConsumerListener& listener) override

功能说明

  • 核心用途:注册消费者监听器,当缓冲区放入脏队列时通知消费者
  • 设计目的:实现生产者-消费者模式下的异步通知机制
  • 使用场景:消费者端注册回调,接收缓冲区就绪通知;重复注册仅保留最新监听器

入参

名称 参数类型 详细说明 约束取值范围
listener IBufferConsumerListener& 消费者监听器引用 入参引用,不可为空引用

UnregisterConsumerListener

void UnregisterConsumerListener() override

功能说明

  • 核心用途:注销消费者监听器
  • 设计目的:停止脏队列缓冲区就绪的通知
  • 使用场景:消费者不再需要接收缓冲区通知时调用;注销后缓冲区放入脏队列不再触发回调

SetStrideAlignment

void SetStrideAlignment(uint32_t strideAlignment) override

功能说明

  • 核心用途:设置步幅对齐字节数
  • 设计目的:控制缓冲区行跨度的内存对齐方式
  • 使用场景:仅在缓冲区未分配时调用,缓冲区已分配后调用无效

入参

名称 参数类型 详细说明 约束取值范围
strideAlignment uint32_t 步幅对齐字节数 [4, 32];默认 4 字节对齐

GetStrideAlignment

uint32_t GetStrideAlignment() override

功能说明

  • 核心用途:获取步幅对齐字节数
  • 设计目的:供调用者查询当前配置的对齐参数
  • 使用场景:默认 4 字节对齐,用于步幅计算

返回值

  • 返回类型:uint32_t

返回步幅对齐字节数

返回值 触发场景
0 未设置对齐参数
4 默认 4 字节对齐
其他 已设置的对齐字节数

GetStride

uint32_t GetStride() override

功能说明

  • 核心用途:获取 LiteSurface 的步幅
  • 设计目的:根据宽度和步幅对齐参数计算实际行跨度
  • 使用场景:缓冲区内存布局计算;宽度未设置时返回 0,对齐参数未设置时返回宽度值

返回值

  • 返回类型:uint32_t

返回步幅值

返回值 触发场景
0 宽度未设置
width 步幅对齐参数未设置时返回宽度值
对齐后的值 按步幅对齐参数计算后的值

SetSize

void SetSize(uint32_t size) override

功能说明

  • 核心用途:设置共享内存分配大小
  • 设计目的:指定单个缓冲区的内存分配大小
  • 使用场景:仅在缓冲区未分配时调用,缓冲区已分配后调用无效

入参

名称 参数类型 详细说明 约束取值范围
size uint32_t 共享内存大小 (0, 58982400]

GetSize

uint32_t GetSize() override

功能说明

  • 核心用途:获取共享内存分配大小
  • 设计目的:供调用者查询当前配置的缓冲区内存大小
  • 使用场景:缓冲区参数确认、内存预算评估

返回值

  • 返回类型:uint32_t

返回共享内存大小

返回值 触发场景
0 未设置大小
>0 已设置的内存大小值

RequestBuffer

SurfaceBuffer* RequestBuffer(uint8_t wait = 0) override

功能说明

  • 核心用途:从空闲队列请求缓冲区用于写入数据
  • 设计目的:为生产者提供获取可用缓冲区的入口
  • 使用场景:生产者写入数据前调用;wait=0 时不等待立即返回,wait=1 时等待空闲缓冲区可用

前置条件

  • 缓冲区队列大小(queueSize)、内存大小(size)、宽度(width)、高度(height)、像素格式(format)均已设置且有效
  • 调用前 LiteSurface 对象已构造完成且未进入析构状态

入参

名称 参数类型 详细说明 约束取值范围
wait uint8_t 是否等待可用缓冲区 0:不等待(默认);1:等待

返回值

  • 返回类型:SurfaceBuffer*

返回缓冲区指针

返回值 触发场景
nullptr 无可用缓冲区或参数未配置
非空指针 成功获取的缓冲区指针

FlushBuffer

int32_t FlushBuffer(SurfaceBuffer* buffer) override

功能说明

  • 核心用途:将缓冲区刷新到脏队列供消费者使用
  • 设计目的:生产者完成数据写入后将缓冲区提交给消费者
  • 使用场景:生产者写完数据后调用,缓冲区状态变为 BUFFER_STATE_FLUSH 并通知消费者监听器

入参

名称 参数类型 详细说明 约束取值范围
buffer SurfaceBuffer* 待刷新的缓冲区指针 入参指针,不可为 nullptr;须为 RequestBuffer 返回的有效缓冲区

返回值

  • 返回类型:int32_t

返回操作结果

返回值 触发场景
0 刷新成功
-1 缓冲区无效或刷新失败

AcquireBuffer

SurfaceBuffer* AcquireBuffer() override

功能说明

  • 核心用途:从脏队列获取缓冲区供消费者消费
  • 设计目的:为消费者提供获取已就绪缓冲区的入口
  • 使用场景:消费者获取生产者刷新的缓冲区;缓冲区状态变为 BUFFER_STATE_ACQUIRE

返回值

  • 返回类型:SurfaceBuffer*

返回缓冲区指针

返回值 触发场景
nullptr 脏队列为空
非空指针 成功获取的缓冲区指针

ReleaseBuffer

bool ReleaseBuffer(SurfaceBuffer* buffer) override

功能说明

  • 核心用途:释放消费者已使用的缓冲区到空闲队列
  • 设计目的:消费者消费完毕后将缓冲区归还给生产者复用
  • 使用场景:消费者使用完缓冲区后调用;缓冲区状态变为 BUFFER_STATE_RELEASE 并归还空闲队列

入参

名称 参数类型 详细说明 约束取值范围
buffer SurfaceBuffer* 待释放的缓冲区指针 入参指针,不可为 nullptr;须为 AcquireBuffer 返回的有效缓冲区

返回值

  • 返回类型:bool

返回释放结果

返回值 触发场景
true 缓冲区释放成功
false 缓冲区无效或释放失败

CancelBuffer

void CancelBuffer(SurfaceBuffer* buffer) override

功能说明

  • 核心用途:生产者取消缓冲区并归还空闲队列
  • 设计目的:生产者放弃已请求的缓冲区时调用,内部调用 ReleaseBuffer 实现
  • 使用场景:生产者获取缓冲区后决定不再使用时调用

入参

名称 参数类型 详细说明 约束取值范围
buffer SurfaceBuffer* 待取消的缓冲区指针 入参指针,不可为 nullptr;须为 RequestBuffer 返回的有效缓冲区

PrepareBuffers

void PrepareBuffers()

功能说明

  • 核心用途:准备视频缓冲区,在播放视频前调用
  • 设计目的:按队列大小预分配所有缓冲区
  • 使用场景:视频播放前预分配缓冲区;已分配过时再次调用无效

ClearBuffers

void ClearBuffers()

功能说明

  • 核心用途:清除所有缓冲区并释放资源
  • 设计目的:释放空闲队列、脏队列和缓冲区列表中的所有缓冲区内存
  • 使用场景:停止播放或析构时调用,释放所有已分配的缓冲区资源

GetBackBuf

SurfaceBuffer* GetBackBuf()

功能说明

  • 核心用途:获取脏队列末尾的缓冲区
  • 设计目的:提供对最近刷新缓冲区的快速访问
  • 使用场景:需要获取最新刷新的缓冲区但不从队列中移除时调用

返回值

  • 返回类型:SurfaceBuffer*

返回脏队列末尾缓冲区指针

返回值 触发场景
nullptr 脏队列为空
非空指针 脏队列末尾的缓冲区指针

SetUVOffset

void SetUVOffset(uint32_t uvOffset)

功能说明

  • 核心用途:设置 UV 分量的地址偏移
  • 设计目的:指定 YUV 格式缓冲区中 UV 分量相对于 Y 分量的偏移量
  • 使用场景:YUV 格式视频渲染时配置 UV 分量寻址偏移

入参

名称 参数类型 详细说明 约束取值范围
uvOffset uint32_t UV 分量的地址偏移 0 ~ 缓冲区大小

GetUVOffset

uint32_t GetUVOffset()

功能说明

  • 核心用途:获取 UV 分量的地址偏移
  • 设计目的:供调用者查询当前 UV 偏移配置
  • 使用场景:YUV 格式渲染时确认 UV 分量偏移参数

返回值

  • 返回类型:uint32_t

返回 UV 分量地址偏移

返回值 触发场景
0 未设置 UV 偏移
>0 已设置的 UV 偏移值

Enumerations

BufferState

enum class BufferState {
    BUFFER_STATE_NONE = 0,
    BUFFER_STATE_REQUEST = 1,
    BUFFER_STATE_FLUSH = 2,
    BUFFER_STATE_ACQUIRE = 3,
    BUFFER_STATE_RELEASE = 4
};
枚举成员 取值 描述
BUFFER_STATE_NONE 0 缓冲区初始状态
BUFFER_STATE_REQUEST 1 缓冲区已被生产者请求
BUFFER_STATE_FLUSH 2 缓冲区已被生产者刷新到脏队列
BUFFER_STATE_ACQUIRE 3 缓冲区已被消费者获取
BUFFER_STATE_RELEASE 4 缓冲区已被消费者释放

Structures

BufferItem

struct BufferItem {
    SurfaceBuffer* buffer;
    BufferState state;
};

成员说明

成员名称 数据类型 描述
buffer SurfaceBuffer* 指向 SurfaceBuffer 对象的指针
state BufferState 缓冲区当前状态