主要内容
本章主要内容就是讲解libva2.6的surface中数据供CPU访问的相关方法,即对surface数据的读写,对其源码实现以及测试代码进行详细的讲解,其他版本或许不同甚至有些矛盾,请读者自行参考。
surface的读写
所谓surface的读取,就是通过一系列方式使得CPU能够读写,主要有以下几种方式:vaDeriveImage,vaPutImage/vaGetImage。
vaDeriveImage
vaDeriveImage函数主要就是将surface进行复制一份,然后通过修改备份的数据来达到修改surface数据的方法。
vaPutImage/vaGetImage
vaPutImage/vaGetImage函数主要就是将surface进行复制一份到VAImage,然后修改VAImage的数据,通过送回修改后的数据给surface来修改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操作 |