diff --git a/media/java/android/media/HwAudioSource.java b/media/java/android/media/HwAudioSource.java index 01a02f1d9f057..ebeeac6717fd0 100644 --- a/media/java/android/media/HwAudioSource.java +++ b/media/java/android/media/HwAudioSource.java @@ -35,7 +35,13 @@ public class HwAudioSource extends PlayerBase { private final AudioDeviceInfo mAudioDeviceInfo; private final AudioAttributes mAudioAttributes; - private int mNativeHandle; + /** + * The value of the native handle encodes the HwAudioSource state. + * The native handle returned by {@link AudioSystem#startAudioSource} is either valid + * (aka > 0, so successfully started) or hosting an error code (negative). + * 0 corresponds to an untialized or stopped HwAudioSource. + */ + private int mNativeHandle = 0; /** * Class constructor for a hardware audio source based player. @@ -127,29 +133,38 @@ public class HwAudioSource extends PlayerBase { /** * Starts the playback from {@link AudioDeviceInfo}. + * Starts does not return any error code, caller must check {@link HwAudioSource#isPlaying} to + * ensure the state of the HwAudioSource encoded in {@link mNativeHandle}. */ public void start() { Preconditions.checkState(!isPlaying(), "HwAudioSource is currently playing"); - baseStart(); mNativeHandle = AudioSystem.startAudioSource( mAudioDeviceInfo.getPort().activeConfig(), mAudioAttributes); + if (isPlaying()) { + baseStart(); + } } /** * Checks whether the HwAudioSource player is playing. + * It checks the state of the HwAudioSource encoded in {@link HwAudioSource#isPlaying}. + * 0 corresponds to a stopped or uninitialized HwAudioSource. + * Negative value corresponds to a status reported by {@link AudioSystem#startAudioSource} to + * indicate a failure when trying to start the HwAudioSource. + * * @return true if currently playing, false otherwise */ public boolean isPlaying() { - return mNativeHandle != 0; + return mNativeHandle > 0; } /** * Stops the playback from {@link AudioDeviceInfo}. */ public void stop() { - baseStop(); if (mNativeHandle > 0) { + baseStop(); AudioSystem.stopAudioSource(mNativeHandle); mNativeHandle = 0; }