| Jiwen 'Steve' Cai | bdcee79 | 2017-03-22 16:59:53 -0700 | [diff] [blame] | 1 | #include "include/dvr/dvr_api.h" | 
|  | 2 |  | 
|  | 3 | #include <errno.h> | 
| Corey Tabaka | 2251d82 | 2017-04-20 16:04:07 -0700 | [diff] [blame] | 4 | #include <utils/Log.h> | 
| Jiwen 'Steve' Cai | bdcee79 | 2017-03-22 16:59:53 -0700 | [diff] [blame] | 5 |  | 
| Kevin Schoedel | d8fccf0 | 2017-06-05 11:13:20 -0400 | [diff] [blame] | 6 | #include <algorithm> | 
|  | 7 |  | 
| Jiwen 'Steve' Cai | bdcee79 | 2017-03-22 16:59:53 -0700 | [diff] [blame] | 8 | // Headers from libdvr | 
| Jiwen 'Steve' Cai | bdcee79 | 2017-03-22 16:59:53 -0700 | [diff] [blame] | 9 | #include <dvr/dvr_buffer.h> | 
| Jiwen 'Steve' Cai | 2d82ceb | 2017-03-22 17:26:00 -0700 | [diff] [blame] | 10 | #include <dvr/dvr_buffer_queue.h> | 
| Hendrik Wagenaar | bcb03d0 | 2017-05-23 14:59:08 -0700 | [diff] [blame] | 11 | #include <dvr/dvr_configuration_data.h> | 
| Corey Tabaka | 2251d82 | 2017-04-20 16:04:07 -0700 | [diff] [blame] | 12 | #include <dvr/dvr_display_manager.h> | 
| Corey Tabaka | feb636d | 2017-06-23 16:20:07 -0700 | [diff] [blame] | 13 | #include <dvr/dvr_performance.h> | 
| Jiwen 'Steve' Cai | bdcee79 | 2017-03-22 16:59:53 -0700 | [diff] [blame] | 14 | #include <dvr/dvr_surface.h> | 
| Corey Tabaka | 2251d82 | 2017-04-20 16:04:07 -0700 | [diff] [blame] | 15 | #include <dvr/dvr_vsync.h> | 
| Jiwen 'Steve' Cai | bdcee79 | 2017-03-22 16:59:53 -0700 | [diff] [blame] | 16 |  | 
|  | 17 | // Headers not yet moved into libdvr. | 
|  | 18 | // TODO(jwcai) Move these once their callers are moved into Google3. | 
| Daniel Nicoara | 37cdc8d | 2017-03-27 16:56:05 -0400 | [diff] [blame] | 19 | #include <dvr/dvr_hardware_composer_client.h> | 
| Jiwen 'Steve' Cai | bdcee79 | 2017-03-22 16:59:53 -0700 | [diff] [blame] | 20 | #include <dvr/pose_client.h> | 
|  | 21 | #include <dvr/virtual_touchpad_client.h> | 
|  | 22 |  | 
|  | 23 | extern "C" { | 
|  | 24 |  | 
| Steven Thomas | 3be0aa6 | 2017-05-08 15:45:30 -0700 | [diff] [blame] | 25 | int dvrGetApi(void* api, size_t struct_size, int version) { | 
| Corey Tabaka | 2251d82 | 2017-04-20 16:04:07 -0700 | [diff] [blame] | 26 | ALOGI("dvrGetApi: api=%p struct_size=%zu version=%d", api, struct_size, | 
|  | 27 | version); | 
| Jiwen 'Steve' Cai | bdcee79 | 2017-03-22 16:59:53 -0700 | [diff] [blame] | 28 | if (version == 1) { | 
| Kevin Schoedel | d8fccf0 | 2017-06-05 11:13:20 -0400 | [diff] [blame] | 29 | // New entry points are added at the end. If the caller's struct and | 
|  | 30 | // this library have different sizes, we define the entry points in common. | 
|  | 31 | // The caller is expected to handle unset entry points if necessary. | 
|  | 32 | size_t clamped_struct_size = std::min(struct_size, sizeof(DvrApi_v1)); | 
| Jiwen 'Steve' Cai | bdcee79 | 2017-03-22 16:59:53 -0700 | [diff] [blame] | 33 | DvrApi_v1* dvr_api = static_cast<DvrApi_v1*>(api); | 
|  | 34 |  | 
| Corey Tabaka | 2251d82 | 2017-04-20 16:04:07 -0700 | [diff] [blame] | 35 | // Defines an API entry for V1 (no version suffix). | 
| Kevin Schoedel | d8fccf0 | 2017-06-05 11:13:20 -0400 | [diff] [blame] | 36 | #define DVR_V1_API_ENTRY(name)                                 \ | 
|  | 37 | do {                                                         \ | 
|  | 38 | if ((offsetof(DvrApi_v1, name) + sizeof(dvr_api->name)) <= \ | 
|  | 39 | clamped_struct_size) {                                 \ | 
|  | 40 | dvr_api->name = dvr##name;                               \ | 
|  | 41 | }                                                          \ | 
|  | 42 | } while (0) | 
| Jiwen 'Steve' Cai | bdcee79 | 2017-03-22 16:59:53 -0700 | [diff] [blame] | 43 |  | 
| Jiwen 'Steve' Cai | 0262d60 | 2018-04-10 17:26:50 -0700 | [diff] [blame] | 44 | #define DVR_V1_API_ENTRY_DEPRECATED(name)                      \ | 
|  | 45 | do {                                                         \ | 
|  | 46 | if ((offsetof(DvrApi_v1, name) + sizeof(dvr_api->name)) <= \ | 
|  | 47 | clamped_struct_size) {                                 \ | 
|  | 48 | dvr_api->name = nullptr;                                 \ | 
|  | 49 | }                                                          \ | 
|  | 50 | } while (0) | 
|  | 51 |  | 
| Corey Tabaka | 2251d82 | 2017-04-20 16:04:07 -0700 | [diff] [blame] | 52 | #include "include/dvr/dvr_api_entries.h" | 
| Jiwen 'Steve' Cai | bdcee79 | 2017-03-22 16:59:53 -0700 | [diff] [blame] | 53 |  | 
| Corey Tabaka | 2251d82 | 2017-04-20 16:04:07 -0700 | [diff] [blame] | 54 | // Undefine macro definitions to play nice with Google3 style rules. | 
|  | 55 | #undef DVR_V1_API_ENTRY | 
| Jiwen 'Steve' Cai | 0262d60 | 2018-04-10 17:26:50 -0700 | [diff] [blame] | 56 | #undef DVR_V1_API_ENTRY_DEPRECATED | 
| Daniel Nicoara | 37cdc8d | 2017-03-27 16:56:05 -0400 | [diff] [blame] | 57 |  | 
| Jiwen 'Steve' Cai | bdcee79 | 2017-03-22 16:59:53 -0700 | [diff] [blame] | 58 | return 0; | 
|  | 59 | } | 
| Corey Tabaka | 2251d82 | 2017-04-20 16:04:07 -0700 | [diff] [blame] | 60 |  | 
|  | 61 | ALOGE("dvrGetApi: Unknown API version=%d", version); | 
| Jiwen 'Steve' Cai | bdcee79 | 2017-03-22 16:59:53 -0700 | [diff] [blame] | 62 | return -EINVAL; | 
|  | 63 | } | 
|  | 64 |  | 
|  | 65 | }  // extern "C" |