1e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#ifndef ANDROID_DVR_POSE_CLIENT_INTERNAL_H_ 2e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#define ANDROID_DVR_POSE_CLIENT_INTERNAL_H_ 3e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 4e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <stdint.h> 5e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 6e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <dvr/pose_client.h> 7e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <pdx/file_handle.h> 8e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <private/dvr/sensor_constants.h> 9e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 10e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#ifdef __cplusplus 11e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoextern "C" { 12e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#endif 13e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 14e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// Sensord head pose ring buffer. 15e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkotypedef struct __attribute__((packed, aligned(16))) DvrPoseRingBuffer { 16e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Ring buffer always at the beginning of the structure, as consumers may 17e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // not have access to this parent structure definition. 18e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko DvrPoseAsync ring[kPoseAsyncBufferTotalCount]; 19e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Current vsync_count (where sensord is writing poses from). 20e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko uint32_t vsync_count; 21e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} DvrPoseMetadata; 22e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 23e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// Called by displayd to give vsync count info to the pose service. 24e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// |display_timestamp| Display timestamp is in the middle of scanout. 25e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// |display_period_ns| Nanos between vsyncs. 26e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// |right_eye_photon_offset_ns| Nanos to shift the prediction timestamp for 27e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// the right eye head pose (relative to the left eye prediction). 28e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoint privateDvrPoseNotifyVsync(DvrPose* client, uint32_t vsync_count, 29e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko int64_t display_timestamp, 30e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko int64_t display_period_ns, 31e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko int64_t right_eye_photon_offset_ns); 32e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 33e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// Get file descriptor for access to the shared memory pose buffer. This can be 34e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// used with GL extensions that support shared memory buffer objects. The caller 35e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko// takes ownership of the returned fd and must close it or pass on ownership. 36e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoint privateDvrPoseGetRingBufferFd(DvrPose* client, 37e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko android::pdx::LocalHandle* fd); 38e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 39e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#ifdef __cplusplus 40e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} // extern "C" 41e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#endif 42e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 43e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#endif // ANDROID_DVR_POSE_CLIENT_INTERNAL_H_ 44