Attached is an unofficial patch that should help. We still need to go 
through our review process, so things will take time.

Vandana Vuthoo wrote:
> Hi Sean,
>
> When will the patch be available ? I am in a total fix,please help,Can 
> I get some workaround it for it?
>
> Rgds,
> Vandana
>
> On Thu, Jan 8, 2009 at 10:48 AM, Sean McNeil <seanmcne...@gmail.com 
> <mailto:seanmcne...@gmail.com>> wrote:
>
>
>     Google has made some minor changes to the audio interface and Wind
>     River
>     is aware of them. There is a patch pending and it will hopefully be
>     committed soon.
>
>     Sorry for the inconvenience,
>     Sean
>
>     Praveen wrote:
>     > Hi Vandy,
>     >
>     > I am also getting the same error while compiling. Were you able to
>     > make any progress on this?
>     >
>     > If so please feel free to share the solution
>     >
>     > On Jan 8, 9:42 am, Vandy <vandana.vut...@gmail.com
>     <mailto:vandana.vut...@gmail.com>> wrote:
>     >
>     >> Hi All,
>     >> I am getting the following errors when compiling alsa for the
>     latest
>     >> repository. Please help.
>     >>
>     
> ----------------------------------------------------------------------------------------------------------
>     >> I am compiling android code for arm, when compiling in sound I am
>     >> getting the following errors.
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp: In static member
>     >> function 'static android::AudioHardwareInterface*
>     >> android::AudioHardwareInterface::create()':
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp:96: error: cannot
>     >> allocate an object of abstract type 'android::AudioHardwareALSA'
>     >> hardware/alsa_sound/AudioHardwareALSA.h:224: note:   because the
>     >> following virtual functions are pure within
>     >> 'android::AudioHardwareALSA':
>     >> hardware/libhardware/include/hardware/AudioHardwareInterface.h:178:
>     >> note:     virtual android::status_t
>     >> android::AudioHardwareInterface::setRouting(int, uint32_t)
>     >> hardware/libhardware/include/hardware/AudioHardwareInterface.h:180:
>     >> note:     virtual android::status_t
>     >> android::AudioHardwareInterface::getRouting(int, uint32_t*)
>     >> hardware/libhardware/include/hardware/AudioHardwareInterface.h:187:
>     >> note:     virtual android::status_t
>     >> android::AudioHardwareInterface::setMode(int)
>     >> hardware/libhardware/include/hardware/AudioHardwareInterface.h:188:
>     >> note:     virtual android::status_t
>     >> android::AudioHardwareInterface::getMode(int*)
>     >> hardware/libhardware/include/hardware/AudioHardwareInterface.h:196:
>     >> note:     virtual android::status_t
>     >> android::AudioHardwareInterface::setParameter(const char*, const
>     >> char*)
>     >> hardware/libhardware/include/hardware/AudioHardwareInterface.h:200:
>     >> note:     virtual size_t
>     >> android::AudioHardwareInterface::getInputBufferSize(uint32_t, int,
>     >> int)
>     >> hardware/libhardware/include/hardware/AudioHardwareInterface.h:207:
>     >> note:     virtual android::AudioStreamOut*
>     >> android::AudioHardwareInterface::openOutputStream(int, int,
>     uint32_t,
>     >> android::status_t*)
>     >> hardware/libhardware/include/hardware/AudioHardwareInterface.h:214:
>     >> note:     virtual android::AudioStreamIn*
>     >> android::AudioHardwareInterface::openInputStream(int, int,
>     uint32_t,
>     >> android::status_t*)
>     >> hardware/libhardware/include/hardware/AudioHardwareInterface.h:217:
>     >> note:     virtual android::status_t
>     >> android::AudioHardwareInterface::dumpState(int, const
>     >> android::Vector<android::String16>&)
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp:101: error: cannot
>     >> allocate an object of abstract type 'android::AudioHardwareStub'
>     >> hardware/alsa_sound/AudioHardwareStub.h:55: note:   because the
>     >> following virtual functions are pure within
>     >> 'android::AudioHardwareStub':
>     >> hardware/libhardware/include/hardware/AudioHardwareInterface.h:178:
>     >> note:     virtual android::status_t
>     >> android::AudioHardwareInterface::setRouting(int, uint32_t)
>     >> hardware/libhardware/include/hardware/AudioHardwareInterface.h:180:
>     >> note:     virtual android::status_t
>     >> android::AudioHardwareInterface::getRouting(int, uint32_t*)
>     >> hardware/libhardware/include/hardware/AudioHardwareInterface.h:187:
>     >> note:     virtual android::status_t
>     >> android::AudioHardwareInterface::setMode(int)
>     >> hardware/libhardware/include/hardware/AudioHardwareInterface.h:188:
>     >> note:     virtual android::status_t
>     >> android::AudioHardwareInterface::getMode(int*)
>     >> hardware/libhardware/include/hardware/AudioHardwareInterface.h:200:
>     >> note:     virtual size_t
>     >> android::AudioHardwareInterface::getInputBufferSize(uint32_t, int,
>     >> int)
>     >> hardware/libhardware/include/hardware/AudioHardwareInterface.h:207:
>     >> note:     virtual android::AudioStreamOut*
>     >> android::AudioHardwareInterface::openOutputStream(int, int,
>     uint32_t,
>     >> android::status_t*)
>     >> hardware/libhardware/include/hardware/AudioHardwareInterface.h:214:
>     >> note:     virtual android::AudioStreamIn*
>     >> android::AudioHardwareInterface::openInputStream(int, int,
>     uint32_t,
>     >> android::status_t*)
>     >> hardware/libhardware/include/hardware/AudioHardwareInterface.h:217:
>     >> note:     virtual android::status_t
>     >> android::AudioHardwareInterface::dumpState(int, const
>     >> android::Vector<android::String16>&)
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp: At global scope:
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp:136: error:
>     definition
>     >> of implicitly-declared
>     >> 'android::AudioHardwareInterface::AudioHardwareInterface()'
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp: In constructor
>     >> 'android::AudioHardwareInterface::AudioHardwareInterface()':
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp:139: error:
>     'mRoutes'
>     >> was not declared in this scope
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp:140: error:
>     'mMode' was
>     >> not declared in this scope
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp: In member function
>     >> 'virtual android::status_t
>     android::AudioHardwareInterface::setRouting
>     >> (int, uint32_t)':
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp:150: error:
>     'mMode' was
>     >> not declared in this scope
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp:153: error:
>     'mRoutes'
>     >> was not declared in this scope
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp:155: error:
>     'mMode' was
>     >> not declared in this scope
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp: In member function
>     >> 'virtual android::status_t
>     android::AudioHardwareInterface::getRouting
>     >> (int, uint32_t*)':
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp:169: error:
>     'mMode' was
>     >> not declared in this scope
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp:172: error:
>     'mRoutes'
>     >> was not declared in this scope
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp: In member function
>     >> 'virtual android::status_t android::AudioHardwareInterface::setMode
>     >> (int)':
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp:187: error:
>     'mMode' was
>     >> not declared in this scope
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp:193: error:
>     'mMode' was
>     >> not declared in this scope
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp: In member function
>     >> 'virtual android::status_t android::AudioHardwareInterface::getMode
>     >> (int*)':
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp:200: error:
>     'mMode' was
>     >> not declared in this scope
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp: In member function
>     >> 'virtual android::status_t
>     android::AudioHardwareInterface::dumpState
>     >> (int, const android::Vector<android::String16>&)':
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp:217: error:
>     'mMode' was
>     >> not declared in this scope
>     >> hardware/alsa_sound/AudioHardwareInterface.cpp:220: error:
>     'mRoutes'
>     >> was not declared in this scope
>     >>
>     >> Rgds,
>     >> Vandy
>     >>
>     > >
>     >
>
>
>
>
>
> >


