public override void onImageAvailable(ImageReader reader) { STotalCaptureResult result = null; Image image = reader.acquireNextImage(); try { result = outerInstance.mCaptureResultQueue.take(); } catch (InterruptedException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } { // Simple YUV processing that makes brightness value be quantized by 10. ByteBuffer y_buffer = image.Planes[0].Buffer; sbyte[] y_byte_array = new sbyte[y_buffer.capacity()]; y_buffer.get(y_byte_array); int size = image.Width * image.Height; for (int i = 0; i < size; i++) { y_byte_array[i] = (sbyte)(y_byte_array[i] / 10 * 10); } y_buffer.rewind(); y_buffer.put(y_byte_array); } try { SCaptureRequest.Builder builder = outerInstance.mSCameraDevice.createReprocessCaptureRequest(result); builder.addTarget(outerInstance.mJpegReader.Surface); // Option #1. Put Image obtained from ImageReader directly to ImageWriter outerInstance.mReprocessWriter.queueInputImage(image); /* Option #2. Obtain input Image from ImageWriter and copy to it. Then push back to ImageWriter. potentially with zero copy * Image inputImage = mReprocessWriter.dequeueInputImage(); * //copy image to inputImage here * mReprocessWriter.queueInputImage(inputImage); */ outerInstance.mSCameraSession.capture(builder.build(), null, outerInstance.mBackgroundHandler); } catch (CameraAccessException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } }
public override void onImageAvailable(ImageReader reader) { STotalCaptureResult result = null; try { result = mCaptureResultQueue.take(); } catch (InterruptedException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } addImage(reader.acquireNextImage(), result); }
internal virtual void addImage(Image image, STotalCaptureResult result) { lock (this) { try { mCapturedImageQueue.put(new CaptureImage(this, this, image, result)); while (mCapturedImageQueue.size() > 3) { mCapturedImageQueue.take().mImage.close(); } } catch (InterruptedException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } } }
public override void onCaptureCompleted(SCameraCaptureSession session, SCaptureRequest request, STotalCaptureResult result) { // Depends on the current state and capture result, app will take next action. switch (outerInstance.State) { case IDLE: case PREVIEW: case CLOSING: // do nothing break; case TAKE_DOF_PICTURE: if (mResultListener != null) { mResultListener.checkPresetResult(result); } break; } }
public virtual void checkCaptureResult(STotalCaptureResult result) { if (result.get(SCaptureResult.LENS_FOCUS_DISTANCE) != null) { outerInstance.mDofCaptureCallback.ResultListener = null; float distance = result.get(SCaptureResult.LENS_FOCUS_DISTANCE); Log.d(TAG, "focus distance of captured image : " + distance); } }
public virtual void checkPresetResult(STotalCaptureResult result) { if (result.get(SCaptureResult.LENS_STATE) != null) { // There is no guarantee that the focus distance value in the capture result will be the same value in the capture request, after lens moved. // The 'LENS_STATE' value should be used to determine whether the lens is moved to requested focus point. if (result.get(SCaptureResult.LENS_STATE) == SCameraMetadata.LENS_STATE_STATIONARY && mRequestTriggered) { outerInstance.mSessionCaptureCallback.ResultListener = null; capture(); } } }
public override void onCaptureCompleted(SCameraCaptureSession session, SCaptureRequest request, STotalCaptureResult result) { // Remove comment, if you want to check request/result from console log. // dumpCaptureResultToLog(result); // dumpCaptureRequestToLog(request); // Depends on the current state and capture result, app will take next action. switch (outerInstance.State) { case IDLE: case TAKE_PICTURE: case CLOSING: // do nothing break; case PREVIEW: if (result.get(SCaptureResult.STATISTICS_FACES) != null) { outerInstance.processFace(result.get(SCaptureResult.STATISTICS_FACES), result.get(SCaptureResult.SCALER_CROP_REGION)); } break; // If AF is triggered and AF_STATE indicates AF process is finished, app will trigger AE pre-capture. case WAIT_AF: { if (outerInstance.isAFTriggered) { int afState = result.get(SCaptureResult.CONTROL_AF_STATE); // Check if AF is finished. if (SCaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState || SCaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState) { // If AE mode is off or device is legacy device then skip AE pre-capture. if (result.get(SCaptureResult.CONTROL_AE_MODE) != SCaptureResult.CONTROL_AE_MODE_OFF && outerInstance.mCharacteristics.get(SCameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL) != SCameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY) { outerInstance.triggerAE(); } else { outerInstance.takePicture(); } outerInstance.isAFTriggered = false; } } break; } // If AE is triggered and AE_STATE indicates AE pre-capture process is finished, app will take a picture. case WAIT_AE: { if (outerInstance.isAETriggered) { int? aeState = result.get(SCaptureResult.CONTROL_AE_STATE); if (null == aeState || SCaptureResult.CONTROL_AE_STATE_CONVERGED == aeState || SCaptureResult.CONTROL_AE_STATE_FLASH_REQUIRED == aeState || SCaptureResult.CONTROL_AE_STATE_LOCKED == aeState) { // Legacy device might have null AE_STATE. However, this should not be happened as we skip triggerAE() for legacy device outerInstance.takePicture(); outerInstance.isAETriggered = false; } } break; } } }
public override void onCaptureCompleted(SCameraCaptureSession session, SCaptureRequest request, STotalCaptureResult result) { outerInstance.mState = CAMERA_STATE.PREVIEW; }
public override void onCaptureCompleted(SCameraCaptureSession session, SCaptureRequest request, STotalCaptureResult result) { try { outerInstance.mCaptureResultQueue.put(result); } catch (InterruptedException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } }
public override void onCaptureCompleted(SCameraCaptureSession session, SCaptureRequest request, STotalCaptureResult result) { if (outerInstance.State == CAMERA_STATE.CLOSING) { return; } outerInstance.State = CAMERA_STATE.PREVIEW; }
internal CaptureImage(Sample_ZSL.ImageManager outerInstance, Image image, STotalCaptureResult result) { this.outerInstance = outerInstance; mImage = image; mResult = result; }
public override void onCaptureCompleted(SCameraCaptureSession session, SCaptureRequest request, STotalCaptureResult result) { // Depends on the current state and capture result, app will take next action. switch (outerInstance.State) { case IDLE: case PREVIEW: case CLOSING: // do nothing break; case TAKE_HDR_PICTURE: if (mResultListener != null) { mResultListener.checkPresetResult(result); } break; case WAIT_AF: { if (outerInstance.isAFTriggered) { int? afState = result.get(SCaptureResult.CONTROL_AF_STATE); // Check if AF is finished. If finished, take hdr picture. if (null == afState || SCaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState || SCaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState) { outerInstance.isAFTriggered = false; outerInstance.lockAE(); } } break; } case WAIT_AE_LOCK: { if (result.get(SCaptureResult.CONTROL_AE_STATE) != null && result.get(SCaptureResult.CONTROL_AE_STATE) == SCaptureResult.CONTROL_AE_STATE_LOCKED) { outerInstance.takeHdrPicture(); } break; } } }
public virtual void checkCaptureResult(STotalCaptureResult result) { if (result.get(SCaptureResult.CONTROL_AE_EXPOSURE_COMPENSATION) != null) { int aeBias = result.get(SCaptureResult.CONTROL_AE_EXPOSURE_COMPENSATION); Log.d(TAG, "aeBias of captured image : " + aeBias); } }
public virtual void checkPresetResult(STotalCaptureResult result) { if (result.get(SCaptureResult.CONTROL_AE_EXPOSURE_COMPENSATION) != null && result.get(SCaptureResult.CONTROL_AE_EXPOSURE_COMPENSATION) == mAeBias) { if (result.get(SCaptureResult.CONTROL_AE_STATE) != null && result.get(SCaptureResult.CONTROL_AE_STATE) == SCaptureResult.CONTROL_AE_STATE_LOCKED) { outerInstance.mSessionCaptureCallback.ResultListener = null; capture(); } } }
internal CaptureImage(Sample_ZSL.ImageManager outerInstance, Image image, STotalCaptureResult result) { this.outerInstance = outerInstance; mImage = image; mResult = result; }
public override void onCaptureCompleted(SCameraCaptureSession session, SCaptureRequest request, STotalCaptureResult result) { if (outerInstance.State == CAMERA_STATE.CLOSING) { return; } if (mResultListener != null) { mResultListener.checkCaptureResult(result); } }
internal virtual void addImage(Image image, STotalCaptureResult result) { lock (this) { try { mCapturedImageQueue.put(new CaptureImage(this, this, image, result)); while (mCapturedImageQueue.size() > 3) { mCapturedImageQueue.take().mImage.close(); } } catch (InterruptedException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } } }
public override void onCaptureCompleted(SCameraCaptureSession session, SCaptureRequest request, STotalCaptureResult result) { if (outerInstance.outerInstance.State == CAMERA_STATE.CLOSING) { return; } outerInstance.outerInstance.mSessionCaptureCallback.ResultListener = outerInstance; outerInstance.isAFTriggered = true; }
public override void onCaptureCompleted(SCameraCaptureSession session, SCaptureRequest request, STotalCaptureResult result) { try { outerInstance.mCaptureResultQueue.put(result); } catch (InterruptedException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } }
public virtual void checkPresetResult(STotalCaptureResult result) { if (isAFTriggered) { int? afState = result.get(SCaptureResult.CONTROL_AF_STATE); if (null == afState || SCaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState || SCaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState) { isAFTriggered = false; outerInstance.mSessionCaptureCallback.ResultListener = null; capture(); } } }
public override void onCaptureCompleted(SCameraCaptureSession session, SCaptureRequest request, STotalCaptureResult result) { // Depends on the current state and capture result, app will take next action. switch (outerInstance.mState) { case com.samsung.android.sdk.camera.sample.cases.Sample_Panorama.CAMERA_STATE.IDLE: case com.samsung.android.sdk.camera.sample.cases.Sample_Panorama.CAMERA_STATE.PREVIEW: case com.samsung.android.sdk.camera.sample.cases.Sample_Panorama.CAMERA_STATE.TAKE_PICTURE: // do nothing break; // If AF is triggered and AF_STATE indicates AF process is finished, app will lock AE/AWB case com.samsung.android.sdk.camera.sample.cases.Sample_Panorama.CAMERA_STATE.WAIT_AF: { if (outerInstance.isAFTriggered) { int?afState = result.get(SCaptureResult.CONTROL_AF_STATE); if (null == afState || SCaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState || SCaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState) { // in this way, app will compatible with legacy device outerInstance.lockAEAWB(); outerInstance.isAFTriggered = false; } } break; } // If AE/AWB is locked and AE_STATE/AWB_STATE indicates lock is completed, app will take a picture. case com.samsung.android.sdk.camera.sample.cases.Sample_Panorama.CAMERA_STATE.WAIT_AEAWB_LOCK: { if (outerInstance.isAEAWBLocked) { int?aeState = result.get(SCaptureResult.CONTROL_AE_STATE); int?awbState = result.get(SCaptureResult.CONTROL_AWB_STATE); if (null == aeState || null == awbState || (SCaptureResult.CONTROL_AE_STATE_LOCKED == aeState && (SCaptureResult.CONTROL_AWB_STATE_LOCKED == awbState || SCaptureResult.CONTROL_AWB_STATE_CONVERGED == awbState))) { // in this way, app will compatible with legacy device outerInstance.startTakePicture(); outerInstance.isAEAWBLocked = false; } } break; } } }
public override void onCaptureCompleted(SCameraCaptureSession session, SCaptureRequest request, STotalCaptureResult result) { outerInstance.mRequestTriggered = true; }
public override void onCaptureCompleted(SCameraCaptureSession session, SCaptureRequest request, STotalCaptureResult result) { // Depends on the current state and capture result, app will take next action. switch (outerInstance.State) { case IDLE: case PREVIEW: case CLOSING: // do nothing break; } }
public override void onCaptureCompleted(SCameraCaptureSession session, SCaptureRequest request, STotalCaptureResult result) { try { outerInstance.mCaptureResultQueue.put(result); } catch (InterruptedException e) { Console.WriteLine(e.ToString()); Console.Write(e.StackTrace); } if (outerInstance.State == CAMERA_STATE.CLOSING) { return; } outerInstance.unlockAF(); }