Loading include/media/AudioTimestamp.h 0 → 100644 +33 −0 Original line number Diff line number Diff line /* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ANDROID_AUDIO_TIMESTAMP_H #define ANDROID_AUDIO_TIMESTAMP_H #include <time.h> class AudioTimestamp { public: AudioTimestamp() : mPosition(0) { mTime.tv_sec = 0; mTime.tv_nsec = 0; } // FIXME change type to match android.media.AudioTrack uint32_t mPosition; // a frame position in AudioTrack::getPosition() units struct timespec mTime; // corresponding CLOCK_MONOTONIC when frame is expected to present }; #endif // ANDROID_AUDIO_TIMESTAMP_H include/media/AudioTrack.h +16 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <cutils/sched_policy.h> #include <media/AudioSystem.h> #include <media/AudioTimestamp.h> #include <media/IAudioTrack.h> #include <utils/threads.h> Loading Loading @@ -62,6 +63,9 @@ public: // voluntary invalidation by mediaserver, or mediaserver crash. EVENT_STREAM_END = 7, // Sent after all the buffers queued in AF and HW are played // back (after stop is called) EVENT_NEW_TIMESTAMP = 8, // Delivered periodically and when there's a significant change // in the mapping from frame position to presentation time. // See AudioTimestamp for the information included with event. }; /* Client should declare Buffer on the stack and pass address to obtainBuffer() Loading Loading @@ -107,6 +111,8 @@ public: * - EVENT_NEW_POS: pointer to const uint32_t containing the new position in frames. * - EVENT_BUFFER_END: unused. * - EVENT_NEW_IAUDIOTRACK: unused. * - EVENT_STREAM_END: unused. * - EVENT_NEW_TIMESTAMP: pointer to const AudioTimestamp. */ typedef void (*callback_t)(int event, void* user, void *info); Loading Loading @@ -564,6 +570,16 @@ public: /* Get parameters */ String8 getParameters(const String8& keys); /* Poll for a timestamp on demand. * Use if EVENT_NEW_TIMESTAMP is not delivered often enough for your needs, * or if you need to get the most recent timestamp outside of the event callback handler. * Caution: calling this method too often may be inefficient; * if you need a high resolution mapping between frame position and presentation time, * consider implementing that at application level, based on the low resolution timestamps. * Returns NO_ERROR if timestamp is valid. */ status_t getTimestamp(AudioTimestamp& timestamp); protected: /* copying audio tracks is not allowed */ AudioTrack(const AudioTrack& other); Loading media/libmedia/AudioTrack.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -1715,6 +1715,11 @@ status_t AudioTrack::setParameters(const String8& keyValuePairs) } } status_t AudioTrack::getTimestamp(AudioTimestamp& timestamp) { return INVALID_OPERATION; } String8 AudioTrack::getParameters(const String8& keys) { if (mOutput) { Loading Loading
include/media/AudioTimestamp.h 0 → 100644 +33 −0 Original line number Diff line number Diff line /* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ANDROID_AUDIO_TIMESTAMP_H #define ANDROID_AUDIO_TIMESTAMP_H #include <time.h> class AudioTimestamp { public: AudioTimestamp() : mPosition(0) { mTime.tv_sec = 0; mTime.tv_nsec = 0; } // FIXME change type to match android.media.AudioTrack uint32_t mPosition; // a frame position in AudioTrack::getPosition() units struct timespec mTime; // corresponding CLOCK_MONOTONIC when frame is expected to present }; #endif // ANDROID_AUDIO_TIMESTAMP_H
include/media/AudioTrack.h +16 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <cutils/sched_policy.h> #include <media/AudioSystem.h> #include <media/AudioTimestamp.h> #include <media/IAudioTrack.h> #include <utils/threads.h> Loading Loading @@ -62,6 +63,9 @@ public: // voluntary invalidation by mediaserver, or mediaserver crash. EVENT_STREAM_END = 7, // Sent after all the buffers queued in AF and HW are played // back (after stop is called) EVENT_NEW_TIMESTAMP = 8, // Delivered periodically and when there's a significant change // in the mapping from frame position to presentation time. // See AudioTimestamp for the information included with event. }; /* Client should declare Buffer on the stack and pass address to obtainBuffer() Loading Loading @@ -107,6 +111,8 @@ public: * - EVENT_NEW_POS: pointer to const uint32_t containing the new position in frames. * - EVENT_BUFFER_END: unused. * - EVENT_NEW_IAUDIOTRACK: unused. * - EVENT_STREAM_END: unused. * - EVENT_NEW_TIMESTAMP: pointer to const AudioTimestamp. */ typedef void (*callback_t)(int event, void* user, void *info); Loading Loading @@ -564,6 +570,16 @@ public: /* Get parameters */ String8 getParameters(const String8& keys); /* Poll for a timestamp on demand. * Use if EVENT_NEW_TIMESTAMP is not delivered often enough for your needs, * or if you need to get the most recent timestamp outside of the event callback handler. * Caution: calling this method too often may be inefficient; * if you need a high resolution mapping between frame position and presentation time, * consider implementing that at application level, based on the low resolution timestamps. * Returns NO_ERROR if timestamp is valid. */ status_t getTimestamp(AudioTimestamp& timestamp); protected: /* copying audio tracks is not allowed */ AudioTrack(const AudioTrack& other); Loading
media/libmedia/AudioTrack.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -1715,6 +1715,11 @@ status_t AudioTrack::setParameters(const String8& keyValuePairs) } } status_t AudioTrack::getTimestamp(AudioTimestamp& timestamp) { return INVALID_OPERATION; } String8 AudioTrack::getParameters(const String8& keys) { if (mOutput) { Loading