libva中API的使用方法 主要内容本章主要讲解libva的API相关使用内容主要是API的相关使用方法,以下API的讲解以libva-2.6版本的API为主不同版本的API会有所差异。基本API讲解vaInitializeVAStatus vaInitialize ( VADisplay dpy, /*in*/ int *major_version, /* out */ int *minor_version /* out */ ); 功能 进行va的初始化操作和获取va库的主次版本号。 参数 dpy输入,为VADisplay 类型参数有vaGetDisplay获取。 major_version输出int类型指针主版本号例如va2.6主版本号为2 minor_version输出int类型指针次版本号例如va2.6次版本号为6 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS.vaTerminateVAStatus vaTerminate ( VADisplay dpy ); 功能 进行va资源的释放与va的初始化vaInitialize 相对应。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaQueryVendorStringconst char *vaQueryVendorString ( VADisplay dpy ); 功能 获取显卡生产厂商的相关字符串信息。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 返回值 厂商字符串信息指针。vaGetLibFuncVAPrivFunc vaGetLibFunc ( VADisplay dpy, const char *func ); 功能 获取函数中的私有接口函数指针指针类型为返回int的无参函数指针 对于有参函数无法使用此接口进行函数获取, 但是可以通过返回指针进行转化成带参数函数指针。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 func输入函数名称字符串指针。 返回值 int的无参函数指针指向后端实现库中的私有函数接口。vaMaxNumProfilesint vaMaxNumProfiles ( VADisplay dpy ); 功能 获取可支持的profile的最大值 然后一般用这个值来动态分配用来查询profile的内存。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 返回值 可支持的profile的最大值。vaMaxNumEntrypointsint vaMaxNumEntrypoints ( VADisplay dpy ); 功能 获取可支持的entrypoint的最大值 然后一般用这个值来动态分配用来查询entrypoint的内存。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 返回值 可支持的entrypoint的最大值。vaMaxNumConfigAttributesint vaMaxNumConfigAttributes ( VADisplay dpy ); 功能 获取可支持的config的Attributes的最大值 然后一般用这个值来动态分配用来查询config的Attributes的内存。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 返回值 可支持的config的Attributes的最大值。vaQueryConfigProfilesVAStatus vaQueryConfigProfiles ( VADisplay dpy, VAProfile *profile_list, /* out */ int *num_profiles /* out */ ); 功能 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 profile_list输出包含查询值的profile数组需要预先分配好。 num_profiles支持的profile的数目。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaQueryConfigEntrypointsVAStatus vaQueryConfigEntrypoints ( VADisplay dpy, VAProfile profile, VAEntrypoint *entrypoint_list, /* out */ int *num_entrypoints /* out */ ); 功能 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 profile输入profile的类型。 entrypoint_list输出包含查询值的entrypoint数组需要预先分配好。 num_entrypoints输出支持的entrypoint的数目。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaGetConfigAttributesVAStatus vaGetConfigAttributes ( VADisplay dpy, VAProfile profile, VAEntrypoint entrypoint, VAConfigAttrib *attrib_list, /* in/out */ int num_attribs ); 功能 根据profile和entrypoint获取可支持的config的属性数目和属性内容。 不同的profile和entrypoint组合一般可支持的config的属性数目和内容可能不同。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 profile输入profile的类型。 entrypoint输入硬件加速的入口点。 attrib_list输出包含查询值的attribute数组需要预先分配好。 num_attribs输出可以支持的attribute的数目。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaCreateConfigVAStatus vaCreateConfig ( VADisplay dpy, VAProfile profile, VAEntrypoint entrypoint, VAConfigAttrib *attrib_list, int num_attribs, VAConfigID *config_id /* out */ ); 功能 为视频的编解码和后处理创建配置管线(pipeline)根据profileentrypoint生成 configconfig的ID对应于config以及生成config的profile和entrypoint。 config的属性值列表attrib_list可以为NULL,即可以缺省也可以根据需要进行设置 未进行设置的会保持缺省值可设置的config的属性可以使用vaGetConfigAttributes 进行查询。创建的config确定了后续的处理类别是编码解码或者后处理。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 profile输入profile的类型。 entrypoint输入硬件加速的入口点。 attrib_list输入attribute数组属性和属性内容可以自行设置。 num_attribs输输入设置的的attribute的数目。 config_id输出config的ID值。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaDestroyConfigVAStatus vaDestroyConfig ( VADisplay dpy, VAConfigID config_id ); 功能 释放与config_id相关的资源。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 config_id输入由vaCreateConfig生成的config的ID值。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaQueryConfigAttributesVAStatus vaQueryConfigAttributes ( VADisplay dpy, VAConfigID config_id, VAProfile *profile, /* out */ VAEntrypoint *entrypoint, /* out */ VAConfigAttrib *attrib_list,/* out */ int *num_attribs /* out */ ); 功能 根据已经生成的config_id查询与之关联的config的相关属性和属性内容。 与vaGetConfigAttributes不同的是 vaQueryConfigAttributes 只会获取config_id 对应的config的相关属性和属性内容而vaGetConfigAttributes会获取所有config 支持的属性和属性内容。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 config_id输入配置config的ID值。 profile输出profile的类型。 entrypoint输出硬件加速的入口点。 attrib_list输出包含查询值的attribute数组需要预先分配好。 num_attribs输出可以支持的attribute的数目。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaQuerySurfaceAttributesVAStatus vaQuerySurfaceAttributes( VADisplay dpy, VAConfigID config, VASurfaceAttrib *attrib_list, unsigned int *num_attribs ); 功能 根据config查询支持的surface的属性和属性内容比如surface的格式大小等。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 config输入配置config的ID值。 attrib_list输出包含查询值的attribute数组需要预先分配好。 num_attribs输出可以支持的attribute的数目。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaCreateSurfacesVAStatus vaCreateSurfaces( VADisplay dpy, unsigned int format, unsigned int width, unsigned int height, VASurfaceID *surfaces, unsigned int num_surfaces, VASurfaceAttrib *attrib_list, unsigned int num_attribs ); 功能 根据参数创建surfaces数组attrib_list可以缺省也可以自行设置 硬件支持的属性可以通过vaQuerySurfaceAttributes查询。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 format输入需要创建的surface的格式如NV12,YUYV等 width,height输入surface的尺寸 surfaces输入/输出分配好的空的surface数组作为输入 执行过程中会生成surface并将其ID填充到空的surface数组中作为输出。 num_surfaces输入生成的surface的数目。 attrib_list输入包含设置的attribute列表数组需要预先分配好可以缺省。 num_attribs输入设置的的attribute的数目可以缺省。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaDestroySurfacesVAStatus vaDestroySurfaces ( VADisplay dpy, VASurfaceID *surfaces, int num_surfaces ); 功能 释放surface数组对应的资源。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 surfaces输入已经生成的surface数组。 num_surfaces输入surface数组中有效surface的数目。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaCreateContextVAStatus vaCreateContext ( VADisplay dpy, VAConfigID config_id, int picture_width, int picture_height, int flag, VASurfaceID *render_targets, int num_render_targets, VAContextID *context /* out */ ); 功能 根据参数创建视频编解码后处理的上下文确定需要渲染的目标。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 config_id输入配置config的ID值。 picture_width,picture_height输入需要编码或者解码图片的尺寸。 flag输入标志位目前只有VA_PROGRESSIVE一种标志 render_targets输入渲染的目标surface数组需要数组中的surface已经被 创建成功是不含有效图像数据的surface。 num_render_targets目标surface数组的有效的surface的数目。 context输出context的ID值 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaDestroyContextVAStatus vaDestroyContext ( VADisplay dpy, VAContextID context ); 功能 销毁当前上下文。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 context已经创建的context的ID值。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaCreateMFContextVAStatus vaCreateMFContext ( VADisplay dpy, VAMFContextID *mf_context /* out */ ); 功能 创建多帧context对象该API需要硬件支持将不同的context操作同时提交 给硬件执行的特性目前很多显卡并不支持这一特点所以该API 使用较少。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 mf_context输出多帧context对象。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS 当硬件不支持该特性时为VA_STATUS_ERROR_UNIMPLEMENTED。vaMFAddContextVAStatus vaMFAddContext ( VADisplay dpy, VAMFContextID mf_context, VAContextID context ); 功能 添加context到多帧context对象中该API使用较少。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 mf_context输入已经生成的多帧context对象。 context输入已经生成的context对象。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaMFReleaseContextVAStatus vaMFReleaseContext ( VADisplay dpy, VAMFContextID mf_context, VAContextID context ); 功能 将context对象从多帧context对象中移除。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 mf_context输入已经生成的多帧context对象。 context输入已经生成的context对象。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaQueryProcessingRateVAStatus vaQueryProcessingRate( VADisplay dpy, VAConfigID config, VAProcessingRateParameter *proc_buf, unsigned int *processing_rate ); 功能 根据config查询编解码时宏块的处理速度即宏块数目/秒。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 config输入config对象 proc_buf输入VAProcessingRateParameter参数包含编解码宏块的设置的处理速度。 processing_rate输出编解码时宏块实际处理速度但会被proc_buf参数所限制。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaCreateBufferVAStatus vaCreateBuffer ( VADisplay dpy, VAContextID context, VABufferType type, /* in */ unsigned int size, /* in */ unsigned int num_elements, /* in */ void *data, /* in */ VABufferID *buf_id /* out */ ); 功能创建buffer通过向buffer赋值并将buffer传递给当前的操作pipeline 从而控制pipeline流程 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 context输入已经创建的contex对象 type输入需要创建的buffer的类型 size输入需要创建的buffer的数目一般对所使用结构体的sizeof操作的长度 num_elements输入buffer中存在的元素的数目 data输入预先准备已经赋值完成的结构体数据地址data为NULL时驱动端 会生成空的相关类型的结构体需要使用map和unmap进行赋值 buf_id输出buffer对象 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaCreateBuffer2VAStatus vaCreateBuffer2( VADisplay dpy, VAContextID context, VABufferType type, unsigned int width, unsigned int height, unsigned int *unit_size, unsigned int *pitch, VABufferID *buf_id ); 功能根据内存中的2D图像信息创建一个基于图像数据的buffer一般使用较少 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 type输入需要创建的buffer的类型 width输入需要创建的buffer的width height输入需要创建的buffer的height unit_size输入创建的buffer的大小 pitch输入创建的buffer的picth即每行像素的占用内存字节数 buf_id输出buffer对象 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaBufferSetNumElementsVAStatus vaBufferSetNumElements ( VADisplay dpy, VABufferID buf_id, /* in */ unsigned int num_elements /* in */ ); 功能设置buffer的有效参数个数可以告诉服务端slice参数的有效个数。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 buf_id输入buffer对象 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaMapBufferVAStatus vaMapBuffer ( VADisplay dpy, VABufferID buf_id, /* in */ void **pbuf /* out */ ); 功能将buffer进行map可以供cpu进行读写从而设置buffer的参数内容 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 buf_id输入buffer对象 pout输出用户空间二级指针 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaUnmapBufferVAStatus vaUnmapBuffer ( VADisplay dpy, VABufferID buf_id /* in */ ); 功能对buffer对象进行unmap操作结束对buffer对象的访问操作 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 buf_id输入buffer对象 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaDestroyBufferVAStatus vaDestroyBuffer ( VADisplay dpy, VABufferID buffer_id ); 功能销毁buffer对导致buffer对象失效在调用此函数之前buffer对象可以被重复使用 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 buf_id输入buffer对象 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaAcquireBufferHandleVAStatus vaAcquireBufferHandle( VADisplay dpy, VABufferID buf_id, VABufferInfo *buf_info); 功能主要是将buffer对象进行lock操作以便第三方API如OPenGL使用 同时使用此函数时服务端对此buffer对象的所有操作都会完成以进行同步操作 这样buffer对象才能被其他API使用。在使用release操作之前 bufferinfo对象都会一直有效。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 buf_id输入buffer对象可以是surface对象也可以是普通的参数对象 buf_info: 输入或者输出bufferinfo对象当bufferinfo为输入时此函数就会 对buffer的相关信息如句柄使用的内存类型大小等数据进行填充 所以也作为输出。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaReleaseBufferHandleVAStatus vaReleaseBufferHandle(VADisplay dpy, VABufferID buf_id); 功能释放buffer对象调用后buffer将无法被第三方API继续使用 同样所有第三方API进行的操作都需要在此之前完成以进行同步操作。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 buf_id输入buffer对象可以是surface对象也可以是普通的参数对象 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaExportSurfaceHandleVAStatus vaExportSurfaceHandle (VADisplay dpy, VASurfaceID surface_id, uint32_t mem_type, uint32_t flags, void *descriptor); 功能导出surface对象供外部使用在使用此函数时不会对surface进行同步操作 对surface进行read操作时需要在此之前调用vaSyncSurface进行同步操作 对surface进行write操作时外部所有操作必须在服务端使用该surface之前 完成。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 surface_id输入surface对象 mem_type输入内存类型 flags输入值为VA_EXPORT_SURFACE_***等确定surface的操作状态读写等。 descriptor输出描述符取决于mem的类型如果是DRM PRIME内存那么就是 VADRMPRIMESurfaceDescriptor指针. 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaBeginPictureVAStatus vaBeginPicture ( VADisplay dpy, VAContextID context, VASurfaceID render_target ); 功能视频操作管线pipeline开始准备完成初始化工作 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 context输入context对象 render_target渲染对象surface 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaRenderPictureVAStatus vaRenderPicture ( VADisplay dpy, VAContextID context, VABufferID *buffers, int num_buffers ); 功能发送相关参数buffer给服务端 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 context输入context对象 buffers输入buffer对象指针需要调用者分配内存 num_buffers输入buffer的数目 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaEndPictureVAStatus vaEndPicture ( VADisplay dpy, VAContextID context ); 功能发送执行命令给服务端服务端开始执行相关的管线操作编码解码后处理等 都是调用此函数之后开始真正执行是异步操作而非同步操作。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 context输入context对象 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaMFSubmitVAStatus vaMFSubmit ( VADisplay dpy, VAMFContextID mf_context, VAContextID * contexts, int num_contexts ); 功能提交多个context给服务端进行编解码后处理等操作和vaEndPicture相似 但是此函数需要一次提交多个context而vaEndPicture 只提交一个context 所以需要后端驱动支持次操作目前该API使用较少。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 mf_context输入muti-context对象 contexts输入context指针 num_contexts输入context数目 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaSyncSurfaceVAStatus vaSyncSurface ( VADisplay dpy, VASurfaceID render_target ); 功能同步surface将所有对surface的读写操作进行强制同步执行以确保后续 操作只有一个操作对象进行读写不会有其他对象进行读写操作但是此函数 比较耗时。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 render_target输入需要同步的surface对象。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaQuerySurfaceStatusVAStatus vaQuerySurfaceStatus ( VADisplay dpy, VASurfaceID render_target, VASurfaceStatus *status /* out */ ); 功能查询surface的状态 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 render_target输入需要查询的surface对象。 status输出状态值VASurfaceRendering(渲染中), VASurfaceDisplaying显示中VASurfaceReady空闲和 VASurfaceSkipped编码时被跳帧 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaQuerySurfaceErrorVAStatus vaQuerySurfaceError( VADisplay dpy, VASurfaceID surface, VAStatus error_status, void **error_info ); 功能查询surface在操作过程中发生的错误 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 surface输入需要查询的surface对象。 error_status输出error类型VA_STATUS_ERROR_*** error_info错误信息 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaMaxNumImageFormatsint vaMaxNumImageFormats ( VADisplay dpy ); 功能查询Image对象的支持格式的数量最大值主要用来分配查询格式的内存。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 返回值 返回支持Image格式的最大值。vaQueryImageFormatsVAStatus vaQueryImageFormats ( VADisplay dpy, VAImageFormat *format_list, /* out */ int *num_formats /* out */ ); 功能查询支持的Image格式 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 format_list输出支持的Image格式列表 num_formats输出支持的Image格式的数目 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaCreateImageVAStatus vaCreateImage ( VADisplay dpy, VAImageFormat *format, int width, int height, VAImage *image /* out */ ); 功能创建Image 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 format输入需要创建的Image的格式 width输入Image的宽度 height输入Image的高度 image输出Image对象指针 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaDestroyImageVAStatus vaDestroyImage ( VADisplay dpy, VAImageID image ); 功能销毁Image 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 image输入image对象 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaSetImagePaletteVAStatus vaSetImagePalette ( VADisplay dpy, VAImageID image, unsigned char *palette ); 功能设置Image的默认颜色关于image的palette 的大小是VAImage的成员 num_palette_entries * entry_bytes 大小 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 image输入image对象 palette 输入颜色数组指针 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaGetImageVAStatus vaGetImage ( VADisplay dpy, VASurfaceID surface, int x, /* coordinates of the upper left source pixel */ int y, unsigned int width, /* width and height of the region */ unsigned int height, VAImageID image ); 功能将surface对像转化为Image对象实质是将surface的图像内存 可能在system memory上也可能在GPU内存上也可能在其他内存上 copy到Image对应的图像内存一般是system memory. 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 surface 输入surface对象 x,y,width,height输入想要拷贝的surface的区域 image输出准备好的Image内存用来填充图像数据和相关信息 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaPutImageVAStatus vaPutImage ( VADisplay dpy, VASurfaceID surface, VAImageID image, int src_x, int src_y, unsigned int src_width, unsigned int src_height, int dest_x, int dest_y, unsigned int dest_width, unsigned int dest_height ); 功能将image对应的图像内存数据拷贝到surface对应的图像内存上 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 surface 输入目标surface对象 image输入源image对象 x,y,src_width,src_height输入想要拷贝的image的区域 x,y,dest_width,dest_width输入想要拷贝到surface的区域 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaDeriveImageVAStatus vaDeriveImage ( VADisplay dpy, VASurfaceID surface, VAImage *image /* out */ ); 功能将surface对应的图像内存直接转化为image供CPU访问不做任何拷贝操作。 image和surface对应的是同一块图像内存数据 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 surface 输入surface对象 image输出image对象 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaMaxNumSubpictureFormatsint vaMaxNumSubpictureFormats ( VADisplay dpy ); 功能查询subpicture支持的格式数目用来提前分配内存。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaQuerySubpictureFormatsVAStatus vaQuerySubpictureFormats ( VADisplay dpy, VAImageFormat *format_list, /* out */ unsigned int *flags, /* out */ unsigned int *num_formats /* out */ ); 功能查询subpicture的格式。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 format_list输出格式列表需要提前分配内存。 flags输出标志位显示subpicture的额外能力如透明度。 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaCreateSubpictureVAStatus vaCreateSubpicture ( VADisplay dpy, VAImageID image, VASubpictureID *subpicture /* out */ ); 功能使用已经创建的image创建subpicture并将image和subpicture进行绑定 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 image输入已经创建的image subpicture输出subpicture对象 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaDestroySubpictureVAStatus vaDestroySubpicture ( VADisplay dpy, VASubpictureID subpicture ); 功能销毁subpicture对象 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 subpicture输入已经创建的subpicture对象 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaSetSubpictureImageVAStatus vaSetSubpictureImage ( VADisplay dpy, VASubpictureID subpicture, VAImageID image ); 功能将image绑定到subpicture上可以创建subpicture后 将其他image绑定到该subpicture 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 subpicture输入subpicture对象 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaSetSubpictureChromakeyVAStatus vaSetSubpictureChromakey ( VADisplay dpy, VASubpictureID subpicture, unsigned int chromakey_min, unsigned int chromakey_max, unsigned int chromakey_mask ); 功能如果subpicture有颜色属性可以使用此函数设置subpicture的颜色使用较少 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 subpicture输入subpicture对象 chromakey_minchromakey_max输入颜色范围 For RGB: [0:7] Red [8:15] Blue [16:23] Green For YUV: [0:7] V [8:15] U [16:23] Y chromakey_mask输入颜色掩码用来来比较颜色 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaSetSubpictureGlobalAlphaVAStatus vaSetSubpictureGlobalAlpha ( VADisplay dpy, VASubpictureID subpicture, float global_alpha ); 功能如果subpicture有透明的属性可以使用此函数设置subpicture的透明的使用较少 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 subpicture输入subpicture对象 global_alpha 输入透明度 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaAssociateSubpictureVAStatus vaAssociateSubpicture ( VADisplay dpy, VASubpictureID subpicture, VASurfaceID *target_surfaces, int num_surfaces, int16_t src_x, /* upper left offset in subpicture */ int16_t src_y, uint16_t src_width, uint16_t src_height, int16_t dest_x, /* upper left offset in surface */ int16_t dest_y, uint16_t dest_width, uint16_t dest_height, /* * whether to enable chroma-keying, global-alpha, or screen relative mode * see VA_SUBPICTURE_XXX values */ uint32_t flags ); 功能将subpicture关联到surface上可以同时关联到多个surface上 也可以每个surface关联多个 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 subpicture输入subpicture对象 target_surfaces输入想要关联的目标surface对象 num_surfaces输入目标surface对象的数量 x,y,src_width,src_height输入想要关联的的subpicture的区域 x,y,dest_width,dest_width输入想要关联到的surface的区域 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaDeassociateSubpictureVAStatus vaDeassociateSubpicture ( VADisplay dpy, VASubpictureID subpicture, VASurfaceID *target_surfaces, int num_surfaces ); 功能将subpicture与目标surface解除关联 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 subpicture输入subpicture对象 target_surfaces输入已经关联的目标surface对象 num_surfaces输入已经关联的目标surface对象的数量 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaMaxNumDisplayAttributesint vaMaxNumDisplayAttributes ( VADisplay dpy ); 功能查询display支持的属性最大数量用来分配内存。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 返回值 display支持的属性的最大数量。vaQueryDisplayAttributesVAStatus vaQueryDisplayAttributes ( VADisplay dpy, VADisplayAttribute *attr_list, /* out */ int *num_attributes /* out */ ); 功能查询display的支持的属性内容 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 attr_list输出display支持的属性列表 num_attributes输出display支持的属性数目 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaGetDisplayAttributesVAStatus vaGetDisplayAttributes ( VADisplay dpy, VADisplayAttribute *attr_list, /* in/out */ int num_attributes ); 功能获取当前display的支持的属性内容因为不同的config支持的display 属性是不一样的。 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 attr_list输出属性列表 num_attributes输出属性数量 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaSetDisplayAttributesVAStatus vaSetDisplayAttributes ( VADisplay dpy, VADisplayAttribute *attr_list, int num_attributes ); 功能设置display属性的值 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 attr_list输入/输出带有display的属性类型,但是没有值 调用此函数会将相应的值填充。 num_attributes输入属性数量 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。vaPutSurfaceVAStatus vaPutSurface ( VADisplay dpy, VASurfaceID surface, Drawable draw, /* X Drawable */ short srcx, short srcy, unsigned short srcw, unsigned short srch, short destx, short desty, unsigned short destw, unsigned short desth, VARectangle *cliprects, /* client supplied destination clip list */ unsigned int number_cliprects, /* number of clip rects in the clip list */ unsigned int flags /* PutSurface flags */ ); 功能将surface使用x11进行显示 参数 dpy输入为VADisplay 类型参数由vaGetDisplay获取。 surface: 输入需要显示的surface对象 srcx,srcy,srcw,srch: surface需要显示的部分 destx,desty,destw,desth: 显示的目标位置 cliprects输入需要裁剪的suface的区域必须在suface的范围内可以是多个裁剪区域 number_cliprects输入cliprects数量。 flags 输入可以分为颜色空间转换标志位 VA_SRC_COLOR_MASK 0x000000f0 VA_SRC_BT601 0x00000010 VA_SRC_BT709 0x00000020 VA_SRC_SMPTE_240 0x00000040 缩放标志位 VA_FILTER_SCALING_DEFAULT 0x00000000 VA_FILTER_SCALING_FAST 0x00000100 VA_FILTER_SCALING_HQ 0x00000200 VA_FILTER_SCALING_NL_ANAMORPHIC 0x00000300 VA_FILTER_SCALING_MASK 0x00000f00 deinterlace标志位 - Progressive: VA_FRAME_PICTURE - Interleaved: VA_TOP_FIELD_FIRST, VA_BOTTOM_FIELD_FIRST - Field: VA_TOP_FIELD, VA_BOTTOM_FIELD 返回值 函数执行状态VAStatus类型值一般为VA_STATUS_SUCCESS。