Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cdb74a68 authored by Emilian Peev's avatar Emilian Peev
Browse files

Camera: Advertise only unique API1 compatible devices

Providers could have devices with same id but different
API versions. The total number of API1 compatible devices
needs to consider only the unique ids in this case.

Bug: 38237265
Test: Manual using application
Change-Id: I5a31c3cd28f00e8af3029213711505e4075a61b2
parent c7205dc3
Loading
Loading
Loading
Loading
+7 −9
Original line number Original line Diff line number Diff line
@@ -87,11 +87,7 @@ int CameraProviderManager::getAPI1CompatibleCameraCount() const {
    int count = 0;
    int count = 0;
    for (auto& provider : mProviders) {
    for (auto& provider : mProviders) {
        if (kStandardProviderTypes.find(provider->getType()) != std::string::npos) {
        if (kStandardProviderTypes.find(provider->getType()) != std::string::npos) {
            for (auto& device : provider->mDevices) {
            count += provider->mUniqueAPI1CompatibleCameraIds.size();
                if (device->isAPI1Compatible()) {
                    count++;
                }
            }
        }
        }
    }
    }
    return count;
    return count;
@@ -113,10 +109,8 @@ std::vector<std::string> CameraProviderManager::getAPI1CompatibleCameraDeviceIds
    std::vector<std::string> deviceIds;
    std::vector<std::string> deviceIds;
    for (auto& provider : mProviders) {
    for (auto& provider : mProviders) {
        if (kStandardProviderTypes.find(provider->getType()) != std::string::npos) {
        if (kStandardProviderTypes.find(provider->getType()) != std::string::npos) {
            for (auto& device : provider->mDevices) {
            for (auto& id : provider->mUniqueAPI1CompatibleCameraIds) {
                if (device->isAPI1Compatible()) {
                deviceIds.push_back(id);
                    deviceIds.push_back(device->mId);
                }
            }
            }
        }
        }
    }
    }
@@ -459,6 +453,7 @@ CameraProviderManager::ProviderInfo::ProviderInfo(
        mProviderName(providerName),
        mProviderName(providerName),
        mInterface(interface),
        mInterface(interface),
        mProviderTagid(generateVendorTagId(providerName)),
        mProviderTagid(generateVendorTagId(providerName)),
        mUniqueDeviceCount(0),
        mManager(manager) {
        mManager(manager) {
    (void) mManager;
    (void) mManager;
}
}
@@ -532,6 +527,9 @@ status_t CameraProviderManager::ProviderInfo::initialize() {


    for (auto& device : mDevices) {
    for (auto& device : mDevices) {
        mUniqueCameraIds.insert(device->mId);
        mUniqueCameraIds.insert(device->mId);
        if (device->isAPI1Compatible()) {
            mUniqueAPI1CompatibleCameraIds.insert(device->mId);
        }
    }
    }
    mUniqueDeviceCount = mUniqueCameraIds.size();
    mUniqueDeviceCount = mUniqueCameraIds.size();


+1 −0
Original line number Original line Diff line number Diff line
@@ -314,6 +314,7 @@ private:
        std::vector<std::unique_ptr<DeviceInfo>> mDevices;
        std::vector<std::unique_ptr<DeviceInfo>> mDevices;
        std::set<std::string> mUniqueCameraIds;
        std::set<std::string> mUniqueCameraIds;
        int mUniqueDeviceCount;
        int mUniqueDeviceCount;
        std::set<std::string> mUniqueAPI1CompatibleCameraIds;


        // HALv1-specific camera fields, including the actual device interface
        // HALv1-specific camera fields, including the actual device interface
        struct DeviceInfo1 : public DeviceInfo {
        struct DeviceInfo1 : public DeviceInfo {