OSDN Git Service

Graph and NativeProgram tearDown.
[android-x86/system-media.git] / mca / filterfw / java / android / filterfw / core / Filter.java
index 4e14d38..0d872da 100644 (file)
@@ -48,6 +48,7 @@ public abstract class Filter {
     static final int STATUS_SLEEPING              = 4;
     static final int STATUS_FINISHED              = 5;
     static final int STATUS_ERROR                 = 6;
+    static final int STATUS_RELEASED              = 7;
 
     private String mName;
 
@@ -521,6 +522,9 @@ public abstract class Filter {
     }
 
     final synchronized void performProcess(FilterContext context) {
+        if (mStatus == STATUS_RELEASED) {
+            throw new RuntimeException("Filter " + this + " is already torn down!");
+        }
         transferInputFrames(context);
         if (mStatus < STATUS_PROCESSING) {
             performOpen(context);
@@ -543,6 +547,14 @@ public abstract class Filter {
         }
     }
 
+    final synchronized void performTearDown(FilterContext context) {
+        performClose(context);
+        if (mStatus != STATUS_RELEASED) {
+            tearDown(context);
+            mStatus = STATUS_RELEASED;
+        }
+    }
+
     synchronized final boolean canProcess() {
         if (mLogVerbose) Log.v(TAG, "Checking if can process: " + this + " (" + mStatus + ").");
         if (mStatus <= STATUS_PROCESSING) {