1 /*############################################################################
2   # Copyright (C) 2005 Intel Corporation
3   #
4   # SPDX-License-Identifier: MIT
5   ############################################################################*/
6 
7 #ifdef LIBVA_ANDROID_SUPPORT
8     #ifdef ANDROID
9 
10         #include "vaapi_utils_android.h"
11 
CreateLibVA(int)12 CLibVA* CreateLibVA(int) {
13     return new AndroidLibVA;
14 }
15 
16 /*------------------------------------------------------------------------------*/
17 
18 typedef unsigned int vaapiAndroidDisplay;
19 
20         #define VAAPI_ANDROID_DEFAULT_DISPLAY 0x18c34078
21 
AndroidLibVA(void)22 AndroidLibVA::AndroidLibVA(void) : CLibVA(MFX_LIBVA_AUTO), m_display(NULL) {
23     VAStatus va_res   = VA_STATUS_SUCCESS;
24     mfxStatus sts     = MFX_ERR_NONE;
25     int major_version = 0, minor_version = 0;
26     vaapiAndroidDisplay* display = NULL;
27 
28     m_display = display = (vaapiAndroidDisplay*)malloc(sizeof(vaapiAndroidDisplay));
29     if (NULL == m_display)
30         sts = MFX_ERR_NOT_INITIALIZED;
31     else
32         *display = VAAPI_ANDROID_DEFAULT_DISPLAY;
33 
34     if (MFX_ERR_NONE == sts) {
35         m_va_dpy = vaGetDisplay(m_display);
36         if (!m_va_dpy) {
37             free(m_display);
38             sts = MFX_ERR_NULL_PTR;
39         }
40     }
41     if (MFX_ERR_NONE == sts) {
42         va_res = vaInitialize(m_va_dpy, &major_version, &minor_version);
43         sts    = va_to_mfx_status(va_res);
44         if (MFX_ERR_NONE != sts) {
45             free(display);
46             m_display = NULL;
47         }
48     }
49     if (MFX_ERR_NONE != sts)
50         throw std::bad_alloc();
51 }
52 
~AndroidLibVA(void)53 AndroidLibVA::~AndroidLibVA(void) {
54     if (m_va_dpy) {
55         vaTerminate(m_va_dpy);
56     }
57     if (m_display) {
58         free(m_display);
59     }
60 }
61 
62     #endif // #ifdef ANDROID
63 #endif // #ifdef LIBVA_ANDROID_SUPPORT
64