1 /*
2 * Copyright (c) 2021-2022, Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 */
22 //!
23 //! \file media_libva_interface.cpp
24 //! \brief libva interface implementaion.
25 //!
26
27 #include "media_libva_interface.h"
28 #include "media_libva.h"
29 #include "media_ddi_prot.h"
30 #include "media_libva_encoder.h"
31 #include "media_libva_util.h"
32 #include "media_capstable_specific.h"
33 #include "media_libva_interface_next.h"
34 #include "media_capstable_specific.h"
35 #include "media_libva_caps_next.h"
36
LoadFunction(VADriverContextP ctx)37 VAStatus MediaLibvaInterface::LoadFunction(VADriverContextP ctx)
38 {
39 DDI_CHK_NULL(ctx, "nullptr ctx", VA_STATUS_ERROR_INVALID_CONTEXT);
40
41 struct VADriverVTable *pVTable = DDI_CODEC_GET_VTABLE(ctx);
42 DDI_CHK_NULL(pVTable, "nullptr pVTable", VA_STATUS_ERROR_INVALID_CONTEXT);
43
44 struct VADriverVTableVPP *pVTableVpp = DDI_CODEC_GET_VTABLE_VPP(ctx);
45 DDI_CHK_NULL(pVTableVpp, "nullptr pVTableVpp", VA_STATUS_ERROR_INVALID_CONTEXT);
46
47 #if VA_CHECK_VERSION(1,11,0)
48 struct VADriverVTableProt *pVTableProt = DDI_CODEC_GET_VTABLE_PROT(ctx);
49 DDI_CHK_NULL(pVTableProt, "nullptr pVTableProt", VA_STATUS_ERROR_INVALID_CONTEXT);
50 #endif
51
52 ctx->version_major = VA_MAJOR_VERSION;
53 ctx->version_minor = VA_MINOR_VERSION;
54 ctx->max_profiles = DDI_CODEC_GEN_MAX_PROFILES;
55 ctx->max_entrypoints = DDI_CODEC_GEN_MAX_ENTRYPOINTS;
56 ctx->max_attributes = (int32_t)VAConfigAttribTypeMax;
57 ctx->max_subpic_formats = DDI_CODEC_GEN_MAX_SUBPIC_FORMATS;
58 ctx->max_display_attributes = DDI_MEDIA_GEN_MAX_DISPLAY_ATTRIBUTES;
59 ctx->str_vendor = DDI_CODEC_GEN_STR_VENDOR;
60 ctx->vtable_tpi = nullptr;
61
62 pVTable->vaTerminate = Terminate;
63 pVTable->vaQueryConfigEntrypoints = MediaLibvaInterfaceNext::QueryConfigEntrypoints;
64 pVTable->vaQueryConfigProfiles = MediaLibvaInterfaceNext::QueryConfigProfiles;
65 pVTable->vaQueryConfigAttributes = QueryConfigAttributes;
66 pVTable->vaCreateConfig = CreateConfig;
67 pVTable->vaDestroyConfig = MediaLibvaInterfaceNext::DestroyConfig;
68 pVTable->vaGetConfigAttributes = MediaLibvaInterfaceNext::GetConfigAttributes;
69
70 pVTable->vaCreateSurfaces = MediaLibvaInterfaceNext::CreateSurfaces;
71 pVTable->vaDestroySurfaces = MediaLibvaInterfaceNext::DestroySurfaces;
72 pVTable->vaCreateSurfaces2 = MediaLibvaInterfaceNext::CreateSurfaces2;
73
74 pVTable->vaCreateContext = MediaLibvaInterfaceNext::CreateContext;
75 pVTable->vaDestroyContext = MediaLibvaInterfaceNext::DestroyContext;
76 pVTable->vaCreateBuffer = MediaLibvaInterfaceNext::CreateBuffer;
77 pVTable->vaBufferSetNumElements = MediaLibvaInterfaceNext::BufferSetNumElements;
78 pVTable->vaMapBuffer = MapBuffer;
79 pVTable->vaUnmapBuffer = UnmapBuffer;
80 pVTable->vaDestroyBuffer = DestroyBuffer;
81 pVTable->vaBeginPicture = MediaLibvaInterfaceNext::BeginPicture;
82 pVTable->vaRenderPicture = MediaLibvaInterfaceNext::RenderPicture;
83 pVTable->vaEndPicture = MediaLibvaInterfaceNext::EndPicture;
84 pVTable->vaSyncSurface = SyncSurface;
85 #if VA_CHECK_VERSION(1, 9, 0)
86 pVTable->vaSyncSurface2 = SyncSurface2;
87 pVTable->vaSyncBuffer = MediaLibvaInterfaceNext::SyncBuffer;
88 #endif
89 pVTable->vaQuerySurfaceStatus = MediaLibvaInterfaceNext::QuerySurfaceStatus;
90 pVTable->vaQuerySurfaceError = QuerySurfaceError;
91 pVTable->vaQuerySurfaceAttributes = MediaLibvaInterfaceNext::QuerySurfaceAttributes;
92 pVTable->vaPutSurface = PutSurface;
93 pVTable->vaQueryImageFormats = MediaLibvaInterfaceNext::QueryImageFormats;
94
95 pVTable->vaCreateImage = MediaLibvaInterfaceNext::CreateImage;
96 pVTable->vaDeriveImage = MediaLibvaInterfaceNext::DeriveImage;
97 pVTable->vaDestroyImage = MediaLibvaInterfaceNext::DestroyImage;
98 pVTable->vaSetImagePalette = MediaLibvaInterfaceNext::SetImagePalette;
99 pVTable->vaGetImage = GetImage;
100 pVTable->vaPutImage = PutImage;
101 pVTable->vaQuerySubpictureFormats = MediaLibvaInterfaceNext::QuerySubpictureFormats;
102 pVTable->vaCreateSubpicture = MediaLibvaInterfaceNext::CreateSubpicture;
103 pVTable->vaDestroySubpicture = MediaLibvaInterfaceNext::DestroySubpicture;
104 pVTable->vaSetSubpictureImage = MediaLibvaInterfaceNext::SetSubpictureImage;
105 pVTable->vaSetSubpictureChromakey = MediaLibvaInterfaceNext::SetSubpictureChromakey;
106 pVTable->vaSetSubpictureGlobalAlpha = MediaLibvaInterfaceNext::SetSubpictureGlobalAlpha;
107 pVTable->vaAssociateSubpicture = MediaLibvaInterfaceNext::AssociateSubpicture;
108 pVTable->vaDeassociateSubpicture = MediaLibvaInterfaceNext::DeassociateSubpicture;
109 pVTable->vaQueryDisplayAttributes = MediaLibvaInterfaceNext::QueryDisplayAttributes;
110 pVTable->vaGetDisplayAttributes = MediaLibvaInterfaceNext::GetDisplayAttributes;
111 pVTable->vaSetDisplayAttributes = MediaLibvaInterfaceNext::SetDisplayAttributes;
112 pVTable->vaQueryProcessingRate = QueryProcessingRate;
113 #if VA_CHECK_VERSION(1,10,0)
114 pVTable->vaCopy = MediaLibvaInterfaceNext::Copy;
115 #endif
116
117 // vaTrace
118 pVTable->vaBufferInfo = MediaLibvaInterfaceNext::BufferInfo;
119 pVTable->vaLockSurface = MediaLibvaInterfaceNext::LockSurface;
120 pVTable->vaUnlockSurface = MediaLibvaInterfaceNext::UnlockSurface;
121
122 pVTableVpp->vaQueryVideoProcFilters = MediaLibvaInterfaceNext::QueryVideoProcFilters;
123 pVTableVpp->vaQueryVideoProcFilterCaps = MediaLibvaInterfaceNext::QueryVideoProcFilterCaps;
124 pVTableVpp->vaQueryVideoProcPipelineCaps = MediaLibvaInterfaceNext::QueryVideoProcPipelineCaps;
125
126 #if VA_CHECK_VERSION(1,11,0)
127 pVTableProt->vaCreateProtectedSession = MediaLibvaInterfaceNext::CreateProtectedSession;
128 pVTableProt->vaDestroyProtectedSession = MediaLibvaInterfaceNext::DestroyProtectedSession;
129 pVTableProt->vaAttachProtectedSession = MediaLibvaInterfaceNext::AttachProtectedSession;
130 pVTableProt->vaDetachProtectedSession = MediaLibvaInterfaceNext::DetachProtectedSession;
131 pVTableProt->vaProtectedSessionExecute = MediaLibvaInterfaceNext::ProtectedSessionExecute;
132 #endif
133
134 //pVTable->vaSetSurfaceAttributes = DdiMedia_SetSurfaceAttributes;
135 pVTable->vaGetSurfaceAttributes = MediaLibvaInterfaceNext::GetSurfaceAttributes;
136 //Export PRIMEFD/FLINK to application for buffer sharing with OpenCL/GL
137 pVTable->vaAcquireBufferHandle = MediaLibvaInterfaceNext::AcquireBufferHandle;
138 pVTable->vaReleaseBufferHandle = MediaLibvaInterfaceNext::ReleaseBufferHandle;
139 pVTable->vaExportSurfaceHandle = MediaLibvaInterfaceNext::ExportSurfaceHandle;
140 #ifndef ANDROID
141 pVTable->vaCreateMFContext = CreateMfeContextInternal;
142 pVTable->vaMFAddContext = AddContextInternal;
143 pVTable->vaMFReleaseContext = ReleaseContextInternal;
144 pVTable->vaMFSubmit = DdiEncode_MfeSubmit;
145 #endif
146
147 return VA_STATUS_SUCCESS;
148 }
149
Terminate(VADriverContextP ctx)150 VAStatus MediaLibvaInterface::Terminate(VADriverContextP ctx)
151 {
152 return DdiMedia_Terminate(ctx);
153 }
154
QueryConfigAttributes(VADriverContextP ctx,VAConfigID config_id,VAProfile * profile,VAEntrypoint * entrypoint,VAConfigAttrib * attrib_list,int32_t * num_attribs)155 VAStatus MediaLibvaInterface::QueryConfigAttributes(
156 VADriverContextP ctx,
157 VAConfigID config_id,
158 VAProfile *profile,
159 VAEntrypoint *entrypoint,
160 VAConfigAttrib *attrib_list,
161 int32_t *num_attribs)
162 {
163 DDI_FUNCTION_ENTER();
164
165 DDI_CHK_NULL(ctx, "nullptr ctx", VA_STATUS_ERROR_INVALID_CONTEXT);
166 PDDI_MEDIA_CONTEXT mediaCtx = GetMediaContext(ctx);
167 DDI_CHK_NULL(mediaCtx, "nullptr mediaCtx", VA_STATUS_ERROR_INVALID_CONTEXT);
168
169 auto IsSupportedByAPO = [&](){
170 if (!mediaCtx->m_apoDdiEnabled)
171 return false;
172
173 if (mediaCtx->m_capsNext && mediaCtx->m_capsNext->m_capsTable)
174 {
175 ConfigLinux* configItem = nullptr;
176 configItem = mediaCtx->m_capsNext->m_capsTable->QueryConfigItemFromIndex(config_id);
177 DDI_CHK_NULL(configItem, "Invalid config id!", false);
178 return true;
179 }
180 else
181 {
182 return false;
183 }
184 };
185
186 return MediaLibvaInterfaceNext::QueryConfigAttributes(ctx, config_id, profile, entrypoint, attrib_list, num_attribs);
187 }
188
CreateConfig(VADriverContextP ctx,VAProfile profile,VAEntrypoint entrypoint,VAConfigAttrib * attrib_list,int32_t num_attribs,VAConfigID * config_id)189 VAStatus MediaLibvaInterface::CreateConfig(
190 VADriverContextP ctx,
191 VAProfile profile,
192 VAEntrypoint entrypoint,
193 VAConfigAttrib *attrib_list,
194 int32_t num_attribs,
195 VAConfigID *config_id)
196 {
197 DDI_FUNCTION_ENTER();
198
199 DDI_CHK_NULL(ctx, "nullptr ctx", VA_STATUS_ERROR_INVALID_CONTEXT);
200
201 // query profile and entrypoint from caps.
202 auto IsSupporedByAPO = [&](){
203 PDDI_MEDIA_CONTEXT mediaCtx = GetMediaContext(ctx);
204 if (mediaCtx && !mediaCtx->m_apoDdiEnabled)
205 return false;
206
207 std::vector<VAEntrypoint> entrypointList(ctx->max_entrypoints);
208 int32_t entrypointNum = -1;
209 VAStatus vaStatus = VA_STATUS_SUCCESS;
210 vaStatus = MediaLibvaInterfaceNext::QueryConfigEntrypoints(ctx, profile, entrypointList.data(), &entrypointNum);
211 DDI_CHK_CONDITION((vaStatus != VA_STATUS_SUCCESS), "Invalid Profile", false);
212 auto tempEntrypoint = std::find(entrypointList.begin(), entrypointList.end(), entrypoint);
213 DDI_CHK_CONDITION((tempEntrypoint == entrypointList.end()), "Invalid Entrypoint", false);
214 return true;
215 };
216
217 return MediaLibvaInterfaceNext::CreateConfig(ctx, profile, entrypoint, attrib_list, num_attribs, config_id);
218 }
219
MapBuffer(VADriverContextP ctx,VABufferID buf_id,void ** pbuf)220 VAStatus MediaLibvaInterface::MapBuffer(
221 VADriverContextP ctx,
222 VABufferID buf_id,
223 void **pbuf)
224 {
225 PDDI_MEDIA_CONTEXT mediaCtx = nullptr;
226 uint32_t ctxType = DDI_MEDIA_CONTEXT_TYPE_NONE;
227 DDI_FUNCTION_ENTER();
228
229 mediaCtx = GetMediaContext(ctx);
230 DDI_CHK_NULL(mediaCtx, "nullptr mediaCtx", VA_STATUS_ERROR_INVALID_CONTEXT);
231 ctxType = MediaLibvaCommonNext::GetCtxTypeFromVABufferID(mediaCtx, buf_id);
232
233 return MediaLibvaInterfaceNext::MapBuffer(ctx, buf_id, pbuf);
234 }
235
UnmapBuffer(VADriverContextP ctx,VABufferID buf_id)236 VAStatus MediaLibvaInterface::UnmapBuffer(
237 VADriverContextP ctx,
238 VABufferID buf_id)
239 {
240 PDDI_MEDIA_CONTEXT mediaCtx = nullptr;
241 uint32_t ctxType = DDI_MEDIA_CONTEXT_TYPE_NONE;
242 DDI_FUNCTION_ENTER();
243
244 mediaCtx = GetMediaContext(ctx);
245 DDI_CHK_NULL(mediaCtx, "nullptr mediaCtx", VA_STATUS_ERROR_INVALID_CONTEXT);
246 ctxType = MediaLibvaCommonNext::GetCtxTypeFromVABufferID(mediaCtx, buf_id);
247
248 return MediaLibvaInterfaceNext::UnmapBuffer(ctx, buf_id);
249 }
250
DestroyBuffer(VADriverContextP ctx,VABufferID buffer_id)251 VAStatus MediaLibvaInterface::DestroyBuffer(
252 VADriverContextP ctx,
253 VABufferID buffer_id)
254 {
255 PDDI_MEDIA_CONTEXT mediaCtx = nullptr;
256 uint32_t ctxType = DDI_MEDIA_CONTEXT_TYPE_NONE;
257 DDI_FUNCTION_ENTER();
258
259 mediaCtx = GetMediaContext(ctx);
260 DDI_CHK_NULL(mediaCtx, "nullptr mediaCtx", VA_STATUS_ERROR_INVALID_CONTEXT);
261 ctxType = MediaLibvaCommonNext::GetCtxTypeFromVABufferID(mediaCtx, buffer_id);
262
263 return MediaLibvaInterfaceNext::DestroyBuffer(ctx, buffer_id);
264 }
265
SyncSurface(VADriverContextP ctx,VASurfaceID render_target)266 VAStatus MediaLibvaInterface::SyncSurface(
267 VADriverContextP ctx,
268 VASurfaceID render_target)
269 {
270 PDDI_MEDIA_CONTEXT mediaCtx = nullptr;
271 DDI_MEDIA_SURFACE *ddiSurface = nullptr;
272 DDI_FUNCTION_ENTER();
273
274 mediaCtx = GetMediaContext(ctx);
275 DDI_CHK_NULL(mediaCtx, "nullptr mediaCtx", VA_STATUS_ERROR_INVALID_CONTEXT);
276 ddiSurface = MediaLibvaCommonNext::GetSurfaceFromVASurfaceID(mediaCtx, render_target);
277 DDI_CHK_NULL(ddiSurface, "nullptr ddiSurface", VA_STATUS_ERROR_INVALID_CONTEXT);
278
279 return MediaLibvaInterfaceNext::SyncSurface(ctx, render_target);
280 }
281
282 #if VA_CHECK_VERSION(1, 9, 0)
283
SyncSurface2(VADriverContextP ctx,VASurfaceID surface_id,uint64_t timeout_ns)284 VAStatus MediaLibvaInterface::SyncSurface2(
285 VADriverContextP ctx,
286 VASurfaceID surface_id,
287 uint64_t timeout_ns)
288 {
289 PDDI_MEDIA_CONTEXT mediaCtx = nullptr;
290 DDI_MEDIA_SURFACE *ddiSurface = nullptr;
291 DDI_FUNCTION_ENTER();
292
293 mediaCtx = GetMediaContext(ctx);
294 DDI_CHK_NULL(mediaCtx, "nullptr mediaCtx", VA_STATUS_ERROR_INVALID_CONTEXT);
295 ddiSurface = MediaLibvaCommonNext::GetSurfaceFromVASurfaceID(mediaCtx, surface_id);
296 DDI_CHK_NULL(ddiSurface, "nullptr ddiSurface", VA_STATUS_ERROR_INVALID_CONTEXT);
297
298 return MediaLibvaInterfaceNext::SyncSurface2(ctx, surface_id, timeout_ns);
299 }
300 #endif
301
QuerySurfaceError(VADriverContextP ctx,VASurfaceID render_target,VAStatus error_status,void ** error_info)302 VAStatus MediaLibvaInterface::QuerySurfaceError(
303 VADriverContextP ctx,
304 VASurfaceID render_target,
305 VAStatus error_status,
306 void **error_info)
307 {
308 return DdiMedia_QuerySurfaceError(
309 ctx, render_target, error_status, error_info);
310 }
311
PutSurface(VADriverContextP ctx,VASurfaceID surface,void * draw,int16_t srcx,int16_t srcy,uint16_t srcw,uint16_t srch,int16_t destx,int16_t desty,uint16_t destw,uint16_t desth,VARectangle * cliprects,uint32_t number_cliprects,uint32_t flags)312 VAStatus MediaLibvaInterface::PutSurface(
313 VADriverContextP ctx,
314 VASurfaceID surface,
315 void* draw,
316 int16_t srcx,
317 int16_t srcy,
318 uint16_t srcw,
319 uint16_t srch,
320 int16_t destx,
321 int16_t desty,
322 uint16_t destw,
323 uint16_t desth,
324 VARectangle *cliprects,
325 uint32_t number_cliprects,
326 uint32_t flags)
327 {
328 PDDI_MEDIA_CONTEXT mediaCtx = nullptr;
329 DDI_MEDIA_SURFACE *ddiSurface = nullptr;
330 DDI_FUNCTION_ENTER();
331
332 mediaCtx = GetMediaContext(ctx);
333 DDI_CHK_NULL(mediaCtx, "nullptr mediaCtx", VA_STATUS_ERROR_INVALID_CONTEXT);
334 ddiSurface = MediaLibvaCommonNext::GetSurfaceFromVASurfaceID(mediaCtx, surface);
335 DDI_CHK_NULL(ddiSurface, "nullptr ddiSurface", VA_STATUS_ERROR_INVALID_CONTEXT);
336
337 return MediaLibvaInterfaceNext::PutSurface(ctx, surface, draw, srcx, srcy, srcw, srch, destx,
338 desty, destw, desth, cliprects, number_cliprects, flags);
339 }
340
GetImage(VADriverContextP ctx,VASurfaceID surface,int32_t x,int32_t y,uint32_t width,uint32_t height,VAImageID image)341 VAStatus MediaLibvaInterface::GetImage(
342 VADriverContextP ctx,
343 VASurfaceID surface,
344 int32_t x,
345 int32_t y,
346 uint32_t width,
347 uint32_t height,
348 VAImageID image)
349 {
350 PDDI_MEDIA_CONTEXT mediaCtx = nullptr;
351 DDI_MEDIA_SURFACE *ddiSurface = nullptr;
352 DDI_FUNCTION_ENTER();
353
354 mediaCtx = GetMediaContext(ctx);
355 DDI_CHK_NULL(mediaCtx, "nullptr mediaCtx", VA_STATUS_ERROR_INVALID_CONTEXT);
356 ddiSurface = MediaLibvaCommonNext::GetSurfaceFromVASurfaceID(mediaCtx, surface);
357 DDI_CHK_NULL(ddiSurface, "nullptr ddiSurface", VA_STATUS_ERROR_INVALID_CONTEXT);
358
359 return MediaLibvaInterfaceNext::GetImage(ctx, surface, x, y, width, height, image);
360 }
361
PutImage(VADriverContextP ctx,VASurfaceID surface,VAImageID image,int32_t src_x,int32_t src_y,uint32_t src_width,uint32_t src_height,int32_t dest_x,int32_t dest_y,uint32_t dest_width,uint32_t dest_height)362 VAStatus MediaLibvaInterface::PutImage(
363 VADriverContextP ctx,
364 VASurfaceID surface,
365 VAImageID image,
366 int32_t src_x,
367 int32_t src_y,
368 uint32_t src_width,
369 uint32_t src_height,
370 int32_t dest_x,
371 int32_t dest_y,
372 uint32_t dest_width,
373 uint32_t dest_height)
374 {
375 PDDI_MEDIA_CONTEXT mediaCtx = nullptr;
376 DDI_MEDIA_SURFACE *ddiSurface = nullptr;
377 DDI_FUNCTION_ENTER();
378
379 mediaCtx = GetMediaContext(ctx);
380 DDI_CHK_NULL(mediaCtx, "nullptr mediaCtx", VA_STATUS_ERROR_INVALID_CONTEXT);
381 ddiSurface = MediaLibvaCommonNext::GetSurfaceFromVASurfaceID(mediaCtx, surface);
382 DDI_CHK_NULL(ddiSurface, "nullptr ddiSurface", VA_STATUS_ERROR_INVALID_CONTEXT);
383
384 return MediaLibvaInterfaceNext::PutImage(ctx, surface, image, src_x, src_y, src_width, src_height,
385 dest_x, dest_y, dest_width, dest_height);
386 }
387
QueryDisplayAttributes(VADriverContextP ctx,VADisplayAttribute * attr_list,int32_t * num_attributes)388 VAStatus MediaLibvaInterface::QueryDisplayAttributes(
389 VADriverContextP ctx,
390 VADisplayAttribute *attr_list,
391 int32_t *num_attributes)
392 {
393 DDI_FUNCTION_ENTER();
394
395 return MediaLibvaInterfaceNext::QueryDisplayAttributes(ctx, attr_list, num_attributes);
396 }
397
GetDisplayAttributes(VADriverContextP ctx,VADisplayAttribute * attr_list,int32_t num_attributes)398 VAStatus MediaLibvaInterface::GetDisplayAttributes(
399 VADriverContextP ctx,
400 VADisplayAttribute *attr_list,
401 int32_t num_attributes)
402 {
403 DDI_FUNCTION_ENTER();
404
405 return MediaLibvaInterfaceNext::GetDisplayAttributes(ctx, attr_list, num_attributes);
406 }
407
QueryProcessingRate(VADriverContextP ctx,VAConfigID config_id,VAProcessingRateParameter * proc_buf,uint32_t * processing_rate)408 VAStatus MediaLibvaInterface::QueryProcessingRate(
409 VADriverContextP ctx,
410 VAConfigID config_id,
411 VAProcessingRateParameter *proc_buf,
412 uint32_t *processing_rate)
413 {
414 DDI_FUNCTION_ENTER();
415
416 return DdiMedia_QueryProcessingRate(ctx, config_id, proc_buf, processing_rate);
417 }
418
419 #if VA_CHECK_VERSION(1,11,0)
CreateProtectedSession(VADriverContextP ctx,VAConfigID config_id,VAProtectedSessionID * protected_session)420 VAStatus MediaLibvaInterface::CreateProtectedSession(
421 VADriverContextP ctx,
422 VAConfigID config_id,
423 VAProtectedSessionID *protected_session)
424 {
425 return DdiMediaProtected::DdiMedia_CreateProtectedSession(ctx, config_id, protected_session);
426 }
427
DestroyProtectedSession(VADriverContextP ctx,VAProtectedSessionID protected_session)428 VAStatus MediaLibvaInterface::DestroyProtectedSession(
429 VADriverContextP ctx,
430 VAProtectedSessionID protected_session)
431 {
432 return DdiMediaProtected::DdiMedia_DestroyProtectedSession(ctx, protected_session);
433 }
434
AttachProtectedSession(VADriverContextP ctx,VAContextID context,VAProtectedSessionID protected_session)435 VAStatus MediaLibvaInterface::AttachProtectedSession(
436 VADriverContextP ctx,
437 VAContextID context,
438 VAProtectedSessionID protected_session)
439 {
440 return DdiMediaProtected::DdiMedia_AttachProtectedSession(ctx, context, protected_session);
441 }
442
DetachProtectedSession(VADriverContextP ctx,VAContextID context)443 VAStatus MediaLibvaInterface::DetachProtectedSession(
444 VADriverContextP ctx,
445 VAContextID context)
446 {
447 return DdiMediaProtected::DdiMedia_DetachProtectedSession(ctx, context);
448 }
449
ProtectedSessionExecute(VADriverContextP ctx,VAProtectedSessionID protected_session,VABufferID data)450 VAStatus MediaLibvaInterface::ProtectedSessionExecute(
451 VADriverContextP ctx,
452 VAProtectedSessionID protected_session,
453 VABufferID data)
454 {
455 return DdiMediaProtected::DdiMedia_ProtectedSessionExecute(ctx, protected_session, data);
456 }
457 #endif
458
GetSurfaceAttributes(VADriverContextP ctx,VAConfigID config,VASurfaceAttrib * attrib_list,uint32_t num_attribs)459 VAStatus MediaLibvaInterface::GetSurfaceAttributes(
460 VADriverContextP ctx,
461 VAConfigID config,
462 VASurfaceAttrib *attrib_list,
463 uint32_t num_attribs)
464 {
465 DDI_FUNCTION_ENTER();
466
467 return DdiMedia_GetSurfaceAttributes(ctx, config, attrib_list, num_attribs);
468 }
469
470 #ifndef ANDROID
CreateMfeContextInternal(VADriverContextP ctx,VAMFContextID * mfe_context)471 VAStatus MediaLibvaInterface::CreateMfeContextInternal(
472 VADriverContextP ctx,
473 VAMFContextID *mfe_context)
474 {
475 DDI_FUNCTION_ENTER();
476
477 return DdiMedia_CreateMfeContextInternal(ctx, mfe_context);
478 }
479
AddContextInternal(VADriverContextP ctx,VAContextID context,VAMFContextID mfe_context)480 VAStatus MediaLibvaInterface::AddContextInternal(
481 VADriverContextP ctx,
482 VAContextID context,
483 VAMFContextID mfe_context)
484 {
485 DDI_FUNCTION_ENTER();
486
487 return DdiMedia_AddContextInternal(ctx, context, mfe_context);
488 }
489
ReleaseContextInternal(VADriverContextP ctx,VAContextID context,VAMFContextID mfe_context)490 VAStatus MediaLibvaInterface::ReleaseContextInternal(
491 VADriverContextP ctx,
492 VAContextID context,
493 VAMFContextID mfe_context)
494 {
495 DDI_FUNCTION_ENTER();
496
497 return DdiMedia_ReleaseContextInternal(ctx, context, mfe_context);
498 }
499
MfeSubmit(VADriverContextP ctx,VAMFContextID mfe_context,VAContextID * contexts,int32_t num_contexts)500 VAStatus MediaLibvaInterface::MfeSubmit(
501 VADriverContextP ctx,
502 VAMFContextID mfe_context,
503 VAContextID *contexts,
504 int32_t num_contexts)
505 {
506 DDI_FUNCTION_ENTER();
507
508 return DdiEncode_MfeSubmit(ctx, mfe_context, contexts, num_contexts);
509 }
510
511 #endif
512