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

Commit 1671108b authored by Hayden Gomes's avatar Hayden Gomes Committed by Gerrit Code Review
Browse files

Merge "Check for disabled camera in MediaRecorderClient"

parents e9179cf4 4843f841
Loading
Loading
Loading
Loading
+29 −23
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
#include <binder/IServiceManager.h>
#include <binder/MemoryHeapBase.h>
#include <binder/MemoryBase.h>
#include <camera/CameraUtils.h>
#include <codec2/hidl/client.h>
#include <cutils/atomic.h>
#include <cutils/properties.h> // for property_get
@@ -423,10 +424,14 @@ status_t MediaRecorderClient::setListener(const sp<IMediaRecorderClient>& listen

    sp<IServiceManager> sm = defaultServiceManager();

    static const bool sCameraDisabled = CameraUtils::isCameraServiceDisabled();

    if (!sCameraDisabled) {
        // WORKAROUND: We don't know if camera exists here and getService might block for 5 seconds.
        // Use checkService for camera if we don't know it exists.
        static std::atomic<bool> sCameraChecked(false);  // once true never becomes false.
        static std::atomic<bool> sCameraVerified(false); // once true never becomes false.

        sp<IBinder> binder = (sCameraVerified || !sCameraChecked)
            ? sm->getService(String16("media.camera")) : sm->checkService(String16("media.camera"));
        // If the device does not have a camera, do not create a death listener for it.
@@ -447,6 +452,7 @@ status_t MediaRecorderClient::setListener(const sp<IMediaRecorderClient>& listen
            });
        }
        sCameraChecked = true;
    }

    {
        using ::android::hidl::base::V1_0::IBase;