xref: /aosp_15_r20/external/intel-media-driver/media_driver/linux/common/ddi/media_libva_interface.cpp (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
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