1 /* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 18 package android.filterfw.core; 19 20 import android.filterfw.core.Filter; 21 import android.filterfw.core.FrameFormat; 22 import android.util.Log; 23 24 /** 25 * @hide 26 */ 27 public abstract class FilterPort { 28 29 protected Filter mFilter; 30 protected String mName; 31 protected FrameFormat mPortFormat; 32 protected boolean mIsBlocking = true; 33 protected boolean mIsOpen = false; 34 protected boolean mChecksType = false; 35 private boolean mLogVerbose; 36 private static final String TAG = "FilterPort"; 37 FilterPort(Filter filter, String name)38 public FilterPort(Filter filter, String name) { 39 mName = name; 40 mFilter = filter; 41 mLogVerbose = Log.isLoggable(TAG, Log.VERBOSE); 42 } 43 isAttached()44 public boolean isAttached() { 45 return mFilter != null; 46 } 47 getPortFormat()48 public FrameFormat getPortFormat() { 49 return mPortFormat; 50 } 51 setPortFormat(FrameFormat format)52 public void setPortFormat(FrameFormat format) { 53 mPortFormat = format; 54 } 55 getFilter()56 public Filter getFilter() { 57 return mFilter; 58 } 59 getName()60 public String getName() { 61 return mName; 62 } 63 setBlocking(boolean blocking)64 public void setBlocking(boolean blocking) { 65 mIsBlocking = blocking; 66 } 67 setChecksType(boolean checksType)68 public void setChecksType(boolean checksType) { 69 mChecksType = checksType; 70 } 71 open()72 public void open() { 73 if (!mIsOpen) { 74 if (mLogVerbose) Log.v(TAG, "Opening " + this); 75 } 76 mIsOpen = true; 77 } 78 close()79 public void close() { 80 if (mIsOpen) { 81 if (mLogVerbose) Log.v(TAG, "Closing " + this); 82 } 83 mIsOpen = false; 84 } 85 isOpen()86 public boolean isOpen() { 87 return mIsOpen; 88 } 89 isBlocking()90 public boolean isBlocking() { 91 return mIsBlocking; 92 } 93 filterMustClose()94 public abstract boolean filterMustClose(); 95 isReady()96 public abstract boolean isReady(); 97 pushFrame(Frame frame)98 public abstract void pushFrame(Frame frame); 99 setFrame(Frame frame)100 public abstract void setFrame(Frame frame); 101 pullFrame()102 public abstract Frame pullFrame(); 103 hasFrame()104 public abstract boolean hasFrame(); 105 clear()106 public abstract void clear(); 107 toString()108 public String toString() { 109 return "port '" + mName + "' of " + mFilter; 110 } 111 assertPortIsOpen()112 protected void assertPortIsOpen() { 113 if (!isOpen()) { 114 throw new RuntimeException("Illegal operation on closed " + this + "!"); 115 } 116 } 117 checkFrameType(Frame frame, boolean forceCheck)118 protected void checkFrameType(Frame frame, boolean forceCheck) { 119 if ((mChecksType || forceCheck) 120 && mPortFormat != null 121 && !frame.getFormat().isCompatibleWith(mPortFormat)) { 122 throw new RuntimeException("Frame passed to " + this + " is of incorrect type! " 123 + "Expected " + mPortFormat + " but got " + frame.getFormat()); 124 } 125 } 126 checkFrameManager(Frame frame, FilterContext context)127 protected void checkFrameManager(Frame frame, FilterContext context) { 128 if (frame.getFrameManager() != null 129 && frame.getFrameManager() != context.getFrameManager()) { 130 throw new RuntimeException("Frame " + frame + " is managed by foreign FrameManager! "); 131 } 132 } 133 } 134 135