• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.media.effect;
19 
20 import android.filterfw.core.Filter;
21 import android.filterfw.core.FilterFactory;
22 import android.filterfw.core.FilterFunction;
23 import android.filterfw.core.Frame;
24 import android.media.effect.EffectContext;
25 
26 /**
27  * Effect subclass for effects based on a single Filter. Subclasses need only invoke the
28  * constructor with the correct arguments to obtain an Effect implementation.
29  *
30  * @hide
31  */
32 public class SingleFilterEffect extends FilterEffect {
33 
34     protected FilterFunction mFunction;
35     protected String mInputName;
36     protected String mOutputName;
37 
38     /**
39      * Constructs a new FilterFunctionEffect.
40      *
41      * @param name The name of this effect (used to create it in the EffectFactory).
42      * @param filterClass The class of the filter to wrap.
43      * @param inputName The name of the input image port.
44      * @param outputName The name of the output image port.
45      * @param finalParameters Key-value pairs of final input port assignments.
46      */
SingleFilterEffect(EffectContext context, String name, Class filterClass, String inputName, String outputName, Object... finalParameters)47     public SingleFilterEffect(EffectContext context,
48                               String name,
49                               Class filterClass,
50                               String inputName,
51                               String outputName,
52                               Object... finalParameters) {
53         super(context, name);
54 
55         mInputName = inputName;
56         mOutputName = outputName;
57 
58         String filterName = filterClass.getSimpleName();
59         FilterFactory factory = FilterFactory.sharedFactory();
60         Filter filter = factory.createFilterByClass(filterClass, filterName);
61         filter.initWithAssignmentList(finalParameters);
62 
63         mFunction = new FilterFunction(getFilterContext(), filter);
64     }
65 
66     @Override
apply(int inputTexId, int width, int height, int outputTexId)67     public void apply(int inputTexId, int width, int height, int outputTexId) {
68         beginGLEffect();
69 
70         Frame inputFrame = frameFromTexture(inputTexId, width, height);
71         Frame outputFrame = frameFromTexture(outputTexId, width, height);
72 
73         Frame resultFrame = mFunction.executeWithArgList(mInputName, inputFrame);
74 
75         outputFrame.setDataFromFrame(resultFrame);
76 
77         inputFrame.release();
78         outputFrame.release();
79         resultFrame.release();
80 
81         endGLEffect();
82     }
83 
84     @Override
setParameter(String parameterKey, Object value)85     public void setParameter(String parameterKey, Object value) {
86         mFunction.setInputValue(parameterKey, value);
87     }
88 
89     @Override
release()90     public void release() {
91         mFunction.tearDown();
92         mFunction = null;
93     }
94 }
95 
96