| /* |
| * 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.Frame; |
| import android.filterfw.core.FrameFormat; |
| import android.filterfw.core.FrameManager; |
| import android.filterfw.core.GLFrame; |
| import android.filterfw.core.NativeFrame; |
| import android.filterfw.core.SimpleFrame; |
| import android.filterfw.core.VertexFrame; |
| |
| /** |
| * @hide |
| */ |
| public class SimpleFrameManager extends FrameManager { |
| |
| public SimpleFrameManager() { |
| } |
| |
| @Override |
| public Frame newFrame(FrameFormat format) { |
| return createNewFrame(format); |
| } |
| |
| @Override |
| public Frame newBoundFrame(FrameFormat format, int bindingType, long bindingId) { |
| Frame result = null; |
| switch(format.getTarget()) { |
| case FrameFormat.TARGET_GPU: { |
| GLFrame glFrame = new GLFrame(format, this, bindingType, bindingId); |
| glFrame.init(getGLEnvironment()); |
| result = glFrame; |
| break; |
| } |
| |
| default: |
| throw new RuntimeException("Attached frames are not supported for target type: " |
| + FrameFormat.targetToString(format.getTarget()) + "!"); |
| } |
| return result; |
| } |
| |
| private Frame createNewFrame(FrameFormat format) { |
| Frame result = null; |
| switch(format.getTarget()) { |
| case FrameFormat.TARGET_SIMPLE: |
| result = new SimpleFrame(format, this); |
| break; |
| |
| case FrameFormat.TARGET_NATIVE: |
| result = new NativeFrame(format, this); |
| break; |
| |
| case FrameFormat.TARGET_GPU: { |
| GLFrame glFrame = new GLFrame(format, this); |
| glFrame.init(getGLEnvironment()); |
| result = glFrame; |
| break; |
| } |
| |
| case FrameFormat.TARGET_VERTEXBUFFER: { |
| result = new VertexFrame(format, this); |
| break; |
| } |
| |
| default: |
| throw new RuntimeException("Unsupported frame target type: " + |
| FrameFormat.targetToString(format.getTarget()) + "!"); |
| } |
| return result; |
| } |
| |
| @Override |
| public Frame retainFrame(Frame frame) { |
| frame.incRefCount(); |
| return frame; |
| } |
| |
| @Override |
| public Frame releaseFrame(Frame frame) { |
| int refCount = frame.decRefCount(); |
| if (refCount == 0 && frame.hasNativeAllocation()) { |
| frame.releaseNativeAllocation(); |
| return null; |
| } else if (refCount < 0) { |
| throw new RuntimeException("Frame reference count dropped below 0!"); |
| } |
| return frame; |
| } |
| |
| } |