Add CameraOptions.getSupportedFrameProcessingFormats(), tests

pull/704/head
Mattia Iavarone 6 years ago
parent ec6e799ade
commit ed5d55da37
  1. 7
      cameraview/src/androidTest/java/com/otaliastudios/cameraview/engine/options/Camera1OptionsTest.java
  2. 13
      cameraview/src/main/java/com/otaliastudios/cameraview/CameraOptions.java
  3. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/options/Camera1Options.java
  4. 10
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/options/Camera2Options.java
  5. 1
      docs/_posts/2018-12-20-frame-processing.md

@ -1,6 +1,7 @@
package com.otaliastudios.cameraview.engine.options;
import android.graphics.ImageFormat;
import android.hardware.Camera;
import com.otaliastudios.cameraview.BaseTest;
@ -8,6 +9,7 @@ import com.otaliastudios.cameraview.CameraOptions;
import com.otaliastudios.cameraview.controls.Audio;
import com.otaliastudios.cameraview.controls.Facing;
import com.otaliastudios.cameraview.controls.Flash;
import com.otaliastudios.cameraview.controls.PictureFormat;
import com.otaliastudios.cameraview.engine.mappers.Camera1Mapper;
import com.otaliastudios.cameraview.gesture.GestureAction;
import com.otaliastudios.cameraview.controls.Grid;
@ -54,6 +56,11 @@ public class Camera1OptionsTest extends BaseTest {
assertFalse(o.isZoomSupported());
assertEquals(o.getExposureCorrectionMaxValue(), 0f, 0);
assertEquals(o.getExposureCorrectionMinValue(), 0f, 0);
// Static
assertEquals(1, o.getSupportedPictureFormats().size());
assertTrue(o.getSupportedPictureFormats().contains(PictureFormat.JPEG));
assertEquals(1, o.getSupportedFrameProcessingFormats().size());
assertTrue(o.getSupportedFrameProcessingFormats().contains(ImageFormat.NV21));
}
private Camera.Size mockCameraSize(int width, int height) {

@ -56,6 +56,7 @@ public abstract class CameraOptions {
protected Set<AspectRatio> supportedPictureAspectRatio = new HashSet<>(4);
protected Set<AspectRatio> supportedVideoAspectRatio = new HashSet<>(3);
protected Set<PictureFormat> supportedPictureFormats = new HashSet<>(2);
protected Set<Integer> supportedFrameProcessingFormats = new HashSet<>(2);
protected boolean zoomSupported;
protected boolean exposureCorrectionSupported;
@ -237,6 +238,18 @@ public abstract class CameraOptions {
return Collections.unmodifiableSet(supportedPictureFormats);
}
/**
* Set of supported formats for frame processing,
* as {@link ImageFormat} constants.
*
* @see CameraView#setFrameProcessingFormat(int)
* @return a collection of supported values.
*/
@NonNull
public final Collection<Integer> getSupportedFrameProcessingFormats() {
return Collections.unmodifiableSet(supportedFrameProcessingFormats);
}
/**
* Whether zoom is supported. If this is false, pinch-to-zoom
* will not work and {@link CameraView#setZoom(float)} will have no effect.

@ -1,5 +1,6 @@
package com.otaliastudios.cameraview.engine.options;
import android.graphics.ImageFormat;
import android.hardware.Camera;
import android.media.CamcorderProfile;
@ -128,5 +129,8 @@ public class Camera1Options extends CameraOptions {
// Picture formats
supportedPictureFormats.add(PictureFormat.JPEG);
// Frame processing formats
supportedFrameProcessingFormats.add(ImageFormat.NV21);
}
}

@ -174,5 +174,15 @@ public class Camera2Options extends CameraOptions {
}
}
}
// Frame processing formats
supportedFrameProcessingFormats.add(ImageFormat.YUV_420_888);
int[] outputFormats = streamMap.getOutputFormats();
for (int outputFormat : outputFormats) {
// Ensure it is a raw format
if (ImageFormat.getBitsPerPixel(outputFormat) > 0) {
supportedFrameProcessingFormats.add(outputFormat);
}
}
}
}

@ -115,6 +115,7 @@ cameraView.setFrameProcessingFormat(ImageFormat.YUV_422_888);
```
With the Camera1 engine, the incoming format will always be `ImageFormat.NV21`.
You can check which formats are available for use through `CameraOptions.getSupportedFrameProcessingFormats()`.
### XML Attributes

Loading…
Cancel
Save