public override void OnCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result) { // Only update UI every so many frames // Use an odd number here to ensure both even and odd exposures get an occasional update long frameNumber = result.FrameNumber; if (frameNumber % 3 != 0) { return; } Integer exposureComp = result.Get(CaptureResult.ControlAeExposureCompensation) as Integer; if (exposureComp == null) { throw new RuntimeException("Cannot get exposure compensation."); } // Format exposure time nicely Rational exposureStep = mParent.mCameraInfo.ExposureState.ExposureCompensationStep; string exposureText = (exposureComp.FloatValue() * exposureStep.FloatValue()).ToString("0.00"); if (mParent.mRenderMode == ViewfinderProcessor.ModeNormal) { mParent.mAutoExposureText.Text = exposureText; mParent.mEvenExposureText.Enabled = false; mParent.mOddExposureText.Enabled = false; mParent.mAutoExposureText.Enabled = true; if (exposureComp.IntValue() != mParent.mAutoExposure) { mParent.mCameraControl.SetExposureCompensationIndex(mParent.mAutoExposure); } } else if ((frameNumber & 1) == 0) { mParent.mEvenExposureText.Text = exposureText; mParent.mEvenExposureText.Enabled = true; mParent.mOddExposureText.Enabled = true; mParent.mAutoExposureText.Enabled = false; } else { mParent.mOddExposureText.Text = exposureText; mParent.mEvenExposureText.Enabled = true; mParent.mOddExposureText.Enabled = true; mParent.mAutoExposureText.Enabled = false; } }