
主要内容本章主要内容就是讲解libva2.6的surface中数据供CPU访问的相关方法即对surface数据的读写对其源码实现以及测试代码进行详细的讲解其他版本或许不同甚至有些矛盾请读者自行参考。surface的读写所谓surface的读取就是通过一系列方式使得CPU能够读写主要有以下几种方式vaDeriveImagevaPutImage/vaGetImage。vaDeriveImagevaDeriveImage函数主要就是将surface进行复制一份然后通过修改备份的数据来达到修改surface数据的方法。123surface的数据读写vaDeriveImage将备份的surface转化为VAImage,并lock源surfacevaMapBuffer将VAImage中的buffer handle映射为数据指针供CPU访问,,并lock备份surfacevaUnmapBuffer将VAImage中的buffer handle映射断开,并将备份的surface数据复制给surface,并unlock备份surface和源surfacevaPutImage/vaGetImagevaPutImage/vaGetImage函数主要就是将surface进行复制一份到VAImage然后修改VAImage的数据,通过送回修改后的数据给surface来修改surface数据的方法。12345surface的数据读写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的区域rectVAImage的区域rectVAImageID无输出将已经修改数据后VAImageID对应的VAImage将VAImage区域的数据拷贝到surface的对应区域vaMapBuffer输入:display,VABufferID输出用户控件指针将buffer id对应的buffer映射为数据指针供CPU访问,并对该buffer内存进行lock操作vaUnmapBuffer输入:display,VABufferID无输出将buffer id对应的buffer映射断开并进行unlock操作