ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

libva中关于surface中数据供CPU访问的相关方法

libva中关于surface中数据供CPU访问的相关方法

主要内容

本章主要内容就是讲解libva2.6的surface中数据供CPU访问的相关方法,即对surface数据的读写,对其源码实现以及测试代码进行详细的讲解,其他版本或许不同甚至有些矛盾,请读者自行参考。

surface的读写

所谓surface的读取,就是通过一系列方式使得CPU能够读写,主要有以下几种方式:vaDeriveImage,vaPutImage/vaGetImage。

vaDeriveImage

vaDeriveImage函数主要就是将surface进行复制一份,然后通过修改备份的数据来达到修改surface数据的方法。

1

2

3

surface的数据读写

vaDeriveImage

将备份的surface转化为VAImage,并lock源surface

vaMapBuffer

将VAImage中的buffer handle映射为数据指针供CPU访问,,并lock备份surface

vaUnmapBuffer

将VAImage中的buffer handle映射断开,并将备份的surface数据复制给surface,并unlock备份surface和源surface

vaPutImage/vaGetImage

vaPutImage/vaGetImage函数主要就是将surface进行复制一份到VAImage,然后修改VAImage的数据,通过送回修改后的数据给surface来修改surface数据的方法。

1

2

3

4

5

surface的数据读写

vaCreateImage

创建新的VAImage对象

vaGetImage

将surface的数据复制到VAImageID对应的VAImage中

vaMapBuffer

将VAImage中的buffer handle映射为数据指针供CPU访问

vaUnmapBuffer

将VAImage中的buffer handle映射断开

vaPutImage

将VAImage的数据复制给surface

相关API的使用

函数参数说明(description)
vaDeriveImage输入:surface和display,输出VAImage指针将已经创建surface转化为VAImage,实质是将surface的数据复制到VAImage上
vaGetImage输入:surface和display,surface的区域,VAImageID,无输出将已经创建surface的相关区域中的数据复制到VAImageID对应的VAImage上
vaPutImage输入:surface和display,surface的区域rect,VAImage的区域rect,VAImageID,无输出将已经修改数据后VAImageID对应的VAImage将VAImage区域的数据拷贝到surface的对应区域
vaMapBuffer输入:display,VABufferID,输出:用户控件指针将buffer id对应的buffer映射为数据指针供CPU访问,并对该buffer内存进行lock操作
vaUnmapBuffer输入:display,VABufferID,无输出将buffer id对应的buffer映射断开,并进行unlock操作
返回列表