summaryrefslogtreecommitdiffstats
path: root/media/mca/filterfw/java/android/filterfw/core/FilterPort.java
diff options
context:
space:
mode:
Diffstat (limited to 'media/mca/filterfw/java/android/filterfw/core/FilterPort.java')
-rw-r--r--media/mca/filterfw/java/android/filterfw/core/FilterPort.java134
1 files changed, 134 insertions, 0 deletions
diff --git a/media/mca/filterfw/java/android/filterfw/core/FilterPort.java b/media/mca/filterfw/java/android/filterfw/core/FilterPort.java
new file mode 100644
index 0000000..9734b89
--- /dev/null
+++ b/media/mca/filterfw/java/android/filterfw/core/FilterPort.java
@@ -0,0 +1,134 @@
+/*
+ * 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.filterfw.core.Filter;
+import android.filterfw.core.FrameFormat;
+import android.util.Log;
+
+/**
+ * @hide
+ */
+public abstract class FilterPort {
+
+ protected Filter mFilter;
+ protected String mName;
+ protected FrameFormat mPortFormat;
+ protected boolean mIsBlocking = true;
+ protected boolean mIsOpen = false;
+ protected boolean mChecksType = false;
+ private boolean mLogVerbose;
+ private static final String TAG = "FilterPort";
+
+ public FilterPort(Filter filter, String name) {
+ mName = name;
+ mFilter = filter;
+ mLogVerbose = Log.isLoggable(TAG, Log.VERBOSE);
+ }
+
+ public boolean isAttached() {
+ return mFilter != null;
+ }
+
+ public FrameFormat getPortFormat() {
+ return mPortFormat;
+ }
+
+ public void setPortFormat(FrameFormat format) {
+ mPortFormat = format;
+ }
+
+ public Filter getFilter() {
+ return mFilter;
+ }
+
+ public String getName() {
+ return mName;
+ }
+
+ public void setBlocking(boolean blocking) {
+ mIsBlocking = blocking;
+ }
+
+ public void setChecksType(boolean checksType) {
+ mChecksType = checksType;
+ }
+
+ public void open() {
+ if (!mIsOpen) {
+ if (mLogVerbose) Log.v(TAG, "Opening " + this);
+ }
+ mIsOpen = true;
+ }
+
+ public void close() {
+ if (mIsOpen) {
+ if (mLogVerbose) Log.v(TAG, "Closing " + this);
+ }
+ mIsOpen = false;
+ }
+
+ public boolean isOpen() {
+ return mIsOpen;
+ }
+
+ public boolean isBlocking() {
+ return mIsBlocking;
+ }
+
+ public abstract boolean filterMustClose();
+
+ public abstract boolean isReady();
+
+ public abstract void pushFrame(Frame frame);
+
+ public abstract void setFrame(Frame frame);
+
+ public abstract Frame pullFrame();
+
+ public abstract boolean hasFrame();
+
+ public abstract void clear();
+
+ public String toString() {
+ return "port '" + mName + "' of " + mFilter;
+ }
+
+ protected void assertPortIsOpen() {
+ if (!isOpen()) {
+ throw new RuntimeException("Illegal operation on closed " + this + "!");
+ }
+ }
+
+ protected void checkFrameType(Frame frame, boolean forceCheck) {
+ if ((mChecksType || forceCheck)
+ && mPortFormat != null
+ && !frame.getFormat().isCompatibleWith(mPortFormat)) {
+ throw new RuntimeException("Frame passed to " + this + " is of incorrect type! "
+ + "Expected " + mPortFormat + " but got " + frame.getFormat());
+ }
+ }
+
+ protected void checkFrameManager(Frame frame, FilterContext context) {
+ if (frame.getFrameManager() != null
+ && frame.getFrameManager() != context.getFrameManager()) {
+ throw new RuntimeException("Frame " + frame + " is managed by foreign FrameManager! ");
+ }
+ }
+}
+