1227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks/* 2227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks * Copyright (C) 2013 The Android Open Source Project 3227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks * 4227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks * Licensed under the Apache License, Version 2.0 (the "License"); 5227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks * you may not use this file except in compliance with the License. 6227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks * You may obtain a copy of the License at 7227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks * 8227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks * http://www.apache.org/licenses/LICENSE-2.0 9227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks * 10227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks * Unless required by applicable law or agreed to in writing, software 11227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks * distributed under the License is distributed on an "AS IS" BASIS, 12227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks * See the License for the specific language governing permissions and 14227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks * limitations under the License. 15227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks */ 16227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 17227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendrickspackage androidx.media.filterfw.samples.simplecamera; 18227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 19227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.app.Activity; 20227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.content.Intent; 21227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.graphics.Bitmap; 22227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.graphics.drawable.BitmapDrawable; 23227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.graphics.drawable.Drawable; 24227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.os.Bundle; 25227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.os.Handler; 26227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.provider.MediaStore; 27227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.util.Log; 28227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.view.LayoutInflater; 29227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.view.SurfaceView; 30227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.view.View; 31227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.view.View.OnClickListener; 32227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.widget.AdapterView; 33227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.widget.Button; 34227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.widget.ImageView; 35227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.widget.LinearLayout; 36227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.widget.Spinner; 37227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport android.widget.TextView; 38227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport androidx.media.filterfw.FilterGraph; 39227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport androidx.media.filterfw.GraphReader; 40227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport androidx.media.filterfw.GraphRunner; 41227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport androidx.media.filterfw.MffContext; 42227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 43227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport java.io.IOException; 44227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport java.text.SimpleDateFormat; 45227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport java.util.ArrayList; 46227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport java.util.Calendar; 47227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 48227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 49227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendrickspublic class SmartCamera extends Activity { 50227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 51227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private SurfaceView mCameraView; 52227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private TextView mGoodBadTextView; 53227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private TextView mFPSTextView; 54227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private TextView mEyesTextView; 55227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private TextView mSmilesTextView; 56227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private TextView mScoreTextView; 57227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private static ImageView mImageView1; 58227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private static ImageView mImageView2; 59227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private static ImageView mImageView3; 60227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private static ImageView mImageView4; 61227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private static ImageView mImageView5; 62227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private Button mStartStopButton; 63227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private TextView mImagesSavedTextView; 64227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private Spinner mSpinner; 65227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private LinearLayout mLinearLayout; 66227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 67227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private MffContext mContext; 68227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private FilterGraph mGraph; 69227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private GraphRunner mRunner; 70227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private Handler mHandler = new Handler(); 71227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 72227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private static final String TAG = "SmartCamera"; 73227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private static final boolean sUseFacialExpression = false; 74227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private boolean isPendingRunGraph = false; 75227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 76227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private static ArrayList<ImageView> mImages; 77227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private static int count = -1; 78227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private static boolean countHasReachedMax = false; 79227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private static int numImages = 0; 80227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 81227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // Function to return the correct image view to display the current bitmap 82227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public static ImageView getImageView() { 83227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if (count == numImages-1) countHasReachedMax = true; 84227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks count = (count+1) % numImages; 85227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks return mImages.get(count); 86227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 87227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 88227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // Function used to run images through the graph, mainly for CSV data generation 89227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public void runGraphOnImage(String filePath, String fileName) { 90227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if(fileName.endsWith(".jpg") == false) { 91227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks return; 92227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 93227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mGraph.getVariable("gallerySource").setValue(filePath + "/" + fileName); 94227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks Log.v(TAG, "runGraphOnImage : : " + filePath + " name: " + fileName); 95227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mGraph.getVariable("imageName").setValue(fileName); 96227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mGraph.getVariable("filePath").setValue(filePath); // wrong 97227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks try { 98227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks Thread.sleep(400); 99227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } catch (InterruptedException e) { 100227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // TODO Auto-generated catch block 101227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks e.printStackTrace(); 102227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 103227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 104227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 105227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // Function to clear the "Images Saved" text off the screen 106227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private void clearImagesSavedTextView() { 107227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mImagesSavedTextView.setText(""); 108227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 109227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 110227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // Function to capture the images in the current imageviews and save them to the gallery 111227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private void captureImages() { 112227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks ((WaveTriggerFilter) mGraph.getFilter("snapEffect")).trigger(); 113227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mGraph.getVariable("startCapture").setValue(false); 114227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks Bitmap bitmap = null; 115227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks Drawable res = getResources().getDrawable(R.drawable.black_screen); 116227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks Calendar cal = Calendar.getInstance(); 117227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss"); 118227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 119227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks Log.v(TAG, "numImages: " + numImages + " count: " + count + 120227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks " hasReachedMax: " + countHasReachedMax); 121227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks int maxI = countHasReachedMax ? numImages : count+1; 122227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if(maxI != 0) { 123227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if (maxI == 1) mImagesSavedTextView.setText("Image Saved"); 124227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks else { 125227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mImagesSavedTextView.setText("" + maxI + " Images Saved"); 126227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 127227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 128227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks for (int i = 0; i < maxI; i++) { 129227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks bitmap = ((BitmapDrawable)mImages.get(i).getDrawable()).getBitmap(); 130227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mImages.get(i).setImageDrawable(res); 131227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, 132227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks sdf.format(cal.getTime()) + "_image" + i + ".jpg", "image " + i); 133227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 134227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mStartStopButton.setText("Start"); 135227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks count = -1; 136227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks countHasReachedMax = false; 137227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mSpinner.setEnabled(true); 138227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mHandler.postDelayed(new Runnable() { 139227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public void run() { 140227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks clearImagesSavedTextView(); 141227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 142227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks }, 5000); 143227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 144227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 145227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks @Override 146227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public void onCreate(Bundle savedInstanceState) { 147227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks super.onCreate(savedInstanceState); 148227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks setContentView(R.layout.simplecamera); 149227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks setTitle("Smart Camera"); 150227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 151227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mContext = new MffContext(this); 152227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 153227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mCameraView = (SurfaceView) findViewById(R.id.cameraView); 154227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mGoodBadTextView = (TextView) findViewById(R.id.goodOrBadTextView); 155227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mFPSTextView = (TextView) findViewById(R.id.fpsTextView); 156227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mScoreTextView = (TextView) findViewById(R.id.scoreTextView); 157227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mStartStopButton = (Button) findViewById(R.id.startButton); 158227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mImagesSavedTextView = (TextView) findViewById(R.id.imagesSavedTextView); 159227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mImagesSavedTextView.setText(""); 160227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mSpinner = (Spinner) findViewById(R.id.spinner); 161227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mLinearLayout = (LinearLayout) findViewById(R.id.scrollViewLinearLayout); 162227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mImages = new ArrayList<ImageView>(); 163227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 164227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // Spinner is used to determine how many image views are displayed at the bottom 165227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // of the screen. Based on the item position that is selected, we inflate that 166227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // many imageviews into the bottom linear layout. 167227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 168227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks @Override 169227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public void onItemSelected(AdapterView<?> parentView, View selectedItemView, 170227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks int position, long id) { 171227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mLinearLayout.removeViews(0,numImages); 172227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks numImages = position+1; 173227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mImages.clear(); 174227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks LayoutInflater inflater = getLayoutInflater(); 175227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks for (int i = 0; i < numImages; i++) { 176227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks ImageView tmp = (ImageView) inflater.inflate(R.layout.imageview, null); 177227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mImages.add(tmp); 178227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mLinearLayout.addView(tmp); 179227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 180227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 181227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 182227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks @Override 183227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public void onNothingSelected(AdapterView<?> parentView) { 184227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 185227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks }); 186227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 187227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks numImages = mSpinner.getSelectedItemPosition()+1; 188227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mImages.clear(); 189227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks LayoutInflater inflater = getLayoutInflater(); 190227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks for (int i = 0; i < numImages; i++) { 191227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks ImageView tmp = (ImageView) inflater.inflate(R.layout.imageview, null); 192227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mImages.add(tmp); 193227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mLinearLayout.addView(tmp); 194227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 195227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 196227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 197227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // Button used to start and stop the capture of images when they are deemed great 198227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mStartStopButton.setOnClickListener(new OnClickListener() { 199227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks @Override 200227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public void onClick(View v) { 201227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if (mStartStopButton.getText().equals("Start")) { 202227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mGraph.getVariable("startCapture").setValue(true); 203227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mStartStopButton.setText("Stop"); 204227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mSpinner.setEnabled(false); 205227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } else { 206227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks boolean tmp = (Boolean) mGraph.getVariable("startCapture").getValue(); 207227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if (tmp == false) { 208227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks return; 209227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 210227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if (count == numImages-1) countHasReachedMax = true; 211227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks captureImages(); 212227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 213227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 214227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks }); 215227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 216227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // Button to open the gallery to show the images in there 217227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks Button galleryOpen = (Button) findViewById(R.id.galleryOpenButton); 218227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks galleryOpen.setOnClickListener(new OnClickListener() { 219227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks @Override 220227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public void onClick(View v) { 221227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks Intent openGalleryIntent = new Intent(Intent.ACTION_MAIN); 222227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks openGalleryIntent.addCategory(Intent.CATEGORY_APP_GALLERY); 223227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks startActivity(openGalleryIntent); 224227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 225227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks }); 226227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 227227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks loadGraph(); 228227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mGraph.getVariable("startCapture").setValue(false); 229227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks runGraph(); 230227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 231227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 232227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks @Override 233227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public void onPause() { 234227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks super.onPause(); 235227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks Log.i(TAG, "onPause"); 236227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if (mContext != null) { 237227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mContext.onPause(); 238227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 239227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 240227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 241227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks @Override 242227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public void onResume() { 243227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks super.onResume(); 244227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks Log.i(TAG, "onResume"); 245227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if (mContext != null) { 246227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mContext.onResume(); 247227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 248227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if (isPendingRunGraph) { 249227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks isPendingRunGraph = false; 250227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks runGraph(); 251227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 252227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 253227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 254227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks @Override 255227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public void onStop() { 256227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks super.onStop(); 257227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks Log.i(TAG, "onStop"); 258227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 259227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 260227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // Build the Filtergraph for Camera 261227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private void loadGraph() { 262227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks try { 263227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mGraph = GraphReader.readXmlGraphResource(mContext, R.raw.camera_graph); 264227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mRunner = mGraph.getRunner(); 265227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 266227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // Connect views 267227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mGraph.bindFilterToView("camViewTarget", mCameraView); 268227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mGraph.bindFilterToView("goodOrBadTextView", mGoodBadTextView); 269227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mGraph.bindFilterToView("fpsTextView", mFPSTextView); 270227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mGraph.bindFilterToView("scoreTextView", mScoreTextView); 271227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 272227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // Used for Facial Expressions 273227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if (sUseFacialExpression) { 274227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mGraph.bindFilterToView("eyesTextView", mEyesTextView); 275227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mGraph.bindFilterToView("smilesTextView", mSmilesTextView); 276227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 277227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 278227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } catch (IOException e) { 279227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks e.printStackTrace(); 280227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 281227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 282227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 283227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // Asynchronously run the filtergraph 284227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private void runGraph() { 285227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mRunner.setIsVerbose(true); 286227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mRunner.start(mGraph); 287227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 288227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks} 289