165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/* 265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Copyright (C) 2011 The Android Open Source Project 365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Licensed under the Apache License, Version 2.0 (the "License"); 565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * you may not use this file except in compliance with the License. 665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * You may obtain a copy of the License at 765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * http://www.apache.org/licenses/LICENSE-2.0 965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 1065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Unless required by applicable law or agreed to in writing, software 1165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * distributed under the License is distributed on an "AS IS" BASIS, 1265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * See the License for the specific language governing permissions and 1465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * limitations under the License. 1565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */ 1665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 1765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 1865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennpackage android.filterfw; 1965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.filterfw.core.CachedFrameManager; 2165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.filterfw.core.FilterContext; 2265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.filterfw.core.FrameManager; 2365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.filterfw.core.GLEnvironment; 2465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 2565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/** 2665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Base class for mobile filter framework (MFF) frontend environments. These convenience classes 2765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * allow using the filter framework without the requirement of performing manual setup of its 2865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * required components. 2965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 3065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @hide 3165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */ 3265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennpublic class MffEnvironment { 3365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 3465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn private FilterContext mContext; 3565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 3665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn /** 3765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Protected constructor to initialize the environment's essential components. These are the 3865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * frame-manager and the filter-context. Passing in null for the frame-manager causes this 3965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * to be auto-created. 4065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * 4165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @param frameManager The FrameManager to use or null to auto-create one. 4265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */ 4365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn protected MffEnvironment(FrameManager frameManager) { 4465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Get or create the frame manager 4565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (frameManager == null) { 4665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn frameManager = new CachedFrameManager(); 4765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 4865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 4965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn // Setup the environment 5065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn mContext = new FilterContext(); 5165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn mContext.setFrameManager(frameManager); 5265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 5365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 5465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 5565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn /** 5665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Returns the environment's filter-context. 5765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */ 5865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public FilterContext getContext() { 5965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn return mContext; 6065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 6165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 6265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn /** 6365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Set the environment's GL environment to the specified environment. This does not activate 6465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * the environment. 6565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */ 6665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public void setGLEnvironment(GLEnvironment glEnvironment) { 6765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn mContext.initGLEnvironment(glEnvironment); 6865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 6965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 7065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn /** 7165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Create and activate a new GL environment for use in this filter context. 7265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */ 7365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public void createGLEnvironment() { 7465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn GLEnvironment glEnvironment = new GLEnvironment(); 7565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn glEnvironment.initWithNewContext(); 7665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn setGLEnvironment(glEnvironment); 7765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 7865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 7965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn /** 8065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Activate the GL environment for use in the current thread. A GL environment must have been 8165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * previously set or created using setGLEnvironment() or createGLEnvironment()! Call this after 8265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * having switched to a new thread for GL filter execution. 8365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */ 8465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public void activateGLEnvironment() { 8565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn GLEnvironment glEnv = mContext.getGLEnvironment(); 8665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (glEnv != null) { 8765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn mContext.getGLEnvironment().activate(); 8865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } else { 8965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn throw new NullPointerException("No GLEnvironment in place to activate!"); 9065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 9165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 9265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn 9365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn /** 9465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Deactivate the GL environment from use in the current thread. A GL environment must have been 9565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * previously set or created using setGLEnvironment() or createGLEnvironment()! Call this before 9665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * running GL filters in another thread. 9765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */ 9865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn public void deactivateGLEnvironment() { 9965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn GLEnvironment glEnv = mContext.getGLEnvironment(); 10065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn if (glEnv != null) { 10165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn mContext.getGLEnvironment().deactivate(); 10265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } else { 10365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn throw new NullPointerException("No GLEnvironment in place to deactivate!"); 10465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 10565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn } 10665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn} 107