package com.metaio.sdk;

import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.ImageFormat;
import android.graphics.Point;
import android.graphics.Rect;
import android.hardware.Camera.AutoFocusCallback;
import android.hardware.Camera.ErrorCallback;
import android.hardware.Camera.Face;
import android.hardware.Camera.FaceDetectionListener;
import android.hardware.Camera.Parameters;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.PreviewCallback;
import android.hardware.Camera.Size;
import android.os.Build;
import android.os.Build.VERSION;
import android.os.SystemClock;
import android.util.AttributeSet;
import android.util.SparseIntArray;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import com.metaio.sdk.jni.ECOLOR_FORMAT;
import com.metaio.sdk.jni.Face;
import com.metaio.sdk.jni.FaceVector;
import com.metaio.sdk.jni.Frame;
import com.metaio.sdk.jni.IImageCaptureComponent;
import com.metaio.sdk.jni.IMetaioSDKCallback;
import com.metaio.sdk.jni.ImageCaptureComponentBase;
import com.metaio.sdk.jni.ImageStruct;
import com.metaio.sdk.jni.Vector2d;
import com.metaio.sdk.jni.Vector2di;
import java.io.File;
import java.io.FileOutputStream;
import java.lang.reflect.Array;
import java.util.Iterator;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

@TargetApi(9)
public final class CameraView extends SurfaceView
  implements SurfaceHolder.Callback, Camera.PictureCallback, Camera.PreviewCallback, Camera.AutoFocusCallback, Camera.ErrorCallback
{
  private final Camera.AutoFocusCallback autoFocusCallback = new Camera.AutoFocusCallback()
  {
    public void onAutoFocus(boolean paramAnonymousBoolean, android.hardware.Camera paramAnonymousCamera)
    {
      if (!paramAnonymousBoolean)
        MetaioDebug.log(5, "Camera autofocus failed, continuing to take the picture...");
      CameraView.this.mCamera.takePicture(null, null, CameraView.this);
    }
  };
  private SparseIntArray frameIndexToPreviewBuffersIndex;
  private Timer mAutoFocusTimer;
  private android.hardware.Camera mCamera;
  private String mDefaultFocusMode;
  private FaceVector mDetectedFaces;
  private int mDisplayOrientation;
  private int mFocusMode;
  private Object mFrameBuffersQueueMutex;
  private boolean[] mFrameIsInQueue;
  private ImageCaptureComponentBase mImageCaptureComponent;
  private ImageStruct[] mImageStruct;
  private IMetaioSDKCallback mMetaioSDKCallback;
  private File mPictureFilePath;
  private byte[][] mPreviewBuffers;
  private boolean mPreviewCallbackEnabled;
  private boolean mRealTimeFaceDetectionEnabled;
  private boolean mRealTimeFaceDetectionSupported;
  private boolean previewRunning;

  public CameraView(Context paramContext)
  {
    super(paramContext);
    initialize();
  }

  public CameraView(Context paramContext, AttributeSet paramAttributeSet)
  {
    super(paramContext, paramAttributeSet);
    initialize();
  }

  public CameraView(Context paramContext, AttributeSet paramAttributeSet, int paramInt)
  {
    super(paramContext, paramAttributeSet, paramInt);
    initialize();
  }

  public static ECOLOR_FORMAT convertImageFormat(int paramInt)
  {
    ECOLOR_FORMAT localECOLOR_FORMAT = ECOLOR_FORMAT.ECF_NV21;
    switch (paramInt)
    {
    default:
      return localECOLOR_FORMAT;
    case 17:
      return ECOLOR_FORMAT.ECF_NV21;
    case 842094169:
      return ECOLOR_FORMAT.ECF_YV12;
    case 16:
    }
    return ECOLOR_FORMAT.ECF_GRAY8;
  }

  private void enableCameraAutoFocusTimer(boolean paramBoolean)
  {
    MetaioDebug.logPrivate(3, "Enable autofocus: " + paramBoolean);
    if (paramBoolean)
    {
      try
      {
        if (this.mCamera == null)
          return;
        if (this.mCamera.getParameters().getFocusMode().compareTo("auto") != 0)
        {
          MetaioDebug.log(5, "The device does not support auto focus");
          return;
        }
      }
      catch (Exception localException)
      {
        MetaioDebug.logPrivate(6, "CameraView.enableAutoFocus!");
        MetaioDebug.printStackTrace(6, localException);
        return;
      }
      MetaioDebug.log(5, "The device does not support continuous autofocus, using manual autofocus");
      if (this.mAutoFocusTimer == null)
      {
        MetaioDebug.logPrivate(3, "Setting autofocus timer");
        this.mAutoFocusTimer = new Timer();
        this.mAutoFocusTimer.scheduleAtFixedRate(new AutoFocusTask(null), 5000L, 5000L);
      }
    }
    else if (this.mAutoFocusTimer != null)
    {
      MetaioDebug.logPrivate(3, "Cancelling autofocus timer");
      this.mAutoFocusTimer.cancel();
      this.mAutoFocusTimer = null;
    }
  }

  private Camera.Size getClosestSupportedPictureSize(int paramInt1, int paramInt2)
    throws NullPointerException
  {
    List localList = this.mCamera.getParameters().getSupportedPictureSizes();
    android.hardware.Camera localCamera = this.mCamera;
    localCamera.getClass();
    Camera.Size localSize1 = new Camera.Size(localCamera, paramInt1, paramInt2);
    Iterator localIterator = localList.iterator();
    Object localObject1 = localSize1;
    double d1 = 1.7976931348623157E+308D;
    double d2;
    Object localObject2;
    if (localIterator.hasNext())
    {
      Camera.Size localSize2 = (Camera.Size)localIterator.next();
      MetaioDebug.log(4, "Supported picture resolution: " + localSize2.width + " x " + localSize2.height);
      d2 = Math.sqrt((localSize2.width - paramInt1) * (localSize2.width - paramInt1) + (localSize2.height - paramInt2) * (localSize2.height - paramInt2));
      if (d2 >= d1)
        break label186;
      localObject2 = localSize2;
    }
    label186: double d3;
    for (double d4 = d2; ; d4 = d3)
    {
      double d5 = d4;
      localObject1 = localObject2;
      d1 = d5;
      break;
      return localObject1;
      d3 = d1;
      localObject2 = localObject1;
    }
  }

  private int[] getClosestSupportedPreviewFPS(int paramInt1, int paramInt2)
    throws NullPointerException
  {
    List localList = this.mCamera.getParameters().getSupportedPreviewFpsRange();
    int[] arrayOfInt1 = { paramInt1, paramInt2 };
    int i;
    double d1;
    Object localObject1;
    label52: int[] arrayOfInt2;
    Object localObject2;
    if ((paramInt1 == 0) && (paramInt2 == 0))
    {
      i = 1;
      d1 = 1.7976931348623157E+308D;
      Iterator localIterator = localList.iterator();
      localObject1 = arrayOfInt1;
      if (!localIterator.hasNext())
        break label220;
      arrayOfInt2 = (int[])localIterator.next();
      MetaioDebug.log(4, "Supported preview fps: " + arrayOfInt2[0] + "-" + arrayOfInt2[1]);
      if (i == 0)
        break label162;
      if ((localObject1[0] >= arrayOfInt2[0]) && (localObject1[1] >= arrayOfInt2[1]))
        break label223;
      localObject2 = (int[])arrayOfInt2.clone();
    }
    while (true)
    {
      localObject1 = localObject2;
      break label52;
      i = 0;
      break;
      label162: double d2 = Math.sqrt((arrayOfInt2[0] - paramInt1) * (arrayOfInt2[0] - paramInt1) + (arrayOfInt2[1] - paramInt2) * (arrayOfInt2[1] - paramInt2));
      if (d2 < d1)
      {
        localObject2 = (int[])arrayOfInt2.clone();
        d1 = d2;
        continue;
        label220: return localObject1;
      }
      else
      {
        label223: localObject2 = localObject1;
      }
    }
  }

  private Camera.Size getClosestSupportedPreviewSize(Vector2di paramVector2di)
    throws NullPointerException
  {
    List localList = this.mCamera.getParameters().getSupportedPreviewSizes();
    android.hardware.Camera localCamera = this.mCamera;
    localCamera.getClass();
    Camera.Size localSize1 = new Camera.Size(localCamera, paramVector2di.getX(), paramVector2di.getY());
    Iterator localIterator = localList.iterator();
    Object localObject1 = localSize1;
    double d1 = 1.7976931348623157E+308D;
    double d2;
    Object localObject2;
    if (localIterator.hasNext())
    {
      Camera.Size localSize2 = (Camera.Size)localIterator.next();
      MetaioDebug.log(4, "Supported preview resolution: " + localSize2.width + " x " + localSize2.height);
      d2 = Math.sqrt((localSize2.width - paramVector2di.getX()) * (localSize2.width - paramVector2di.getX()) + (localSize2.height - paramVector2di.getY()) * (localSize2.height - paramVector2di.getY()));
      if (d2 >= d1)
        break label202;
      localObject2 = localSize2;
    }
    label202: double d3;
    for (double d4 = d2; ; d4 = d3)
    {
      double d5 = d4;
      localObject1 = localObject2;
      d1 = d5;
      break;
      return localObject1;
      d3 = d1;
      localObject2 = localObject1;
    }
  }

  private void initialize()
  {
    setTag(CameraView.class);
    this.mCamera = null;
    this.mFrameIsInQueue = null;
    this.mFrameBuffersQueueMutex = new Object();
    this.mImageCaptureComponent = null;
    this.mPreviewCallbackEnabled = true;
    this.mFocusMode = IImageCaptureComponent.FOCUS_MODE_UNKNOWN;
    this.mDefaultFocusMode = null;
    this.previewRunning = false;
    this.mDisplayOrientation = 0;
    this.mPreviewBuffers = ((byte[][])null);
    this.mImageStruct = null;
    this.mAutoFocusTimer = null;
    this.frameIndexToPreviewBuffersIndex = new SparseIntArray();
    this.mDetectedFaces = new FaceVector();
    this.mRealTimeFaceDetectionEnabled = false;
    this.mRealTimeFaceDetectionSupported = false;
  }

  private boolean isFocusModeSupported(String paramString)
  {
    if (this.mCamera == null);
    List localList;
    do
    {
      return false;
      localList = this.mCamera.getParameters().getSupportedFocusModes();
    }
    while ((localList == null) || (localList.isEmpty()));
    return localList.contains(paramString);
  }

  private void setFaceDetectionParameter(boolean paramBoolean)
  {
    Camera.Parameters localParameters = this.mCamera.getParameters();
    String str1 = localParameters.get("face-detection-values");
    if (str1 != null)
    {
      MetaioDebug.logPrivate(3, "Supported face-detection values: " + str1);
      String str2 = null;
      if (paramBoolean)
      {
        boolean bool = str1.contains("on");
        str2 = null;
        if (bool)
          str2 = "on";
      }
      if ((!paramBoolean) && (str1.contains("off")))
        str2 = "off";
      if (str2 != null)
      {
        MetaioDebug.logPrivate(3, "Using face-detection camera parameter: " + str2);
        localParameters.set("face-detection", str2);
        this.mCamera.setParameters(localParameters);
      }
    }
  }

  private void setPhaseAutoFocus(Camera.Parameters paramParameters, boolean paramBoolean)
  {
    if (paramParameters.get("phase-af-values") != null)
    {
      MetaioDebug.log(4, "Using phase detection auto focus: " + paramBoolean);
      if (!paramBoolean)
        break label51;
    }
    label51: for (String str = "on"; ; str = "off")
    {
      paramParameters.set("phase-af", str);
      return;
    }
  }

  @SuppressLint({"NewApi"})
  private void startFaceDetection()
  {
    try
    {
      MetaioDebug.logPrivate(3, "CameraView.startFaceDetection");
      if (this.mCamera != null)
      {
        boolean bool = this.previewRunning;
        if (bool)
          break label28;
      }
      while (true)
      {
        return;
        label28: if (!this.mRealTimeFaceDetectionSupported)
          MetaioDebug.log(5, "The device does not support real time face detection, using fallback");
        try
        {
          this.mCamera.setFaceDetectionListener(new Camera.FaceDetectionListener()
          {
            private float transformX(float paramAnonymousFloat, int paramAnonymousInt)
            {
              if ((paramAnonymousInt & com.metaio.sdk.jni.Camera.FLIP_HORIZONTAL) == com.metaio.sdk.jni.Camera.FLIP_HORIZONTAL)
                return 1.0F - (paramAnonymousFloat + 1000.0F) / 2000.0F;
              return (paramAnonymousFloat + 1000.0F) / 2000.0F;
            }

            private float transformY(float paramAnonymousFloat, int paramAnonymousInt)
            {
              if ((paramAnonymousInt & com.metaio.sdk.jni.Camera.FLIP_VERTICAL) == com.metaio.sdk.jni.Camera.FLIP_VERTICAL)
                return 1.0F - (paramAnonymousFloat + 1000.0F) / 2000.0F;
              return (paramAnonymousFloat + 1000.0F) / 2000.0F;
            }

            public void onFaceDetection(Camera.Face[] paramAnonymousArrayOfFace, android.hardware.Camera paramAnonymousCamera)
            {
              CameraView.this.mDetectedFaces.clear();
              int i = CameraView.this.mImageCaptureComponent.getCamera().getFlip();
              int j = paramAnonymousArrayOfFace.length;
              int k = 0;
              Camera.Face localFace;
              Face localFace1;
              float f1;
              float f2;
              float f3;
              float f4;
              if (k < j)
              {
                localFace = paramAnonymousArrayOfFace[k];
                localFace1 = new Face();
                if (localFace.rect != null)
                {
                  f1 = transformX(localFace.rect.left, i);
                  f2 = transformX(localFace.rect.right, i);
                  f3 = transformY(localFace.rect.top, i);
                  f4 = transformY(localFace.rect.bottom, i);
                  if (f1 <= f2)
                    break label418;
                }
              }
              while (true)
              {
                if (f3 > f4);
                while (true)
                {
                  localFace1.setBounds(f2, f1, f4, f3);
                  localFace1.setHasBounds(true);
                  if (localFace.id != -1)
                  {
                    localFace1.setId(localFace.id);
                    localFace1.setHasId(true);
                  }
                  if ((localFace.score >= 1) && (localFace.score <= 100))
                  {
                    localFace1.setScore(localFace.score);
                    localFace1.setHasScore(true);
                  }
                  if (localFace.leftEye != null)
                  {
                    localFace1.setLeftEyeCenter(new Vector2d(transformX(localFace.leftEye.x, i), transformY(localFace.leftEye.y, i)));
                    localFace1.setHasLeftEyeCenter(true);
                  }
                  if (localFace.rightEye != null)
                  {
                    localFace1.setRightEyeCenter(new Vector2d(transformX(localFace.rightEye.x, i), transformY(localFace.rightEye.y, i)));
                    localFace1.setHasRightEyeCenter(true);
                  }
                  if (localFace.mouth != null)
                  {
                    localFace1.setRightEyeCenter(new Vector2d(transformX(localFace.mouth.x, i), transformY(localFace.mouth.y, i)));
                    localFace1.setHasMouthCenter(true);
                  }
                  CameraView.this.mDetectedFaces.add(localFace1);
                  k++;
                  break;
                  return;
                  float f6 = f4;
                  f4 = f3;
                  f3 = f6;
                }
                label418: float f5 = f2;
                f2 = f1;
                f1 = f5;
              }
            }
          });
          setFaceDetectionParameter(true);
          this.mCamera.startFaceDetection();
        }
        catch (Exception localException)
        {
          MetaioDebug.log(6, "Error starting face detection: " + localException.getMessage());
        }
      }
    }
    finally
    {
    }
  }

  @TargetApi(14)
  private void stopFaceDetection()
  {
    try
    {
      if (this.mRealTimeFaceDetectionSupported)
      {
        android.hardware.Camera localCamera = this.mCamera;
        if (localCamera != null)
          break label21;
      }
      while (true)
      {
        return;
        try
        {
          label21: MetaioDebug.logPrivate(3, "CameraView.stopFaceDetection");
          setFaceDetectionParameter(false);
          this.mCamera.setFaceDetectionListener(null);
          this.mCamera.stopFaceDetection();
        }
        catch (Exception localException)
        {
          MetaioDebug.log(6, "Error stopping face detection: " + localException);
        }
      }
    }
    finally
    {
    }
  }

  @SuppressLint({"InlinedApi"})
  private void updateFocusMode()
  {
    int i = 1;
    while (true)
    {
      boolean bool;
      Camera.Parameters localParameters;
      try
      {
        int j = Build.MODEL.compareTo("Blaze_Tablet");
        if (j == 0)
          return;
        if ((this.mCamera == null) || (this.mFocusMode == IImageCaptureComponent.FOCUS_MODE_UNKNOWN))
          continue;
        MetaioDebug.logPrivate(3, "CameraView.updateFocusMode: " + this.mFocusMode);
        if (this.mFocusMode == IImageCaptureComponent.FOCUS_MODE_AUTO)
        {
          bool = isFocusModeSupported("continuous-picture");
          localParameters = this.mCamera.getParameters();
          if (i == 0)
            break label179;
          if (!bool)
            break label146;
          MetaioDebug.log(4, "Camera using FOCUS_MODE_CONTINUOUS_PICTURE");
          setPhaseAutoFocus(localParameters, true);
          localParameters.setFocusMode("continuous-picture");
          this.mCamera.setParameters(localParameters);
          continue;
        }
      }
      finally
      {
      }
      i = 0;
      continue;
      label146: if (isFocusModeSupported("auto"))
      {
        localParameters.setFocusMode("auto");
        this.mCamera.setParameters(localParameters);
      }
      enableCameraAutoFocusTimer(true);
      continue;
      label179: if (!bool)
        enableCameraAutoFocusTimer(false);
      localParameters.setFocusMode(this.mDefaultFocusMode);
      setPhaseAutoFocus(localParameters, false);
      this.mCamera.setParameters(localParameters);
    }
  }

  @SuppressLint({"NewApi"})
  private void updatePreviewParameters(com.metaio.sdk.jni.Camera paramCamera)
  {
    MetaioDebug.log(4, "Camera parameters requested: " + paramCamera);
    int i;
    if (paramCamera.getIndex() < android.hardware.Camera.getNumberOfCameras())
      i = paramCamera.getIndex();
    while (true)
    {
      paramCamera.setIndex(i);
      try
      {
        openCamera(paramCamera.getIndex());
        Camera.Size localSize = getClosestSupportedPreviewSize(paramCamera.getResolution());
        if (Build.MODEL.compareTo("GT-P1000") == 0)
        {
          MetaioDebug.log(5, "Forcing camera preview at 800x600 with downsampling");
          localSize.width = 800;
          localSize.height = 600;
          paramCamera.setDownsample(2);
        }
        if (((Build.MODEL.compareTo("GT-I9100") == 0) || (Build.MODEL.compareTo("GT-N7000") == 0)) && (((localSize.width == 320) && (localSize.height == 240)) || ((localSize.width == 352) && (localSize.height == 288) && (Build.VERSION.SDK_INT >= 14))))
        {
          MetaioDebug.log(5, "Forcing camera preview at 640x480 with downsampling");
          localSize.width = 640;
          localSize.height = 480;
          paramCamera.setDownsample(2);
        }
        if (Build.MODEL.compareTo("bq Edison") == 0)
        {
          paramCamera.setFlip(com.metaio.sdk.jni.Camera.FLIP_HORIZONTAL);
          MetaioDebug.log(5, "Forcing camera horizontal flip for this device");
        }
        paramCamera.setResolution(new Vector2di(localSize.width, localSize.height));
        Vector2d localVector2d = paramCamera.getFps().multiply(1000.0F);
        int[] arrayOfInt = getClosestSupportedPreviewFPS((int)localVector2d.getX(), (int)localVector2d.getY());
        MetaioDebug.log(4, "Setting preview fps: " + arrayOfInt[0] + "-" + arrayOfInt[1]);
        localVector2d.setX(arrayOfInt[0] / 1000.0F);
        localVector2d.setY(arrayOfInt[1] / 1000.0F);
        paramCamera.setFps(localVector2d);
        MetaioDebug.log(4, "Camera parameters actually used: " + paramCamera);
        if (this.mCamera != null)
        {
          this.mCamera.release();
          this.mCamera = null;
        }
        return;
        i = -1 + android.hardware.Camera.getNumberOfCameras();
      }
      catch (Exception localException)
      {
        while (true)
        {
          MetaioDebug.log(6, "Error updating camera preview parameters: " + localException.getMessage());
          MetaioDebug.printStackTrace(6, localException);
        }
      }
    }
  }

  public void doneWithFrame(int paramInt)
  {
    synchronized (this.mFrameBuffersQueueMutex)
    {
      if (this.mCamera != null)
      {
        int i = this.frameIndexToPreviewBuffersIndex.get(paramInt, -1);
        if ((i != -1) && (this.mFrameIsInQueue[i] == 0))
        {
          this.mCamera.addCallbackBuffer(this.mPreviewBuffers[i]);
          this.mFrameIsInQueue[i] = true;
        }
      }
      return;
    }
  }

  // ERROR //
  public void enablePreviewCallback(boolean paramBoolean)
  {
    // Byte code:
    //   0: aload_0
    //   1: monitorenter
    //   2: aload_0
    //   3: getfield 285	com/metaio/sdk/CameraView:mPreviewCallbackEnabled	Z
    //   6: istore_3
    //   7: iload_3
    //   8: iload_1
    //   9: if_icmpne +6 -> 15
    //   12: aload_0
    //   13: monitorexit
    //   14: return
    //   15: aload_0
    //   16: iload_1
    //   17: putfield 285	com/metaio/sdk/CameraView:mPreviewCallbackEnabled	Z
    //   20: aload_0
    //   21: getfield 285	com/metaio/sdk/CameraView:mPreviewCallbackEnabled	Z
    //   24: ifeq +18 -> 42
    //   27: aload_0
    //   28: invokevirtual 535	com/metaio/sdk/CameraView:resetBuffers	()V
    //   31: aload_0
    //   32: getfield 84	com/metaio/sdk/CameraView:mCamera	Landroid/hardware/Camera;
    //   35: aload_0
    //   36: invokevirtual 539	android/hardware/Camera:setPreviewCallbackWithBuffer	(Landroid/hardware/Camera$PreviewCallback;)V
    //   39: goto -27 -> 12
    //   42: aload_0
    //   43: getfield 84	com/metaio/sdk/CameraView:mCamera	Landroid/hardware/Camera;
    //   46: aconst_null
    //   47: invokevirtual 539	android/hardware/Camera:setPreviewCallbackWithBuffer	(Landroid/hardware/Camera$PreviewCallback;)V
    //   50: goto -38 -> 12
    //   53: astore_2
    //   54: aload_0
    //   55: monitorexit
    //   56: aload_2
    //   57: athrow
    //   58: astore 4
    //   60: goto -48 -> 12
    //
    // Exception table:
    //   from	to	target	type
    //   2	7	53	finally
    //   15	39	53	finally
    //   42	50	53	finally
    //   15	39	58	java/lang/NullPointerException
    //   42	50	58	java/lang/NullPointerException
  }

  public void enableRealTimeFaceDetection(boolean paramBoolean)
  {
    while (true)
    {
      try
      {
        if (Build.VERSION.SDK_INT < 14)
        {
          if (paramBoolean)
            MetaioDebug.log("The device does not support real time face detection, using fallback");
          return;
        }
        if (paramBoolean)
        {
          startFaceDetection();
          this.mRealTimeFaceDetectionEnabled = true;
          continue;
        }
      }
      finally
      {
      }
      stopFaceDetection();
      this.mRealTimeFaceDetectionEnabled = false;
    }
  }

  public android.hardware.Camera getCamera()
  {
    try
    {
      android.hardware.Camera localCamera = this.mCamera;
      return localCamera;
    }
    finally
    {
      localObject = finally;
      throw localObject;
    }
  }

  public void initialize(ImageCaptureComponentBase paramImageCaptureComponentBase, com.metaio.sdk.jni.Camera paramCamera)
  {
    try
    {
      this.mImageCaptureComponent = paramImageCaptureComponentBase;
      this.mAutoFocusTimer = null;
      this.mFocusMode = IImageCaptureComponent.FOCUS_MODE_UNKNOWN;
      this.mDefaultFocusMode = null;
      this.previewRunning = false;
      this.mPreviewBuffers = ((byte[][])null);
      this.mImageStruct = null;
      this.mRealTimeFaceDetectionEnabled = false;
      this.mRealTimeFaceDetectionSupported = false;
      updatePreviewParameters(paramCamera);
      this.mImageCaptureComponent.setCamera(paramCamera);
      getHolder().addCallback(this);
      getHolder().setType(3);
      MetaioDebug.logPrivate(3, "CameraView initialize done");
      return;
    }
    finally
    {
      localObject = finally;
      throw localObject;
    }
  }

  public void onAutoFocus(boolean paramBoolean, android.hardware.Camera paramCamera)
  {
    MetaioDebug.logPrivate(3, "CameraView.onAutoFocus: " + paramBoolean);
  }

  public void onError(int paramInt, android.hardware.Camera paramCamera)
  {
    MetaioDebug.log(6, "Camera.ErrorCallback error " + paramInt);
  }

  public void onPause()
  {
    if (this.mCamera != null)
      this.mCamera.release();
    this.mCamera = null;
  }

  public void onPictureTaken(final byte[] paramArrayOfByte, android.hardware.Camera paramCamera)
  {
    MetaioDebug.logPrivate(3, "CameraView.onPictureTaken: " + paramArrayOfByte.length);
    try
    {
      paramCamera.startPreview();
      if (this.mPreviewCallbackEnabled)
      {
        this.mPreviewCallbackEnabled = false;
        enablePreviewCallback(true);
      }
      if (this.mRealTimeFaceDetectionEnabled)
        startFaceDetection();
      if (this.mFocusMode == ImageCaptureComponentBase.FOCUS_MODE_AUTO)
        enableCameraAutoFocusTimer(true);
      new Thread()
      {
        public void run()
        {
          try
          {
            new File(CameraView.this.mPictureFilePath.getParent()).mkdirs();
            CameraView.this.mPictureFilePath.createNewFile();
            FileOutputStream localFileOutputStream = new FileOutputStream(CameraView.this.mPictureFilePath);
            localFileOutputStream.write(paramArrayOfByte);
            localFileOutputStream.close();
            if (CameraView.this.mMetaioSDKCallback != null)
              CameraView.this.mMetaioSDKCallback.onCameraImageSaved(CameraView.this.mPictureFilePath);
            return;
          }
          catch (Exception localException)
          {
            do
            {
              MetaioDebug.log(6, "Error saving captured picture: " + localException.getMessage());
              MetaioDebug.printStackTrace(6, localException);
            }
            while (CameraView.this.mMetaioSDKCallback == null);
            CameraView.this.mMetaioSDKCallback.onCameraImageSaved(new File(""));
          }
        }
      }
      .start();
      return;
    }
    catch (Exception localException)
    {
      MetaioDebug.log("CameraView.onPictureTaken: " + localException.getMessage());
    }
  }

  public void onPreviewFrame(byte[] paramArrayOfByte, android.hardware.Camera paramCamera)
  {
    Frame localFrame = this.mImageCaptureComponent.nextWriteFrame();
    Object localObject1 = this.mFrameBuffersQueueMutex;
    for (int i = 0; ; i++)
      while (true)
      {
        int j;
        try
        {
          if (i >= this.mPreviewBuffers.length)
            break label201;
          if (paramArrayOfByte != this.mPreviewBuffers[i])
            break;
          j = 1;
          if (j == 0)
            return;
          this.mFrameIsInQueue[i] = false;
          if (localFrame == null)
            break label165;
          ImageStruct localImageStruct = this.mImageStruct[i];
          localFrame.setCapturedImage(localImageStruct);
          this.frameIndexToPreviewBuffersIndex.put(localFrame.getIndex(), i);
          localImageStruct.setTimestamp(0.001D * SystemClock.uptimeMillis());
          if ((this.mRealTimeFaceDetectionEnabled) && (this.mRealTimeFaceDetectionSupported))
          {
            localFrame.setRealTimeFaceDetection(true);
            localFrame.setDetectedFaces(this.mDetectedFaces);
            this.mImageCaptureComponent.writeFinished(localFrame.getIndex());
            return;
          }
        }
        finally
        {
        }
        localFrame.setRealTimeFaceDetection(false);
        continue;
        label165: MetaioDebug.log(5, "Dropping frame...");
        if (this.mFrameIsInQueue[i] == 0)
        {
          this.mCamera.addCallbackBuffer(paramArrayOfByte);
          this.mFrameIsInQueue[i] = true;
          continue;
          label201: i = -1;
          j = 0;
        }
      }
  }

  public void onResume()
  {
  }

  public void openCamera(int paramInt)
  {
    this.mCamera = android.hardware.Camera.open(paramInt);
    if (this.mCamera != null)
    {
      this.mCamera.setErrorCallback(this);
      this.mCamera.setDisplayOrientation(this.mDisplayOrientation);
      return;
    }
    MetaioDebug.log(6, "Error opening camera");
  }

  public void release()
  {
    try
    {
      MetaioDebug.logPrivate(3, "CameraView.release");
      try
      {
        enableCameraAutoFocusTimer(false);
        getHolder().removeCallback(this);
        enablePreviewCallback(false);
        stopCamera();
        return;
      }
      catch (Exception localException)
      {
        while (true)
        {
          MetaioDebug.log(6, "Error release" + localException.getMessage());
          MetaioDebug.printStackTrace(6, localException);
        }
      }
    }
    finally
    {
    }
  }

  public void resetBuffers()
  {
    while (true)
    {
      synchronized (this.mFrameBuffersQueueMutex)
      {
        if (this.mCamera == null)
          return;
        MetaioDebug.logPrivate(3, "CameraView.resetBuffers");
        Camera.Parameters localParameters = this.mCamera.getParameters();
        if (this.mPreviewBuffers == null)
        {
          int j = localParameters.getPreviewSize().width * localParameters.getPreviewSize().height * ImageFormat.getBitsPerPixel(localParameters.getPreviewFormat()) / 8;
          MetaioDebug.logPrivate(3, "CameraView.resetBuffers: preview buffer size: " + j);
          if (Build.MODEL.compareTo("Peanut") == 0)
            j = 2242560;
          int[] arrayOfInt = { (int)this.mImageCaptureComponent.getBuffersCount(), j };
          this.mPreviewBuffers = ((byte[][])Array.newInstance(Byte.TYPE, arrayOfInt));
        }
        if (this.mImageStruct == null)
          this.mImageStruct = new ImageStruct[(int)this.mImageCaptureComponent.getBuffersCount()];
        this.mImageCaptureComponent.resetBuffers();
        ECOLOR_FORMAT localECOLOR_FORMAT = convertImageFormat(this.mCamera.getParameters().getPreviewFormat());
        this.mCamera.setPreviewCallbackWithBuffer(null);
        if ((this.mFrameIsInQueue == null) || (this.mFrameIsInQueue.length != this.mImageCaptureComponent.getBuffersCount()))
        {
          this.mFrameIsInQueue = new boolean[(int)this.mImageCaptureComponent.getBuffersCount()];
          break label383;
          if (i < this.mImageCaptureComponent.getBuffersCount())
          {
            if (this.mImageStruct[i] == null)
              this.mImageStruct[i] = new ImageStruct(this.mPreviewBuffers[i], localParameters.getPreviewSize().width, localParameters.getPreviewSize().height, localECOLOR_FORMAT, true, 0.0D);
            MetaioDebug.logPrivate(3, "Adding buffer: " + this.mImageStruct[i] + ", " + this.mPreviewBuffers[i]);
            this.mCamera.addCallbackBuffer(this.mPreviewBuffers[i]);
            this.mFrameIsInQueue[i] = true;
            i++;
            continue;
          }
          return;
        }
      }
      label383: int i = 0;
    }
  }

  public void setDisplayOrientation(int paramInt)
  {
    int i = 1;
    try
    {
      if (this.mCamera != null)
        if (Build.VERSION.SDK_INT >= 14)
          break label87;
      while (true)
      {
        if (i != 0)
        {
          enablePreviewCallback(false);
          stopPreview();
        }
        MetaioDebug.logPrivate(3, "CameraView.setDisplayOrientation: " + paramInt);
        this.mCamera.setDisplayOrientation(paramInt);
        if (i != 0)
        {
          enablePreviewCallback(true);
          startPreview();
        }
        this.mDisplayOrientation = paramInt;
        return;
        label87: i = 0;
      }
    }
    finally
    {
    }
  }

  // ERROR //
  public void setFocusMode(int paramInt)
  {
    // Byte code:
    //   0: aload_0
    //   1: monitorenter
    //   2: aload_0
    //   3: getfield 292	com/metaio/sdk/CameraView:mFocusMode	I
    //   6: istore_3
    //   7: iload_3
    //   8: iload_1
    //   9: if_icmpne +6 -> 15
    //   12: aload_0
    //   13: monitorexit
    //   14: return
    //   15: aload_0
    //   16: iconst_0
    //   17: invokevirtual 587	com/metaio/sdk/CameraView:enablePreviewCallback	(Z)V
    //   20: aload_0
    //   21: invokevirtual 712	com/metaio/sdk/CameraView:stopPreview	()Z
    //   24: pop
    //   25: aload_0
    //   26: iload_1
    //   27: putfield 292	com/metaio/sdk/CameraView:mFocusMode	I
    //   30: aload_0
    //   31: invokespecial 718	com/metaio/sdk/CameraView:updateFocusMode	()V
    //   34: aload_0
    //   35: iconst_1
    //   36: invokevirtual 587	com/metaio/sdk/CameraView:enablePreviewCallback	(Z)V
    //   39: aload_0
    //   40: invokevirtual 716	com/metaio/sdk/CameraView:startPreview	()Z
    //   43: pop
    //   44: goto -32 -> 12
    //   47: astore_2
    //   48: aload_0
    //   49: monitorexit
    //   50: aload_2
    //   51: athrow
    //   52: astore 5
    //   54: bipush 6
    //   56: new 112	java/lang/StringBuilder
    //   59: dup
    //   60: invokespecial 114	java/lang/StringBuilder:<init>	()V
    //   63: ldc_w 720
    //   66: invokevirtual 120	java/lang/StringBuilder:append	(Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   69: aload 5
    //   71: invokevirtual 386	java/lang/Exception:getMessage	()Ljava/lang/String;
    //   74: invokevirtual 120	java/lang/StringBuilder:append	(Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   77: invokevirtual 127	java/lang/StringBuilder:toString	()Ljava/lang/String;
    //   80: invokestatic 157	com/metaio/sdk/MetaioDebug:log	(ILjava/lang/String;)V
    //   83: bipush 6
    //   85: aload 5
    //   87: invokestatic 163	com/metaio/sdk/MetaioDebug:printStackTrace	(ILjava/lang/Exception;)V
    //   90: goto -56 -> 34
    //
    // Exception table:
    //   from	to	target	type
    //   2	7	47	finally
    //   15	25	47	finally
    //   25	34	47	finally
    //   34	44	47	finally
    //   54	90	47	finally
    //   25	34	52	java/lang/Exception
  }

  public void setPictureCallback(IMetaioSDKCallback paramIMetaioSDKCallback, File paramFile, int paramInt1, int paramInt2)
  {
    if ((this.mCamera == null) || (paramIMetaioSDKCallback == null));
    do
    {
      return;
      try
      {
        this.mMetaioSDKCallback = paramIMetaioSDKCallback;
        if (this.mPreviewCallbackEnabled)
          this.mCamera.setPreviewCallbackWithBuffer(null);
        Camera.Parameters localParameters = this.mCamera.getParameters();
        if ((paramInt1 == 0) || (paramInt2 == 0))
        {
          paramInt1 = localParameters.getPreviewSize().width;
          paramInt2 = localParameters.getPreviewSize().height;
        }
        Camera.Size localSize = getClosestSupportedPictureSize(paramInt1, paramInt2);
        localParameters.setPictureSize(localSize.width, localSize.height);
        MetaioDebug.log("Setting picture resolution: " + localSize.width + " x " + localSize.height);
        localParameters.setPictureFormat(256);
        this.mCamera.setParameters(localParameters);
        MetaioDebug.log("CameraView focus mode: " + localParameters.getFocusMode());
        this.mPictureFilePath = paramFile;
        if (localParameters.getFocusMode().compareTo("auto") != 0)
          break;
        MetaioDebug.log("CameraView: taking picture with autofocus");
        if (this.mFocusMode == ImageCaptureComponentBase.FOCUS_MODE_AUTO)
          enableCameraAutoFocusTimer(false);
        this.mCamera.autoFocus(this.autoFocusCallback);
        return;
      }
      catch (Exception localException)
      {
        MetaioDebug.log(6, "Camera picture size cannot be changed");
        MetaioDebug.printStackTrace(6, localException);
      }
    }
    while (this.mMetaioSDKCallback == null);
    this.mMetaioSDKCallback.onCameraImageSaved(new File(""));
    return;
    MetaioDebug.log("CameraView: taking picture without autofocus");
    this.mCamera.takePicture(null, null, this);
  }

  public boolean startPreview()
  {
    boolean bool = true;
    try
    {
      if ((this.mCamera != null) && (!this.previewRunning))
      {
        this.mCamera.startPreview();
        this.previewRunning = true;
        if (this.mRealTimeFaceDetectionEnabled)
          startFaceDetection();
        return bool;
      }
      bool = false;
    }
    finally
    {
    }
  }

  public boolean startTorch()
  {
    try
    {
      android.hardware.Camera localCamera = this.mCamera;
      boolean bool = false;
      if (localCamera == null);
      while (true)
      {
        return bool;
        Camera.Parameters localParameters = this.mCamera.getParameters();
        List localList = localParameters.getSupportedFlashModes();
        if ((localList != null) && (localList.contains("torch")))
        {
          localParameters.setFlashMode("torch");
          this.mCamera.setParameters(localParameters);
          bool = true;
        }
        else
        {
          MetaioDebug.log(6, "Torch mode not supported by the camera");
          bool = false;
        }
      }
    }
    finally
    {
    }
  }

  public void stopCamera()
  {
    try
    {
      MetaioDebug.logPrivate(3, "CameraView.stopCamera");
      if (this.mCamera != null)
      {
        stopFaceDetection();
        this.mCamera.stopPreview();
        this.mCamera.setPreviewCallbackWithBuffer(null);
        this.mCamera.release();
        this.mCamera = null;
        this.previewRunning = false;
        MetaioDebug.logPrivate(3, "CameraView.stopCamera: camera released");
      }
      return;
    }
    finally
    {
      localObject = finally;
      throw localObject;
    }
  }

  public boolean stopPreview()
  {
    try
    {
      android.hardware.Camera localCamera = this.mCamera;
      boolean bool1 = false;
      if (localCamera != null)
      {
        stopFaceDetection();
        boolean bool2 = this.previewRunning;
        bool1 = false;
        if (bool2)
        {
          this.mCamera.stopPreview();
          this.previewRunning = false;
          bool1 = true;
        }
      }
      return bool1;
    }
    finally
    {
    }
  }

  public boolean stopTorch()
  {
    try
    {
      android.hardware.Camera localCamera = this.mCamera;
      boolean bool1 = false;
      if (localCamera == null);
      while (true)
      {
        return bool1;
        Camera.Parameters localParameters = this.mCamera.getParameters();
        List localList = localParameters.getSupportedFlashModes();
        bool1 = false;
        if (localList != null)
        {
          boolean bool2 = localList.contains("off");
          bool1 = false;
          if (bool2)
          {
            localParameters.setFlashMode("off");
            this.mCamera.setParameters(localParameters);
            bool1 = true;
          }
        }
      }
    }
    finally
    {
    }
  }

  // ERROR //
  @SuppressLint({"InlinedApi"})
  public void surfaceChanged(SurfaceHolder paramSurfaceHolder, int paramInt1, int paramInt2, int paramInt3)
  {
    // Byte code:
    //   0: iconst_3
    //   1: new 112	java/lang/StringBuilder
    //   4: dup
    //   5: invokespecial 114	java/lang/StringBuilder:<init>	()V
    //   8: ldc_w 782
    //   11: invokevirtual 120	java/lang/StringBuilder:append	(Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   14: iload_2
    //   15: invokevirtual 233	java/lang/StringBuilder:append	(I)Ljava/lang/StringBuilder;
    //   18: ldc_w 784
    //   21: invokevirtual 120	java/lang/StringBuilder:append	(Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   24: iload_3
    //   25: invokevirtual 233	java/lang/StringBuilder:append	(I)Ljava/lang/StringBuilder;
    //   28: ldc_w 784
    //   31: invokevirtual 120	java/lang/StringBuilder:append	(Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   34: iload 4
    //   36: invokevirtual 233	java/lang/StringBuilder:append	(I)Ljava/lang/StringBuilder;
    //   39: invokevirtual 127	java/lang/StringBuilder:toString	()Ljava/lang/String;
    //   42: invokestatic 133	com/metaio/sdk/MetaioDebug:logPrivate	(ILjava/lang/String;)V
    //   45: iconst_3
    //   46: new 112	java/lang/StringBuilder
    //   49: dup
    //   50: invokespecial 114	java/lang/StringBuilder:<init>	()V
    //   53: ldc_w 786
    //   56: invokevirtual 120	java/lang/StringBuilder:append	(Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   59: aload_1
    //   60: invokevirtual 397	java/lang/StringBuilder:append	(Ljava/lang/Object;)Ljava/lang/StringBuilder;
    //   63: invokevirtual 127	java/lang/StringBuilder:toString	()Ljava/lang/String;
    //   66: invokestatic 133	com/metaio/sdk/MetaioDebug:logPrivate	(ILjava/lang/String;)V
    //   69: aload_0
    //   70: getfield 296	com/metaio/sdk/CameraView:previewRunning	Z
    //   73: ifeq +4 -> 77
    //   76: return
    //   77: aload_0
    //   78: monitorenter
    //   79: aload_0
    //   80: invokespecial 544	com/metaio/sdk/CameraView:stopFaceDetection	()V
    //   83: aload_0
    //   84: getfield 84	com/metaio/sdk/CameraView:mCamera	Landroid/hardware/Camera;
    //   87: invokevirtual 775	android/hardware/Camera:stopPreview	()V
    //   90: aload_0
    //   91: getfield 80	com/metaio/sdk/CameraView:mImageCaptureComponent	Lcom/metaio/sdk/jni/ImageCaptureComponentBase;
    //   94: invokevirtual 789	com/metaio/sdk/jni/ImageCaptureComponentBase:getCamera	()Lcom/metaio/sdk/jni/Camera;
    //   97: astore 7
    //   99: aload_0
    //   100: getfield 84	com/metaio/sdk/CameraView:mCamera	Landroid/hardware/Camera;
    //   103: invokevirtual 139	android/hardware/Camera:getParameters	()Landroid/hardware/Camera$Parameters;
    //   106: astore 8
    //   108: iconst_4
    //   109: aload 8
    //   111: invokevirtual 792	android/hardware/Camera$Parameters:flatten	()Ljava/lang/String;
    //   114: invokestatic 157	com/metaio/sdk/MetaioDebug:log	(ILjava/lang/String;)V
    //   117: aload_0
    //   118: aload 8
    //   120: invokevirtual 144	android/hardware/Camera$Parameters:getFocusMode	()Ljava/lang/String;
    //   123: putfield 294	com/metaio/sdk/CameraView:mDefaultFocusMode	Ljava/lang/String;
    //   126: iconst_4
    //   127: new 112	java/lang/StringBuilder
    //   130: dup
    //   131: invokespecial 114	java/lang/StringBuilder:<init>	()V
    //   134: ldc_w 794
    //   137: invokevirtual 120	java/lang/StringBuilder:append	(Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   140: aload_0
    //   141: getfield 294	com/metaio/sdk/CameraView:mDefaultFocusMode	Ljava/lang/String;
    //   144: invokevirtual 120	java/lang/StringBuilder:append	(Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   147: invokevirtual 127	java/lang/StringBuilder:toString	()Ljava/lang/String;
    //   150: invokestatic 157	com/metaio/sdk/MetaioDebug:log	(ILjava/lang/String;)V
    //   153: invokestatic 799	com/metaio/tools/SystemInfo:isEmulator	()Z
    //   156: ifne +130 -> 286
    //   159: aload 8
    //   161: invokevirtual 802	android/hardware/Camera$Parameters:getSupportedPreviewFormats	()Ljava/util/List;
    //   164: astore 12
    //   166: iconst_0
    //   167: istore 13
    //   169: aload 12
    //   171: ifnull +22 -> 193
    //   174: aload 12
    //   176: bipush 17
    //   178: invokestatic 808	java/lang/Integer:valueOf	(I)Ljava/lang/Integer;
    //   181: invokeinterface 327 2 0
    //   186: ifeq +30 -> 216
    //   189: bipush 17
    //   191: istore 13
    //   193: iload 13
    //   195: ifne +59 -> 254
    //   198: bipush 6
    //   200: ldc_w 810
    //   203: invokestatic 157	com/metaio/sdk/MetaioDebug:log	(ILjava/lang/String;)V
    //   206: aload_0
    //   207: monitorexit
    //   208: return
    //   209: astore 6
    //   211: aload_0
    //   212: monitorexit
    //   213: aload 6
    //   215: athrow
    //   216: aload 12
    //   218: ldc_w 811
    //   221: invokestatic 808	java/lang/Integer:valueOf	(I)Ljava/lang/Integer;
    //   224: invokeinterface 327 2 0
    //   229: istore 14
    //   231: iconst_0
    //   232: istore 13
    //   234: iload 14
    //   236: ifeq -43 -> 193
    //   239: iconst_5
    //   240: ldc_w 813
    //   243: invokestatic 157	com/metaio/sdk/MetaioDebug:log	(ILjava/lang/String;)V
    //   246: ldc_w 811
    //   249: istore 13
    //   251: goto -58 -> 193
    //   254: iconst_4
    //   255: new 112	java/lang/StringBuilder
    //   258: dup
    //   259: invokespecial 114	java/lang/StringBuilder:<init>	()V
    //   262: ldc_w 815
    //   265: invokevirtual 120	java/lang/StringBuilder:append	(Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   268: iload 13
    //   270: invokevirtual 233	java/lang/StringBuilder:append	(I)Ljava/lang/StringBuilder;
    //   273: invokevirtual 127	java/lang/StringBuilder:toString	()Ljava/lang/String;
    //   276: invokestatic 157	com/metaio/sdk/MetaioDebug:log	(ILjava/lang/String;)V
    //   279: aload 8
    //   281: iload 13
    //   283: invokevirtual 818	android/hardware/Camera$Parameters:setPreviewFormat	(I)V
    //   286: aload 8
    //   288: aload 7
    //   290: invokevirtual 448	com/metaio/sdk/jni/Camera:getResolution	()Lcom/metaio/sdk/jni/Vector2di;
    //   293: invokevirtual 269	com/metaio/sdk/jni/Vector2di:getX	()I
    //   296: aload 7
    //   298: invokevirtual 448	com/metaio/sdk/jni/Camera:getResolution	()Lcom/metaio/sdk/jni/Vector2di;
    //   301: invokevirtual 272	com/metaio/sdk/jni/Vector2di:getY	()I
    //   304: invokevirtual 821	android/hardware/Camera$Parameters:setPreviewSize	(II)V
    //   307: aload 8
    //   309: ldc_w 490
    //   312: aload 7
    //   314: invokevirtual 489	com/metaio/sdk/jni/Camera:getFps	()Lcom/metaio/sdk/jni/Vector2d;
    //   317: invokevirtual 499	com/metaio/sdk/jni/Vector2d:getX	()F
    //   320: fmul
    //   321: f2i
    //   322: ldc_w 490
    //   325: aload 7
    //   327: invokevirtual 489	com/metaio/sdk/jni/Camera:getFps	()Lcom/metaio/sdk/jni/Vector2d;
    //   330: invokevirtual 501	com/metaio/sdk/jni/Vector2d:getY	()F
    //   333: fmul
    //   334: f2i
    //   335: invokevirtual 824	android/hardware/Camera$Parameters:setPreviewFpsRange	(II)V
    //   338: aload 8
    //   340: invokevirtual 827	android/hardware/Camera$Parameters:getSupportedSceneModes	()Ljava/util/List;
    //   343: astore 9
    //   345: aload 9
    //   347: ifnull +22 -> 369
    //   350: aload 9
    //   352: ldc 146
    //   354: invokeinterface 327 2 0
    //   359: ifeq +10 -> 369
    //   362: aload 8
    //   364: ldc 146
    //   366: invokevirtual 830	android/hardware/Camera$Parameters:setSceneMode	(Ljava/lang/String;)V
    //   369: aload 8
    //   371: invokevirtual 764	android/hardware/Camera$Parameters:getSupportedFlashModes	()Ljava/util/List;
    //   374: astore 10
    //   376: aload 10
    //   378: ifnull +24 -> 402
    //   381: aload 10
    //   383: ldc_w 343
    //   386: invokeinterface 327 2 0
    //   391: ifeq +11 -> 402
    //   394: aload 8
    //   396: ldc_w 343
    //   399: invokevirtual 769	android/hardware/Camera$Parameters:setFlashMode	(Ljava/lang/String;)V
    //   402: aload_0
    //   403: getfield 84	com/metaio/sdk/CameraView:mCamera	Landroid/hardware/Camera;
    //   406: aload 8
    //   408: invokevirtual 355	android/hardware/Camera:setParameters	(Landroid/hardware/Camera$Parameters;)V
    //   411: iconst_4
    //   412: aload_0
    //   413: getfield 84	com/metaio/sdk/CameraView:mCamera	Landroid/hardware/Camera;
    //   416: invokevirtual 139	android/hardware/Camera:getParameters	()Landroid/hardware/Camera$Parameters;
    //   419: invokevirtual 792	android/hardware/Camera$Parameters:flatten	()Ljava/lang/String;
    //   422: invokestatic 157	com/metaio/sdk/MetaioDebug:log	(ILjava/lang/String;)V
    //   425: iconst_3
    //   426: new 112	java/lang/StringBuilder
    //   429: dup
    //   430: invokespecial 114	java/lang/StringBuilder:<init>	()V
    //   433: ldc_w 832
    //   436: invokevirtual 120	java/lang/StringBuilder:append	(Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   439: aload_1
    //   440: invokevirtual 397	java/lang/StringBuilder:append	(Ljava/lang/Object;)Ljava/lang/StringBuilder;
    //   443: invokevirtual 127	java/lang/StringBuilder:toString	()Ljava/lang/String;
    //   446: invokestatic 133	com/metaio/sdk/MetaioDebug:logPrivate	(ILjava/lang/String;)V
    //   449: aload_0
    //   450: getfield 84	com/metaio/sdk/CameraView:mCamera	Landroid/hardware/Camera;
    //   453: aload_1
    //   454: invokevirtual 836	android/hardware/Camera:setPreviewDisplay	(Landroid/view/SurfaceHolder;)V
    //   457: aload_0
    //   458: invokevirtual 535	com/metaio/sdk/CameraView:resetBuffers	()V
    //   461: aload_0
    //   462: invokespecial 718	com/metaio/sdk/CameraView:updateFocusMode	()V
    //   465: aload_0
    //   466: getfield 285	com/metaio/sdk/CameraView:mPreviewCallbackEnabled	Z
    //   469: ifeq +26 -> 495
    //   472: aload_0
    //   473: getfield 84	com/metaio/sdk/CameraView:mCamera	Landroid/hardware/Camera;
    //   476: aload_0
    //   477: invokevirtual 539	android/hardware/Camera:setPreviewCallbackWithBuffer	(Landroid/hardware/Camera$PreviewCallback;)V
    //   480: iconst_3
    //   481: ldc_w 838
    //   484: invokestatic 133	com/metaio/sdk/MetaioDebug:logPrivate	(ILjava/lang/String;)V
    //   487: aload_0
    //   488: invokevirtual 716	com/metaio/sdk/CameraView:startPreview	()Z
    //   491: pop
    //   492: aload_0
    //   493: monitorexit
    //   494: return
    //   495: aload_0
    //   496: getfield 84	com/metaio/sdk/CameraView:mCamera	Landroid/hardware/Camera;
    //   499: aconst_null
    //   500: invokevirtual 539	android/hardware/Camera:setPreviewCallbackWithBuffer	(Landroid/hardware/Camera$PreviewCallback;)V
    //   503: goto -23 -> 480
    //   506: astore 5
    //   508: bipush 6
    //   510: new 112	java/lang/StringBuilder
    //   513: dup
    //   514: invokespecial 114	java/lang/StringBuilder:<init>	()V
    //   517: ldc_w 782
    //   520: invokevirtual 120	java/lang/StringBuilder:append	(Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   523: aload 5
    //   525: invokevirtual 386	java/lang/Exception:getMessage	()Ljava/lang/String;
    //   528: invokevirtual 120	java/lang/StringBuilder:append	(Ljava/lang/String;)Ljava/lang/StringBuilder;
    //   531: invokevirtual 127	java/lang/StringBuilder:toString	()Ljava/lang/String;
    //   534: invokestatic 157	com/metaio/sdk/MetaioDebug:log	(ILjava/lang/String;)V
    //   537: bipush 6
    //   539: aload 5
    //   541: invokestatic 163	com/metaio/sdk/MetaioDebug:printStackTrace	(ILjava/lang/Exception;)V
    //   544: aload_0
    //   545: getfield 84	com/metaio/sdk/CameraView:mCamera	Landroid/hardware/Camera;
    //   548: ifnull +10 -> 558
    //   551: aload_0
    //   552: getfield 84	com/metaio/sdk/CameraView:mCamera	Landroid/hardware/Camera;
    //   555: invokevirtual 521	android/hardware/Camera:release	()V
    //   558: aload_0
    //   559: aconst_null
    //   560: putfield 84	com/metaio/sdk/CameraView:mCamera	Landroid/hardware/Camera;
    //   563: aload_0
    //   564: iconst_0
    //   565: putfield 296	com/metaio/sdk/CameraView:previewRunning	Z
    //   568: goto -76 -> 492
    //
    // Exception table:
    //   from	to	target	type
    //   79	166	209	finally
    //   174	189	209	finally
    //   198	206	209	finally
    //   206	208	209	finally
    //   211	213	209	finally
    //   216	231	209	finally
    //   239	246	209	finally
    //   254	286	209	finally
    //   286	345	209	finally
    //   350	369	209	finally
    //   369	376	209	finally
    //   381	402	209	finally
    //   402	480	209	finally
    //   480	492	209	finally
    //   492	494	209	finally
    //   495	503	209	finally
    //   508	558	209	finally
    //   558	568	209	finally
    //   79	166	506	java/lang/Exception
    //   174	189	506	java/lang/Exception
    //   198	206	506	java/lang/Exception
    //   216	231	506	java/lang/Exception
    //   239	246	506	java/lang/Exception
    //   254	286	506	java/lang/Exception
    //   286	345	506	java/lang/Exception
    //   350	369	506	java/lang/Exception
    //   369	376	506	java/lang/Exception
    //   381	402	506	java/lang/Exception
    //   402	480	506	java/lang/Exception
    //   480	492	506	java/lang/Exception
    //   495	503	506	java/lang/Exception
  }

  @SuppressLint({"NewApi"})
  public void surfaceCreated(SurfaceHolder paramSurfaceHolder)
  {
    MetaioDebug.logPrivate(3, "CameraView.surfaceCreated");
    try
    {
      openCamera(this.mImageCaptureComponent.getCamera().getIndex());
      if (this.mCamera == null)
        throw new Exception("Camera object is null");
    }
    catch (Exception localException)
    {
      MetaioDebug.log(6, "Failed to open camera: " + localException.getMessage());
      return;
    }
    if (Build.VERSION.SDK_INT < 14)
    {
      this.mRealTimeFaceDetectionSupported = false;
      return;
    }
    int i = this.mCamera.getParameters().getMaxNumDetectedFaces();
    boolean bool = false;
    if (i > 0)
      bool = true;
    this.mRealTimeFaceDetectionSupported = bool;
  }

  public void surfaceDestroyed(SurfaceHolder paramSurfaceHolder)
  {
    MetaioDebug.logPrivate(3, "CameraView.surfaceDestroyed");
    release();
  }

  private final class AutoFocusTask extends TimerTask
  {
    private AutoFocusTask()
    {
    }

    public void run()
    {
      try
      {
        CameraView.this.getCamera().autoFocus(CameraView.this);
        return;
      }
      catch (Exception localException)
      {
      }
    }
  }
}

/* Location:           C:\Documents and Settings\Cesar Cabello Cea\Mis documentos\Downloads\apk-downloader\com.ikea.kompis-6_dex2jar.jar
 * Qualified Name:     com.metaio.sdk.CameraView
 * JD-Core Version:    0.6.2
 */