Loading camera/camera_platform.aconfig +0 −7 Original line number Diff line number Diff line Loading @@ -33,13 +33,6 @@ flag { bug: "238348881" } flag { namespace: "camera_platform" name: "session_hal_buf_manager" description: "Enable or disable HAL buffer manager as requested by the camera HAL" bug: "311263114" } flag { namespace: "camera_platform" name: "inject_session_params" Loading services/camera/libcameraservice/device3/Camera3Device.cpp +18 −23 Original line number Diff line number Diff line Loading @@ -1648,7 +1648,7 @@ status_t Camera3Device::waitUntilStateThenRelock(bool active, nsecs_t timeout, bool signalPipelineDrain = false; if (!active && (mUseHalBufManager || (flags::session_hal_buf_manager() && mHalBufManagedStreamIds.size() != 0))) { (mHalBufManagedStreamIds.size() != 0))) { auto streamIds = mOutputStreams.getStreamIds(); if (mStatus == STATUS_ACTIVE) { mRequestThread->signalPipelineDrain(streamIds); Loading Loading @@ -2598,7 +2598,6 @@ status_t Camera3Device::configureStreamsLocked(int operatingMode, // It is possible that use hal buffer manager behavior was changed by the // configureStreams call. mUseHalBufManager = config.use_hal_buf_manager; if (flags::session_hal_buf_manager()) { bool prevSessionHalBufManager = (mHalBufManagedStreamIds.size() != 0); // It is possible that configureStreams() changed config.hal_buffer_managed_streams mHalBufManagedStreamIds = config.hal_buffer_managed_streams; Loading @@ -2616,7 +2615,6 @@ status_t Camera3Device::configureStreamsLocked(int operatingMode, } } mRequestThread->setHalBufferManagedStreams(mHalBufManagedStreamIds); } // Finish all stream configuration immediately. // TODO: Try to relax this later back to lazy completion, which should be Loading Loading @@ -3021,8 +3019,7 @@ bool Camera3Device::HalInterface::verifyBufferIds( } bool Camera3Device::HalInterface::isHalBufferManagedStream(int32_t streamId) const { return (mUseHalBufManager || (flags::session_hal_buf_manager() && contains(mHalBufManagedStreamIds, streamId))); return (mUseHalBufManager || contains(mHalBufManagedStreamIds, streamId)); } status_t Camera3Device::HalInterface::popInflightBuffer( Loading Loading @@ -4184,8 +4181,7 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { } } bool passSurfaceMap = mUseHalBufManager || (flags::session_hal_buf_manager() && containsHalBufferManagedStream); mUseHalBufManager || containsHalBufferManagedStream; auto expectedDurationInfo = calculateExpectedDurationRange(settings); res = parent->registerInFlight(halRequest->frame_number, totalNumBuffers, captureRequest->mResultExtras, Loading Loading @@ -4301,7 +4297,7 @@ bool Camera3Device::RequestThread::isOutputSurfacePending(int streamId, size_t s void Camera3Device::RequestThread::signalPipelineDrain(const std::vector<int>& streamIds) { if (!mUseHalBufManager && (flags::session_hal_buf_manager() && mHalBufManagedStreamIds.size() == 0)) { (mHalBufManagedStreamIds.size() == 0)) { ALOGE("%s called for camera device not supporting HAL buffer management", __FUNCTION__); return; } Loading Loading @@ -4459,8 +4455,7 @@ void Camera3Device::RequestThread::cleanUpFailedRequests(bool sendRequestError) Camera3Stream *stream = Camera3Stream::cast((*outputBuffers)[i].stream); int32_t streamId = stream->getId(); bool skipBufferForStream = mUseHalBufManager || (flags::session_hal_buf_manager() && contains(mHalBufManagedStreamIds, streamId)); mUseHalBufManager || (contains(mHalBufManagedStreamIds, streamId)); if (skipBufferForStream) { // No output buffer can be returned when using HAL buffer manager for its stream continue; Loading services/camera/libcameraservice/device3/Camera3OutputUtils.cpp +1 −2 Original line number Diff line number Diff line Loading @@ -894,8 +894,7 @@ void collectReturnableOutputBuffers( if (outputBuffers[i].buffer == nullptr) { if (!useHalBufManager && !(flags::session_hal_buf_manager() && contains(halBufferManagedStreams, streamId))) { !contains(halBufferManagedStreams, streamId)) { // With HAL buffer management API, HAL sometimes will have to return buffers that // has not got a output buffer handle filled yet. This is though illegal if HAL // buffer management API is not being used. Loading services/camera/libcameraservice/device3/Camera3OutputUtilsTemplated.h +2 −4 Original line number Diff line number Diff line Loading @@ -212,8 +212,7 @@ void processOneCaptureResultLockedT( bool noBufferReturned = false; buffer_handle_t *buffer = nullptr; if (states.useHalBufManager || (flags::session_hal_buf_manager() && contains(states.halBufManagedStreamIds, bSrc.streamId))) { contains(states.halBufManagedStreamIds, bSrc.streamId)) { // This is suspicious most of the time but can be correct during flush where HAL // has to return capture result before a buffer is requested if (bSrc.bufferId == BUFFER_ID_NO_BUFFER) { Loading Loading @@ -303,8 +302,7 @@ void returnStreamBuffersT(ReturnBufferStates& states, for (const auto& buf : buffers) { if (!states.useHalBufManager && !(flags::session_hal_buf_manager() && contains(states.halBufManagedStreamIds, buf.streamId))) { !contains(states.halBufManagedStreamIds, buf.streamId)) { ALOGE("%s: Camera %s does not support HAL buffer management for stream id %d", __FUNCTION__, states.cameraId.c_str(), buf.streamId); return; Loading services/camera/libcameraservice/device3/aidl/AidlCamera3Device.cpp +11 −22 Original line number Diff line number Diff line Loading @@ -918,12 +918,6 @@ status_t AidlCamera3Device::AidlHalInterface::configureStreams( camera3::camera_stream_t *src = config->streams[i]; Camera3Stream* cam3stream = Camera3Stream::cast(src); // For stream configurations with multi res streams, hal buffer manager has to be used. if (!flags::session_hal_buf_manager() && cam3stream->getHalStreamGroupId() != -1 && src->stream_type != CAMERA_STREAM_INPUT) { mUseHalBufManager = true; config->use_hal_buf_manager = true; } cam3stream->setBufferFreedListener(this); int streamId = cam3stream->getId(); StreamType streamType; Loading Loading @@ -1002,8 +996,7 @@ status_t AidlCamera3Device::AidlHalInterface::configureStreams( err.getMessage()); return AidlProviderInfo::mapToStatusT(err); } if (flags::session_hal_buf_manager() && interfaceVersion >= AIDL_DEVICE_SESSION_V3 && mSupportSessionHalBufManager) { if (interfaceVersion >= AIDL_DEVICE_SESSION_V3 && mSupportSessionHalBufManager) { err = mAidlSession->configureStreamsV2(requestedConfiguration, &configureStreamsRet); finalConfiguration = std::move(configureStreamsRet.halStreams); } else { Loading @@ -1015,7 +1008,6 @@ status_t AidlCamera3Device::AidlHalInterface::configureStreams( return AidlProviderInfo::mapToStatusT(err); } if (flags::session_hal_buf_manager()) { std::set<int32_t> halBufferManagedStreamIds; for (const auto &halStream: finalConfiguration) { if ((interfaceVersion >= AIDL_DEVICE_SESSION_V3 && Loading @@ -1026,7 +1018,6 @@ status_t AidlCamera3Device::AidlHalInterface::configureStreams( } mHalBufManagedStreamIds = std::move(halBufferManagedStreamIds); config->hal_buffer_managed_streams = mHalBufManagedStreamIds; } // And convert output stream configuration from AIDL for (size_t i = 0; i < config->num_streams; i++) { camera3::camera_stream_t *dst = config->streams[i]; Loading Loading @@ -1096,11 +1087,9 @@ status_t AidlCamera3Device::AidlHalInterface::configureStreams( } dstStream->setUsage( mapProducerToFrameworkUsage(src.producerUsage)); if (flags::session_hal_buf_manager()) { dstStream->setHalBufferManager( contains(config->hal_buffer_managed_streams, streamId)); } } dst->max_buffers = src.maxBuffers; } Loading Loading
camera/camera_platform.aconfig +0 −7 Original line number Diff line number Diff line Loading @@ -33,13 +33,6 @@ flag { bug: "238348881" } flag { namespace: "camera_platform" name: "session_hal_buf_manager" description: "Enable or disable HAL buffer manager as requested by the camera HAL" bug: "311263114" } flag { namespace: "camera_platform" name: "inject_session_params" Loading
services/camera/libcameraservice/device3/Camera3Device.cpp +18 −23 Original line number Diff line number Diff line Loading @@ -1648,7 +1648,7 @@ status_t Camera3Device::waitUntilStateThenRelock(bool active, nsecs_t timeout, bool signalPipelineDrain = false; if (!active && (mUseHalBufManager || (flags::session_hal_buf_manager() && mHalBufManagedStreamIds.size() != 0))) { (mHalBufManagedStreamIds.size() != 0))) { auto streamIds = mOutputStreams.getStreamIds(); if (mStatus == STATUS_ACTIVE) { mRequestThread->signalPipelineDrain(streamIds); Loading Loading @@ -2598,7 +2598,6 @@ status_t Camera3Device::configureStreamsLocked(int operatingMode, // It is possible that use hal buffer manager behavior was changed by the // configureStreams call. mUseHalBufManager = config.use_hal_buf_manager; if (flags::session_hal_buf_manager()) { bool prevSessionHalBufManager = (mHalBufManagedStreamIds.size() != 0); // It is possible that configureStreams() changed config.hal_buffer_managed_streams mHalBufManagedStreamIds = config.hal_buffer_managed_streams; Loading @@ -2616,7 +2615,6 @@ status_t Camera3Device::configureStreamsLocked(int operatingMode, } } mRequestThread->setHalBufferManagedStreams(mHalBufManagedStreamIds); } // Finish all stream configuration immediately. // TODO: Try to relax this later back to lazy completion, which should be Loading Loading @@ -3021,8 +3019,7 @@ bool Camera3Device::HalInterface::verifyBufferIds( } bool Camera3Device::HalInterface::isHalBufferManagedStream(int32_t streamId) const { return (mUseHalBufManager || (flags::session_hal_buf_manager() && contains(mHalBufManagedStreamIds, streamId))); return (mUseHalBufManager || contains(mHalBufManagedStreamIds, streamId)); } status_t Camera3Device::HalInterface::popInflightBuffer( Loading Loading @@ -4184,8 +4181,7 @@ status_t Camera3Device::RequestThread::prepareHalRequests() { } } bool passSurfaceMap = mUseHalBufManager || (flags::session_hal_buf_manager() && containsHalBufferManagedStream); mUseHalBufManager || containsHalBufferManagedStream; auto expectedDurationInfo = calculateExpectedDurationRange(settings); res = parent->registerInFlight(halRequest->frame_number, totalNumBuffers, captureRequest->mResultExtras, Loading Loading @@ -4301,7 +4297,7 @@ bool Camera3Device::RequestThread::isOutputSurfacePending(int streamId, size_t s void Camera3Device::RequestThread::signalPipelineDrain(const std::vector<int>& streamIds) { if (!mUseHalBufManager && (flags::session_hal_buf_manager() && mHalBufManagedStreamIds.size() == 0)) { (mHalBufManagedStreamIds.size() == 0)) { ALOGE("%s called for camera device not supporting HAL buffer management", __FUNCTION__); return; } Loading Loading @@ -4459,8 +4455,7 @@ void Camera3Device::RequestThread::cleanUpFailedRequests(bool sendRequestError) Camera3Stream *stream = Camera3Stream::cast((*outputBuffers)[i].stream); int32_t streamId = stream->getId(); bool skipBufferForStream = mUseHalBufManager || (flags::session_hal_buf_manager() && contains(mHalBufManagedStreamIds, streamId)); mUseHalBufManager || (contains(mHalBufManagedStreamIds, streamId)); if (skipBufferForStream) { // No output buffer can be returned when using HAL buffer manager for its stream continue; Loading
services/camera/libcameraservice/device3/Camera3OutputUtils.cpp +1 −2 Original line number Diff line number Diff line Loading @@ -894,8 +894,7 @@ void collectReturnableOutputBuffers( if (outputBuffers[i].buffer == nullptr) { if (!useHalBufManager && !(flags::session_hal_buf_manager() && contains(halBufferManagedStreams, streamId))) { !contains(halBufferManagedStreams, streamId)) { // With HAL buffer management API, HAL sometimes will have to return buffers that // has not got a output buffer handle filled yet. This is though illegal if HAL // buffer management API is not being used. Loading
services/camera/libcameraservice/device3/Camera3OutputUtilsTemplated.h +2 −4 Original line number Diff line number Diff line Loading @@ -212,8 +212,7 @@ void processOneCaptureResultLockedT( bool noBufferReturned = false; buffer_handle_t *buffer = nullptr; if (states.useHalBufManager || (flags::session_hal_buf_manager() && contains(states.halBufManagedStreamIds, bSrc.streamId))) { contains(states.halBufManagedStreamIds, bSrc.streamId)) { // This is suspicious most of the time but can be correct during flush where HAL // has to return capture result before a buffer is requested if (bSrc.bufferId == BUFFER_ID_NO_BUFFER) { Loading Loading @@ -303,8 +302,7 @@ void returnStreamBuffersT(ReturnBufferStates& states, for (const auto& buf : buffers) { if (!states.useHalBufManager && !(flags::session_hal_buf_manager() && contains(states.halBufManagedStreamIds, buf.streamId))) { !contains(states.halBufManagedStreamIds, buf.streamId)) { ALOGE("%s: Camera %s does not support HAL buffer management for stream id %d", __FUNCTION__, states.cameraId.c_str(), buf.streamId); return; Loading
services/camera/libcameraservice/device3/aidl/AidlCamera3Device.cpp +11 −22 Original line number Diff line number Diff line Loading @@ -918,12 +918,6 @@ status_t AidlCamera3Device::AidlHalInterface::configureStreams( camera3::camera_stream_t *src = config->streams[i]; Camera3Stream* cam3stream = Camera3Stream::cast(src); // For stream configurations with multi res streams, hal buffer manager has to be used. if (!flags::session_hal_buf_manager() && cam3stream->getHalStreamGroupId() != -1 && src->stream_type != CAMERA_STREAM_INPUT) { mUseHalBufManager = true; config->use_hal_buf_manager = true; } cam3stream->setBufferFreedListener(this); int streamId = cam3stream->getId(); StreamType streamType; Loading Loading @@ -1002,8 +996,7 @@ status_t AidlCamera3Device::AidlHalInterface::configureStreams( err.getMessage()); return AidlProviderInfo::mapToStatusT(err); } if (flags::session_hal_buf_manager() && interfaceVersion >= AIDL_DEVICE_SESSION_V3 && mSupportSessionHalBufManager) { if (interfaceVersion >= AIDL_DEVICE_SESSION_V3 && mSupportSessionHalBufManager) { err = mAidlSession->configureStreamsV2(requestedConfiguration, &configureStreamsRet); finalConfiguration = std::move(configureStreamsRet.halStreams); } else { Loading @@ -1015,7 +1008,6 @@ status_t AidlCamera3Device::AidlHalInterface::configureStreams( return AidlProviderInfo::mapToStatusT(err); } if (flags::session_hal_buf_manager()) { std::set<int32_t> halBufferManagedStreamIds; for (const auto &halStream: finalConfiguration) { if ((interfaceVersion >= AIDL_DEVICE_SESSION_V3 && Loading @@ -1026,7 +1018,6 @@ status_t AidlCamera3Device::AidlHalInterface::configureStreams( } mHalBufManagedStreamIds = std::move(halBufferManagedStreamIds); config->hal_buffer_managed_streams = mHalBufManagedStreamIds; } // And convert output stream configuration from AIDL for (size_t i = 0; i < config->num_streams; i++) { camera3::camera_stream_t *dst = config->streams[i]; Loading Loading @@ -1096,11 +1087,9 @@ status_t AidlCamera3Device::AidlHalInterface::configureStreams( } dstStream->setUsage( mapProducerToFrameworkUsage(src.producerUsage)); if (flags::session_hal_buf_manager()) { dstStream->setHalBufferManager( contains(config->hal_buffer_managed_streams, streamId)); } } dst->max_buffers = src.maxBuffers; } Loading