pull/1/head
Mattia Iavarone 7 years ago
parent 9c912e925b
commit 4e338039c2
  1. 14
      camerakit/src/main/base/com/flurgle/camerakit/ExtraProperties.java
  2. 68
      camerakit/src/main/base/com/flurgle/camerakit/SurfaceViewPreview.java
  3. 10
      camerakit/src/main/res/layout/surface_view.xml
  4. 14
      camerakit/src/main/types/com/flurgle/camerakit/SessionType.java
  5. 18
      camerakit/src/main/types/com/flurgle/camerakit/WhiteBalance.java
  6. 14
      camerakit/src/main/types/com/flurgle/camerakit/ZoomMode.java
  7. 43
      camerakit/src/main/utils/com/flurgle/camerakit/RotationHelper.java

@ -0,0 +1,14 @@
package com.flurgle.camerakit;
/**
* Simple pojo containing various camera properties.
*/
public class ExtraProperties {
public final float verticalViewingAngle;
public final float horizontalViewingAngle;
public ExtraProperties(float verticalViewingAngle, float horizontalViewingAngle) {
this.verticalViewingAngle = verticalViewingAngle;
this.horizontalViewingAngle = horizontalViewingAngle;
}
}

@ -0,0 +1,68 @@
package com.flurgle.camerakit;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.SurfaceTexture;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.TextureView;
import android.view.View;
import android.view.ViewGroup;
// This is not used.
class SurfaceViewPreview extends PreviewImpl {
private final SurfaceView mSurfaceView;
SurfaceViewPreview(Context context, ViewGroup parent) {
final View view = View.inflate(context, R.layout.surface_view, parent); // MATCH_PARENT
mSurfaceView = (SurfaceView) view.findViewById(R.id.surface_view);
final SurfaceHolder holder = mSurfaceView.getHolder();
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
setSurfaceSize(mSurfaceView.getWidth(), mSurfaceView.getHeight());
dispatchSurfaceChanged();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
setSurfaceSize(width, height);
dispatchSurfaceChanged();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
setSurfaceSize(0, 0);
}
});
}
@Override
Surface getSurface() {
return getSurfaceHolder().getSurface();
}
@Override
View getView() {
return mSurfaceView;
}
@Override
SurfaceHolder getSurfaceHolder() {
return mSurfaceView.getHolder();
}
@Override
Class getOutputClass() {
return SurfaceHolder.class;
}
@Override
boolean isReady() {
return mSurfaceView.getWidth() != 0 && mSurfaceView.getHeight() != 0;
}
}

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<SurfaceView
android:id="@+id/surface_view"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</merge>

@ -0,0 +1,14 @@
package com.flurgle.camerakit;
import android.support.annotation.IntDef;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import static com.flurgle.camerakit.CameraKit.Constants.SESSION_TYPE_PICTURE;
import static com.flurgle.camerakit.CameraKit.Constants.SESSION_TYPE_VIDEO;
@Retention(RetentionPolicy.SOURCE)
@IntDef({SESSION_TYPE_PICTURE, SESSION_TYPE_VIDEO})
public @interface SessionType {
}

@ -0,0 +1,18 @@
package com.flurgle.camerakit;
import android.support.annotation.IntDef;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import static com.flurgle.camerakit.CameraKit.Constants.WHITE_BALANCE_AUTO;
import static com.flurgle.camerakit.CameraKit.Constants.WHITE_BALANCE_INCANDESCENT;
import static com.flurgle.camerakit.CameraKit.Constants.WHITE_BALANCE_FLUORESCENT;
import static com.flurgle.camerakit.CameraKit.Constants.WHITE_BALANCE_DAYLIGHT;
import static com.flurgle.camerakit.CameraKit.Constants.WHITE_BALANCE_CLOUDY;
@Retention(RetentionPolicy.SOURCE)
@IntDef({WHITE_BALANCE_AUTO, WHITE_BALANCE_INCANDESCENT, WHITE_BALANCE_FLUORESCENT,
WHITE_BALANCE_DAYLIGHT, WHITE_BALANCE_CLOUDY})
public @interface WhiteBalance {
}

@ -0,0 +1,14 @@
package com.flurgle.camerakit;
import android.support.annotation.IntDef;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import static com.flurgle.camerakit.CameraKit.Constants.ZOOM_OFF;
import static com.flurgle.camerakit.CameraKit.Constants.ZOOM_PINCH;
@Retention(RetentionPolicy.SOURCE)
@IntDef({ZOOM_OFF, ZOOM_PINCH})
public @interface ZoomMode {
}

@ -0,0 +1,43 @@
package com.flurgle.camerakit;
class RotationHelper {
static byte[] rotate(final byte[] yuv, final int width, final int height, final int rotation) {
if (rotation == 0) return yuv;
if (rotation % 90 != 0 || rotation < 0 || rotation > 270) {
throw new IllegalArgumentException("0 <= rotation < 360, rotation % 90 == 0");
}
final byte[] output = new byte[yuv.length];
final int frameSize = width * height;
final boolean swap = rotation % 180 != 0;
final boolean xflip = rotation % 270 != 0;
final boolean yflip = rotation >= 180;
for (int j = 0; j < height; j++) {
for (int i = 0; i < width; i++) {
final int yIn = j * width + i;
final int uIn = frameSize + (j >> 1) * width + (i & ~1);
final int vIn = uIn + 1;
final int wOut = swap ? height : width;
final int hOut = swap ? width : height;
final int iSwapped = swap ? j : i;
final int jSwapped = swap ? i : j;
final int iOut = xflip ? wOut - iSwapped - 1 : iSwapped;
final int jOut = yflip ? hOut - jSwapped - 1 : jSwapped;
final int yOut = jOut * wOut + iOut;
final int uOut = frameSize + (jOut >> 1) * wOut + (iOut & ~1);
final int vOut = uOut + 1;
output[yOut] = (byte) (0xff & yuv[yIn]);
output[uOut] = (byte) (0xff & yuv[uIn]);
output[vOut] = (byte) (0xff & yuv[vIn]);
}
}
return output;
}
}
Loading…
Cancel
Save