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

Commit 3b5c6c16 authored by Andy Hung's avatar Andy Hung Committed by android-build-merger
Browse files

MediaRecorderClient: Use checkService instead of getService for camera am: 58aef303

am: 72730557

Change-Id: Ib04f4d76e0d95a24210ddee9424a228b514f891b
parents 7e23b715 72730557
Loading
Loading
Loading
Loading
+8 −1
Original line number Original line Diff line number Diff line
@@ -368,14 +368,21 @@ status_t MediaRecorderClient::setListener(const sp<IMediaRecorderClient>& listen
    mRecorder->setListener(listener);
    mRecorder->setListener(listener);


    sp<IServiceManager> sm = defaultServiceManager();
    sp<IServiceManager> sm = defaultServiceManager();
    sp<IBinder> binder = sm->getService(String16("media.camera"));


    // 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.
    // If the device does not have a camera, do not create a death listener for it.
    if (binder != NULL) {
    if (binder != NULL) {
        sCameraVerified = true;
        mCameraDeathListener = new ServiceDeathNotifier(binder, listener,
        mCameraDeathListener = new ServiceDeathNotifier(binder, listener,
                MediaPlayerService::CAMERA_PROCESS_DEATH);
                MediaPlayerService::CAMERA_PROCESS_DEATH);
        binder->linkToDeath(mCameraDeathListener);
        binder->linkToDeath(mCameraDeathListener);
    }
    }
    sCameraChecked = true;


    binder = sm->getService(String16("media.codec"));
    binder = sm->getService(String16("media.codec"));
    mCodecDeathListener = new ServiceDeathNotifier(binder, listener,
    mCodecDeathListener = new ServiceDeathNotifier(binder, listener,