summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrik Ryd <patrik.ryd@linaro.org>2012-05-16 16:39:01 +0200
committerPatrik Ryd <patrik.ryd@linaro.org>2012-05-16 16:39:01 +0200
commitf5c200d9511f0a47371ffd96098871e136a1d638 (patch)
treed2e8b6e8538c9f4e3312cd2eede89fe19ce64fd7
parente6a8c10d3d6d652c0325d965a87494faa84b1aca (diff)
downloadbase-f5c200d9511f0a47371ffd96098871e136a1d638.tar.gz
Revert "Add support for update of audio output latency on Snowball"
This reverts commit 33124f1052e0a6702d3b7a7c6e57cfed946e9161.
-rw-r--r--include/media/AudioParameter.h1
-rw-r--r--include/media/AudioSystem.h13
-rw-r--r--include/media/AudioTrack.h7
-rw-r--r--include/media/MediaPlayerInterface.h4
-rw-r--r--include/media/stagefright/AudioPlayer.h1
-rw-r--r--media/libmedia/AudioParameter.cpp1
-rw-r--r--media/libmedia/AudioSystem.cpp39
-rw-r--r--media/libmedia/AudioTrack.cpp25
-rw-r--r--media/libmediaplayerservice/MediaPlayerService.cpp39
-rw-r--r--media/libmediaplayerservice/MediaPlayerService.h7
-rw-r--r--media/libstagefright/AudioPlayer.cpp22
-rw-r--r--services/audioflinger/AudioFlinger.cpp7
12 files changed, 26 insertions, 140 deletions
diff --git a/include/media/AudioParameter.h b/include/media/AudioParameter.h
index 86b0e13dd2cf..79d5d82ddb8a 100644
--- a/include/media/AudioParameter.h
+++ b/include/media/AudioParameter.h
@@ -46,7 +46,6 @@ public:
static const char *keyChannels;
static const char *keyFrameCount;
static const char *keyInputSource;
- static const char *keyLatency;
String8 toString();
diff --git a/include/media/AudioSystem.h b/include/media/AudioSystem.h
index 2072dced5cac..95d539efec8c 100644
--- a/include/media/AudioSystem.h
+++ b/include/media/AudioSystem.h
@@ -30,7 +30,7 @@
namespace android {
typedef void (*audio_error_callback)(status_t err);
-typedef void (*latency_update_callback)(void *cookie, audio_io_handle_t output, uint32_t latency);
+
class IAudioPolicyService;
class String8;
@@ -110,9 +110,6 @@ public:
static int newAudioSessionId();
static void acquireAudioSessionId(int audioSession);
static void releaseAudioSessionId(int audioSession);
- static int registerLatencyNotificationClient(latency_update_callback cb, void *cookie);
- static void unregisterLatencyNotificationClient(int clientId);
-
// types of io configuration change events received with ioConfigChanged()
enum io_config_event {
OUTPUT_OPENED,
@@ -224,11 +221,6 @@ private:
virtual void binderDied(const wp<IBinder>& who);
};
- struct NotificationClient : public RefBase {
- latency_update_callback mCb;
- void * mCookie;
- };
-
static sp<AudioFlingerClient> gAudioFlingerClient;
static sp<AudioPolicyServiceClient> gAudioPolicyServiceClient;
friend class AudioFlingerClient;
@@ -251,9 +243,6 @@ private:
// list of output descriptors containing cached parameters
// (sampling rate, framecount, channel count...)
static DefaultKeyedVector<audio_io_handle_t, OutputDescriptor *> gOutputs;
- static Mutex gLatencyLock;
- static int gNextUniqueLatencyId;
- static DefaultKeyedVector<int, sp<AudioSystem::NotificationClient> > gLatencyNotificationClients;
};
}; // namespace android
diff --git a/include/media/AudioTrack.h b/include/media/AudioTrack.h
index eaea86c91aaa..62516c6c54a0 100644
--- a/include/media/AudioTrack.h
+++ b/include/media/AudioTrack.h
@@ -55,8 +55,7 @@ public:
EVENT_LOOP_END = 2, // Sample loop end was reached; playback restarted from loop start if loop count was not 0.
EVENT_MARKER = 3, // Playback head is at the specified marker position (See setMarkerPosition()).
EVENT_NEW_POS = 4, // Playback head is at a new position (See setPositionUpdatePeriod()).
- EVENT_BUFFER_END = 5, // Playback head is at the end of the buffer.
- EVENT_LATENCY_CHANGED = 6 // Audio output has been reconfigured and latency has changed.
+ EVENT_BUFFER_END = 5 // Playback head is at the end of the buffer.
};
/* Create Buffer on the stack and pass it to obtainBuffer()
@@ -452,9 +451,6 @@ private:
status_t setLoop_l(uint32_t loopStart, uint32_t loopEnd, int loopCount);
audio_io_handle_t getOutput_l();
status_t restoreTrack_l(audio_track_cblk_t*& cblk, bool fromStart);
- static void LatencyCallbackWrapper(void *cookie, audio_io_handle_t output, uint32_t latency);
- void latencyCallback(audio_io_handle_t output, uint32_t latency);
-
sp<IAudioTrack> mAudioTrack;
sp<IMemory> mCblkMemory;
sp<AudioTrackThread> mAudioTrackThread;
@@ -492,7 +488,6 @@ private:
int mAuxEffectId;
Mutex mLock;
status_t mRestoreStatus;
- int mLatencyClientId;
};
diff --git a/include/media/MediaPlayerInterface.h b/include/media/MediaPlayerInterface.h
index 256a2bcd9624..80f43a342a55 100644
--- a/include/media/MediaPlayerInterface.h
+++ b/include/media/MediaPlayerInterface.h
@@ -68,7 +68,6 @@ public:
// Callback returns the number of bytes actually written to the buffer.
typedef size_t (*AudioCallback)(
AudioSink *audioSink, void *buffer, size_t size, void *cookie);
- typedef void (*LatencyCallback)(uint32_t latency, void *cookie);
virtual ~AudioSink() {}
virtual bool ready() const = 0; // audio output is open and ready
@@ -89,8 +88,7 @@ public:
int format=AUDIO_FORMAT_PCM_16_BIT,
int bufferCount=DEFAULT_AUDIOSINK_BUFFERCOUNT,
AudioCallback cb = NULL,
- void *cookie = NULL,
- LatencyCallback latencyCb = NULL) = 0;
+ void *cookie = NULL) = 0;
virtual void start() = 0;
virtual ssize_t write(const void* buffer, size_t size) = 0;
diff --git a/include/media/stagefright/AudioPlayer.h b/include/media/stagefright/AudioPlayer.h
index c878bee9883c..ae5937d469aa 100644
--- a/include/media/stagefright/AudioPlayer.h
+++ b/include/media/stagefright/AudioPlayer.h
@@ -101,7 +101,6 @@ private:
static size_t AudioSinkCallback(
MediaPlayerBase::AudioSink *audioSink,
void *data, size_t size, void *me);
- static void LatencyCallback(uint32_t latency, void *cookie);
size_t fillBuffer(void *data, size_t size);
int64_t getRealTimeUsLocked() const;
diff --git a/media/libmedia/AudioParameter.cpp b/media/libmedia/AudioParameter.cpp
index 8d6b71be28f4..59ccfd00f3cb 100644
--- a/media/libmedia/AudioParameter.cpp
+++ b/media/libmedia/AudioParameter.cpp
@@ -29,7 +29,6 @@ const char *AudioParameter::keyFormat = "format";
const char *AudioParameter::keyChannels = "channels";
const char *AudioParameter::keyFrameCount = "frame_count";
const char *AudioParameter::keyInputSource = "input_source";
-const char *AudioParameter::keyLatency = "latency";
AudioParameter::AudioParameter(const String8& keyValuePairs)
{
diff --git a/media/libmedia/AudioSystem.cpp b/media/libmedia/AudioSystem.cpp
index e300af24f412..4ec0483850b0 100644
--- a/media/libmedia/AudioSystem.cpp
+++ b/media/libmedia/AudioSystem.cpp
@@ -44,11 +44,6 @@ int AudioSystem::gPrevInFormat = AUDIO_FORMAT_PCM_16_BIT;
int AudioSystem::gPrevInChannelCount = 1;
size_t AudioSystem::gInBuffSize = 0;
-// Clients for receiving latency update notifications
-Mutex AudioSystem::gLatencyLock;
-int AudioSystem::gNextUniqueLatencyId = 0;
-DefaultKeyedVector<int, sp<AudioSystem::NotificationClient> > AudioSystem::gLatencyNotificationClients(0);
-
// establish binder interface to AudioFlinger service
const sp<IAudioFlinger>& AudioSystem::get_audio_flinger()
{
@@ -374,29 +369,9 @@ void AudioSystem::releaseAudioSessionId(int audioSession) {
}
}
-int AudioSystem::registerLatencyNotificationClient(latency_update_callback cb, void *cookie) {
- Mutex::Autolock _l(gLatencyLock);
-
- sp<NotificationClient> notificationClient = new NotificationClient();
- notificationClient->mCb = cb;
- notificationClient->mCookie = cookie;
-
- gNextUniqueLatencyId++;
- gLatencyNotificationClients.add(gNextUniqueLatencyId, notificationClient);
- return gNextUniqueLatencyId;
-}
-
-void AudioSystem::unregisterLatencyNotificationClient(int clientId) {
- Mutex::Autolock _l(gLatencyLock);
- gLatencyNotificationClients.removeItem(clientId);
-}
// ---------------------------------------------------------------------------
void AudioSystem::AudioFlingerClient::binderDied(const wp<IBinder>& who) {
- gLatencyLock.lock();
- AudioSystem::gLatencyNotificationClients.clear();
- gLatencyLock.unlock();
-
Mutex::Autolock _l(AudioSystem::gLock);
AudioSystem::gAudioFlinger.clear();
@@ -469,23 +444,9 @@ void AudioSystem::AudioFlingerClient::ioConfigChanged(int event, int ioHandle, v
ioHandle, desc->samplingRate, desc->format,
desc->channels, desc->frameCount, desc->latency);
OutputDescriptor *outputDesc = gOutputs.valueAt(index);
- uint32_t oldLatency = outputDesc->latency;
delete outputDesc;
outputDesc = new OutputDescriptor(*desc);
gOutputs.replaceValueFor(ioHandle, outputDesc);
- if (oldLatency == outputDesc->latency) {
- break;
- }
- uint32_t newLatency = outputDesc->latency;
- gLock.unlock();
- gLatencyLock.lock();
- size_t size = gLatencyNotificationClients.size();
- for (size_t i = 0; i < size; i++) {
- sp<NotificationClient> client = gLatencyNotificationClients.valueAt(i);
- (*client->mCb)(client->mCookie, ioHandle, newLatency);
- }
- gLatencyLock.unlock();
- gLock.lock();
} break;
case INPUT_OPENED:
case INPUT_CLOSED:
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index 2f7b011a2d6c..498ad454bb7f 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -136,7 +136,6 @@ AudioTrack::~AudioTrack()
IPCThreadState::self()->flushCommands();
AudioSystem::releaseAudioSessionId(mSessionId);
}
- AudioSystem::unregisterLatencyNotificationClient(mLatencyClientId);
}
status_t AudioTrack::set(
@@ -264,8 +263,6 @@ status_t AudioTrack::set(
mFlags = flags;
AudioSystem::acquireAudioSessionId(mSessionId);
mRestoreStatus = NO_ERROR;
- mLatencyClientId = AudioSystem::registerLatencyNotificationClient(
- &AudioTrack::LatencyCallbackWrapper, this);
return NO_ERROR;
}
@@ -1281,28 +1278,6 @@ status_t AudioTrack::dump(int fd, const Vector<String16>& args) const
return NO_ERROR;
}
-// static
-void AudioTrack::LatencyCallbackWrapper(void *cookie, audio_io_handle_t output, uint32_t latency)
-{
- static_cast<AudioTrack *>(cookie)->latencyCallback(output, latency);
-}
-
-void AudioTrack::latencyCallback(audio_io_handle_t output, uint32_t latency)
-{
- audio_io_handle_t myOutput = getOutput();
- if (output != myOutput) {
- return;
- }
-
- uint32_t oldLatency = mLatency;
- mLatency = latency + (1000*mCblk->frameCount) / mCblk->sampleRate;
- LOGV("new latency for output %d (old latency %d, new latency %d)", output, oldLatency, mLatency);
-
- if (mCbf != NULL) {
- mCbf(EVENT_LATENCY_CHANGED, mUserData, &mLatency);
- }
-}
-
// =========================================================================
AudioTrack::AudioTrackThread::AudioTrackThread(AudioTrack& receiver, bool bCanCallJava)
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index 72bb1bcb3ccb..736e7eed5b85 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -1343,11 +1343,10 @@ status_t MediaPlayerService::AudioOutput::getPosition(uint32_t *position)
status_t MediaPlayerService::AudioOutput::open(
uint32_t sampleRate, int channelCount, int format, int bufferCount,
- AudioCallback cb, void *cookie, LatencyCallback latencyCb)
+ AudioCallback cb, void *cookie)
{
mCallback = cb;
mCallbackCookie = cookie;
- mLatencyCallback = latencyCb;
// Check argument "bufferCount" against the mininum buffer count
if (bufferCount < mMinBufferCount) {
@@ -1496,31 +1495,25 @@ status_t MediaPlayerService::AudioOutput::attachAuxEffect(int effectId)
void MediaPlayerService::AudioOutput::CallbackWrapper(
int event, void *cookie, void *info) {
//LOGV("callbackwrapper");
- if (event == AudioTrack::EVENT_MORE_DATA) {
- AudioOutput *me = (AudioOutput *)cookie;
- AudioTrack::Buffer *buffer = (AudioTrack::Buffer *)info;
-
- size_t actualSize = (*me->mCallback)(
- me, buffer->raw, buffer->size, me->mCallbackCookie);
+ if (event != AudioTrack::EVENT_MORE_DATA) {
+ return;
+ }
- if (actualSize == 0 && buffer->size > 0) {
- // We've reached EOS but the audio track is not stopped yet,
- // keep playing silence.
+ AudioOutput *me = (AudioOutput *)cookie;
+ AudioTrack::Buffer *buffer = (AudioTrack::Buffer *)info;
- memset(buffer->raw, 0, buffer->size);
- actualSize = buffer->size;
- }
+ size_t actualSize = (*me->mCallback)(
+ me, buffer->raw, buffer->size, me->mCallbackCookie);
- buffer->size = actualSize;
- } else if (event == AudioTrack::EVENT_LATENCY_CHANGED) {
- AudioOutput *me = (AudioOutput *)cookie;
+ if (actualSize == 0 && buffer->size > 0) {
+ // We've reached EOS but the audio track is not stopped yet,
+ // keep playing silence.
- uint32_t *newLatency = (uint32_t *)info;
- me->mLatency = *newLatency;
- if (me->mLatencyCallback != NULL) {
- (*me->mLatencyCallback)(*newLatency, me->mCallbackCookie);
- }
+ memset(buffer->raw, 0, buffer->size);
+ actualSize = buffer->size;
}
+
+ buffer->size = actualSize;
}
int MediaPlayerService::AudioOutput::getSessionId()
@@ -1621,7 +1614,7 @@ bool CallbackThread::threadLoop() {
status_t MediaPlayerService::AudioCache::open(
uint32_t sampleRate, int channelCount, int format, int bufferCount,
- AudioCallback cb, void *cookie, LatencyCallback latencyCb)
+ AudioCallback cb, void *cookie)
{
LOGV("open(%u, %d, %d, %d)", sampleRate, channelCount, format, bufferCount);
if (mHeap->getHeapID() < 0) {
diff --git a/media/libmediaplayerservice/MediaPlayerService.h b/media/libmediaplayerservice/MediaPlayerService.h
index 95176f512940..fc46eab07c89 100644
--- a/media/libmediaplayerservice/MediaPlayerService.h
+++ b/media/libmediaplayerservice/MediaPlayerService.h
@@ -84,8 +84,7 @@ class MediaPlayerService : public BnMediaPlayerService
virtual status_t open(
uint32_t sampleRate, int channelCount,
int format, int bufferCount,
- AudioCallback cb, void *cookie,
- LatencyCallback latencyCb = NULL);
+ AudioCallback cb, void *cookie);
virtual void start();
virtual ssize_t write(const void* buffer, size_t size);
virtual void stop();
@@ -108,7 +107,6 @@ class MediaPlayerService : public BnMediaPlayerService
AudioTrack* mTrack;
AudioCallback mCallback;
void * mCallbackCookie;
- LatencyCallback mLatencyCallback;
int mStreamType;
float mLeftVolume;
float mRightVolume;
@@ -141,8 +139,7 @@ class MediaPlayerService : public BnMediaPlayerService
virtual status_t open(
uint32_t sampleRate, int channelCount, int format,
int bufferCount = 1,
- AudioCallback cb = NULL, void *cookie = NULL,
- LatencyCallback latencyCb = NULL);
+ AudioCallback cb = NULL, void *cookie = NULL);
virtual void start();
virtual ssize_t write(const void* buffer, size_t size);
diff --git a/media/libstagefright/AudioPlayer.cpp b/media/libstagefright/AudioPlayer.cpp
index 79210e4de8fa..f4fb556bde44 100644
--- a/media/libstagefright/AudioPlayer.cpp
+++ b/media/libstagefright/AudioPlayer.cpp
@@ -118,8 +118,7 @@ status_t AudioPlayer::start(bool sourceAlreadyStarted) {
status_t err = mAudioSink->open(
mSampleRate, numChannels, AUDIO_FORMAT_PCM_16_BIT,
DEFAULT_AUDIOSINK_BUFFERCOUNT,
- &AudioPlayer::AudioSinkCallback, this,
- &AudioPlayer::LatencyCallback);
+ &AudioPlayer::AudioSinkCallback, this);
if (err != OK) {
if (mFirstBuffer != NULL) {
mFirstBuffer->release();
@@ -256,14 +255,6 @@ void AudioPlayer::AudioCallback(int event, void *user, void *info) {
static_cast<AudioPlayer *>(user)->AudioCallback(event, info);
}
-// static
-void AudioPlayer::LatencyCallback(uint32_t latency, void *cookie) {
- AudioPlayer *me = (AudioPlayer *)cookie;
- int64_t oldLatency = me->mLatencyUs;
- me->mLatencyUs = (int64_t)latency * 1000;
- LOGI("Audio output latency updated from %lldus to %lldus", oldLatency, me->mLatencyUs);
-}
-
bool AudioPlayer::isSeeking() {
Mutex::Autolock autoLock(mLock);
return mSeeking;
@@ -287,17 +278,14 @@ size_t AudioPlayer::AudioSinkCallback(
}
void AudioPlayer::AudioCallback(int event, void *info) {
- if (event == AudioTrack::EVENT_MORE_DATA) {
+ if (event != AudioTrack::EVENT_MORE_DATA) {
+ return;
+ }
+
AudioTrack::Buffer *buffer = (AudioTrack::Buffer *)info;
size_t numBytesWritten = fillBuffer(buffer->raw, buffer->size);
buffer->size = numBytesWritten;
- } else if (event == AudioTrack::EVENT_LATENCY_CHANGED) {
- uint32_t *newLatency = (uint32_t *)info;
- int64_t oldLatency = mLatencyUs;
- mLatencyUs = (int64_t)*newLatency * 1000;
- LOGI("Audio output latency updated from %lldus to %lldus", oldLatency, mLatencyUs);
- }
}
uint32_t AudioPlayer::getNumFramesPendingPlayout() const {
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 7edf2b2c719f..59ef55b9c14f 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -2347,7 +2347,6 @@ void AudioFlinger::MixerThread::deleteTrackName_l(int name)
bool AudioFlinger::MixerThread::checkForNewParameters_l()
{
bool reconfig = false;
- bool updateLatency = false;
while (!mNewParameters.isEmpty()) {
status_t status = NO_ERROR;
@@ -2411,9 +2410,6 @@ bool AudioFlinger::MixerThread::checkForNewParameters_l()
mEffectChains[i]->setDevice_l(mDevice);
}
}
- if (param.getInt(String8(AudioParameter::keyLatency), value) == NO_ERROR) {
- updateLatency = true;
- }
if (status == NO_ERROR) {
status = mOutput->stream->common.set_parameters(&mOutput->stream->common,
@@ -2440,9 +2436,6 @@ bool AudioFlinger::MixerThread::checkForNewParameters_l()
}
sendConfigEvent_l(AudioSystem::OUTPUT_CONFIG_CHANGED);
}
- if (status == NO_ERROR && updateLatency) {
- sendConfigEvent_l(AudioSystem::OUTPUT_CONFIG_CHANGED);
- }
}
mNewParameters.removeAt(0);