diff options
Diffstat (limited to 'media/mca/filterfw/java/android/filterfw/core/FilterPort.java')
-rw-r--r-- | media/mca/filterfw/java/android/filterfw/core/FilterPort.java | 134 |
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! "); + } + } +} + |