Move Engine and Previews

pull/482/head
Mattia Iavarone 6 years ago
parent 46d03c0555
commit 04b075ee46
  1. 1
      cameraview/build.gradle
  2. 1
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraPreviewTest.java
  3. 2
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraViewCallbacksTest.java
  4. 2
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/CameraViewTest.java
  5. 3
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/GlCameraPreviewTest.java
  6. 6
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/IntegrationTest.java
  7. 1
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/MockCameraEngine.java
  8. 2
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/MockCameraPreview.java
  9. 4
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/SurfaceCameraPreviewTest.java
  10. 3
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/TextureCameraPreviewTest.java
  11. 2
      cameraview/src/main/java/com/otaliastudios/cameraview/CameraOptions.java
  12. 8
      cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java
  13. 5
      cameraview/src/main/java/com/otaliastudios/cameraview/FullVideoRecorder.java
  14. 0
      cameraview/src/main/java/com/otaliastudios/cameraview/GridLinesLayout.java
  15. 0
      cameraview/src/main/java/com/otaliastudios/cameraview/RendererThread.java
  16. 8
      cameraview/src/main/java/com/otaliastudios/cameraview/SnapshotPictureRecorder.java
  17. 3
      cameraview/src/main/java/com/otaliastudios/cameraview/SnapshotVideoRecorder.java
  18. 35
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera1Engine.java
  19. 15
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/CameraEngine.java
  20. 7
      cameraview/src/main/java/com/otaliastudios/cameraview/preview/CameraPreview.java
  21. 10
      cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java
  22. 5
      cameraview/src/main/java/com/otaliastudios/cameraview/preview/SurfaceCameraPreview.java
  23. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/preview/TextureCameraPreview.java

@ -32,7 +32,6 @@ android {
} }
sourceSets { sourceSets {
main.java.srcDirs += 'src/main/views'
main.java.srcDirs += 'src/main/utils' main.java.srcDirs += 'src/main/utils'
main.java.srcDirs += 'src/main/gles' main.java.srcDirs += 'src/main/gles'
} }

@ -5,6 +5,7 @@ import android.content.Context;
import androidx.test.rule.ActivityTestRule; import androidx.test.rule.ActivityTestRule;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.otaliastudios.cameraview.preview.CameraPreview;
import com.otaliastudios.cameraview.size.AspectRatio; import com.otaliastudios.cameraview.size.AspectRatio;
import com.otaliastudios.cameraview.size.Size; import com.otaliastudios.cameraview.size.Size;

@ -10,8 +10,10 @@ import androidx.test.filters.MediumTest;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.otaliastudios.cameraview.controls.Audio; import com.otaliastudios.cameraview.controls.Audio;
import com.otaliastudios.cameraview.engine.CameraEngine;
import com.otaliastudios.cameraview.gesture.Gesture; import com.otaliastudios.cameraview.gesture.Gesture;
import com.otaliastudios.cameraview.gesture.GestureAction; import com.otaliastudios.cameraview.gesture.GestureAction;
import com.otaliastudios.cameraview.preview.CameraPreview;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;

