diff options
| author | Eric Laurent <elaurent@google.com> | 2011-05-17 19:16:02 -0700 | 
|---|---|---|
| committer | Eric Laurent <elaurent@google.com> | 2011-05-27 15:15:00 -0700 | 
| commit | e1315cf0b63b4c14a77046519e6b01f6f60d74b0 (patch) | |
| tree | c10fd288fd0d0d85c619e7e635a249765202fabc /services | |
| parent | a3e73df3b402f1ebdbef7c8a8e3111d852e7bd35 (diff) | |
| download | frameworks_av-e1315cf0b63b4c14a77046519e6b01f6f60d74b0.zip frameworks_av-e1315cf0b63b4c14a77046519e6b01f6f60d74b0.tar.gz frameworks_av-e1315cf0b63b4c14a77046519e6b01f6f60d74b0.tar.bz2  | |
New effect library API
Moved and renamed media/EffectApi.h to hardware/audio_effect.h
Modified the effect library API to expose a library info structure
containing an interface functions table.
Also removed enums for audio channels, audio format and devices
from effect API and use values from system/audio.h instead.
Modified effects factory to support new library interface format and
load libraries and efffects listed in audio_effects.conf file.
The file audio_effects.conf is first loaded from /vendor/etc and
then from /system/etc/audio_effects.conf if not found.
Modified existing effect libraries to implement the new library interface.
Change-Id: Ie52351e071b6d352fa2fbc06c3846686f8c45df9
Diffstat (limited to 'services')
| -rw-r--r-- | services/audioflinger/AudioFlinger.cpp | 77 | ||||
| -rw-r--r-- | services/audioflinger/AudioFlinger.h | 10 | 
2 files changed, 8 insertions, 79 deletions
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp index 8e86eda..67c6d96 100644 --- a/services/audioflinger/AudioFlinger.cpp +++ b/services/audioflinger/AudioFlinger.cpp @@ -61,7 +61,6 @@  // ---------------------------------------------------------------------------- -extern const char * const gEffectLibPath;  namespace android { @@ -4622,10 +4621,6 @@ status_t AudioFlinger::loadEffectLibrary(const char *libPath, int *handle)      if (!settingsAllowed()) {          return PERMISSION_DENIED;      } -    // only allow libraries loaded from /system/lib/soundfx for now -    if (strncmp(gEffectLibPath, libPath, strlen(gEffectLibPath)) != 0) { -        return PERMISSION_DENIED; -    }      Mutex::Autolock _l(mLock);      return EffectLoadLibrary(libPath, handle); @@ -4677,7 +4672,6 @@ sp<IEffect> AudioFlinger::createEffect(pid_t pid,  {      status_t lStatus = NO_ERROR;      sp<EffectHandle> handle; -    effect_interface_t itfe;      effect_descriptor_t desc;      sp<Client> client;      wp<Client> wclient; @@ -5515,19 +5509,19 @@ status_t AudioFlinger::EffectModule::configure()      // TODO: handle configuration of effects replacing track process      if (thread->channelCount() == 1) { -        channels = CHANNEL_MONO; +        channels = AUDIO_CHANNEL_OUT_MONO;      } else { -        channels = CHANNEL_STEREO; +        channels = AUDIO_CHANNEL_OUT_STEREO;      }      if ((mDescriptor.flags & EFFECT_FLAG_TYPE_MASK) == EFFECT_FLAG_TYPE_AUXILIARY) { -        mConfig.inputCfg.channels = CHANNEL_MONO; +        mConfig.inputCfg.channels = AUDIO_CHANNEL_OUT_MONO;      } else {          mConfig.inputCfg.channels = channels;      }      mConfig.outputCfg.channels = channels; -    mConfig.inputCfg.format = SAMPLE_FORMAT_PCM_S15; -    mConfig.outputCfg.format = SAMPLE_FORMAT_PCM_S15; +    mConfig.inputCfg.format = AUDIO_FORMAT_PCM_16_BIT; +    mConfig.outputCfg.format = AUDIO_FORMAT_PCM_16_BIT;      mConfig.inputCfg.samplingRate = thread->sampleRate();      mConfig.outputCfg.samplingRate = mConfig.inputCfg.samplingRate;      mConfig.inputCfg.bufferProvider.cookie = NULL; @@ -5772,11 +5766,6 @@ status_t AudioFlinger::EffectModule::setDevice(uint32_t device)      Mutex::Autolock _l(mLock);      status_t status = NO_ERROR;      if ((mDescriptor.flags & EFFECT_FLAG_DEVICE_MASK) == EFFECT_FLAG_DEVICE_IND) { -        // convert device bit field from AudioSystem to EffectApi format. -        device = deviceAudioSystemToEffectApi(device); -        if (device == 0) { -            return BAD_VALUE; -        }          status_t cmdStatus;          uint32_t size = sizeof(status_t);          status = (*mEffectInterface)->command(mEffectInterface, @@ -5797,17 +5786,12 @@ status_t AudioFlinger::EffectModule::setMode(uint32_t mode)      Mutex::Autolock _l(mLock);      status_t status = NO_ERROR;      if ((mDescriptor.flags & EFFECT_FLAG_AUDIO_MODE_MASK) == EFFECT_FLAG_AUDIO_MODE_IND) { -        // convert audio mode from AudioSystem to EffectApi format. -        int effectMode = modeAudioSystemToEffectApi(mode); -        if (effectMode < 0) { -            return BAD_VALUE; -        }          status_t cmdStatus;          uint32_t size = sizeof(status_t);          status = (*mEffectInterface)->command(mEffectInterface,                                                EFFECT_CMD_SET_AUDIO_MODE,                                                sizeof(int), -                                              &effectMode, +                                              &mode,                                                &size,                                                &cmdStatus);          if (status == NO_ERROR) { @@ -5817,53 +5801,6 @@ status_t AudioFlinger::EffectModule::setMode(uint32_t mode)      return status;  } -// update this table when AudioSystem::audio_devices or audio_device_e (in EffectApi.h) are modified -const uint32_t AudioFlinger::EffectModule::sDeviceConvTable[] = { -    DEVICE_EARPIECE, // AUDIO_DEVICE_OUT_EARPIECE -    DEVICE_SPEAKER, // AUDIO_DEVICE_OUT_SPEAKER -    DEVICE_WIRED_HEADSET, // case AUDIO_DEVICE_OUT_WIRED_HEADSET -    DEVICE_WIRED_HEADPHONE, // AUDIO_DEVICE_OUT_WIRED_HEADPHONE -    DEVICE_BLUETOOTH_SCO, // AUDIO_DEVICE_OUT_BLUETOOTH_SCO -    DEVICE_BLUETOOTH_SCO_HEADSET, // AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET -    DEVICE_BLUETOOTH_SCO_CARKIT, //  AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT -    DEVICE_BLUETOOTH_A2DP, //  AUDIO_DEVICE_OUT_BLUETOOTH_A2DP -    DEVICE_BLUETOOTH_A2DP_HEADPHONES, // AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES -    DEVICE_BLUETOOTH_A2DP_SPEAKER, // AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER -    DEVICE_AUX_DIGITAL // AUDIO_DEVICE_OUT_AUX_DIGITAL -}; - -uint32_t AudioFlinger::EffectModule::deviceAudioSystemToEffectApi(uint32_t device) -{ -    uint32_t deviceOut = 0; -    while (device) { -        const uint32_t i = 31 - __builtin_clz(device); -        device &= ~(1 << i); -        if (i >= sizeof(sDeviceConvTable)/sizeof(uint32_t)) { -            LOGE("device conversion error for AudioSystem device 0x%08x", device); -            return 0; -        } -        deviceOut |= (uint32_t)sDeviceConvTable[i]; -    } -    return deviceOut; -} - -// update this table when AudioSystem::audio_mode or audio_mode_e (in EffectApi.h) are modified -const uint32_t AudioFlinger::EffectModule::sModeConvTable[] = { -    AUDIO_EFFECT_MODE_NORMAL,   // AUDIO_MODE_NORMAL -    AUDIO_EFFECT_MODE_RINGTONE, // AUDIO_MODE_RINGTONE -    AUDIO_EFFECT_MODE_IN_CALL,  // AUDIO_MODE_IN_CALL -    AUDIO_EFFECT_MODE_IN_CALL   // AUDIO_MODE_IN_COMMUNICATION, same conversion as for AUDIO_MODE_IN_CALL -}; - -int AudioFlinger::EffectModule::modeAudioSystemToEffectApi(uint32_t mode) -{ -    int modeOut = -1; -    if (mode < sizeof(sModeConvTable) / sizeof(uint32_t)) { -        modeOut = (int)sModeConvTable[mode]; -    } -    return modeOut; -} -  status_t AudioFlinger::EffectModule::dump(int fd, const Vector<String16>& args)  {      const size_t SIZE = 256; @@ -5895,7 +5832,7 @@ status_t AudioFlinger::EffectModule::dump(int fd, const Vector<String16>& args)                  mDescriptor.type.clockSeq, mDescriptor.type.node[0], mDescriptor.type.node[1],mDescriptor.type.node[2],                  mDescriptor.type.node[3],mDescriptor.type.node[4],mDescriptor.type.node[5]);      result.append(buffer); -    snprintf(buffer, SIZE, "\t\t- apiVersion: %04X\n\t\t- flags: %08X\n", +    snprintf(buffer, SIZE, "\t\t- apiVersion: %08X\n\t\t- flags: %08X\n",              mDescriptor.apiVersion,              mDescriptor.flags);      result.append(buffer); diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h index 39314ad..f3e1984 100644 --- a/services/audioflinger/AudioFlinger.h +++ b/services/audioflinger/AudioFlinger.h @@ -1002,14 +1002,6 @@ private:          status_t start_l();          status_t stop_l(); -        // update this table when AudioSystem::audio_devices or audio_device_e (in EffectApi.h) are modified -        static const uint32_t sDeviceConvTable[]; -        static uint32_t deviceAudioSystemToEffectApi(uint32_t device); - -        // update this table when AudioSystem::audio_mode or audio_mode_e (in EffectApi.h) are modified -        static const uint32_t sModeConvTable[]; -        static int modeAudioSystemToEffectApi(uint32_t mode); -          Mutex               mLock;      // mutex for process, commands and handles list protection          wp<ThreadBase>      mThread;    // parent thread          wp<EffectChain>     mChain;     // parent effect chain @@ -1017,7 +1009,7 @@ private:          int                 mSessionId; // audio session ID          effect_descriptor_t mDescriptor;// effect descriptor received from effect engine          effect_config_t     mConfig;    // input and output audio configuration -        effect_interface_t  mEffectInterface; // Effect module C API +        effect_handle_t  mEffectInterface; // Effect module C API          status_t mStatus;               // initialization status          uint32_t mState;                // current activation state (effect_state)          Vector< wp<EffectHandle> > mHandles;    // list of client handles  | 
