Implement server side playback timestamps with 64 bit accuracy
Provide server timestamps if the HAL doesn't provide it.
Provide monotonic - boottime translation.
Integrate record timestamps and playback timestamps together.
Bug: 17472992
Bug: 22871200
Bug: 26400089
Bug: 26682703
Change-Id: If1974f94232fcce7ba0bbcdf63d9e54ed51918ff
diff --git a/media/libnbaio/AudioStreamOutSink.cpp b/media/libnbaio/AudioStreamOutSink.cpp
index 3f4e0bb..ee44678 100644
--- a/media/libnbaio/AudioStreamOutSink.cpp
+++ b/media/libnbaio/AudioStreamOutSink.cpp
@@ -66,18 +66,20 @@
return ret;
}
-status_t AudioStreamOutSink::getTimestamp(AudioTimestamp& timestamp)
+status_t AudioStreamOutSink::getTimestamp(ExtendedTimestamp ×tamp)
{
if (mStream->get_presentation_position == NULL) {
return INVALID_OPERATION;
}
- // FIXME position64 won't be needed after AudioTimestamp.mPosition is changed to uint64_t
+
uint64_t position64;
- int ok = mStream->get_presentation_position(mStream, &position64, ×tamp.mTime);
- if (ok != 0) {
+ struct timespec time;
+ if (mStream->get_presentation_position(mStream, &position64, &time) != OK) {
return INVALID_OPERATION;
}
- timestamp.mPosition = position64;
+ timestamp.mPosition[ExtendedTimestamp::LOCATION_KERNEL] = position64;
+ timestamp.mTimeNs[ExtendedTimestamp::LOCATION_KERNEL] =
+ time.tv_sec * 1000000000LL + time.tv_nsec;
return OK;
}