@ -14,6 +14,7 @@ import com.otaliastudios.cameraview.controls.Audio;
import com.otaliastudios.cameraview.controls.ControlParser; import com.otaliastudios.cameraview.controls.ControlParser;
import com.otaliastudios.cameraview.controls.Facing; import com.otaliastudios.cameraview.controls.Facing;
import com.otaliastudios.cameraview.controls.Flash; import com.otaliastudios.cameraview.controls.Flash;
import com.otaliastudios.cameraview.engine.CameraEngine;
import com.otaliastudios.cameraview.gesture.Gesture; import com.otaliastudios.cameraview.gesture.Gesture;
import com.otaliastudios.cameraview.gesture.GestureAction; import com.otaliastudios.cameraview.gesture.GestureAction;
import com.otaliastudios.cameraview.controls.Grid; import com.otaliastudios.cameraview.controls.Grid;
@ -25,6 +26,7 @@ import com.otaliastudios.cameraview.gesture.GestureParser;
import com.otaliastudios.cameraview.gesture.PinchGestureLayout; import com.otaliastudios.cameraview.gesture.PinchGestureLayout;
import com.otaliastudios.cameraview.gesture.ScrollGestureLayout; import com.otaliastudios.cameraview.gesture.ScrollGestureLayout;
import com.otaliastudios.cameraview.gesture.TapGestureLayout; import com.otaliastudios.cameraview.gesture.TapGestureLayout;
import com.otaliastudios.cameraview.preview.CameraPreview;
import com.otaliastudios.cameraview.size.Size; import com.otaliastudios.cameraview.size.Size;
import com.otaliastudios.cameraview.size.SizeSelector; import com.otaliastudios.cameraview.size.SizeSelector;
import com.otaliastudios.cameraview.size.SizeSelectors; import com.otaliastudios.cameraview.size.SizeSelectors;

@ -7,6 +7,9 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.otaliastudios.cameraview.preview.CameraPreview;
import com.otaliastudios.cameraview.preview.GlCameraPreview;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)

