130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni/*
230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * Copyright (C) 2011 The Android Open Source Project
330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni *
430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * Licensed under the Apache License, Version 2.0 (the "License");
530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * you may not use this file except in compliance with the License.
630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * You may obtain a copy of the License at
730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni *
830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni *      http://www.apache.org/licenses/LICENSE-2.0
930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni *
1030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * Unless required by applicable law or agreed to in writing, software
1130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * distributed under the License is distributed on an "AS IS" BASIS,
1230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * See the License for the specific language governing permissions and
1430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni * limitations under the License.
1530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni */
1630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
1730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
1830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceronipackage android.filterfw.core;
1930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
2030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroniimport android.filterfw.core.Frame;
2130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroniimport android.filterfw.core.FrameFormat;
2230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroniimport android.filterfw.core.MutableFrameFormat;
2330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
24a3bfbe5389c6146abe318a7add3fa688d69bc01bEino-Ville Talvala/**
25a3bfbe5389c6146abe318a7add3fa688d69bc01bEino-Ville Talvala * @hide
26a3bfbe5389c6146abe318a7add3fa688d69bc01bEino-Ville Talvala */
2730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceronipublic abstract class FrameManager {
2830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
29511360e61650864ea22a171159efe073c80d0cdbMarius Renn    private FilterContext mContext;
30511360e61650864ea22a171159efe073c80d0cdbMarius Renn
3130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni    public abstract Frame newFrame(FrameFormat format);
3230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
3330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni    public abstract Frame newBoundFrame(FrameFormat format, int bindingType, long bindingId);
3430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
35489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn    public Frame duplicateFrame(Frame frame) {
36489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn        Frame result = newFrame(frame.getFormat());
37489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn        result.setDataFromFrame(frame);
38489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn        return result;
39489c240d3ae33e83dc62ea6f3cc864e47c0e2e3bMarius Renn    }
4030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
4130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni    public Frame duplicateFrameToTarget(Frame frame, int newTarget) {
4230ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni        MutableFrameFormat newFormat = frame.getFormat().mutableCopy();
4330ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni        newFormat.setTarget(newTarget);
4430ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni        Frame result = newFrame(newFormat);
4530ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni        result.setDataFromFrame(frame);
4630ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni        return result;
4730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni    }
4830ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
4930ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni    public abstract Frame retainFrame(Frame frame);
5030ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni
5130ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni    public abstract Frame releaseFrame(Frame frame);
52511360e61650864ea22a171159efe073c80d0cdbMarius Renn
53511360e61650864ea22a171159efe073c80d0cdbMarius Renn    public FilterContext getContext() {
54511360e61650864ea22a171159efe073c80d0cdbMarius Renn        return mContext;
55511360e61650864ea22a171159efe073c80d0cdbMarius Renn    }
56511360e61650864ea22a171159efe073c80d0cdbMarius Renn
57511360e61650864ea22a171159efe073c80d0cdbMarius Renn    public GLEnvironment getGLEnvironment() {
58511360e61650864ea22a171159efe073c80d0cdbMarius Renn        return mContext != null ? mContext.getGLEnvironment() : null;
59511360e61650864ea22a171159efe073c80d0cdbMarius Renn    }
60511360e61650864ea22a171159efe073c80d0cdbMarius Renn
61776102d45a18a5df53d2ec76c5d93f20b3e99da1Marius Renn    public void tearDown() {
62776102d45a18a5df53d2ec76c5d93f20b3e99da1Marius Renn    }
63776102d45a18a5df53d2ec76c5d93f20b3e99da1Marius Renn
64511360e61650864ea22a171159efe073c80d0cdbMarius Renn    void setContext(FilterContext context) {
65511360e61650864ea22a171159efe073c80d0cdbMarius Renn        mContext = context;
66511360e61650864ea22a171159efe073c80d0cdbMarius Renn    }
6730ab3fc173709a491c9e2e103f53fb7c0d1b96b7Rodrigo Carceroni}
68