Loading include/media/AudioTrack.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -333,6 +333,10 @@ public: */ */ ssize_t getBufferSizeInFrames(); ssize_t getBufferSizeInFrames(); /* Returns the buffer duration in microseconds at current playback rate. */ status_t getBufferDurationInUs(int64_t *duration); /* Set the effective size of audio buffer that an application writes to. /* Set the effective size of audio buffer that an application writes to. * This is used to determine the amount of available room in the buffer, * This is used to determine the amount of available room in the buffer, * which determines when a write will block. * which determines when a write will block. Loading include/media/MediaPlayerInterface.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -104,6 +104,7 @@ public: virtual audio_session_t getSessionId() const = 0; virtual audio_session_t getSessionId() const = 0; virtual audio_stream_type_t getAudioStreamType() const = 0; virtual audio_stream_type_t getAudioStreamType() const = 0; virtual uint32_t getSampleRate() const = 0; virtual uint32_t getSampleRate() const = 0; virtual int64_t getBufferDurationInUs() const = 0; // If no callback is specified, use the "write" API below to submit // If no callback is specified, use the "write" API below to submit // audio data. // audio data. Loading media/libmedia/AudioTrack.cpp +18 −0 Original line number Original line Diff line number Diff line Loading @@ -875,6 +875,24 @@ ssize_t AudioTrack::getBufferSizeInFrames() return (ssize_t) mProxy->getBufferSizeInFrames(); return (ssize_t) mProxy->getBufferSizeInFrames(); } } status_t AudioTrack::getBufferDurationInUs(int64_t *duration) { if (duration == nullptr) { return BAD_VALUE; } AutoMutex lock(mLock); if (mOutput == AUDIO_IO_HANDLE_NONE || mProxy.get() == 0) { return NO_INIT; } ssize_t bufferSizeInFrames = (ssize_t) mProxy->getBufferSizeInFrames(); if (bufferSizeInFrames < 0) { return (status_t)bufferSizeInFrames; } *duration = (int64_t)((double)bufferSizeInFrames * 1000000 / ((double)mSampleRate * mPlaybackRate.mSpeed)); return NO_ERROR; } ssize_t AudioTrack::setBufferSizeInFrames(size_t bufferSizeInFrames) ssize_t AudioTrack::setBufferSizeInFrames(size_t bufferSizeInFrames) { { AutoMutex lock(mLock); AutoMutex lock(mLock); Loading media/libmediaplayerservice/MediaPlayerService.cpp +13 −0 Original line number Original line Diff line number Diff line Loading @@ -2127,6 +2127,19 @@ uint32_t MediaPlayerService::AudioOutput::getSampleRate() const return mTrack->getSampleRate(); return mTrack->getSampleRate(); } } int64_t MediaPlayerService::AudioOutput::getBufferDurationInUs() const { Mutex::Autolock lock(mLock); if (mTrack == 0) { return 0; } int64_t duration; if (mTrack->getBufferDurationInUs(&duration) != OK) { return 0; } return duration; } //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// struct CallbackThread : public Thread { struct CallbackThread : public Thread { Loading media/libmediaplayerservice/MediaPlayerService.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -92,6 +92,7 @@ class MediaPlayerService : public BnMediaPlayerService virtual status_t getFramesWritten(uint32_t *frameswritten) const; virtual status_t getFramesWritten(uint32_t *frameswritten) const; virtual audio_session_t getSessionId() const; virtual audio_session_t getSessionId() const; virtual uint32_t getSampleRate() const; virtual uint32_t getSampleRate() const; virtual int64_t getBufferDurationInUs() const; virtual status_t open( virtual status_t open( uint32_t sampleRate, int channelCount, audio_channel_mask_t channelMask, uint32_t sampleRate, int channelCount, audio_channel_mask_t channelMask, Loading Loading
include/media/AudioTrack.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -333,6 +333,10 @@ public: */ */ ssize_t getBufferSizeInFrames(); ssize_t getBufferSizeInFrames(); /* Returns the buffer duration in microseconds at current playback rate. */ status_t getBufferDurationInUs(int64_t *duration); /* Set the effective size of audio buffer that an application writes to. /* Set the effective size of audio buffer that an application writes to. * This is used to determine the amount of available room in the buffer, * This is used to determine the amount of available room in the buffer, * which determines when a write will block. * which determines when a write will block. Loading
include/media/MediaPlayerInterface.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -104,6 +104,7 @@ public: virtual audio_session_t getSessionId() const = 0; virtual audio_session_t getSessionId() const = 0; virtual audio_stream_type_t getAudioStreamType() const = 0; virtual audio_stream_type_t getAudioStreamType() const = 0; virtual uint32_t getSampleRate() const = 0; virtual uint32_t getSampleRate() const = 0; virtual int64_t getBufferDurationInUs() const = 0; // If no callback is specified, use the "write" API below to submit // If no callback is specified, use the "write" API below to submit // audio data. // audio data. Loading
media/libmedia/AudioTrack.cpp +18 −0 Original line number Original line Diff line number Diff line Loading @@ -875,6 +875,24 @@ ssize_t AudioTrack::getBufferSizeInFrames() return (ssize_t) mProxy->getBufferSizeInFrames(); return (ssize_t) mProxy->getBufferSizeInFrames(); } } status_t AudioTrack::getBufferDurationInUs(int64_t *duration) { if (duration == nullptr) { return BAD_VALUE; } AutoMutex lock(mLock); if (mOutput == AUDIO_IO_HANDLE_NONE || mProxy.get() == 0) { return NO_INIT; } ssize_t bufferSizeInFrames = (ssize_t) mProxy->getBufferSizeInFrames(); if (bufferSizeInFrames < 0) { return (status_t)bufferSizeInFrames; } *duration = (int64_t)((double)bufferSizeInFrames * 1000000 / ((double)mSampleRate * mPlaybackRate.mSpeed)); return NO_ERROR; } ssize_t AudioTrack::setBufferSizeInFrames(size_t bufferSizeInFrames) ssize_t AudioTrack::setBufferSizeInFrames(size_t bufferSizeInFrames) { { AutoMutex lock(mLock); AutoMutex lock(mLock); Loading
media/libmediaplayerservice/MediaPlayerService.cpp +13 −0 Original line number Original line Diff line number Diff line Loading @@ -2127,6 +2127,19 @@ uint32_t MediaPlayerService::AudioOutput::getSampleRate() const return mTrack->getSampleRate(); return mTrack->getSampleRate(); } } int64_t MediaPlayerService::AudioOutput::getBufferDurationInUs() const { Mutex::Autolock lock(mLock); if (mTrack == 0) { return 0; } int64_t duration; if (mTrack->getBufferDurationInUs(&duration) != OK) { return 0; } return duration; } //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// struct CallbackThread : public Thread { struct CallbackThread : public Thread { Loading
media/libmediaplayerservice/MediaPlayerService.h +1 −0 Original line number Original line Diff line number Diff line Loading @@ -92,6 +92,7 @@ class MediaPlayerService : public BnMediaPlayerService virtual status_t getFramesWritten(uint32_t *frameswritten) const; virtual status_t getFramesWritten(uint32_t *frameswritten) const; virtual audio_session_t getSessionId() const; virtual audio_session_t getSessionId() const; virtual uint32_t getSampleRate() const; virtual uint32_t getSampleRate() const; virtual int64_t getBufferDurationInUs() const; virtual status_t open( virtual status_t open( uint32_t sampleRate, int channelCount, audio_channel_mask_t channelMask, uint32_t sampleRate, int channelCount, audio_channel_mask_t channelMask, Loading