Fix action bug

pull/691/head
Mattia Iavarone 6 years ago
parent 337d845ecc
commit f52f66abe5
  1. 2
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/Camera1IntegrationTest.java
  2. 2
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/Camera2IntegrationTest.java
  3. 41
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/options/Camera1OptionsTest.java
  4. 3
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera1Engine.java
  5. 2
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java
  6. 3
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/action/BaseAction.java
  7. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/options/Camera1Options.java
  8. 6
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/options/Camera2Options.java

@ -20,7 +20,7 @@ import androidx.test.filters.LargeTest;
@RunWith(AndroidJUnit4.class)
@LargeTest
@DoNotRunOnTravis(because = "These do work but fail on CI emulators, due to bugs in the Camera1 emulated devices.")
public class CameraIntegration1Test extends CameraIntegrationTest {
public class Camera1IntegrationTest extends CameraIntegrationTest {
@NonNull
@Override

@ -27,7 +27,7 @@ import java.util.concurrent.CountDownLatch;
@RunWith(AndroidJUnit4.class)
@LargeTest
@DoNotRunOnTravis(because = "These do work but fail on CI emulators.")
public class CameraIntegration2Test extends CameraIntegrationTest {
public class Camera2IntegrationTest extends CameraIntegrationTest {
@NonNull
@Override

@ -1,8 +1,10 @@
package com.otaliastudios.cameraview;
package com.otaliastudios.cameraview.engine.options;
import android.hardware.Camera;
import com.otaliastudios.cameraview.BaseTest;
import com.otaliastudios.cameraview.CameraOptions;
import com.otaliastudios.cameraview.controls.Audio;
import com.otaliastudios.cameraview.controls.Facing;
import com.otaliastudios.cameraview.controls.Flash;
@ -22,7 +24,6 @@ import androidx.test.filters.SmallTest;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@ -38,11 +39,11 @@ import static org.mockito.Mockito.when;
@RunWith(AndroidJUnit4.class)
@SmallTest
public class CameraOptions1Test extends BaseTest {
public class Camera1OptionsTest extends BaseTest {
@Test
public void testEmpty() {
CameraOptions o = new CameraOptions(mock(Camera.Parameters.class), 0, false);
CameraOptions o = new Camera1Options(mock(Camera.Parameters.class), 0, false);
assertTrue(o.getSupportedPictureAspectRatios().isEmpty());
assertTrue(o.getSupportedPictureSizes().isEmpty());
assertTrue(o.getSupportedWhiteBalance().isEmpty());
@ -72,7 +73,7 @@ public class CameraOptions1Test extends BaseTest {
);
Camera.Parameters params = mock(Camera.Parameters.class);
when(params.getSupportedPictureSizes()).thenReturn(sizes);
CameraOptions o = new CameraOptions(params, 0, false);
CameraOptions o = new Camera1Options(params, 0, false);
Collection<Size> supportedSizes = o.getSupportedPictureSizes();
assertEquals(supportedSizes.size(), sizes.size());
for (Camera.Size size : sizes) {
@ -91,7 +92,7 @@ public class CameraOptions1Test extends BaseTest {
);
Camera.Parameters params = mock(Camera.Parameters.class);
when(params.getSupportedPictureSizes()).thenReturn(sizes);
CameraOptions o = new CameraOptions(params, 0, true);
CameraOptions o = new Camera1Options(params, 0, true);
Collection<Size> supportedSizes = o.getSupportedPictureSizes();
assertEquals(supportedSizes.size(), sizes.size());
for (Camera.Size size : sizes) {
@ -116,7 +117,7 @@ public class CameraOptions1Test extends BaseTest {
Camera.Parameters params = mock(Camera.Parameters.class);
when(params.getSupportedPictureSizes()).thenReturn(sizes);
CameraOptions o = new CameraOptions(params, 0, false);
CameraOptions o = new Camera1Options(params, 0, false);
Collection<AspectRatio> supportedRatios = o.getSupportedPictureAspectRatios();
assertEquals(supportedRatios.size(), expected.size());
for (AspectRatio ratio : expected) {
@ -137,7 +138,7 @@ public class CameraOptions1Test extends BaseTest {
);
Camera.Parameters params = mock(Camera.Parameters.class);
when(params.getSupportedVideoSizes()).thenReturn(sizes);
CameraOptions o = new CameraOptions(params, 0, false);
CameraOptions o = new Camera1Options(params, 0, false);
Collection<Size> supportedSizes = o.getSupportedVideoSizes();
assertEquals(supportedSizes.size(), sizes.size());
for (Camera.Size size : sizes) {
@ -158,7 +159,7 @@ public class CameraOptions1Test extends BaseTest {
Camera.Parameters params = mock(Camera.Parameters.class);
when(params.getSupportedVideoSizes()).thenReturn(null);
when(params.getSupportedPreviewSizes()).thenReturn(sizes);
CameraOptions o = new CameraOptions(params, 0, false);
CameraOptions o = new Camera1Options(params, 0, false);
Collection<Size> supportedSizes = o.getSupportedVideoSizes();
assertEquals(supportedSizes.size(), sizes.size());
for (Camera.Size size : sizes) {
@ -177,7 +178,7 @@ public class CameraOptions1Test extends BaseTest {
);
Camera.Parameters params = mock(Camera.Parameters.class);
when(params.getSupportedVideoSizes()).thenReturn(sizes);
CameraOptions o = new CameraOptions(params, 0, true);
CameraOptions o = new Camera1Options(params, 0, true);
Collection<Size> supportedSizes = o.getSupportedVideoSizes();
assertEquals(supportedSizes.size(), sizes.size());
for (Camera.Size size : sizes) {
@ -202,7 +203,7 @@ public class CameraOptions1Test extends BaseTest {
Camera.Parameters params = mock(Camera.Parameters.class);
when(params.getSupportedVideoSizes()).thenReturn(sizes);
CameraOptions o = new CameraOptions(params, 0, false);
CameraOptions o = new Camera1Options(params, 0, false);
Collection<AspectRatio> supportedRatios = o.getSupportedVideoAspectRatios();
assertEquals(supportedRatios.size(), expected.size());
for (AspectRatio ratio : expected) {
@ -218,7 +219,7 @@ public class CameraOptions1Test extends BaseTest {
when(params.getMaxExposureCompensation()).thenReturn(0);
when(params.getMinExposureCompensation()).thenReturn(0);
CameraOptions o = new CameraOptions(params, 0, false);
CameraOptions o = new Camera1Options(params, 0, false);
assertFalse(o.supports(GestureAction.AUTO_FOCUS));
assertTrue(o.supports(GestureAction.TAKE_PICTURE));
assertTrue(o.supports(GestureAction.NONE));
@ -232,7 +233,7 @@ public class CameraOptions1Test extends BaseTest {
public void testAlwaysSupportedControls() {
// Grid, VideoQuality, SessionType and Audio are always supported.
Camera.Parameters params = mock(Camera.Parameters.class);
CameraOptions o = new CameraOptions(params, 0, false);
CameraOptions o = new Camera1Options(params, 0, false);
Collection<Grid> grids = o.getSupportedControls(Grid.class);
Collection<VideoCodec> video = o.getSupportedControls(VideoCodec.class);
@ -253,7 +254,7 @@ public class CameraOptions1Test extends BaseTest {
supported.add(cameraInfo.facing);
}
CameraOptions o = new CameraOptions(mock(Camera.Parameters.class), 0, false);
CameraOptions o = new Camera1Options(mock(Camera.Parameters.class), 0, false);
Camera1Mapper m = Camera1Mapper.get();
Collection<Facing> s = o.getSupportedControls(Facing.class);
assertEquals(s.size(), supported.size());
@ -272,7 +273,7 @@ public class CameraOptions1Test extends BaseTest {
Camera.Parameters.WHITE_BALANCE_SHADE // Not supported
));
CameraOptions o = new CameraOptions(params, 0, false);
CameraOptions o = new Camera1Options(params, 0, false);
Collection<WhiteBalance> w = o.getSupportedControls(WhiteBalance.class);
assertEquals(w.size(), 2);
assertTrue(w.contains(WhiteBalance.AUTO));
@ -291,7 +292,7 @@ public class CameraOptions1Test extends BaseTest {
Camera.Parameters.FLASH_MODE_RED_EYE // Not supported
));
CameraOptions o = new CameraOptions(params, 0, false);
CameraOptions o = new Camera1Options(params, 0, false);
Collection<Flash> f = o.getSupportedControls(Flash.class);
assertEquals(f.size(), 3);
assertTrue(f.contains(Flash.OFF));
@ -312,7 +313,7 @@ public class CameraOptions1Test extends BaseTest {
Camera.Parameters.SCENE_MODE_FIREWORKS // Not supported
));
CameraOptions o = new CameraOptions(params, 0, false);
CameraOptions o = new Camera1Options(params, 0, false);
Collection<Hdr> h = o.getSupportedControls(Hdr.class);
assertEquals(h.size(), 2);
assertTrue(h.contains(Hdr.OFF));
@ -329,7 +330,7 @@ public class CameraOptions1Test extends BaseTest {
when(params.isZoomSupported()).thenReturn(true);
//noinspection ArraysAsListWithZeroOrOneArgument
when(params.getSupportedFocusModes()).thenReturn(Arrays.asList(Camera.Parameters.FOCUS_MODE_AUTO));
CameraOptions o = new CameraOptions(params, 0, false);
CameraOptions o = new Camera1Options(params, 0, false);
assertTrue(o.isZoomSupported());
assertTrue(o.isAutoFocusSupported());
}
@ -340,7 +341,7 @@ public class CameraOptions1Test extends BaseTest {
when(params.getMaxExposureCompensation()).thenReturn(10);
when(params.getMinExposureCompensation()).thenReturn(-10);
when(params.getExposureCompensationStep()).thenReturn(0.5f);
CameraOptions o = new CameraOptions(params, 0, false);
CameraOptions o = new Camera1Options(params, 0, false);
assertTrue(o.isExposureCorrectionSupported());
assertEquals(o.getExposureCorrectionMinValue(), -10f * 0.5f, 0f);
assertEquals(o.getExposureCorrectionMaxValue(), 10f * 0.5f, 0f);
@ -355,7 +356,7 @@ public class CameraOptions1Test extends BaseTest {
new int[]{60000, 120000}
);
when(params.getSupportedPreviewFpsRange()).thenReturn(result);
CameraOptions o = new CameraOptions(params, 0, false);
CameraOptions o = new Camera1Options(params, 0, false);
assertEquals(20F, o.getPreviewFrameRateMinValue(), 0.001F);
assertEquals(120F, o.getPreviewFrameRateMaxValue(), 0.001F);
}

@ -13,18 +13,17 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import android.util.Range;
import android.view.SurfaceHolder;
import com.google.android.gms.tasks.Task;
import com.google.android.gms.tasks.Tasks;
import com.otaliastudios.cameraview.CameraException;
import com.otaliastudios.cameraview.CameraLogger;
import com.otaliastudios.cameraview.CameraOptions;
import com.otaliastudios.cameraview.controls.PictureFormat;
import com.otaliastudios.cameraview.engine.mappers.Camera1Mapper;
import com.otaliastudios.cameraview.engine.offset.Axis;
import com.otaliastudios.cameraview.engine.offset.Reference;
import com.otaliastudios.cameraview.engine.options.Camera1Options;
import com.otaliastudios.cameraview.frame.Frame;
import com.otaliastudios.cameraview.PictureResult;
import com.otaliastudios.cameraview.VideoResult;

@ -35,7 +35,6 @@ import com.google.android.gms.tasks.TaskCompletionSource;
import com.google.android.gms.tasks.Tasks;
import com.otaliastudios.cameraview.CameraException;
import com.otaliastudios.cameraview.CameraLogger;
import com.otaliastudios.cameraview.CameraOptions;
import com.otaliastudios.cameraview.PictureResult;
import com.otaliastudios.cameraview.VideoResult;
import com.otaliastudios.cameraview.controls.Facing;
@ -54,6 +53,7 @@ import com.otaliastudios.cameraview.engine.meter.MeterAction;
import com.otaliastudios.cameraview.engine.meter.MeterResetAction;
import com.otaliastudios.cameraview.engine.offset.Axis;
import com.otaliastudios.cameraview.engine.offset.Reference;
import com.otaliastudios.cameraview.engine.options.Camera2Options;
import com.otaliastudios.cameraview.frame.Frame;
import com.otaliastudios.cameraview.frame.FrameManager;
import com.otaliastudios.cameraview.gesture.Gesture;

@ -39,6 +39,7 @@ public abstract class BaseAction implements Action {
@Override
public final void start(@NonNull ActionHolder holder) {
this.holder = holder;
holder.addAction(this);
if (holder.getLastResult(this) != null) {
onStart(holder);
@ -62,9 +63,7 @@ public abstract class BaseAction implements Action {
* holder stream.
* @param holder holder
*/
@CallSuper
protected void onStart(@NonNull ActionHolder holder) {
this.holder = holder; // must be here
// Overrideable
}

@ -1,4 +1,4 @@
package com.otaliastudios.cameraview.engine;
package com.otaliastudios.cameraview.engine.options;
import android.hardware.Camera;
import android.media.CamcorderProfile;
@ -17,9 +17,9 @@ import com.otaliastudios.cameraview.size.Size;
import java.util.List;
class Camera1Options extends CameraOptions {
public class Camera1Options extends CameraOptions {
Camera1Options(@NonNull Camera.Parameters params, int cameraId, boolean flipSizes) {
public Camera1Options(@NonNull Camera.Parameters params, int cameraId, boolean flipSizes) {
List<String> strings;
Camera1Mapper mapper = Camera1Mapper.get();

@ -1,4 +1,4 @@
package com.otaliastudios.cameraview.engine;
package com.otaliastudios.cameraview.engine.options;
import android.graphics.ImageFormat;
import android.hardware.camera2.CameraAccessException;
@ -27,9 +27,9 @@ import com.otaliastudios.cameraview.size.Size;
import java.util.Set;
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
class Camera2Options extends CameraOptions {
public class Camera2Options extends CameraOptions {
Camera2Options(@NonNull CameraManager manager,
public Camera2Options(@NonNull CameraManager manager,
@NonNull String cameraId,
boolean flipSizes) throws CameraAccessException {
Camera2Mapper mapper = Camera2Mapper.get();
Loading…
Cancel
Save