--~--~---------~--~----~------------~-------~--~----~
unsubscribe: android-porting+unsubscr...@googlegroups.com
website: http://groups.google.com/group/android-porting
-~----------~----~----~----~------~----~------~--~---

diff --git a/AudioHardwareALSA.cpp b/AudioHardwareALSA.cpp
index 5fe7fd1..872c824 100644
--- a/AudioHardwareALSA.cpp
+++ b/AudioHardwareALSA.cpp
@@ -106,9 +106,9 @@ static const alsa_properties_t masterCaptureProp = {
  */
 static const char *deviceSuffix[] = {
 	/* ROUTE_EARPIECE  */ "_Earpiece",
-    /* ROUTE_SPEAKER   */ "_Speaker",
-    /* ROUTE_BLUETOOTH */ "_Bluetooth",
-    /* ROUTE_HEADSET   */ "_Headset",
+        /* ROUTE_SPEAKER   */ "_Speaker",
+        /* ROUTE_BLUETOOTH */ "_Bluetooth",
+        /* ROUTE_HEADSET   */ "_Headset",
 };
 
 static const int deviceSuffixLen = (sizeof(deviceSuffix) / sizeof(char *));
@@ -187,23 +187,29 @@ status_t AudioHardwareALSA::setMasterVolume(float volume)
 		return INVALID_OPERATION;
 }
 
