blob: b57e8bb7262eb6abbf0e7c371f5de13aec17c0bd [file] [log] [blame]
/*
* 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;
import android.compat.annotation.UnsupportedAppUsage;
/**
* @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;
}
@UnsupportedAppUsage
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. */
@UnsupportedAppUsage
public abstract void run();
@UnsupportedAppUsage
public abstract void setDoneCallback(OnRunnerDoneListener listener);
public abstract boolean isRunning();
/** Stops graph execution. As part of stopping, also closes the graph nodes. */
@UnsupportedAppUsage
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.
*/
@UnsupportedAppUsage
public abstract Exception getError();
}