summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorRavishankar Sarawadi <crsaraw@codeaurora.org>2013-02-27 18:47:54 +0100
committerGerrit Code Review <gerrit@cyanogenmod.org>2013-03-04 23:35:32 -0800
commit720055270a0412311d39ca77ff1c0e6d744d6b5e (patch)
treeb28146c1cb226734c35e14ce3c1225c486ee159c /media
parentab5138fa0d9bf3c149e3b586d7640f0d2fb90685 (diff)
downloadframeworks_av-720055270a0412311d39ca77ff1c0e6d744d6b5e.zip
frameworks_av-720055270a0412311d39ca77ff1c0e6d744d6b5e.tar.gz
frameworks_av-720055270a0412311d39ca77ff1c0e6d744d6b5e.tar.bz2
audio: Subsystem Restart changes
- Handle new ADSP status parameter - media/libmedia: Add new ADSP status audio parameter - framework/av: Add handling of new key-pair value in Audio Flinger - Handle Tunnel mode SubSys Restart - framework/av: Post SSR event to Audio Flinger - media/libmedia: Post SSR event to AudioTrack - media/libmediaplayerservice: Post SSR event to MediaPlayerService - media/libstagefright: Post SSR event to TunnelPlayer Change-Id: I8c8385af45be91caf7d7160ab2e0236d6591b159
Diffstat (limited to 'media')
-rw-r--r--media/libmedia/AudioParameter.cpp3
-rw-r--r--media/libmedia/AudioTrack.cpp6
-rw-r--r--media/libmediaplayerservice/MediaPlayerService.cpp23
-rw-r--r--media/libstagefright/TunnelPlayer.cpp23
4 files changed, 52 insertions, 3 deletions
diff --git a/media/libmedia/AudioParameter.cpp b/media/libmedia/AudioParameter.cpp
index fbb34f4..367d9f6 100644
--- a/media/libmedia/AudioParameter.cpp
+++ b/media/libmedia/AudioParameter.cpp
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2006-2011 The Android Open Source Project
- * Copyright (c) 2012, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -39,6 +39,7 @@ const char * const AudioParameter::keyVoipCheck = AUDIO_PARAMETER_KEY_VOIP_CHECK
const char * const AudioParameter::keyFluenceType = AUDIO_PARAMETER_KEY_FLUENCE_TYPE;
const char * const AudioParameter::keySSR = AUDIO_PARAMETER_KEY_SSR;
const char * const AudioParameter::keyHandleA2dpDevice = AUDIO_PARAMETER_KEY_HANDLE_A2DP_DEVICE;
+const char * const AudioParameter::keyADSPStatus = AUDIO_PARAMETER_KEY_ADSP_STATUS;
#endif
AudioParameter::AudioParameter(const String8& keyValuePairs)
diff --git a/media/libmedia/AudioTrack.cpp b/media/libmedia/AudioTrack.cpp
index 36b1469..0d7d733 100644
--- a/media/libmedia/AudioTrack.cpp
+++ b/media/libmedia/AudioTrack.cpp
@@ -2,7 +2,7 @@
**
** Copyright 2007, The Android Open Source Project
**
-** Copyright (c) 2012, The Linux Foundation. All rights reserved.
+** Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
** Not a Contribution, Apache license notifications and license are retained
** for attribution purposes only.
@@ -1620,6 +1620,10 @@ void AudioTrack::notify(int msg) {
ALOGV("Posting event underrun to Audio Sink.");
mCbf(EVENT_UNDERRUN, mUserData, 0);
}
+ if (msg == EVENT_HW_FAIL) {
+ ALOGV("Posting event HW fail to Audio Sink.");
+ mCbf(EVENT_HW_FAIL, mUserData, 0);
+ }
}
status_t AudioTrack::getTimeStamp(uint64_t *tstamp) {
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index 414c262..f238e89 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -1,6 +1,6 @@
/*
**
-** Copyright (c) 2012, The Linux Foundation. All rights reserved.
+** Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
** Not a Contribution, Apache license notifications and license are retained
** for attribution purposes only.
**
@@ -1735,6 +1735,27 @@ void MediaPlayerService::AudioOutput::CallbackWrapper(
data->unlock();
return;
}
+ if (event == AudioTrack::EVENT_HW_FAIL) {
+ ALOGW("Event hardware failure");
+ CallbackData *data = (CallbackData*)cookie;
+ if (data != NULL) {
+ data->lock();
+ AudioOutput *me = data->getOutput();
+ if (me == NULL) {
+ // no output set, likely because the track was
+ // scheduled to be reused
+ // by another player, but the format turned out
+ // to be incompatible.
+ data->unlock();
+ return;
+ }
+ ALOGV("Callback!!!");
+ (*me->mCallback)(me, NULL, (size_t)AudioTrack::EVENT_HW_FAIL,
+ me->mCallbackCookie);
+ data->unlock();
+ }
+ return;
+ }
#endif
if (event == AudioTrack::EVENT_MORE_DATA) {
CallbackData *data = (CallbackData*)cookie;
diff --git a/media/libstagefright/TunnelPlayer.cpp b/media/libstagefright/TunnelPlayer.cpp
index 3b45db4..f9d0976 100644
--- a/media/libstagefright/TunnelPlayer.cpp
+++ b/media/libstagefright/TunnelPlayer.cpp
@@ -501,6 +501,28 @@ void TunnelPlayer::resume() {
size_t TunnelPlayer::AudioSinkCallback(
MediaPlayerBase::AudioSink *audioSink,
void *buffer, size_t size, void *cookie) {
+#ifdef QCOM_HARDWARE
+ TunnelPlayer *me = (TunnelPlayer *)cookie;
+ if(me != NULL) {
+ ALOGV("postAudioEOS mSeeking %d", me->mSeeking);
+ if (buffer == NULL && size == AudioTrack::EVENT_UNDERRUN) {
+ if(me->mReachedEOS == true) {
+ //in the case of seek all these flags will be reset
+ me->mReachedOutputEOS = true;
+ ALOGV("postAudioEOS mSeeking %d", me->mSeeking);
+ me->mObserver->postAudioEOS(0);
+ }else {
+ ALOGV("postAudioEOS ignored since %d", me->mSeeking);
+ }
+ } else if (size == AudioTrack::EVENT_HW_FAIL) {
+ ALOGV("postAudioEOS in SSR " );
+ me->mReachedOutputEOS = true;
+ me->mReachedEOS = true;
+ me->killExtractorThread = true;
+ me->mObserver->postAudioEOS(0);
+ }
+ }
+#else
if (buffer == NULL && size == AudioTrack::EVENT_UNDERRUN) {
TunnelPlayer *me = (TunnelPlayer *)cookie;
if(me->mReachedEOS == true) {
@@ -512,6 +534,7 @@ size_t TunnelPlayer::AudioSinkCallback(
ALOGV("postAudioEOS ignored since %d", me->mSeeking);
}
}
+#endif
return 1;
}