Ejemplo n.º 1
0
            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);
                }
            }
Ejemplo n.º 2
0
            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);
            }
Ejemplo n.º 3
0
 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);
         }
     }
 }
Ejemplo n.º 4
0
			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;
				}
			}
Ejemplo n.º 5
0
			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);
				}
			}
Ejemplo n.º 6
0
			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();
					}
				}
			}
Ejemplo n.º 7
0
			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;
 }
Ejemplo n.º 9
0
			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);
				}
			}
Ejemplo n.º 10
0
			public override void onCaptureCompleted(SCameraCaptureSession session, SCaptureRequest request, STotalCaptureResult result)
			{
				if (outerInstance.State == CAMERA_STATE.CLOSING)
				{
					return;
				}
				outerInstance.State = CAMERA_STATE.PREVIEW;
			}
Ejemplo n.º 11
0
 internal CaptureImage(Sample_ZSL.ImageManager outerInstance, Image image, STotalCaptureResult result)
 {
     this.outerInstance = outerInstance;
     mImage             = image;
     mResult            = result;
 }
Ejemplo n.º 12
0
			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;
					}
				}
			}
Ejemplo n.º 13
0
			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);
				}
			}
Ejemplo n.º 14
0
			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();
					}
				}
			}
Ejemplo n.º 15
0
				internal CaptureImage(Sample_ZSL.ImageManager outerInstance, Image image, STotalCaptureResult result)
				{
					this.outerInstance = outerInstance;
					mImage = image;
					mResult = result;
				}
Ejemplo n.º 16
0
			public override void onCaptureCompleted(SCameraCaptureSession session, SCaptureRequest request, STotalCaptureResult result)
			{
				if (outerInstance.State == CAMERA_STATE.CLOSING)
				{
					return;
				}
				if (mResultListener != null)
				{
					mResultListener.checkCaptureResult(result);
				}
			}
Ejemplo n.º 17
0
			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);
					}
				}
			}
Ejemplo n.º 18
0
				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;
				}
Ejemplo n.º 19
0
 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);
     }
 }
Ejemplo n.º 20
0
			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;
                }
                }
            }
Ejemplo n.º 22
0
				public override void onCaptureCompleted(SCameraCaptureSession session, SCaptureRequest request, STotalCaptureResult result)
				{
					outerInstance.mRequestTriggered = true;
				}
Ejemplo n.º 23
0
 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;
     }
 }
Ejemplo n.º 24
0
			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();
			}