1 /*
2 * Copyright (c) 2011 Intel Corporation. All Rights Reserved.
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the
6 * "Software"), to deal in the Software without restriction, including
7 * without limitation the rights to use, copy, modify, merge, publish,
8 * distribute, sub license, and/or sell copies of the Software, and to
9 * permit persons to whom the Software is furnished to do so, subject to
10 * the following conditions:
11 *
12 * The above copyright notice and this permission notice (including the
13 * next paragraph) shall be included in all copies or substantial portions
14 * of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 *
24 */
25
26 #ifndef _PSB_SURFACE_ATTRIB_H_
27 #define _PSB_SURFACE_ATTRIB_H_
28
29 #include <va/va_tpi.h>
30 #include "psb_drv_video.h"
31 #include "psb_surface.h"
32
33 /*
34 * Create surface from virtual address
35 * flags: 0 indicates cache, PSB_USER_BUFFER_UNCACHED, PSB_USER_BUFFER_WC
36 */
37 VAStatus psb_surface_create_from_ub(
38 psb_driver_data_p driver_data,
39 int width, int height, int fourcc, VASurfaceAttributeTPI *graphic_buffers,
40 psb_surface_p psb_surface, /* out */
41 void *vaddr,
42 int fd,
43 unsigned int flags
44 );
45
46 VAStatus psb_surface_create_for_userptr(
47 psb_driver_data_p driver_data,
48 int width, int height,
49 unsigned size, /* total buffer size need to be allocated */
50 unsigned int fourcc, /* expected fourcc */
51 unsigned int luma_stride, /* luma stride, could be width aligned with a special value */
52 unsigned int chroma_u_stride, /* chroma stride */
53 unsigned int chroma_v_stride,
54 unsigned int luma_offset, /* could be 0 */
55 unsigned int chroma_u_offset, /* UV offset from the beginning of the memory */
56 unsigned int chroma_v_offset,
57 psb_surface_p psb_surface /* out */
58 );
59
60 VAStatus psb_surface_create_from_kbuf(
61 psb_driver_data_p driver_data,
62 int width, int height,
63 unsigned size, /* total buffer size need to be allocated */
64 unsigned int fourcc, /* expected fourcc */
65 int kbuf_handle, /*kernel handle */
66 unsigned int luma_stride, /* luma stride, could be width aligned with a special value */
67 unsigned int chroma_u_stride, /* chroma stride */
68 unsigned int chroma_v_stride,
69 unsigned int luma_offset, /* could be 0 */
70 unsigned int chroma_u_offset, /* UV offset from the beginning of the memory */
71 unsigned int chroma_v_offset,
72 psb_surface_p psb_surface /* out */
73 );
74
75
76 VAStatus psb_surface_create_camera(
77 psb_driver_data_p driver_data,
78 int width, int height, int stride, int size,
79 psb_surface_p psb_surface, /* out */
80 int is_v4l2,
81 unsigned int id_or_ofs
82 );
83
84 /* id_or_ofs: it is frame ID or frame offset in camear device memory
85 * for CI frame: it it always frame offset currently
86 * for v4l2 buf: it is offset used in V4L2 buffer mmap
87 * user_ptr: virtual address of user buffer.
88 */
89 VAStatus psb_surface_create_camera_from_ub(
90 psb_driver_data_p driver_data,
91 int width, int height, int stride, int size,
92 psb_surface_p psb_surface, /* out */
93 int is_v4l2,
94 unsigned int id_or_ofs,
95 const unsigned long *user_ptr
96 );
97
98 #ifdef ANDROID
99
100 VAStatus psb_DestroySurfaceGralloc(object_surface_p obj_surface);
101
102
103 VAStatus psb_CreateSurfacesFromGralloc(
104 VADriverContextP ctx,
105 int width,
106 int height,
107 int format,
108 int num_surfaces,
109 VASurfaceID *surface_list, /* out */
110 PsbSurfaceAttributeTPI *attribute_tpi
111 );
112
113 #else
114
psb_DestroySurfaceGralloc(object_surface_p obj_surface)115 static VAStatus psb_DestroySurfaceGralloc(object_surface_p obj_surface)
116 {
117 return VA_STATUS_ERROR_INVALID_PARAMETER;
118 }
119
psb_CreateSurfacesFromGralloc(VADriverContextP ctx,int width,int height,int format,int num_surfaces,VASurfaceID * surface_list,PsbSurfaceAttributeTPI * attribute_tpi)120 static VAStatus psb_CreateSurfacesFromGralloc(
121 VADriverContextP ctx,
122 int width,
123 int height,
124 int format,
125 int num_surfaces,
126 VASurfaceID *surface_list, /* out */
127 PsbSurfaceAttributeTPI *attribute_tpi
128 )
129 {
130 return VA_STATUS_ERROR_INVALID_PARAMETER;
131 }
132
133 #endif
134
135
136 VAStatus psb_CreateSurfacesWithAttribute(
137 VADriverContextP ctx,
138 int width,
139 int height,
140 int format,
141 int num_surfaces,
142 VASurfaceID *surface_list, /* out */
143 VASurfaceAttributeTPI *attribute_tpi
144 );
145
146 #endif
147
148