summaryrefslogtreecommitdiff
path: root/ref/CameraActivity.java
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2013-09-11 17:19:56 +0100
committerTim Redfern <tim@eclectronics.org>2013-09-11 17:19:56 +0100
commit36becd93babaf5968988e3beb655dcbc745aa981 (patch)
tree0413ef8297cab75a961501d37ee13216bfb9e798 /ref/CameraActivity.java
parentdbfb1ee34c1e6e244f656205d68a1e5527214ef1 (diff)
fixing layout
Diffstat (limited to 'ref/CameraActivity.java')
-rw-r--r--ref/CameraActivity.java282
1 files changed, 282 insertions, 0 deletions
diff --git a/ref/CameraActivity.java b/ref/CameraActivity.java
new file mode 100644
index 0000000..3f15b08
--- /dev/null
+++ b/ref/CameraActivity.java
@@ -0,0 +1,282 @@
+package com.example.rotorm;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.sql.Date;
+import java.text.SimpleDateFormat;
+
+import android.app.Activity;
+import android.content.Context;
+import android.hardware.Camera;
+import android.hardware.Camera.AutoFocusCallback;
+import android.hardware.Camera.PictureCallback;
+import android.hardware.Camera.ShutterCallback;
+import android.media.CamcorderProfile;
+import android.media.MediaRecorder;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Environment;
+import android.util.Log;
+import android.view.SurfaceView;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnLongClickListener;
+import android.view.ViewGroup.LayoutParams;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.Button;
+import android.widget.FrameLayout;
+
+
+//why is it so hard to put an eclipse project into git
+//http://developer.android.com/guide/topics/media/camera.html
+
+public class CameraActivity extends Activity {
+ public static final String TAG = "rotorM";
+ public static final int MEDIA_TYPE_IMAGE = 1;
+ public static final int MEDIA_TYPE_VIDEO = 2;
+ Preview preview;
+ Button buttonClick;
+ Camera camera;
+ String fileName;
+ Activity act;
+ Context ctx;
+ boolean isRecording;
+ MediaRecorder mMediaRecorder;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ ctx = this;
+ act = this;
+ requestWindowFeature(Window.FEATURE_NO_TITLE);
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
+
+ setContentView(R.layout.main);
+
+ preview = new Preview(this, (SurfaceView)findViewById(R.id.surfaceView));
+ preview.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
+ ((FrameLayout) findViewById(R.id.preview)).addView(preview);
+ preview.setKeepScreenOn(true);
+
+ buttonClick = (Button) findViewById(R.id.buttonClick);
+
+ buttonClick.setOnClickListener(new OnClickListener() {
+ public void onClick(View v) {
+ // preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback);
+ //camera.takePicture(shutterCallback, rawCallback, jpegCallback);
+ if (isRecording) {
+ // stop recording and release camera
+ mMediaRecorder.stop(); // stop the recording
+ releaseMediaRecorder(); // release the MediaRecorder object
+ camera.lock(); // take camera access back from MediaRecorder
+
+ // inform the user that recording has stopped
+ //setCaptureButtonText("Capture");
+ isRecording = false;
+ } else {
+ // initialize video camera
+ if (prepareVideoRecorder()) {
+ // Camera is available and unlocked, MediaRecorder is prepared,
+ // now you can start recording
+ mMediaRecorder.start();
+
+ // inform the user that recording has started
+ //setCaptureButtonText("Stop");
+ isRecording = true;
+ } else {
+ // prepare didn't work, release the camera
+ releaseMediaRecorder();
+ // inform user
+ }
+ }
+ }
+ });
+
+ buttonClick.setOnLongClickListener(new OnLongClickListener(){
+ @Override
+ public boolean onLongClick(View arg0) {
+ camera.autoFocus(new AutoFocusCallback(){
+ @Override
+ public void onAutoFocus(boolean arg0, Camera arg1) {
+ //camera.takePicture(shutterCallback, rawCallback, jpegCallback);
+ }
+ });
+ return true;
+ }
+ });
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ // preview.camera = Camera.open();
+ camera = Camera.open();
+ camera.startPreview();
+ preview.setCamera(camera);
+ }
+/*
+ @Override
+ protected void onPause() {
+ if(camera != null) {
+ camera.stopPreview();
+ preview.setCamera(null);
+ camera.release();
+ camera = null;
+ }
+ super.onPause();
+ }
+ */
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ releaseMediaRecorder(); // if you are using MediaRecorder, release it first
+ releaseCamera(); // release the camera immediately on pause event
+ }
+
+ private void releaseMediaRecorder(){
+ if (mMediaRecorder != null) {
+ mMediaRecorder.reset(); // clear recorder configuration
+ mMediaRecorder.release(); // release the recorder object
+ mMediaRecorder = null;
+ camera.lock(); // lock camera for later use
+ }
+ }
+
+ private void releaseCamera(){
+ if (camera != null){
+ camera.release(); // release the camera for other applications
+ camera = null;
+ }
+ }
+
+ private void resetCam() {
+ camera.startPreview();
+ preview.setCamera(camera);
+ }
+/*
+ ShutterCallback shutterCallback = new ShutterCallback() {
+ public void onShutter() {
+ // Log.d(TAG, "onShutter'd");
+ }
+ };
+
+ PictureCallback rawCallback = new PictureCallback() {
+ public void onPictureTaken(byte[] data, Camera camera) {
+ // Log.d(TAG, "onPictureTaken - raw");
+ }
+ };
+
+ PictureCallback jpegCallback = new PictureCallback() {
+ public void onPictureTaken(byte[] data, Camera camera) {
+ FileOutputStream outStream = null;
+ try {
+ // Write to SD Card
+ fileName = String.format("/sdcard/camtest/%d.jpg", System.currentTimeMillis());
+ outStream = new FileOutputStream(fileName);
+ outStream.write(data);
+ outStream.close();
+ Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length);
+
+ resetCam();
+
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ }
+ Log.d(TAG, "onPictureTaken - jpeg");
+ }
+ };
+ */
+ private boolean prepareVideoRecorder(){
+
+ camera = getCameraInstance();
+ mMediaRecorder = new MediaRecorder();
+
+ // Step 1: Unlock and set camera to MediaRecorder
+ camera.unlock();
+ mMediaRecorder.setCamera(camera);
+
+ // Step 2: Set sources
+ mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
+ mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
+
+ // Step 3: Set a CamcorderProfile (requires API Level 8 or higher)
+ mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
+
+ // Step 4: Set output file
+ mMediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString());
+
+ // Step 5: Set the preview output
+ mMediaRecorder.setPreviewDisplay(preview.mHolder.getSurface());
+
+ // Step 6: Prepare configured MediaRecorder
+ try {
+ mMediaRecorder.prepare();
+ } catch (IllegalStateException e) {
+ Log.d(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage());
+ releaseMediaRecorder();
+ return false;
+ } catch (IOException e) {
+ Log.d(TAG, "IOException preparing MediaRecorder: " + e.getMessage());
+ releaseMediaRecorder();
+ return false;
+ }
+ return true;
+ }
+ /** Create a file Uri for saving an image or video */
+ private static Uri getOutputMediaFileUri(int type){
+ return Uri.fromFile(getOutputMediaFile(type));
+ }
+
+ /** Create a File for saving an image or video */
+ private static File getOutputMediaFile(int type){
+ // To be safe, you should check that the SDCard is mounted
+ // using Environment.getExternalStorageState() before doing this.
+
+ File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
+ Environment.DIRECTORY_PICTURES), "MyCameraApp");
+ // This location works best if you want the created images to be shared
+ // between applications and persist after your app has been uninstalled.
+
+ // Create the storage directory if it does not exist
+ if (! mediaStorageDir.exists()){
+ if (! mediaStorageDir.mkdirs()){
+ Log.d("MyCameraApp", "failed to create directory");
+ return null;
+ }
+ }
+
+ // Create a media file name
+ String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date(type));
+ File mediaFile;
+ if (type == MEDIA_TYPE_IMAGE){
+ mediaFile = new File(mediaStorageDir.getPath() + File.separator +
+ "IMG_"+ timeStamp + ".jpg");
+ } else if(type == MEDIA_TYPE_VIDEO) {
+ mediaFile = new File(mediaStorageDir.getPath() + File.separator +
+ "VID_"+ timeStamp + ".mp4");
+ } else {
+ return null;
+ }
+
+ return mediaFile;
+ }
+
+ private Camera getCameraInstance(){
+ Camera c = null;
+ try {
+ c = Camera.open(); // attempt to get a Camera instance
+ //c = this.open(); // attempt to get a Camera instance
+ }
+ catch (Exception e){
+ // Camera is not available (in use or does not exist)
+ }
+ return c; // returns null if camera is unavailable
+ }
+}