blob: e099f6a699309cef82ecdb5e6edd739749a630ac [file] [log] [blame]
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -07001#include "include/dvr/dvr_api.h"
2
3#include <errno.h>
Corey Tabaka2251d822017-04-20 16:04:07 -07004#include <utils/Log.h>
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -07005
Kevin Schoedeld8fccf02017-06-05 11:13:20 -04006#include <algorithm>
7
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -07008// Headers from libdvr
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -07009#include <dvr/dvr_buffer.h>
Jiwen 'Steve' Cai2d82ceb2017-03-22 17:26:00 -070010#include <dvr/dvr_buffer_queue.h>
Hendrik Wagenaarbcb03d02017-05-23 14:59:08 -070011#include <dvr/dvr_configuration_data.h>
Corey Tabaka2251d822017-04-20 16:04:07 -070012#include <dvr/dvr_display_manager.h>
Corey Tabakafeb636d2017-06-23 16:20:07 -070013#include <dvr/dvr_performance.h>
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070014#include <dvr/dvr_surface.h>
Jiwen 'Steve' Caife723a52018-05-18 18:53:23 -070015#include <dvr/dvr_tracking.h>
Corey Tabaka2251d822017-04-20 16:04:07 -070016#include <dvr/dvr_vsync.h>
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070017
18// Headers not yet moved into libdvr.
19// TODO(jwcai) Move these once their callers are moved into Google3.
Daniel Nicoara37cdc8d2017-03-27 16:56:05 -040020#include <dvr/dvr_hardware_composer_client.h>
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070021#include <dvr/pose_client.h>
22#include <dvr/virtual_touchpad_client.h>
23
24extern "C" {
25
Steven Thomas3be0aa62017-05-08 15:45:30 -070026int dvrGetApi(void* api, size_t struct_size, int version) {
Corey Tabaka2251d822017-04-20 16:04:07 -070027 ALOGI("dvrGetApi: api=%p struct_size=%zu version=%d", api, struct_size,
28 version);
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070029 if (version == 1) {
Kevin Schoedeld8fccf02017-06-05 11:13:20 -040030 // New entry points are added at the end. If the caller's struct and
31 // this library have different sizes, we define the entry points in common.
32 // The caller is expected to handle unset entry points if necessary.
33 size_t clamped_struct_size = std::min(struct_size, sizeof(DvrApi_v1));
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070034 DvrApi_v1* dvr_api = static_cast<DvrApi_v1*>(api);
35
Corey Tabaka2251d822017-04-20 16:04:07 -070036// Defines an API entry for V1 (no version suffix).
Kevin Schoedeld8fccf02017-06-05 11:13:20 -040037#define DVR_V1_API_ENTRY(name) \
38 do { \
39 if ((offsetof(DvrApi_v1, name) + sizeof(dvr_api->name)) <= \
40 clamped_struct_size) { \
41 dvr_api->name = dvr##name; \
42 } \
43 } while (0)
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070044
Jiwen 'Steve' Cai0262d602018-04-10 17:26:50 -070045#define DVR_V1_API_ENTRY_DEPRECATED(name) \
46 do { \
47 if ((offsetof(DvrApi_v1, name) + sizeof(dvr_api->name)) <= \
48 clamped_struct_size) { \
49 dvr_api->name = nullptr; \
50 } \
51 } while (0)
52
Corey Tabaka2251d822017-04-20 16:04:07 -070053#include "include/dvr/dvr_api_entries.h"
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070054
Corey Tabaka2251d822017-04-20 16:04:07 -070055// Undefine macro definitions to play nice with Google3 style rules.
56#undef DVR_V1_API_ENTRY
Jiwen 'Steve' Cai0262d602018-04-10 17:26:50 -070057#undef DVR_V1_API_ENTRY_DEPRECATED
Daniel Nicoara37cdc8d2017-03-27 16:56:05 -040058
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070059 return 0;
60 }
Corey Tabaka2251d822017-04-20 16:04:07 -070061
62 ALOGE("dvrGetApi: Unknown API version=%d", version);
Jiwen 'Steve' Caibdcee792017-03-22 16:59:53 -070063 return -EINVAL;
64}
65
66} // extern "C"