@ -11,6 +11,8 @@ import com.otaliastudios.cameraview.controls.Flash;
import com.otaliastudios.cameraview.controls.Hdr; import com.otaliastudios.cameraview.controls.Hdr;
import com.otaliastudios.cameraview.controls.Mode; import com.otaliastudios.cameraview.controls.Mode;
import com.otaliastudios.cameraview.controls.WhiteBalance; import com.otaliastudios.cameraview.controls.WhiteBalance;
import com.otaliastudios.cameraview.engine.Camera1Engine;
import com.otaliastudios.cameraview.engine.CameraEngine;
import com.otaliastudios.cameraview.size.Size; import com.otaliastudios.cameraview.size.Size;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -55,7 +57,7 @@ public class IntegrationTest extends BaseTest {
public ActivityTestRule<TestActivity> rule = new ActivityTestRule<>(TestActivity.class); public ActivityTestRule<TestActivity> rule = new ActivityTestRule<>(TestActivity.class);
private CameraView camera; private CameraView camera;
private Camera1 controller; private Camera1Engine controller;
private CameraListener listener; private CameraListener listener;
private Task<Throwable> uiExceptionTask; private Task<Throwable> uiExceptionTask;
@ -74,7 +76,7 @@ public class IntegrationTest extends BaseTest {
camera = new CameraView(rule.getActivity()) { camera = new CameraView(rule.getActivity()) {
@Override @Override
protected CameraEngine instantiateCameraController(CameraCallbacks callbacks) { protected CameraEngine instantiateCameraController(CameraCallbacks callbacks) {
controller = new Camera1(callbacks); controller = new Camera1Engine(callbacks);
return controller; return controller;
} }
}; };

@ -7,6 +7,7 @@ import android.location.Location;
import com.otaliastudios.cameraview.controls.Audio; import com.otaliastudios.cameraview.controls.Audio;
import com.otaliastudios.cameraview.controls.Facing; import com.otaliastudios.cameraview.controls.Facing;
import com.otaliastudios.cameraview.controls.Flash; import com.otaliastudios.cameraview.controls.Flash;
import com.otaliastudios.cameraview.engine.CameraEngine;
import com.otaliastudios.cameraview.gesture.Gesture; import com.otaliastudios.cameraview.gesture.Gesture;
import com.otaliastudios.cameraview.controls.Hdr; import com.otaliastudios.cameraview.controls.Hdr;
import com.otaliastudios.cameraview.controls.Mode; import com.otaliastudios.cameraview.controls.Mode;

@ -7,6 +7,8 @@ import androidx.annotation.NonNull;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.otaliastudios.cameraview.preview.CameraPreview;
public class MockCameraPreview extends CameraPreview<View, Void> { public class MockCameraPreview extends CameraPreview<View, Void> {
MockCameraPreview(Context context, ViewGroup parent) { MockCameraPreview(Context context, ViewGroup parent) {

@ -7,7 +7,9 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
import android.view.ViewGroup; import android.view.ViewGroup;
import org.junit.Test; import com.otaliastudios.cameraview.preview.CameraPreview;
import com.otaliastudios.cameraview.preview.SurfaceCameraPreview;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)

@ -7,6 +7,9 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.otaliastudios.cameraview.preview.CameraPreview;
import com.otaliastudios.cameraview.preview.TextureCameraPreview;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)

@ -48,7 +48,7 @@ public class CameraOptions {
private boolean autoFocusSupported; private boolean autoFocusSupported;
// Camera1 constructor. // Camera1Engine constructor.
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
CameraOptions(@NonNull Camera.Parameters params, boolean flipSizes) { CameraOptions(@NonNull Camera.Parameters params, boolean flipSizes) {
List<String> strings; List<String> strings;

@ -33,6 +33,8 @@ import com.otaliastudios.cameraview.controls.Control;
import com.otaliastudios.cameraview.controls.ControlParser; import com.otaliastudios.cameraview.controls.ControlParser;
import com.otaliastudios.cameraview.controls.Facing; import com.otaliastudios.cameraview.controls.Facing;
import com.otaliastudios.cameraview.controls.Flash; import com.otaliastudios.cameraview.controls.Flash;
import com.otaliastudios.cameraview.engine.Camera1Engine;
import com.otaliastudios.cameraview.engine.CameraEngine;
import com.otaliastudios.cameraview.gesture.Gesture; import com.otaliastudios.cameraview.gesture.Gesture;
import com.otaliastudios.cameraview.gesture.GestureAction; import com.otaliastudios.cameraview.gesture.GestureAction;
import com.otaliastudios.cameraview.controls.Grid; import com.otaliastudios.cameraview.controls.Grid;
@ -46,6 +48,10 @@ import com.otaliastudios.cameraview.gesture.GestureParser;
import com.otaliastudios.cameraview.gesture.PinchGestureLayout; import com.otaliastudios.cameraview.gesture.PinchGestureLayout;
import com.otaliastudios.cameraview.gesture.ScrollGestureLayout; import com.otaliastudios.cameraview.gesture.ScrollGestureLayout;
import com.otaliastudios.cameraview.gesture.TapGestureLayout; import com.otaliastudios.cameraview.gesture.TapGestureLayout;
import com.otaliastudios.cameraview.preview.CameraPreview;
import com.otaliastudios.cameraview.preview.GlCameraPreview;
import com.otaliastudios.cameraview.preview.SurfaceCameraPreview;
import com.otaliastudios.cameraview.preview.TextureCameraPreview;
import com.otaliastudios.cameraview.size.AspectRatio; import com.otaliastudios.cameraview.size.AspectRatio;
import com.otaliastudios.cameraview.size.Size; import com.otaliastudios.cameraview.size.Size;
import com.otaliastudios.cameraview.size.SizeSelector; import com.otaliastudios.cameraview.size.SizeSelector;
@ -197,7 +203,7 @@ public class CameraView extends FrameLayout implements LifecycleObserver {
} }
protected CameraEngine instantiateCameraController(CameraCallbacks callbacks) { protected CameraEngine instantiateCameraController(CameraCallbacks callbacks) {
return new Camera1(callbacks); return new Camera1Engine(callbacks);
} }
protected CameraPreview instantiatePreview(Context context, ViewGroup container) { protected CameraPreview instantiatePreview(Context context, ViewGroup container) {

@ -5,6 +5,7 @@ import android.media.CamcorderProfile;
import android.media.MediaRecorder; import android.media.MediaRecorder;
import com.otaliastudios.cameraview.controls.Audio; import com.otaliastudios.cameraview.controls.Audio;
import com.otaliastudios.cameraview.engine.Camera1Engine;
import com.otaliastudios.cameraview.size.Size; import com.otaliastudios.cameraview.size.Size;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -20,12 +21,12 @@ class FullVideoRecorder extends VideoRecorder {
private MediaRecorder mMediaRecorder; private MediaRecorder mMediaRecorder;
private CamcorderProfile mProfile; private CamcorderProfile mProfile;
private Camera1 mController; private Camera1Engine mController;
private Camera mCamera; private Camera mCamera;
private Size mSize; private Size mSize;
FullVideoRecorder(@NonNull VideoResult stub, @Nullable VideoResultListener listener, FullVideoRecorder(@NonNull VideoResult stub, @Nullable VideoResultListener listener,
@NonNull Camera1 controller, @NonNull Camera camera, int cameraId) { @NonNull Camera1Engine controller, @NonNull Camera camera, int cameraId) {
super(stub, listener); super(stub, listener);
mCamera = camera; mCamera = camera;
mController = controller; mController = controller;

@ -13,6 +13,10 @@ import android.opengl.EGLContext;
import android.opengl.Matrix; import android.opengl.Matrix;
import android.os.Build; import android.os.Build;
import com.otaliastudios.cameraview.controls.Facing; import com.otaliastudios.cameraview.controls.Facing;
import com.otaliastudios.cameraview.engine.Camera1Engine;
import com.otaliastudios.cameraview.engine.CameraEngine;
import com.otaliastudios.cameraview.preview.CameraPreview;
import com.otaliastudios.cameraview.preview.GlCameraPreview;
import com.otaliastudios.cameraview.size.AspectRatio; import com.otaliastudios.cameraview.size.AspectRatio;
import com.otaliastudios.cameraview.size.Size; import com.otaliastudios.cameraview.size.Size;
@ -28,14 +32,14 @@ class SnapshotPictureRecorder extends PictureRecorder {
private static final String TAG = SnapshotPictureRecorder.class.getSimpleName(); private static final String TAG = SnapshotPictureRecorder.class.getSimpleName();
private static final CameraLogger LOG = CameraLogger.create(TAG); private static final CameraLogger LOG = CameraLogger.create(TAG);
private Camera1 mController; private Camera1Engine mController;
private Camera mCamera; private Camera mCamera;
private CameraPreview mPreview; private CameraPreview mPreview;
private AspectRatio mOutputRatio; private AspectRatio mOutputRatio;
private Size mSensorPreviewSize; private Size mSensorPreviewSize;
private int mFormat; private int mFormat;
SnapshotPictureRecorder(@NonNull PictureResult stub, @NonNull Camera1 controller, SnapshotPictureRecorder(@NonNull PictureResult stub, @NonNull Camera1Engine controller,
@NonNull Camera camera, @NonNull AspectRatio outputRatio) { @NonNull Camera camera, @NonNull AspectRatio outputRatio) {
super(stub, controller); super(stub, controller);
mController = controller; mController = controller;

@ -5,6 +5,7 @@ import android.opengl.EGL14;
import android.os.Build; import android.os.Build;
import com.otaliastudios.cameraview.controls.Audio; import com.otaliastudios.cameraview.controls.Audio;
import com.otaliastudios.cameraview.preview.GlCameraPreview;
import com.otaliastudios.cameraview.size.Size; import com.otaliastudios.cameraview.size.Size;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -125,7 +126,7 @@ class SnapshotVideoRecorder extends VideoRecorder implements GlCameraPreview.Ren
@Override @Override
public void onEncoderStop(int stopReason, @Nullable Exception e) { public void onEncoderStop(int stopReason, @Nullable Exception e) {
// If something failed, undo the result, since this is the mechanism // If something failed, undo the result, since this is the mechanism
// to notify Camera1 about this. // to notify Camera1Engine about this.
if (e != null) { if (e != null) {
LOG.e("Error onEncoderStop", e); LOG.e("Error onEncoderStop", e);
mResult = null; mResult = null;

@ -1,4 +1,4 @@
package com.otaliastudios.cameraview; package com.otaliastudios.cameraview.engine;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.annotation.TargetApi; import android.annotation.TargetApi;
@ -14,6 +14,23 @@ import androidx.annotation.Nullable;
import androidx.annotation.WorkerThread; import androidx.annotation.WorkerThread;
import android.view.SurfaceHolder; import android.view.SurfaceHolder;
import com.otaliastudios.cameraview.CameraException;
import com.otaliastudios.cameraview.CameraLogger;
import com.otaliastudios.cameraview.CameraOptions;
import com.otaliastudios.cameraview.CameraView;
import com.otaliastudios.cameraview.CropHelper;
import com.otaliastudios.cameraview.Frame;
import com.otaliastudios.cameraview.FullPictureRecorder;
import com.otaliastudios.cameraview.FullVideoRecorder;
import com.otaliastudios.cameraview.GlCameraPreview;
import com.otaliastudios.cameraview.Mapper1;
import com.otaliastudios.cameraview.PictureRecorder;
import com.otaliastudios.cameraview.PictureResult;
import com.otaliastudios.cameraview.SnapshotPictureRecorder;
import com.otaliastudios.cameraview.SnapshotVideoRecorder;
import com.otaliastudios.cameraview.Task;
import com.otaliastudios.cameraview.VideoRecorder;
import com.otaliastudios.cameraview.VideoResult;
import com.otaliastudios.cameraview.controls.Audio; import com.otaliastudios.cameraview.controls.Audio;
import com.otaliastudios.cameraview.controls.Facing; import com.otaliastudios.cameraview.controls.Facing;
import com.otaliastudios.cameraview.controls.Flash; import com.otaliastudios.cameraview.controls.Flash;
@ -31,11 +48,11 @@ import java.util.List;
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
class Camera1 extends CameraEngine implements Camera.PreviewCallback, Camera.ErrorCallback, class Camera1Engine extends CameraEngine implements Camera.PreviewCallback, Camera.ErrorCallback,
VideoRecorder.VideoResultListener, VideoRecorder.VideoResultListener,
PictureRecorder.PictureResultListener { PictureRecorder.PictureResultListener {
private static final String TAG = Camera1.class.getSimpleName(); private static final String TAG = Camera1Engine.class.getSimpleName();
private static final CameraLogger LOG = CameraLogger.create(TAG); private static final CameraLogger LOG = CameraLogger.create(TAG);
private Camera mCamera; private Camera mCamera;
@ -56,7 +73,7 @@ class Camera1 extends CameraEngine implements Camera.PreviewCallback, Camera.Err
} }
}; };
Camera1(@NonNull CameraView.CameraCallbacks callback) { Camera1Engine(@NonNull CameraView.CameraCallbacks callback) {
super(callback); super(callback);
mMapper = new Mapper1(); mMapper = new Mapper1();
} }
@ -581,7 +598,7 @@ class Camera1 extends CameraEngine implements Camera.PreviewCallback, Camera.Err
result.rotation = offset(REF_SENSOR, REF_OUTPUT); result.rotation = offset(REF_SENSOR, REF_OUTPUT);
result.size = getPictureSize(REF_OUTPUT); result.size = getPictureSize(REF_OUTPUT);
result.facing = mFacing; result.facing = mFacing;
mPictureRecorder = new FullPictureRecorder(result, Camera1.this, mCamera); mPictureRecorder = new FullPictureRecorder(result, Camera1Engine.this, mCamera);
mPictureRecorder.take(); mPictureRecorder.take();
} }
}); });
@ -616,7 +633,7 @@ class Camera1 extends CameraEngine implements Camera.PreviewCallback, Camera.Err
LOG.v("Rotations", "SO", offset(REF_SENSOR, REF_OUTPUT), "OS", offset(REF_OUTPUT, REF_SENSOR)); LOG.v("Rotations", "SO", offset(REF_SENSOR, REF_OUTPUT), "OS", offset(REF_OUTPUT, REF_SENSOR));
LOG.v("Rotations", "VO", offset(REF_VIEW, REF_OUTPUT), "OV", offset(REF_OUTPUT, REF_VIEW)); LOG.v("Rotations", "VO", offset(REF_VIEW, REF_OUTPUT), "OV", offset(REF_OUTPUT, REF_VIEW));
mPictureRecorder = new SnapshotPictureRecorder(result, Camera1.this, mCamera, outputRatio); mPictureRecorder = new SnapshotPictureRecorder(result, Camera1Engine.this, mCamera, outputRatio);
mPictureRecorder.take(); mPictureRecorder.take();
} }
}); });
@ -702,8 +719,8 @@ class Camera1 extends CameraEngine implements Camera.PreviewCallback, Camera.Err
onVideoResult(null, e); onVideoResult(null, e);
return; return;
} }
mVideoRecorder = new FullVideoRecorder(videoResult, Camera1.this, mVideoRecorder = new FullVideoRecorder(videoResult, Camera1Engine.this,
Camera1.this, mCamera, mCameraId); Camera1Engine.this, mCamera, mCameraId);
mVideoRecorder.start(); mVideoRecorder.start();
} }
}); });
@ -790,7 +807,7 @@ class Camera1 extends CameraEngine implements Camera.PreviewCallback, Camera.Err
// Reset facing and start. // Reset facing and start.
mFacing = realFacing; mFacing = realFacing;
GlCameraPreview cameraPreview = (GlCameraPreview) mPreview; GlCameraPreview cameraPreview = (GlCameraPreview) mPreview;
mVideoRecorder = new SnapshotVideoRecorder(videoResult, Camera1.this, cameraPreview); mVideoRecorder = new SnapshotVideoRecorder(videoResult, Camera1Engine.this, cameraPreview);
mVideoRecorder.start(); mVideoRecorder.start();
} }
}); });

