diff options
Diffstat (limited to 'services')
10 files changed, 60 insertions, 28 deletions
diff --git a/services/audioflinger/PatchPanel.cpp b/services/audioflinger/PatchPanel.cpp index 9248bba..f6078a2 100644 --- a/services/audioflinger/PatchPanel.cpp +++ b/services/audioflinger/PatchPanel.cpp @@ -481,22 +481,31 @@ void AudioFlinger::PatchPanel::clearPatchConnections(Patch *patch)      if (patch->mRecordThread != 0) {          if (patch->mPatchRecord != 0) {              patch->mRecordThread->deletePatchRecord(patch->mPatchRecord); -            patch->mPatchRecord.clear();          }          audioflinger->closeInputInternal_l(patch->mRecordThread); -        patch->mRecordThread.clear();      }      if (patch->mPlaybackThread != 0) {          if (patch->mPatchTrack != 0) {              patch->mPlaybackThread->deletePatchTrack(patch->mPatchTrack); -            patch->mPatchTrack.clear();          }          // if num sources == 2 we are reusing an existing playback thread so we do not close it          if (patch->mAudioPatch.num_sources != 2) {              audioflinger->closeOutputInternal_l(patch->mPlaybackThread);          } +    } +    if (patch->mRecordThread != 0) { +        if (patch->mPatchRecord != 0) { +            patch->mPatchRecord.clear(); +        } +        patch->mRecordThread.clear(); +    } +    if (patch->mPlaybackThread != 0) { +        if (patch->mPatchTrack != 0) { +            patch->mPatchTrack.clear(); +        }          patch->mPlaybackThread.clear();      } +  }  /* Disconnect a patch */ diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index c8f9be0..d3ea9d8 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -375,6 +375,7 @@ String8 devicesToString(audio_devices_t devices)          AUDIO_DEVICE_OUT_FM,                "FM",          AUDIO_DEVICE_OUT_AUX_LINE,          "AUX_LINE",          AUDIO_DEVICE_OUT_SPEAKER_SAFE,      "SPEAKER_SAFE", +        AUDIO_DEVICE_OUT_IP,                "IP",          AUDIO_DEVICE_NONE,                  "NONE",         // must be last      }, mappingsIn[] = {          AUDIO_DEVICE_IN_COMMUNICATION,      "COMMUNICATION", @@ -397,6 +398,7 @@ String8 devicesToString(audio_devices_t devices)          AUDIO_DEVICE_IN_SPDIF,              "SPDIF",          AUDIO_DEVICE_IN_BLUETOOTH_A2DP,     "BLUETOOTH_A2DP",          AUDIO_DEVICE_IN_LOOPBACK,           "LOOPBACK", +        AUDIO_DEVICE_IN_IP,                 "IP",          AUDIO_DEVICE_NONE,                  "NONE",         // must be last      };      String8 result; diff --git a/services/audiopolicy/common/managerdefinitions/include/ConfigParsingUtils.h b/services/audiopolicy/common/managerdefinitions/include/ConfigParsingUtils.h index a39006e..78d2cdf 100644 --- a/services/audiopolicy/common/managerdefinitions/include/ConfigParsingUtils.h +++ b/services/audiopolicy/common/managerdefinitions/include/ConfigParsingUtils.h @@ -73,6 +73,7 @@ const StringToEnum sDeviceTypeToEnumTable[] = {      STRING_TO_ENUM(AUDIO_DEVICE_OUT_SPDIF),      STRING_TO_ENUM(AUDIO_DEVICE_OUT_FM),      STRING_TO_ENUM(AUDIO_DEVICE_OUT_AUX_LINE), +    STRING_TO_ENUM(AUDIO_DEVICE_OUT_IP),      STRING_TO_ENUM(AUDIO_DEVICE_IN_AMBIENT),      STRING_TO_ENUM(AUDIO_DEVICE_IN_BUILTIN_MIC),      STRING_TO_ENUM(AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET), @@ -94,6 +95,7 @@ const StringToEnum sDeviceTypeToEnumTable[] = {      STRING_TO_ENUM(AUDIO_DEVICE_IN_SPDIF),      STRING_TO_ENUM(AUDIO_DEVICE_IN_BLUETOOTH_A2DP),      STRING_TO_ENUM(AUDIO_DEVICE_IN_LOOPBACK), +    STRING_TO_ENUM(AUDIO_DEVICE_IN_IP),  };  const StringToEnum sDeviceNameToEnumTable[] = { @@ -124,6 +126,7 @@ const StringToEnum sDeviceNameToEnumTable[] = {      NAME_TO_ENUM("S/PDIF Out", AUDIO_DEVICE_OUT_SPDIF),      NAME_TO_ENUM("FM transceiver Out", AUDIO_DEVICE_OUT_FM),      NAME_TO_ENUM("Aux Line Out", AUDIO_DEVICE_OUT_AUX_LINE), +    NAME_TO_ENUM("IP Out", AUDIO_DEVICE_OUT_IP),      NAME_TO_ENUM("Ambient Mic", AUDIO_DEVICE_IN_AMBIENT),      NAME_TO_ENUM("Built-In Mic", AUDIO_DEVICE_IN_BUILTIN_MIC),      NAME_TO_ENUM("BT SCO Headset Mic", AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET), @@ -145,6 +148,7 @@ const StringToEnum sDeviceNameToEnumTable[] = {      NAME_TO_ENUM("S/PDIF In", AUDIO_DEVICE_IN_SPDIF),      NAME_TO_ENUM("BT A2DP In", AUDIO_DEVICE_IN_BLUETOOTH_A2DP),      NAME_TO_ENUM("Loopback In", AUDIO_DEVICE_IN_LOOPBACK), +    NAME_TO_ENUM("IP In", AUDIO_DEVICE_IN_IP),  };  const StringToEnum sOutputFlagNameToEnumTable[] = { @@ -156,11 +160,15 @@ const StringToEnum sOutputFlagNameToEnumTable[] = {      STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_NON_BLOCKING),      STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_HW_AV_SYNC),      STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_TTS), +    STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_RAW), +    STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_SYNC),  };  const StringToEnum sInputFlagNameToEnumTable[] = {      STRING_TO_ENUM(AUDIO_INPUT_FLAG_FAST),      STRING_TO_ENUM(AUDIO_INPUT_FLAG_HW_HOTWORD), +    STRING_TO_ENUM(AUDIO_INPUT_FLAG_RAW), +    STRING_TO_ENUM(AUDIO_INPUT_FLAG_SYNC),  };  const StringToEnum sFormatNameToEnumTable[] = { diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp index ee25b71..6983b5c 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp @@ -427,7 +427,7 @@ void AudioPolicyManager::setPhoneState(audio_mode_t state)      /// Opens: can these line be executed after the switch of volume curves???      // if leaving call state, handle special case of active streams      // pertaining to sonification strategy see handleIncallSonification() -    if (isInCall()) { +    if (isStateInCall(oldState)) {          ALOGV("setPhoneState() in call state management: new state is %d", state);          for (int stream = 0; stream < AUDIO_STREAM_CNT; stream++) {              if (stream == AUDIO_STREAM_PATCH) { @@ -436,7 +436,7 @@ void AudioPolicyManager::setPhoneState(audio_mode_t state)              handleIncallSonification((audio_stream_type_t)stream, false, true);          } -        // force reevaluating accessibility routing when call starts +        // force reevaluating accessibility routing when call stops          mpClientInterface->invalidateStream(AUDIO_STREAM_ACCESSIBILITY);      } @@ -514,6 +514,9 @@ void AudioPolicyManager::setPhoneState(audio_mode_t state)              }              handleIncallSonification((audio_stream_type_t)stream, true, true);          } + +        // force reevaluating accessibility routing when call starts +        mpClientInterface->invalidateStream(AUDIO_STREAM_ACCESSIBILITY);      }      // Flag that ringtone volume must be limited to music volume until we exit MODE_RINGTONE diff --git a/services/audiopolicy/service/AudioPolicyService.cpp b/services/audiopolicy/service/AudioPolicyService.cpp index fbe4f18..eefff3d 100644 --- a/services/audiopolicy/service/AudioPolicyService.cpp +++ b/services/audiopolicy/service/AudioPolicyService.cpp @@ -930,6 +930,7 @@ void AudioPolicyService::AudioCommandThread::insertCommand_l(sp<AudioCommand>& c                  patch2 = ((CreateAudioPatchData *)command2->mParam.get())->mPatch;              } else {                  handle2 = ((ReleaseAudioPatchData *)command2->mParam.get())->mHandle; +                memset(&patch2, 0, sizeof(patch2));              }              if (handle != handle2) break;              /* Filter CREATE_AUDIO_PATCH commands only when they are issued for diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp index f42fada..92df4e3 100644 --- a/services/camera/libcameraservice/CameraService.cpp +++ b/services/camera/libcameraservice/CameraService.cpp @@ -1292,7 +1292,7 @@ void CameraService::notifySystemEvent(int32_t eventId, const int32_t* args, size  status_t CameraService::addListener(const sp<ICameraServiceListener>& listener) {      ALOGV("%s: Add listener %p", __FUNCTION__, listener.get()); -    if (listener == 0) { +    if (listener == nullptr) {          ALOGE("%s: Listener must not be null", __FUNCTION__);          return BAD_VALUE;      } diff --git a/services/camera/libcameraservice/common/CameraModule.cpp b/services/camera/libcameraservice/common/CameraModule.cpp index 85d4488..1ae01ae 100644 --- a/services/camera/libcameraservice/common/CameraModule.cpp +++ b/services/camera/libcameraservice/common/CameraModule.cpp @@ -154,6 +154,18 @@ CameraModule::CameraModule(camera_module_t *module) {      mCameraInfoMap.setCapacity(getNumberOfCameras());  } +CameraModule::~CameraModule() +{ +    while (mCameraInfoMap.size() > 0) { +        camera_info cameraInfo = mCameraInfoMap.editValueAt(0); +        if (cameraInfo.static_camera_characteristics != NULL) { +            free_camera_metadata( +                    const_cast<camera_metadata_t*>(cameraInfo.static_camera_characteristics)); +        } +        mCameraInfoMap.removeItemsAt(0); +    } +} +  int CameraModule::init() {      if (getModuleApiVersion() >= CAMERA_MODULE_API_VERSION_2_4 &&              mModule->init != NULL) { @@ -192,12 +204,9 @@ int CameraModule::getCameraInfo(int cameraId, struct camera_info *info) {          CameraMetadata m;          m = rawInfo.static_camera_characteristics;          deriveCameraCharacteristicsKeys(rawInfo.device_version, m); -        mCameraCharacteristicsMap.add(cameraId, m);          cameraInfo = rawInfo; -        cameraInfo.static_camera_characteristics = -                mCameraCharacteristicsMap.valueFor(cameraId).getAndLock(); -        mCameraInfoMap.add(cameraId, cameraInfo); -        index = mCameraInfoMap.indexOfKey(cameraId); +        cameraInfo.static_camera_characteristics = m.release(); +        index = mCameraInfoMap.add(cameraId, cameraInfo);      }      assert(index != NAME_NOT_FOUND); diff --git a/services/camera/libcameraservice/common/CameraModule.h b/services/camera/libcameraservice/common/CameraModule.h index c21092e..36822c7 100644 --- a/services/camera/libcameraservice/common/CameraModule.h +++ b/services/camera/libcameraservice/common/CameraModule.h @@ -33,6 +33,7 @@ namespace android {  class CameraModule {  public:      CameraModule(camera_module_t *module); +    virtual ~CameraModule();      // Must be called after construction      // Returns OK on success, NO_INIT on failure @@ -60,7 +61,6 @@ private:      camera_module_t *mModule;      KeyedVector<int, camera_info> mCameraInfoMap; -    KeyedVector<int, CameraMetadata> mCameraCharacteristicsMap;      Mutex mCameraInfoLock;  }; diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp index 4b55dad..9e73b5c 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.cpp +++ b/services/camera/libcameraservice/device3/Camera3Device.cpp @@ -164,9 +164,17 @@ status_t Camera3Device::initialize(CameraModule *module)          return res;      } -    /** Start up request queue thread */ +    bool aeLockAvailable = false; +    camera_metadata_ro_entry aeLockAvailableEntry; +    res = find_camera_metadata_ro_entry(info.static_camera_characteristics, +            ANDROID_CONTROL_AE_LOCK_AVAILABLE, &aeLockAvailableEntry); +    if (res == OK && aeLockAvailableEntry.count > 0) { +        aeLockAvailable = (aeLockAvailableEntry.data.u8[0] == +                ANDROID_CONTROL_AE_LOCK_AVAILABLE_TRUE); +    } -    mRequestThread = new RequestThread(this, mStatusTracker, device); +    /** Start up request queue thread */ +    mRequestThread = new RequestThread(this, mStatusTracker, device, aeLockAvailable);      res = mRequestThread->run(String8::format("C3Dev-%d-ReqQueue", mId).string());      if (res != OK) {          SET_ERR_L("Unable to start request queue thread: %s (%d)", @@ -2472,7 +2480,8 @@ CameraMetadata Camera3Device::getLatestRequestLocked() {  Camera3Device::RequestThread::RequestThread(wp<Camera3Device> parent,          sp<StatusTracker> statusTracker, -        camera3_device_t *hal3Device) : +        camera3_device_t *hal3Device, +        bool aeLockAvailable) :          Thread(/*canCallJava*/false),          mParent(parent),          mStatusTracker(statusTracker), @@ -2485,19 +2494,9 @@ Camera3Device::RequestThread::RequestThread(wp<Camera3Device> parent,          mLatestRequestId(NAME_NOT_FOUND),          mCurrentAfTriggerId(0),          mCurrentPreCaptureTriggerId(0), -        mRepeatingLastFrameNumber(NO_IN_FLIGHT_REPEATING_FRAMES) { +        mRepeatingLastFrameNumber(NO_IN_FLIGHT_REPEATING_FRAMES), +        mAeLockAvailable(aeLockAvailable) {      mStatusId = statusTracker->addComponent(); - -    mAeLockAvailable = false; -    sp<Camera3Device> p = parent.promote(); -    if (p != NULL) { -        camera_metadata_ro_entry aeLockAvailable = -                p->info().find(ANDROID_CONTROL_AE_LOCK_AVAILABLE); -        if (aeLockAvailable.count > 0) { -            mAeLockAvailable = (aeLockAvailable.data.u8[0] == -                    ANDROID_CONTROL_AE_LOCK_AVAILABLE_TRUE); -        } -    }  }  void Camera3Device::RequestThread::setNotificationListener( diff --git a/services/camera/libcameraservice/device3/Camera3Device.h b/services/camera/libcameraservice/device3/Camera3Device.h index bb4bcc4..31b6132 100644 --- a/services/camera/libcameraservice/device3/Camera3Device.h +++ b/services/camera/libcameraservice/device3/Camera3Device.h @@ -389,7 +389,8 @@ class Camera3Device :          RequestThread(wp<Camera3Device> parent,                  sp<camera3::StatusTracker> statusTracker, -                camera3_device_t *hal3Device); +                camera3_device_t *hal3Device, +                bool aeLockAvailable);          void     setNotificationListener(NotificationListener *listener);  | 
