diff options
Diffstat (limited to 'tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/samples/simplecamera/AverageFilter.java')
-rw-r--r-- | tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/samples/simplecamera/AverageFilter.java | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/samples/simplecamera/AverageFilter.java b/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/samples/simplecamera/AverageFilter.java new file mode 100644 index 0000000..d873e0a --- /dev/null +++ b/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/samples/simplecamera/AverageFilter.java @@ -0,0 +1,72 @@ +/* + * 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); + } +} |