Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e26a1c24 authored by Dhananjay Kumar's avatar Dhananjay Kumar Committed by Eric Laurent
Browse files

DO NOT MERGE - [FM] Fallback if createAudioPatch fails

CreatePatch returns error if a port is connected to
an output device on a hal version less than 3.0.
Hence on error fallback same path for
HEADSET/Headphone as is implemented for speaker.

Bug: 20104423.

Change-Id: I7f165849038cb867ce6799777e92052ced147ef4
(cherry picked from commit 19ca9f84)
parent 4f33aa31
Loading
Loading
Loading
Loading
+21 −5
Original line number Diff line number Diff line
@@ -390,9 +390,13 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
       // because input/output device may be changed.
       if (mAudioRecord != null) {
           mAudioRecord.stop();
           mAudioRecord.release();
           mAudioRecord = null;
       }
       if (mAudioTrack != null) {
           mAudioTrack.stop();
           mAudioTrack.release();
           mAudioTrack = null;
       }
       initAudioRecordSink();

@@ -1284,11 +1288,12 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
                SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT, RECORD_BUF_SIZE, AudioTrack.MODE_STREAM);
    }

    private synchronized void createAudioPatch() {
    private synchronized int createAudioPatch() {
        Log.d(TAG, "createAudioPatch");
        int status = AudioManager.SUCCESS;
        if (mAudioPatch != null) {
            Log.d(TAG, "createAudioPatch, mAudioPatch is not null, return");
            return;
            return status;
        }

        mAudioSource = null;
@@ -1312,11 +1317,12 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
                    .activeConfig();
            AudioDevicePortConfig sinkConfig = (AudioDevicePortConfig) mAudioSink.activeConfig();
            AudioPatch[] audioPatchArray = new AudioPatch[] {null};
            mAudioManager.createAudioPatch(audioPatchArray,
            status = mAudioManager.createAudioPatch(audioPatchArray,
                    new AudioPortConfig[] {sourceConfig},
                    new AudioPortConfig[] {sinkConfig});
            mAudioPatch = audioPatchArray[0];
        }
        return status;
    }

    private FmOnAudioPortUpdateListener mAudioPortUpdateListener = null;
@@ -1369,9 +1375,14 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
                ArrayList<AudioPatch> patches = new ArrayList<AudioPatch>();
                mAudioManager.listAudioPatches(patches);
                if (isPatchMixerToEarphone(patches)) {
                    int status;
                    stopAudioTrack();
                    stopRender();
                    createAudioPatch();
                    status = createAudioPatch();
                    if (status != AudioManager.SUCCESS){
                       Log.d(TAG, "onAudioPatchListUpdate: fallback as createAudioPatch failed");
                       startRender();
                    }
                }
            }
        }
@@ -1645,9 +1656,14 @@ public class FmService extends Service implements FmRecorder.OnRecorderStateChan
            mAudioManager.listAudioPatches(patches);
            if (mAudioPatch == null) {
                if (isPatchMixerToEarphone(patches)) {
                    int status;
                    stopAudioTrack();
                    stopRender();
                    createAudioPatch();
                    status = createAudioPatch();
                    if (status != AudioManager.SUCCESS){
                       Log.d(TAG, "enableFmAudio: fallback as createAudioPatch failed");
                       startRender();
                    }
                } else {
                    startRender();
                }