1227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks/* 2227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks * Copyright 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.util.Log; 20227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 21227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport java.io.BufferedWriter; 22227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport java.io.FileWriter; 23227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport java.io.IOException; 24227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 25227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport androidx.media.filterfw.Filter; 26227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport androidx.media.filterfw.FrameBuffer2D; 27227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport androidx.media.filterfw.FrameImage2D; 28227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport androidx.media.filterfw.FrameType; 29227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport androidx.media.filterfw.FrameValue; 30227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport androidx.media.filterfw.MffContext; 31227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport androidx.media.filterfw.OutputPort; 32227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport androidx.media.filterfw.Signature; 33227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 34227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 35227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendrickspublic class CSVWriterFilter extends Filter { 36227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 37227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private static final String TAG = "CSVWriterFilter"; 38227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private static boolean mLogVerbose = Log.isLoggable(TAG, Log.VERBOSE); 39227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private boolean mFirstTime = true; 40227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private final static int NUM_FRAMES = 3; 41227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private final String mFileName = "/CSVFile.csv"; 42227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 43227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public CSVWriterFilter(MffContext context, String name) { 44227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 45227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks super(context, name); 46227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 47227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 48227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks @Override 49227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public Signature getSignature() { 50227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks FrameType floatT = FrameType.single(float.class); 51227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks FrameType stringT = FrameType.single(String.class); 52227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks FrameType floatArrayT = FrameType.array(float.class); 53227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 54227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks return new Signature() 55227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks .addInputPort("sharpness", Signature.PORT_REQUIRED, floatT) 56227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks .addInputPort("overExposure", Signature.PORT_REQUIRED, floatT) 57227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks .addInputPort("underExposure", Signature.PORT_REQUIRED, floatT) 58227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks .addInputPort("colorfulness", Signature.PORT_REQUIRED, floatT) 59227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks .addInputPort("contrastRating", Signature.PORT_REQUIRED, floatT) 60227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks .addInputPort("brightness", Signature.PORT_REQUIRED, floatT) 61227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks .addInputPort("motionValues", Signature.PORT_REQUIRED, floatArrayT) 62227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks .addInputPort("imageFileName", Signature.PORT_REQUIRED, stringT) 63227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks .addInputPort("csvFilePath", Signature.PORT_REQUIRED, stringT) 64227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks .disallowOtherPorts(); 65227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 66227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 67227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks @Override 68227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks protected void onProcess() { 69227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 70227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 71227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 72227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks Log.v(TAG,"in csv writer on process"); 73227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks FrameValue sharpnessValue = 74227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks getConnectedInputPort("sharpness").pullFrame().asFrameValue(); 75227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks float sharpness = ((Float)sharpnessValue.getValue()).floatValue(); 76227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 77227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks FrameValue overExposureValue = 78227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks getConnectedInputPort("overExposure").pullFrame().asFrameValue(); 79227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks float overExposure = ((Float)overExposureValue.getValue()).floatValue(); 80227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 81227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks FrameValue underExposureValue = 82227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks getConnectedInputPort("underExposure").pullFrame().asFrameValue(); 83227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks float underExposure = ((Float)underExposureValue.getValue()).floatValue(); 84227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 85227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks FrameValue colorfulnessValue = 86227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks getConnectedInputPort("colorfulness").pullFrame().asFrameValue(); 87227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks float colorfulness = ((Float)colorfulnessValue.getValue()).floatValue(); 88227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 89227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks FrameValue contrastValue = 90227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks getConnectedInputPort("contrastRating").pullFrame().asFrameValue(); 91227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks float contrast = ((Float)contrastValue.getValue()).floatValue(); 92227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 93227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks FrameValue brightnessValue = 94227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks getConnectedInputPort("brightness").pullFrame().asFrameValue(); 95227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks float brightness = ((Float)brightnessValue.getValue()).floatValue(); 96227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 97227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks FrameValue motionValuesFrameValue = 98227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks getConnectedInputPort("motionValues").pullFrame().asFrameValue(); 99227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks float[] motionValues = (float[]) motionValuesFrameValue.getValue(); 100227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks float vectorAccel = (float) Math.sqrt(Math.pow(motionValues[0], 2) + 101227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks Math.pow(motionValues[1], 2) + Math.pow(motionValues[2], 2)); 102227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 103227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks FrameValue imageFileNameFrameValue = 104227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks getConnectedInputPort("imageFileName").pullFrame().asFrameValue(); 105227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks String imageFileName = ((String)imageFileNameFrameValue.getValue()); 106227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 107227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks FrameValue csvFilePathFrameValue = 108227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks getConnectedInputPort("csvFilePath").pullFrame().asFrameValue(); 109227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks String csvFilePath = ((String)csvFilePathFrameValue.getValue()); 110227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 111227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 112227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if(mFirstTime) { 113227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks try { 114227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks FileWriter fileWriter = new FileWriter(csvFilePath + "/CSVFile.csv"); 115227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks BufferedWriter csvWriter = new BufferedWriter(fileWriter); 116227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 117227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks csvWriter.write("FileName,Sharpness,OverExposure,UnderExposure,Colorfulness," + 118227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks "ContrastRating,Brightness,Motion"); 119227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks csvWriter.newLine(); 120227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks csvWriter.close(); 121227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } catch (IOException e) { 122227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // TODO Auto-generated catch block 123227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks e.printStackTrace(); 124227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 125227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mFirstTime = false; 126227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 127227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 128227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks try { 129227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks Log.v(TAG,"about to write to file"); 130227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks FileWriter fileWriter = new FileWriter(csvFilePath + mFileName, true); 131227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks BufferedWriter csvWriter = new BufferedWriter(fileWriter); 132227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 133227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks csvWriter.write(imageFileName + "," + sharpness + "," + overExposure + "," + 134227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks underExposure + "," + colorfulness + "," + contrast + "," + brightness + 135227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks "," + vectorAccel); 136227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks Log.v(TAG, "" + imageFileName + "," + sharpness + "," + overExposure + "," + 137227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks underExposure + "," + colorfulness + "," + contrast + "," + brightness + 138227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks "," + vectorAccel); 139227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks csvWriter.newLine(); 140227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks csvWriter.close(); 141227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } catch (IOException e) { 142227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // TODO Auto-generated catch block 143227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks e.printStackTrace(); 144227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks throw new RuntimeException(e); 145227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 146227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 147227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks} 148