@ -1,4 +1,4 @@
package com.otaliastudios.cameraview; package com.otaliastudios.cameraview.engine;
import android.graphics.PointF; import android.graphics.PointF;
import android.location.Location; import android.location.Location;
@ -7,6 +7,17 @@ import android.location.Location;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import com.otaliastudios.cameraview.CameraException;
import com.otaliastudios.cameraview.CameraLogger;
import com.otaliastudios.cameraview.CameraOptions;
import com.otaliastudios.cameraview.preview.CameraPreview;
import com.otaliastudios.cameraview.CameraView;
import com.otaliastudios.cameraview.FrameManager;
import com.otaliastudios.cameraview.Mapper;
import com.otaliastudios.cameraview.PictureRecorder;
import com.otaliastudios.cameraview.Task;
import com.otaliastudios.cameraview.VideoRecorder;
import com.otaliastudios.cameraview.WorkerHandler;
import com.otaliastudios.cameraview.controls.Audio; import com.otaliastudios.cameraview.controls.Audio;
import com.otaliastudios.cameraview.controls.Facing; import com.otaliastudios.cameraview.controls.Facing;
import com.otaliastudios.cameraview.controls.Flash; import com.otaliastudios.cameraview.controls.Flash;
@ -30,7 +41,7 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
abstract class CameraEngine implements public abstract class CameraEngine implements
CameraPreview.SurfaceCallback, CameraPreview.SurfaceCallback,
FrameManager.BufferCallback, FrameManager.BufferCallback,
Thread.UncaughtExceptionHandler { Thread.UncaughtExceptionHandler {

@ -1,4 +1,4 @@
package com.otaliastudios.cameraview; package com.otaliastudios.cameraview.preview;
import android.content.Context; import android.content.Context;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -6,6 +6,9 @@ import androidx.annotation.Nullable;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.otaliastudios.cameraview.CameraLogger;
import com.otaliastudios.cameraview.Task;
import com.otaliastudios.cameraview.engine.CameraEngine;
import com.otaliastudios.cameraview.size.Size; import com.otaliastudios.cameraview.size.Size;
/** /**
@ -15,7 +18,7 @@ import com.otaliastudios.cameraview.size.Size;
* @param <T> the type of view which hosts the content surface * @param <T> the type of view which hosts the content surface
* @param <Output> the type of output, either {@link android.view.SurfaceHolder} or {@link android.graphics.SurfaceTexture} * @param <Output> the type of output, either {@link android.view.SurfaceHolder} or {@link android.graphics.SurfaceTexture}
*/ */
abstract class CameraPreview<T extends View, Output> { public abstract class CameraPreview<T extends View, Output> {
protected final static CameraLogger LOG = CameraLogger.create(CameraPreview.class.getSimpleName()); protected final static CameraLogger LOG = CameraLogger.create(CameraPreview.class.getSimpleName());

@ -1,4 +1,4 @@
package com.otaliastudios.cameraview; package com.otaliastudios.cameraview.preview;
import android.content.Context; import android.content.Context;
import android.graphics.SurfaceTexture; import android.graphics.SurfaceTexture;
@ -12,6 +12,10 @@ import android.view.SurfaceHolder;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.otaliastudios.cameraview.EglViewport;
import com.otaliastudios.cameraview.R;
import com.otaliastudios.cameraview.RendererThread;
import com.otaliastudios.cameraview.preview.CameraPreview;
import com.otaliastudios.cameraview.size.AspectRatio; import com.otaliastudios.cameraview.size.AspectRatio;
import java.util.Collections; import java.util.Collections;
@ -26,8 +30,8 @@ import javax.microedition.khronos.opengles.GL10;
* *
* - in the SurfaceTexture constructor we pass the GL texture handle that we have created. * - in the SurfaceTexture constructor we pass the GL texture handle that we have created.
* *
* - The SurfaceTexture is linked to the Camera1 object. The camera will pass down buffers of data with * - The SurfaceTexture is linked to the Camera1Engine object. The camera will pass down buffers of data with
* a specified size (that is, the Camera1 preview size). For this reason we don't have to specify * a specified size (that is, the Camera1Engine preview size). For this reason we don't have to specify
* surfaceTexture.setDefaultBufferSize() (like we do, for example, in SnapshotPictureRecorder). * surfaceTexture.setDefaultBufferSize() (like we do, for example, in SnapshotPictureRecorder).
* *
* - When SurfaceTexture.updateTexImage() is called, it will fetch the latest texture image from the * - When SurfaceTexture.updateTexImage() is called, it will fetch the latest texture image from the

@ -1,4 +1,4 @@
package com.otaliastudios.cameraview; package com.otaliastudios.cameraview.preview;
import android.content.Context; import android.content.Context;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -9,6 +9,9 @@ import android.view.SurfaceView;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.otaliastudios.cameraview.CameraLogger;
import com.otaliastudios.cameraview.R;
// Fallback preview when hardware acceleration is off. // Fallback preview when hardware acceleration is off.
// Currently this does NOT support cropping (e. g. the crop inside behavior), // Currently this does NOT support cropping (e. g. the crop inside behavior),
// so we return false in supportsCropping() in order to have proper measuring. // so we return false in supportsCropping() in order to have proper measuring.

@ -1,4 +1,4 @@
package com.otaliastudios.cameraview; package com.otaliastudios.cameraview.preview;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.content.Context; import android.content.Context;
@ -10,6 +10,8 @@ import android.view.TextureView;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import com.otaliastudios.cameraview.R;
import com.otaliastudios.cameraview.preview.CameraPreview;
import com.otaliastudios.cameraview.size.AspectRatio; import com.otaliastudios.cameraview.size.AspectRatio;
class TextureCameraPreview extends CameraPreview<TextureView, SurfaceTexture> { class TextureCameraPreview extends CameraPreview<TextureView, SurfaceTexture> {
Loading…
Cancel
Save