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

Commit 42dcedca authored by Hayden Gomes's avatar Hayden Gomes Committed by Android (Google) Code Review
Browse files

Merge "Check for disabled camera in MediaRecorderClient"

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


    sp<IServiceManager> sm = defaultServiceManager();
    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.
        // 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.
        // 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> sCameraChecked(false);  // once true never becomes false.
        static std::atomic<bool> sCameraVerified(false); // once true never becomes false.
        static std::atomic<bool> sCameraVerified(false); // once true never becomes false.

        sp<IBinder> binder = (sCameraVerified || !sCameraChecked)
        sp<IBinder> binder = (sCameraVerified || !sCameraChecked)
            ? sm->getService(String16("media.camera")) : sm->checkService(String16("media.camera"));
            ? 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.
        // 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;
        sCameraChecked = true;
    }


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