Loading services/audiopolicy/common/managerdefinitions/include/PolicyAudioPort.h +1 −1 Original line number Diff line number Diff line Loading @@ -44,7 +44,7 @@ public: bool equals(const sp<PolicyAudioPort> &right) const { return getTagName() == right->getTagName(); return right != 0 && getTagName() == right->getTagName(); } virtual sp<AudioPort> asAudioPort() const = 0; Loading services/audiopolicy/common/managerdefinitions/src/AudioRoute.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ void AudioRoute::dump(String8 *dst, int spaces) const bool AudioRoute::supportsPatch(const sp<PolicyAudioPort> &srcPort, const sp<PolicyAudioPort> &dstPort) const { if (mSink == 0 || dstPort == 0 || !dstPort->equals(mSink)) { if (mSink == 0 || srcPort == 0 || dstPort == 0 || !dstPort->equals(mSink)) { return false; } ALOGV("%s: sinks %s matching", __FUNCTION__, mSink->getTagName().c_str()); Loading services/camera/libcameraservice/device3/Camera3Device.cpp +21 −7 Original line number Diff line number Diff line Loading @@ -2611,6 +2611,7 @@ status_t Camera3Device::configureStreamsLocked(int operatingMode, config.input_is_multi_resolution = mIsInputStreamMultiResolution; } mGroupIdPhysicalCameraMap.clear(); for (size_t i = 0; i < mOutputStreams.size(); i++) { // Don't configure bidi streams twice, nor add them twice to the list Loading Loading @@ -2644,6 +2645,12 @@ status_t Camera3Device::configureStreamsLocked(int operatingMode, __FUNCTION__, outputStream->data_space); } } if (mOutputStreams[i]->isMultiResolution()) { int32_t streamGroupId = mOutputStreams[i]->getHalStreamGroupId(); const String8& physicalCameraId = mOutputStreams[i]->getPhysicalCameraId(); mGroupIdPhysicalCameraMap[streamGroupId].insert(physicalCameraId); } } config.streams = streams.editArray(); Loading Loading @@ -2714,7 +2721,8 @@ status_t Camera3Device::configureStreamsLocked(int operatingMode, // Request thread needs to know to avoid using repeat-last-settings protocol // across configure_streams() calls if (notifyRequestThread) { mRequestThread->configurationComplete(mIsConstrainedHighSpeedConfiguration, sessionParams); mRequestThread->configurationComplete(mIsConstrainedHighSpeedConfiguration, sessionParams, mGroupIdPhysicalCameraMap); } char value[PROPERTY_VALUE_MAX]; Loading Loading @@ -2887,8 +2895,9 @@ void Camera3Device::setErrorStateLockedV(const char *fmt, va_list args) { status_t Camera3Device::registerInFlight(uint32_t frameNumber, int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput, bool hasAppCallback, nsecs_t maxExpectedDuration, std::set<String8>& physicalCameraIds, bool isStillCapture, bool isZslCapture, bool rotateAndCropAuto, const std::set<std::string>& cameraIdsWithZoom, const std::set<std::set<String8>>& physicalCameraIds, bool isStillCapture, bool isZslCapture, bool rotateAndCropAuto, const std::set<std::string>& cameraIdsWithZoom, const SurfaceMap& outputSurfaces, nsecs_t requestTimeNs) { ATRACE_CALL(); std::lock_guard<std::mutex> l(mInFlightLock); Loading Loading @@ -3962,11 +3971,13 @@ void Camera3Device::RequestThread::setNotificationListener( } void Camera3Device::RequestThread::configurationComplete(bool isConstrainedHighSpeed, const CameraMetadata& sessionParams) { const CameraMetadata& sessionParams, const std::map<int32_t, std::set<String8>>& groupIdPhysicalCameraMap) { ATRACE_CALL(); Mutex::Autolock l(mRequestLock); mReconfigured = true; mLatestSessionParams = sessionParams; mGroupIdPhysicalCameraMap = groupIdPhysicalCameraMap; // Prepare video stream for high speed recording. mPrepareVideoStream = isConstrainedHighSpeed; mConstrainedMode = isConstrainedHighSpeed; Loading Loading @@ -4725,7 +4736,7 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { outputBuffers->insertAt(camera_stream_buffer_t(), 0, captureRequest->mOutputStreams.size()); halRequest->output_buffers = outputBuffers->array(); std::set<String8> requestedPhysicalCameras; std::set<std::set<String8>> requestedPhysicalCameras; sp<Camera3Device> parent = mParent.promote(); if (parent == NULL) { Loading Loading @@ -4820,8 +4831,11 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { } String8 physicalCameraId = outputStream->getPhysicalCameraId(); if (!physicalCameraId.isEmpty()) { requestedPhysicalCameras.insert(physicalCameraId); int32_t streamGroupId = outputStream->getHalStreamGroupId(); if (streamGroupId != -1 && mGroupIdPhysicalCameraMap.count(streamGroupId) == 1) { requestedPhysicalCameras.insert(mGroupIdPhysicalCameraMap[streamGroupId]); } else if (!physicalCameraId.isEmpty()) { requestedPhysicalCameras.insert(std::set<String8>({physicalCameraId})); } halRequest->num_output_buffers++; } Loading services/camera/libcameraservice/device3/Camera3Device.h +8 −2 Original line number Diff line number Diff line Loading @@ -497,6 +497,8 @@ class Camera3Device : sp<camera3::Camera3Stream> mInputStream; bool mIsInputStreamMultiResolution; SessionStatsBuilder mSessionStatsBuilder; // Map from stream group ID to physical cameras backing the stream group std::map<int32_t, std::set<String8>> mGroupIdPhysicalCameraMap; int mNextStreamId; bool mNeedConfig; Loading Loading @@ -800,7 +802,8 @@ class Camera3Device : * Call after stream (re)-configuration is completed. */ void configurationComplete(bool isConstrainedHighSpeed, const CameraMetadata& sessionParams); const CameraMetadata& sessionParams, const std::map<int32_t, std::set<String8>>& groupIdPhysicalCameraMap); /** * Set or clear the list of repeating requests. Does not block Loading Loading @@ -1057,6 +1060,8 @@ class Camera3Device : Vector<int32_t> mSessionParamKeys; CameraMetadata mLatestSessionParams; std::map<int32_t, std::set<String8>> mGroupIdPhysicalCameraMap; const bool mUseHalBufManager; }; sp<RequestThread> mRequestThread; Loading @@ -1076,7 +1081,8 @@ class Camera3Device : status_t registerInFlight(uint32_t frameNumber, int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput, bool callback, nsecs_t maxExpectedDuration, std::set<String8>& physicalCameraIds, bool callback, nsecs_t maxExpectedDuration, const std::set<std::set<String8>>& physicalCameraIds, bool isStillCapture, bool isZslCapture, bool rotateAndCropAuto, const std::set<std::string>& cameraIdsWithZoom, const SurfaceMap& outputSurfaces, nsecs_t requestTimeNs); Loading services/camera/libcameraservice/device3/Camera3OutputUtils.cpp +21 −9 Original line number Diff line number Diff line Loading @@ -484,6 +484,20 @@ void removeInFlightRequestIfReadyLocked(CaptureOutputStates& states, int idx) { states.inflightIntf.checkInflightMapLengthLocked(); } // Erase the subset of physicalCameraIds that contains id bool erasePhysicalCameraIdSet( std::set<std::set<String8>>& physicalCameraIds, const String8& id) { bool found = false; for (auto iter = physicalCameraIds.begin(); iter != physicalCameraIds.end(); iter++) { if (iter->count(id) == 1) { physicalCameraIds.erase(iter); found = true; break; } } return found; } void processCaptureResult(CaptureOutputStates& states, const camera_capture_result *result) { ATRACE_CALL(); Loading Loading @@ -583,12 +597,10 @@ void processCaptureResult(CaptureOutputStates& states, const camera_capture_resu } for (uint32_t i = 0; i < result->num_physcam_metadata; i++) { String8 physicalId(result->physcam_ids[i]); std::set<String8>::iterator cameraIdIter = request.physicalCameraIds.find(physicalId); if (cameraIdIter != request.physicalCameraIds.end()) { request.physicalCameraIds.erase(cameraIdIter); } else { SET_ERR("Total result for frame %d has already returned for camera %s", bool validPhysicalCameraMetadata = erasePhysicalCameraIdSet(request.physicalCameraIds, physicalId); if (!validPhysicalCameraMetadata) { SET_ERR("Unexpected total result for frame %d camera %s", frameNumber, physicalId.c_str()); return; } Loading Loading @@ -1083,14 +1095,14 @@ void notifyError(CaptureOutputStates& states, const camera_error_msg_t &msg) { errorCode) { if (physicalCameraId.size() > 0) { String8 cameraId(physicalCameraId); auto iter = r.physicalCameraIds.find(cameraId); if (iter == r.physicalCameraIds.end()) { bool validPhysicalCameraId = erasePhysicalCameraIdSet(r.physicalCameraIds, cameraId); if (!validPhysicalCameraId) { ALOGE("%s: Reported result failure for physical camera device: %s " " which is not part of the respective request!", __FUNCTION__, cameraId.string()); break; } r.physicalCameraIds.erase(iter); resultExtras.errorPhysicalCameraId = physicalCameraId; physicalDeviceResultError = true; } Loading Loading
services/audiopolicy/common/managerdefinitions/include/PolicyAudioPort.h +1 −1 Original line number Diff line number Diff line Loading @@ -44,7 +44,7 @@ public: bool equals(const sp<PolicyAudioPort> &right) const { return getTagName() == right->getTagName(); return right != 0 && getTagName() == right->getTagName(); } virtual sp<AudioPort> asAudioPort() const = 0; Loading
services/audiopolicy/common/managerdefinitions/src/AudioRoute.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -39,7 +39,7 @@ void AudioRoute::dump(String8 *dst, int spaces) const bool AudioRoute::supportsPatch(const sp<PolicyAudioPort> &srcPort, const sp<PolicyAudioPort> &dstPort) const { if (mSink == 0 || dstPort == 0 || !dstPort->equals(mSink)) { if (mSink == 0 || srcPort == 0 || dstPort == 0 || !dstPort->equals(mSink)) { return false; } ALOGV("%s: sinks %s matching", __FUNCTION__, mSink->getTagName().c_str()); Loading
services/camera/libcameraservice/device3/Camera3Device.cpp +21 −7 Original line number Diff line number Diff line Loading @@ -2611,6 +2611,7 @@ status_t Camera3Device::configureStreamsLocked(int operatingMode, config.input_is_multi_resolution = mIsInputStreamMultiResolution; } mGroupIdPhysicalCameraMap.clear(); for (size_t i = 0; i < mOutputStreams.size(); i++) { // Don't configure bidi streams twice, nor add them twice to the list Loading Loading @@ -2644,6 +2645,12 @@ status_t Camera3Device::configureStreamsLocked(int operatingMode, __FUNCTION__, outputStream->data_space); } } if (mOutputStreams[i]->isMultiResolution()) { int32_t streamGroupId = mOutputStreams[i]->getHalStreamGroupId(); const String8& physicalCameraId = mOutputStreams[i]->getPhysicalCameraId(); mGroupIdPhysicalCameraMap[streamGroupId].insert(physicalCameraId); } } config.streams = streams.editArray(); Loading Loading @@ -2714,7 +2721,8 @@ status_t Camera3Device::configureStreamsLocked(int operatingMode, // Request thread needs to know to avoid using repeat-last-settings protocol // across configure_streams() calls if (notifyRequestThread) { mRequestThread->configurationComplete(mIsConstrainedHighSpeedConfiguration, sessionParams); mRequestThread->configurationComplete(mIsConstrainedHighSpeedConfiguration, sessionParams, mGroupIdPhysicalCameraMap); } char value[PROPERTY_VALUE_MAX]; Loading Loading @@ -2887,8 +2895,9 @@ void Camera3Device::setErrorStateLockedV(const char *fmt, va_list args) { status_t Camera3Device::registerInFlight(uint32_t frameNumber, int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput, bool hasAppCallback, nsecs_t maxExpectedDuration, std::set<String8>& physicalCameraIds, bool isStillCapture, bool isZslCapture, bool rotateAndCropAuto, const std::set<std::string>& cameraIdsWithZoom, const std::set<std::set<String8>>& physicalCameraIds, bool isStillCapture, bool isZslCapture, bool rotateAndCropAuto, const std::set<std::string>& cameraIdsWithZoom, const SurfaceMap& outputSurfaces, nsecs_t requestTimeNs) { ATRACE_CALL(); std::lock_guard<std::mutex> l(mInFlightLock); Loading Loading @@ -3962,11 +3971,13 @@ void Camera3Device::RequestThread::setNotificationListener( } void Camera3Device::RequestThread::configurationComplete(bool isConstrainedHighSpeed, const CameraMetadata& sessionParams) { const CameraMetadata& sessionParams, const std::map<int32_t, std::set<String8>>& groupIdPhysicalCameraMap) { ATRACE_CALL(); Mutex::Autolock l(mRequestLock); mReconfigured = true; mLatestSessionParams = sessionParams; mGroupIdPhysicalCameraMap = groupIdPhysicalCameraMap; // Prepare video stream for high speed recording. mPrepareVideoStream = isConstrainedHighSpeed; mConstrainedMode = isConstrainedHighSpeed; Loading Loading @@ -4725,7 +4736,7 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { outputBuffers->insertAt(camera_stream_buffer_t(), 0, captureRequest->mOutputStreams.size()); halRequest->output_buffers = outputBuffers->array(); std::set<String8> requestedPhysicalCameras; std::set<std::set<String8>> requestedPhysicalCameras; sp<Camera3Device> parent = mParent.promote(); if (parent == NULL) { Loading Loading @@ -4820,8 +4831,11 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { } String8 physicalCameraId = outputStream->getPhysicalCameraId(); if (!physicalCameraId.isEmpty()) { requestedPhysicalCameras.insert(physicalCameraId); int32_t streamGroupId = outputStream->getHalStreamGroupId(); if (streamGroupId != -1 && mGroupIdPhysicalCameraMap.count(streamGroupId) == 1) { requestedPhysicalCameras.insert(mGroupIdPhysicalCameraMap[streamGroupId]); } else if (!physicalCameraId.isEmpty()) { requestedPhysicalCameras.insert(std::set<String8>({physicalCameraId})); } halRequest->num_output_buffers++; } Loading
services/camera/libcameraservice/device3/Camera3Device.h +8 −2 Original line number Diff line number Diff line Loading @@ -497,6 +497,8 @@ class Camera3Device : sp<camera3::Camera3Stream> mInputStream; bool mIsInputStreamMultiResolution; SessionStatsBuilder mSessionStatsBuilder; // Map from stream group ID to physical cameras backing the stream group std::map<int32_t, std::set<String8>> mGroupIdPhysicalCameraMap; int mNextStreamId; bool mNeedConfig; Loading Loading @@ -800,7 +802,8 @@ class Camera3Device : * Call after stream (re)-configuration is completed. */ void configurationComplete(bool isConstrainedHighSpeed, const CameraMetadata& sessionParams); const CameraMetadata& sessionParams, const std::map<int32_t, std::set<String8>>& groupIdPhysicalCameraMap); /** * Set or clear the list of repeating requests. Does not block Loading Loading @@ -1057,6 +1060,8 @@ class Camera3Device : Vector<int32_t> mSessionParamKeys; CameraMetadata mLatestSessionParams; std::map<int32_t, std::set<String8>> mGroupIdPhysicalCameraMap; const bool mUseHalBufManager; }; sp<RequestThread> mRequestThread; Loading @@ -1076,7 +1081,8 @@ class Camera3Device : status_t registerInFlight(uint32_t frameNumber, int32_t numBuffers, CaptureResultExtras resultExtras, bool hasInput, bool callback, nsecs_t maxExpectedDuration, std::set<String8>& physicalCameraIds, bool callback, nsecs_t maxExpectedDuration, const std::set<std::set<String8>>& physicalCameraIds, bool isStillCapture, bool isZslCapture, bool rotateAndCropAuto, const std::set<std::string>& cameraIdsWithZoom, const SurfaceMap& outputSurfaces, nsecs_t requestTimeNs); Loading
services/camera/libcameraservice/device3/Camera3OutputUtils.cpp +21 −9 Original line number Diff line number Diff line Loading @@ -484,6 +484,20 @@ void removeInFlightRequestIfReadyLocked(CaptureOutputStates& states, int idx) { states.inflightIntf.checkInflightMapLengthLocked(); } // Erase the subset of physicalCameraIds that contains id bool erasePhysicalCameraIdSet( std::set<std::set<String8>>& physicalCameraIds, const String8& id) { bool found = false; for (auto iter = physicalCameraIds.begin(); iter != physicalCameraIds.end(); iter++) { if (iter->count(id) == 1) { physicalCameraIds.erase(iter); found = true; break; } } return found; } void processCaptureResult(CaptureOutputStates& states, const camera_capture_result *result) { ATRACE_CALL(); Loading Loading @@ -583,12 +597,10 @@ void processCaptureResult(CaptureOutputStates& states, const camera_capture_resu } for (uint32_t i = 0; i < result->num_physcam_metadata; i++) { String8 physicalId(result->physcam_ids[i]); std::set<String8>::iterator cameraIdIter = request.physicalCameraIds.find(physicalId); if (cameraIdIter != request.physicalCameraIds.end()) { request.physicalCameraIds.erase(cameraIdIter); } else { SET_ERR("Total result for frame %d has already returned for camera %s", bool validPhysicalCameraMetadata = erasePhysicalCameraIdSet(request.physicalCameraIds, physicalId); if (!validPhysicalCameraMetadata) { SET_ERR("Unexpected total result for frame %d camera %s", frameNumber, physicalId.c_str()); return; } Loading Loading @@ -1083,14 +1095,14 @@ void notifyError(CaptureOutputStates& states, const camera_error_msg_t &msg) { errorCode) { if (physicalCameraId.size() > 0) { String8 cameraId(physicalCameraId); auto iter = r.physicalCameraIds.find(cameraId); if (iter == r.physicalCameraIds.end()) { bool validPhysicalCameraId = erasePhysicalCameraIdSet(r.physicalCameraIds, cameraId); if (!validPhysicalCameraId) { ALOGE("%s: Reported result failure for physical camera device: %s " " which is not part of the respective request!", __FUNCTION__, cameraId.string()); break; } r.physicalCameraIds.erase(iter); resultExtras.errorPhysicalCameraId = physicalCameraId; physicalDeviceResultError = true; } Loading