-AudioStreamOut *AudioHardwareALSA::openOutputStream(int      format,
-                                                    int      channelCount,
-                                                    uint32_t sampleRate)
+AudioStreamOut *
+AudioHardwareALSA::openOutputStream(int format,
+                                    int channelCount,
+                                    uint32_t sampleRate,
+                                    status_t *status)
 {
     AutoMutex lock(mLock);
 
     // only one output stream allowed
-    if (mOutput)
+    if (mOutput) {
+        *status = ALREADY_EXISTS;
         return 0;
+    }
 
     AudioStreamOutALSA *out = new AudioStreamOutALSA(this);
 
-    if (out->set(format, channelCount, sampleRate) == NO_ERROR) {
+    *status = out->set(format, channelCount, sampleRate);
+
+    if (*status == NO_ERROR) {
         mOutput = out;
         // Some information is expected to be available immediately after
         // the device is open.
-	    uint32_t routes = mRoutes[mMode];
+        uint32_t routes = mRoutes[mMode];
         mOutput->setDevice(mMode, routes);
     } else {
         delete out;
@@ -212,19 +218,24 @@ AudioStreamOut *AudioHardwareALSA::openOutputStream(int      format,
     return mOutput;
 }
 
-AudioStreamIn *AudioHardwareALSA::openInputStream(int      format,
-                                                  int      channelCount,
-                                                  uint32_t sampleRate)
+AudioStreamIn *
+AudioHardwareALSA::openInputStream(int      format,
+                                   int      channelCount,
+                                   uint32_t sampleRate,
+                                   status_t *status)
 {
     AutoMutex lock(mLock);
 
     // only one input stream allowed
-    if (mInput)
+    if (mInput) {
+        *status = ALREADY_EXISTS;
         return 0;
+    }
 
     AudioStreamInALSA *in = new AudioStreamInALSA(this);
 
-    if (in->set(format, channelCount, sampleRate) == NO_ERROR) {
+    *status = in->set(format, channelCount, sampleRate);
+    if (*status == NO_ERROR) {
         mInput = in;
         // Now, actually open the device. Only 1 route used
         mInput->setDevice(0, 0);
@@ -904,6 +915,11 @@ bool AudioStreamOutALSA::isStandby()
     return (!mHandle);
 }
 
+uint32_t AudioStreamOutALSA::latency() const
+{
+    return 0;
+}
+
 // ----------------------------------------------------------------------------
 
 AudioStreamInALSA::AudioStreamInALSA(AudioHardwareALSA *parent) :
@@ -978,6 +994,13 @@ const char *AudioStreamInALSA::deviceName(int mode, int device)
     return devString;
 }
 
+status_t AudioStreamInALSA::standby()
+{
+    AutoMutex lock(mLock);
+
+    return NO_ERROR;
+}
+
 // ----------------------------------------------------------------------------
 
 struct ALSAMixer::mixer_info_t {
diff --git a/AudioHardwareALSA.h b/AudioHardwareALSA.h
index 12d875c..3827270 100644
--- a/AudioHardwareALSA.h
+++ b/AudioHardwareALSA.h
@@ -22,7 +22,7 @@
 #include <sys/types.h>
 #include <alsa/asoundlib.h>
 
-#include <hardware/AudioHardwareInterface.h>
+#include <hardware/AudioHardwareBase.h>
 
 namespace android {
 
@@ -157,6 +157,8 @@ public:
         return ALSAStreamOps::format();
     }
 
+    virtual uint32_t         latency() const;
+
     virtual ssize_t          write(const void *buffer, size_t bytes);
     virtual status_t         dump(int fd, const Vector<String16>& args);
     virtual status_t         setDevice(int mode, uint32_t newDevice);
@@ -211,42 +213,73 @@ public:
     virtual status_t         dump(int fd, const Vector<String16>& args);
     virtual status_t         setDevice(int mode, uint32_t newDevice);
 
-        virtual status_t         setGain(float gain);
+    virtual status_t         setGain(float gain);
 
     virtual const char      *deviceName(int mode, int device);
 
+    virtual status_t    standby();
+
 private:
         AudioHardwareALSA *mParent;
 };
 
 
-class AudioHardwareALSA : public AudioHardwareInterface
+class AudioHardwareALSA : public AudioHardwareBase
 {
 public:
                              AudioHardwareALSA();
     virtual                  ~AudioHardwareALSA();
 
-    virtual status_t         initCheck();
-    virtual status_t         standby();
-    virtual status_t         setVoiceVolume(float volume);
-    virtual status_t         setMasterVolume(float volume);
-
-    virtual AudioStreamOut  *openOutputStream(int format          = 0,
-                                              int channelCount    = 0,
-                                              uint32_t sampleRate = 0);
-
-    virtual AudioStreamIn   *openInputStream (int format          = 0,
-                                              int channelCount    = 0,
-                                              uint32_t sampleRate = 0);
-
-    // Microphone mute
-    virtual status_t         setMicMute(bool state);
-    virtual status_t         getMicMute(bool *state);
+    /**
+     * check to see if the audio hardware interface has been initialized.
+     * return status based on values defined in include/utils/Errors.h
+     */
+    virtual status_t    initCheck();
+
+    /**
+     * put the audio hardware into standby mode to conserve power. Returns
+     * status based on include/utils/Errors.h
+     */
+    virtual status_t    standby();
+
+    /** set the audio volume of a voice call. Range is between 0.0 and 1.0 */
+    virtual status_t    setVoiceVolume(float volume);
+
+    /**
+     * set the audio volume for all audio activities other than voice call.
+     * Range between 0.0 and 1.0. If any value other than NO_ERROR is returned,
+     * the software mixer will emulate this capability.
+     */
+    virtual status_t    setMasterVolume(float volume);
+
+    // mic mute
+    virtual status_t    setMicMute(bool state);
+    virtual status_t    getMicMute(bool* state);
+
+    /** This method creates and opens the audio hardware output stream */
+    virtual AudioStreamOut* openOutputStream(
+                                int format=0,
+                                int channelCount=0,
+                                uint32_t sampleRate=0,
+                                status_t *status=0);
+
+    /** This method creates and opens the audio hardware input stream */
+    virtual AudioStreamIn* openInputStream(
+                                int format,
+                                int channelCount,
+                                uint32_t sampleRate,
+                                status_t *status);
 
 protected:
-    // audio routing
-    virtual status_t         doRouting();
-    virtual status_t         dump(int fd, const Vector<String16>& args);
+    /**
+     * doRouting actually initiates the routing. A call to setRouting
+     * or setMode may result in a routing change. The generic logic calls
+     * doRouting when required. If the device has any special requirements these
+     * methods can be overriden.
+     */
+    virtual status_t    doRouting();
+
+    virtual status_t dump(int fd, const Vector<String16>& args);
 
     friend class AudioStreamOutALSA;
     friend class AudioStreamInALSA;
diff --git a/AudioHardwareInterface.cpp b/AudioHardwareInterface.cpp
index 68fa70e..8946bde 100644
--- a/AudioHardwareInterface.cpp
+++ b/AudioHardwareInterface.cpp
@@ -55,6 +55,7 @@ static const char* routeStrings[] =
     "SPEAKER ",
     "BLUETOOTH ",
     "HEADSET "
+    "BLUETOOTH_A2DP "
 };
 static const char* routeNone = "NONE";
 
@@ -105,24 +106,10 @@ AudioHardwareInterface* AudioHardwareInterface::create()
     // This code adds a record of buffers in a file to write calls made by AudioFlinger.
     // It replaces the current AudioHardwareInterface object by an intermediate one which
     // will record buffers in a file (after sending them to hardware) for testing purpose.
-    // This feature is enabled by defining symbol DUMP_FLINGER_OUT and setting environement
-    // "audioflinger.dump = 1". The output file is "tmp/FlingerOut.pcm". Pause are not recorded
-    // in the file.
+    // This feature is enabled by defining symbol DUMP_FLINGER_OUT.
+    // The output file is FLINGER_DUMP_NAME. Pause are not recorded in the file.
     
-    // read dump mode
-    property_get("audioflinger.dump", value, "0");
-    switch(value[0]) {
-    case '1':
-        LOGV("Dump mode");
-        hw = new AudioDumpInterface(hw);    // replace interface
-        return hw;
-        break;
-    case '0':
-    default:
-        LOGV("No Dump mode");
-        return hw;
-        break;
-    }
+    hw = new AudioDumpInterface(hw);    // replace interface
 #endif
     return hw;
 }
@@ -133,7 +120,7 @@ AudioStreamOut::~AudioStreamOut()
 
 AudioStreamIn::~AudioStreamIn() {}
 
-AudioHardwareInterface::AudioHardwareInterface()
+AudioHardwareBase::AudioHardwareBase()
 {
     // force a routing update on initialization
     memset(&mRoutes, 0, sizeof(mRoutes));
@@ -141,7 +128,7 @@ AudioHardwareInterface::AudioHardwareInterface()
 }
 
 // generics for audio routing - the real work is done in doRouting
-status_t AudioHardwareInterface::setRouting(int mode, uint32_t routes)
+status_t AudioHardwareBase::setRouting(int mode, uint32_t routes)
 {
 #if LOG_ROUTING_CALLS
     LOGD("setRouting: mode=%s, routes=[%s]", displayMode(mode), displayRoutes(routes));
@@ -163,7 +150,7 @@ status_t AudioHardwareInterface::setRouting(int mode, uint32_t routes)
     return doRouting();
 }
 
-status_t AudioHardwareInterface::getRouting(int mode, uint32_t* routes)
+status_t AudioHardwareBase::getRouting(int mode, uint32_t* routes)
 {
     if (mode == AudioSystem::MODE_CURRENT)
         mode = mMode;
@@ -177,7 +164,7 @@ status_t AudioHardwareInterface::getRouting(int mode, uint32_t* routes)
     return NO_ERROR;
 }
 
-status_t AudioHardwareInterface::setMode(int mode)
+status_t AudioHardwareBase::setMode(int mode)
 {
 #if LOG_ROUTING_CALLS
     LOGD("setMode(%s)", displayMode(mode));
@@ -194,25 +181,44 @@ status_t AudioHardwareInterface::setMode(int mode)
     return doRouting();
 }
 
-status_t AudioHardwareInterface::getMode(int* mode)
+status_t AudioHardwareBase::getMode(int* mode)
 {
     // Implement: set audio routing
     *mode = mMode;
     return NO_ERROR;
 }
 
-status_t AudioHardwareInterface::setParameter(const char* key, const char* value)
+status_t AudioHardwareBase::setParameter(const char* key, const char* value)
 {
     // default implementation is to ignore
     return NO_ERROR;
 }
 
-status_t AudioHardwareInterface::dumpState(int fd, const Vector<String16>& args)
+// default implementation
+size_t AudioHardwareBase::getInputBufferSize(uint32_t sampleRate, int format, int channelCount)
+{
+    if (sampleRate != 8000) {
+        LOGW("getInputBufferSize bad sampling rate: %d", sampleRate);
+        return 0;
+    }
+    if (format != AudioSystem::PCM_16_BIT) {
+        LOGW("getInputBufferSize bad format: %d", format);
+        return 0;
+    }
+    if (channelCount != 1) {
+        LOGW("getInputBufferSize bad channel count: %d", channelCount);
+        return 0;
+    }
+
+    return 320;
+}
+
+status_t AudioHardwareBase::dumpState(int fd, const Vector<String16>& args)
 {
     const size_t SIZE = 256;
     char buffer[SIZE];
     String8 result;
-    snprintf(buffer, SIZE, "AudioHardwareInterface::dumpState\n");
+    snprintf(buffer, SIZE, "AudioHardwareBase::dumpState\n");
     result.append(buffer);
     snprintf(buffer, SIZE, "\tmMode: %d\n", mMode);
     result.append(buffer);
diff --git a/AudioHardwareStub.cpp b/AudioHardwareStub.cpp
index 0046db8..d309902 100644
--- a/AudioHardwareStub.cpp
+++ b/AudioHardwareStub.cpp
@@ -2,16 +2,16 @@
 **
 ** Copyright 2007, The Android Open Source Project
 **
-** Licensed under the Apache License, Version 2.0 (the "License"); 
-** you may not use this file except in compliance with the License. 
-** You may obtain a copy of the License at 
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
 **
-**     http://www.apache.org/licenses/LICENSE-2.0 
+**     http://www.apache.org/licenses/LICENSE-2.0
 **
-** Unless required by applicable law or agreed to in writing, software 
-** distributed under the License is distributed on an "AS IS" BASIS, 
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
-** See the License for the specific language governing permissions and 
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
 ** limitations under the License.
 */
 
@@ -47,20 +47,28 @@ status_t AudioHardwareStub::standby()
 }
 
 AudioStreamOut* AudioHardwareStub::openOutputStream(
-        int format, int channelCount, uint32_t sampleRate)
+        int format, int channelCount, uint32_t sampleRate, status_t *status)
 {
     AudioStreamOutStub* out = new AudioStreamOutStub();
-    if (out->set(format, channelCount, sampleRate) == NO_ERROR)
+    status_t lStatus = out->set(format, channelCount, sampleRate);
+    if (status) {
+        *status = lStatus;
+    }
+    if (lStatus == NO_ERROR)
         return out;
     delete out;
     return 0;
 }
 
 AudioStreamIn* AudioHardwareStub::openInputStream(
-        int format, int channelCount, uint32_t sampleRate)
+        int format, int channelCount, uint32_t sampleRate, status_t *status)
 {
     AudioStreamInStub* in = new AudioStreamInStub();
-    if (in->set(format, channelCount, sampleRate) == NO_ERROR)
+    status_t lStatus = in->set(format, channelCount, sampleRate);
+    if (status) {
+        *status = lStatus;
+    }
+    if (lStatus == NO_ERROR)
         return in;
     delete in;
     return 0;
@@ -102,7 +110,7 @@ status_t AudioStreamOutStub::set(int format, int channels, uint32_t rate)
     if (format == 0) format = AudioSystem::PCM_16_BIT;
     if (channels == 0) channels = channelCount();
     if (rate == 0) rate = sampleRate();
-    
+
     if ((format == AudioSystem::PCM_16_BIT) &&
             (channels == channelCount()) &&
             (rate == sampleRate()))
@@ -129,7 +137,7 @@ status_t AudioStreamOutStub::dump(int fd, const Vector<String16>& args)
     snprintf(buffer, SIZE, "\tformat: %d\n", format());
     result.append(buffer);
     ::write(fd, result.string(), result.size());
-    return NO_ERROR; 
+    return NO_ERROR;
 }
 
 // ----------------------------------------------------------------------------
diff --git a/AudioHardwareStub.h b/AudioHardwareStub.h
index 1a61552..5316d60 100644
--- a/AudioHardwareStub.h
+++ b/AudioHardwareStub.h
@@ -2,16 +2,16 @@
 **
 ** Copyright 2007, The Android Open Source Project
 **
-** Licensed under the Apache License, Version 2.0 (the "License"); 
-** you may not use this file except in compliance with the License. 
-** You may obtain a copy of the License at 
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
 **
-**     http://www.apache.org/licenses/LICENSE-2.0 
+**     http://www.apache.org/licenses/LICENSE-2.0
 **
-** Unless required by applicable law or agreed to in writing, software 
-** distributed under the License is distributed on an "AS IS" BASIS, 
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
-** See the License for the specific language governing permissions and 
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
 ** limitations under the License.
 */
 
@@ -21,7 +21,7 @@
 #include <stdint.h>
 #include <sys/types.h>
 
-#include <hardware/AudioHardwareInterface.h>
+#include <hardware/AudioHardwareBase.h>
 
 namespace android {
 
@@ -34,6 +34,7 @@ public:
     virtual size_t      bufferSize() const { return 4096; }
     virtual int         channelCount() const { return 2; }
     virtual int         format() const { return AudioSystem::PCM_16_BIT; }
+    virtual uint32_t    latency() const { return 0; }
     virtual status_t    setVolume(float volume) { return NO_ERROR; }
     virtual ssize_t     write(const void* buffer, size_t bytes);
     virtual status_t    dump(int fd, const Vector<String16>& args);
@@ -49,9 +50,10 @@ public:
     virtual status_t    setGain(float gain) { return NO_ERROR; }
     virtual ssize_t     read(void* buffer, ssize_t bytes);
     virtual status_t    dump(int fd, const Vector<String16>& args);
+    virtual status_t    standby() { return NO_ERROR; }
 };
 
-class AudioHardwareStub : public  AudioHardwareInterface
+class AudioHardwareStub : public  AudioHardwareBase
 {
 public:
                         AudioHardwareStub();
@@ -72,12 +74,14 @@ public:
     virtual AudioStreamOut* openOutputStream(
                                 int format=0,
                                 int channelCount=0,
-                                uint32_t sampleRate=0);
+                                uint32_t sampleRate=0,
+                                status_t *status=0);
 
     virtual AudioStreamIn* openInputStream(
                                 int format,
                                 int channelCount,
-                                uint32_t sampleRate);
+                                uint32_t sampleRate,
+                                status_t *status);
 
 protected:
     virtual status_t    doRouting() { return NO_ERROR; }

Reply via email to