1 #include "include/dvr/dvr_api.h"
2 
3 #include <errno.h>
4 #include <utils/Log.h>
5 
6 // Headers from libdvr
7 #include <dvr/dvr_buffer.h>
8 #include <dvr/dvr_buffer_queue.h>
9 #include <dvr/dvr_display_manager.h>
10 #include <dvr/dvr_surface.h>
11 #include <dvr/dvr_vsync.h>
12 
13 // Headers not yet moved into libdvr.
14 // TODO(jwcai) Move these once their callers are moved into Google3.
15 #include <dvr/dvr_hardware_composer_client.h>
16 #include <dvr/pose_client.h>
17 #include <dvr/virtual_touchpad_client.h>
18 
19 extern "C" {
20 
dvrGetApi(void * api,size_t struct_size,int version)21 int dvrGetApi(void* api, size_t struct_size, int version) {
22   ALOGI("dvrGetApi: api=%p struct_size=%zu version=%d", api, struct_size,
23         version);
24   if (version == 1) {
25     if (struct_size != sizeof(DvrApi_v1)) {
26       ALOGE("dvrGetApi: Size mismatch: expected %zu; actual %zu",
27             sizeof(DvrApi_v1), struct_size);
28       return -EINVAL;
29     }
30     DvrApi_v1* dvr_api = static_cast<DvrApi_v1*>(api);
31 
32 // Defines an API entry for V1 (no version suffix).
33 #define DVR_V1_API_ENTRY(name) dvr_api->name = dvr##name
34 
35 #include "include/dvr/dvr_api_entries.h"
36 
37 // Undefine macro definitions to play nice with Google3 style rules.
38 #undef DVR_V1_API_ENTRY
39 
40     return 0;
41   }
42 
43   ALOGE("dvrGetApi: Unknown API version=%d", version);
44   return -EINVAL;
45 }
46 
47 }  // extern "C"
48