OSDN Git Service

Cleanup error handling in AudioSystem get methods
authorGlenn Kasten <gkasten@google.com>
Wed, 8 Jan 2014 16:56:06 +0000 (08:56 -0800)
committerGlenn Kasten <gkasten@google.com>
Wed, 8 Jan 2014 19:05:41 +0000 (11:05 -0800)
Don't return zero sample rate or frame count without an error.

Change-Id: I052d841080ed33e4f081ae9825a2f33dff444fb9

include/media/AudioSystem.h
media/libmedia/AudioSystem.cpp

index cd855da..ca9aaf7 100644 (file)
@@ -94,6 +94,8 @@ public:
     static float linearToLog(int volume);
     static int logToLinear(float volume);
 
+    // Returned samplingRate and frameCount output values are guaranteed
+    // to be non-zero if status == NO_ERROR
     static status_t getOutputSamplingRate(uint32_t* samplingRate,
             audio_stream_type_t stream);
     static status_t getOutputFrameCount(size_t* frameCount,
index 9a76111..e37888b 100644 (file)
@@ -259,6 +259,11 @@ status_t AudioSystem::getSamplingRate(audio_io_handle_t output,
         *samplingRate = outputDesc->samplingRate;
         gLock.unlock();
     }
+    if (*samplingRate == 0) {
+        ALOGE("AudioSystem::getSamplingRate failed for output %d stream type %d",
+                output, streamType);
+        return BAD_VALUE;
+    }
 
     ALOGV("getSamplingRate() streamType %d, output %d, sampling rate %u", streamType, output,
             *samplingRate);
@@ -299,6 +304,11 @@ status_t AudioSystem::getFrameCount(audio_io_handle_t output,
         *frameCount = outputDesc->frameCount;
         gLock.unlock();
     }
+    if (*frameCount == 0) {
+        ALOGE("AudioSystem::getFrameCount failed for output %d stream type %d",
+                output, streamType);
+        return BAD_VALUE;
+    }
 
     ALOGV("getFrameCount() streamType %d, output %d, frameCount %d", streamType, output,
             *frameCount);