3dphotoshoot

annotate src/android/MainActivity.java @ 9:d1b456d08713

texture matrix and video size from JNI
author John Tsiombikas <nuclear@member.fsf.org>
date Mon, 25 May 2015 05:27:26 +0300
parents 9fc7d52f578d
children dccbd7d65517
rev   line source
nuclear@0 1 package com.mutantstargoat.photoshoot3d;
nuclear@0 2
nuclear@0 3 import android.app.NativeActivity;
nuclear@0 4 import android.util.Log;
nuclear@4 5 import static android.opengl.GLES20.*;
nuclear@4 6 import android.hardware.Camera;
nuclear@4 7 import android.hardware.Camera.CameraInfo;
nuclear@4 8 import android.graphics.SurfaceTexture;
nuclear@7 9
nuclear@3 10 /*
nuclear@3 11 import android.os.Bundle;
nuclear@3 12 import android.content.Context;
nuclear@3 13 import android.hardware.camera2.*;
nuclear@3 14 */
nuclear@0 15
nuclear@0 16 public class MainActivity extends NativeActivity {
nuclear@6 17 public static String tag = "photoshoot3d";
nuclear@8 18 public static boolean frame_pending;
nuclear@3 19
nuclear@4 20 public static void foo()
nuclear@0 21 {
nuclear@4 22 glClearColor(0.2f, 1.0f, 0.3f, 1.0f);
nuclear@0 23 }
nuclear@3 24
nuclear@3 25 // old camera api (fallback)
nuclear@4 26 private static Camera cam;
nuclear@9 27 private static Camera.Parameters params;
nuclear@9 28 private static int preview_width, preview_height;
nuclear@7 29 private static SurfaceTexture surftex;
nuclear@3 30
nuclear@4 31 public static int start_video(int texid)
nuclear@4 32 {
nuclear@4 33 int num_cams = Camera.getNumberOfCameras();
nuclear@4 34 Log.i(tag, "Found " + num_cams + " cameras");
nuclear@3 35
nuclear@8 36 if(num_cams < 1) {
nuclear@8 37 return -1;
nuclear@8 38 }
nuclear@8 39
nuclear@4 40 for(int i=0; i<num_cams; i++) {
nuclear@4 41 CameraInfo info = new CameraInfo();
nuclear@4 42 Camera.getCameraInfo(i, info);
nuclear@3 43
nuclear@4 44 String facing_str = info.facing == CameraInfo.CAMERA_FACING_FRONT ? "front" : "back";
nuclear@3 45
nuclear@4 46 Log.i(tag, "camera[" + i + "]: " + facing_str);
nuclear@3 47 }
nuclear@3 48
nuclear@7 49 surftex = new SurfaceTexture(texid);
nuclear@4 50 surftex.setOnFrameAvailableListener(new FrameHandler());
nuclear@4 51
nuclear@8 52 cam = Camera.open(0);
nuclear@8 53
nuclear@9 54 params = cam.getParameters();
nuclear@8 55 params.set("orientation", "landscape");
nuclear@8 56 cam.setParameters(params);
nuclear@8 57
nuclear@9 58 preview_width = params.getPreviewSize().width;
nuclear@9 59 preview_height = params.getPreviewSize().height;
nuclear@9 60
nuclear@4 61 try {
nuclear@4 62 cam.setPreviewTexture(surftex);
nuclear@4 63 }
nuclear@4 64 catch(java.io.IOException e) {
nuclear@4 65 Log.e(tag, "failed to set preview texture");
nuclear@4 66 cam = null;
nuclear@4 67 return -1;
nuclear@4 68 }
nuclear@4 69 cam.startPreview();
nuclear@4 70
nuclear@4 71 return 0;
nuclear@3 72 }
nuclear@3 73
nuclear@4 74 public static void stop_video()
nuclear@3 75 {
nuclear@4 76 cam.stopPreview();
nuclear@4 77 cam = null;
nuclear@9 78 params = null;
nuclear@7 79 surftex = null;
nuclear@7 80 }
nuclear@7 81
nuclear@9 82 public static synchronized void update(float [] matrix)
nuclear@7 83 {
nuclear@9 84 if(cam != null && surftex != null) {
nuclear@9 85 if(frame_pending) {
nuclear@9 86 surftex.updateTexImage();
nuclear@9 87 frame_pending = false;
nuclear@9 88 }
nuclear@9 89 surftex.getTransformMatrix(matrix);
nuclear@7 90 }
nuclear@3 91 }
nuclear@0 92 }
nuclear@3 93
nuclear@4 94 class FrameHandler implements SurfaceTexture.OnFrameAvailableListener {
nuclear@6 95 @Override
nuclear@6 96 public synchronized void onFrameAvailable(SurfaceTexture stex)
nuclear@3 97 {
nuclear@8 98 MainActivity.frame_pending = true;
nuclear@3 99 }
nuclear@3 100 }