summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/com/android/fmradio/FmService.java22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/com/android/fmradio/FmService.java b/src/com/android/fmradio/FmService.java
index 6c39d66..e84ad99 100644
--- a/src/com/android/fmradio/FmService.java
+++ b/src/com/android/fmradio/FmService.java
@@ -384,7 +384,21 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
}
private synchronized void startRender() {
- Log.d(TAG, "startRender");
+ Log.d(TAG, "startRender " + AudioSystem.getForceUse(FOR_PROPRIETARY));
+ // Stop old AudioRecord and create a new AudioRecord
+ // when plugging out and then plugging in wired headset.
+ // Otherwise, reading data from old AudioRecord will be blocked.
+ if (AudioSystem.getForceUse(FOR_PROPRIETARY) ==
+ AudioSystem.FORCE_SPEAKER && mIsSpeakerUsed) {
+ if (mAudioRecord != null) {
+ mAudioRecord.stop();
+ }
+ if (mAudioTrack != null) {
+ mAudioTrack.stop();
+ }
+ initAudioRecordSink();
+ }
+
mIsRender = true;
synchronized (mRenderLock) {
mRenderLock.notify();
@@ -467,6 +481,11 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
Log.d(TAG, "EYES ignore " + mCurrentFrame);
continue ;
}
+ if (size <= 0) {
+ Log.e(TAG, "RenderThread read data from AudioRecord "
+ + "error size: " + size);
+ continue;
+ }
byte[] tmpBuf = new byte[size];
System.arraycopy(buffer, 0, tmpBuf, 0, size);
// write to audio track
@@ -1640,6 +1659,7 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
AudioPortConfig sinkConfig = sinks[0];
AudioPort sourcePort = sourceConfig.port();
AudioPort sinkPort = sinkConfig.port();
+ Log.d(TAG, "isPatchMixerToEarphone " + sourcePort + " ====> " + sinkPort);
if (sourcePort instanceof AudioMixPort && sinkPort instanceof AudioDevicePort) {
deviceCount++;
int type = ((AudioDevicePort) sinkPort).type();