/* * Copyright 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ // Takes sharpness scores in RT and averages them over time package androidx.media.filterfw.samples.simplecamera; import android.util.Log; import androidx.media.filterfw.Filter; import androidx.media.filterfw.FrameType; import androidx.media.filterfw.FrameValue; import androidx.media.filterfw.MffContext; import androidx.media.filterfw.OutputPort; import androidx.media.filterfw.Signature; public class AverageFilter extends Filter { private static final String TAG = "AverageFilter"; private static boolean mLogVerbose = Log.isLoggable(TAG, Log.VERBOSE); private static final int NUM_FRAMES = 5; private int counter = 0; private float[] temp = new float[NUM_FRAMES]; /** * @param context * @param name */ public AverageFilter(MffContext context, String name) { super(context, name); } @Override public Signature getSignature() { FrameType floatT = FrameType.single(float.class); return new Signature() .addInputPort("sharpness", Signature.PORT_REQUIRED, floatT) .addOutputPort("avg", Signature.PORT_REQUIRED, floatT) .disallowOtherPorts(); } @Override protected void onProcess() { FrameValue inFrameValue = getConnectedInputPort("sharpness").pullFrame().asFrameValue(); if (counter < NUM_FRAMES && counter >= 0) { temp[counter] = ((Float)inFrameValue.getValue()).floatValue(); } counter = (counter + 1) % NUM_FRAMES; float output = (temp[0] + temp[1] + temp[2] + temp[3] + temp[4]) / NUM_FRAMES; if (mLogVerbose) Log.v(TAG, "Avg= " + output + "temp1= " + temp[0] + "temp2= " + temp[1] + "temp3= " + temp[2] + "temp4=" + temp[3] + "temp5=" + temp[4]); OutputPort outPort = getConnectedOutputPort("avg"); FrameValue outFrame = outPort.fetchAvailableFrame(null).asFrameValue(); outFrame.setValue(output); outPort.pushFrame(outFrame); } }