| /* |
| * Copyright (C) 2011 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. |
| */ |
| |
| |
| package android.filterfw.core; |
| |
| /** |
| * @hide |
| */ |
| public abstract class GraphRunner { |
| |
| protected FilterContext mFilterContext = null; |
| |
| /** Interface for listeners waiting for the runner to complete. */ |
| public interface OnRunnerDoneListener { |
| /** Callback method to be called when the runner completes a |
| * {@link #run()} call. |
| * |
| * @param result will be RESULT_FINISHED if the graph finished running |
| * on its own, RESULT_STOPPED if the runner was stopped by a call |
| * to stop(), RESULT_BLOCKED if no filters could run due to lack |
| * of inputs or outputs or due to scheduling policies, and |
| * RESULT_SLEEPING if a filter node requested sleep. |
| */ |
| public void onRunnerDone(int result); |
| } |
| |
| public static final int RESULT_UNKNOWN = 0; |
| public static final int RESULT_RUNNING = 1; |
| public static final int RESULT_FINISHED = 2; |
| public static final int RESULT_SLEEPING = 3; |
| public static final int RESULT_BLOCKED = 4; |
| public static final int RESULT_STOPPED = 5; |
| public static final int RESULT_ERROR = 6; |
| |
| public GraphRunner(FilterContext context) { |
| mFilterContext = context; |
| } |
| |
| public abstract FilterGraph getGraph(); |
| |
| public FilterContext getContext() { |
| return mFilterContext; |
| } |
| |
| /** |
| * Helper function for subclasses to activate the GL environment before running. |
| * @return true, if the GL environment was activated. Returns false, if the GL environment |
| * was already active. |
| */ |
| protected boolean activateGlContext() { |
| GLEnvironment glEnv = mFilterContext.getGLEnvironment(); |
| if (glEnv != null && !glEnv.isActive()) { |
| glEnv.activate(); |
| return true; |
| } |
| return false; |
| } |
| |
| /** |
| * Helper function for subclasses to deactivate the GL environment after running. |
| */ |
| protected void deactivateGlContext() { |
| GLEnvironment glEnv = mFilterContext.getGLEnvironment(); |
| if (glEnv != null) { |
| glEnv.deactivate(); |
| } |
| } |
| |
| /** Starts running the graph. Will open the filters in the graph if they are not already open. */ |
| public abstract void run(); |
| |
| public abstract void setDoneCallback(OnRunnerDoneListener listener); |
| public abstract boolean isRunning(); |
| |
| /** Stops graph execution. As part of stopping, also closes the graph nodes. */ |
| public abstract void stop(); |
| |
| /** Closes the filters in a graph. Can only be called if the graph is not running. */ |
| public abstract void close(); |
| |
| /** |
| * Returns the last exception that happened during an asynchronous run. Returns null if |
| * there is nothing to report. |
| */ |
| public abstract Exception getError(); |
| } |