void CameraControlImpl::OnPreviewStateChange(CameraControlListener::PreviewState aNewState) { // This callback runs on the Main Thread and the Camera Thread, and // may run on the local binder thread, should the mediaserver // process die. MutexAutoLock lock(mListenerLock); if (aNewState == mPreviewState) { DOM_CAMERA_LOGI("OnPreviewStateChange: state did not change from %d\n", mPreviewState); return; } const char* state[] = { "stopped", "paused", "started" }; MOZ_ASSERT(aNewState >= 0); if (static_cast<unsigned int>(aNewState) < sizeof(state) / sizeof(state[0])) { DOM_CAMERA_LOGI("New preview state is '%s'\n", state[aNewState]); } else { DOM_CAMERA_LOGE("OnPreviewStateChange: got unknown PreviewState value %d\n", aNewState); } mPreviewState = aNewState; for (uint32_t i = 0; i < mListeners.Length(); ++i) { CameraControlListener* l = mListeners[i]; l->OnPreviewStateChange(mPreviewState); } }
void CameraControlImpl::AddListenerImpl(already_AddRefed<CameraControlListener> aListener) { MutexAutoLock lock(mListenerLock); CameraControlListener* l = *mListeners.AppendElement() = aListener; DOM_CAMERA_LOGI("Added camera control listener %p\n", l); // Update the newly-added listener's state l->OnConfigurationChange(mCurrentConfiguration); l->OnHardwareStateChange(mHardwareState, mHardwareStateChangeReason); l->OnPreviewStateChange(mPreviewState); }