| /* |
| * 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! "); |
| } |
| } |
| } |
| |