Home | History | Annotate | Download | only in core
      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.NativeAllocatorTag;
     21 import android.graphics.SurfaceTexture;
     22 import android.os.Looper;
     23 import android.util.Log;
     24 import android.view.Surface;
     25 import android.media.MediaRecorder;
     26 
     27 /**
     28  * @hide
     29  */
     30 public class GLEnvironment {
     31 
     32     private int glEnvId;
     33 
     34     public GLEnvironment() {
     35         nativeAllocate();
     36     }
     37 
     38     private GLEnvironment(NativeAllocatorTag tag) {
     39     }
     40 
     41     public synchronized void tearDown() {
     42         if (glEnvId != -1) {
     43             nativeDeallocate();
     44             glEnvId = -1;
     45         }
     46     }
     47 
     48     @Override
     49     protected void finalize() throws Throwable {
     50         tearDown();
     51     }
     52 
     53     public void initWithNewContext() {
     54         if (!nativeInitWithNewContext()) {
     55             throw new RuntimeException("Could not initialize GLEnvironment with new context!");
     56         }
     57     }
     58 
     59     public void initWithCurrentContext() {
     60         if (!nativeInitWithCurrentContext()) {
     61             throw new RuntimeException("Could not initialize GLEnvironment with current context!");
     62         }
     63     }
     64 
     65     public boolean isActive() {
     66         return nativeIsActive();
     67     }
     68 
     69     public boolean isContextActive() {
     70         return nativeIsContextActive();
     71     }
     72 
     73     public static boolean isAnyContextActive() {
     74         return nativeIsAnyContextActive();
     75     }
     76 
     77     public void activate() {
     78         if (Looper.myLooper() != null && Looper.myLooper().equals(Looper.getMainLooper())) {
     79             Log.e("FilterFramework", "Activating GL context in UI thread!");
     80         }
     81         if (!nativeActivate()) {
     82             throw new RuntimeException("Could not activate GLEnvironment!");
     83         }
     84     }
     85 
     86     public void deactivate() {
     87         if (!nativeDeactivate()) {
     88             throw new RuntimeException("Could not deactivate GLEnvironment!");
     89         }
     90     }
     91 
     92     public void swapBuffers() {
     93         if (!nativeSwapBuffers()) {
     94             throw new RuntimeException("Error swapping EGL buffers!");
     95         }
     96     }
     97 
     98     public int registerSurface(Surface surface) {
     99         int result = nativeAddSurface(surface);
    100         if (result < 0) {
    101             throw new RuntimeException("Error registering surface " + surface + "!");
    102         }
    103         return result;
    104     }
    105 
    106     public int registerSurfaceTexture(SurfaceTexture surfaceTexture, int width, int height) {
    107         int result = nativeAddSurfaceTexture(surfaceTexture, width, height);
    108         if (result < 0) {
    109             throw new RuntimeException("Error registering surfaceTexture " + surfaceTexture + "!");
    110         }
    111         return result;
    112     }
    113 
    114     public int registerSurfaceFromMediaRecorder(MediaRecorder mediaRecorder) {
    115         int result = nativeAddSurfaceFromMediaRecorder(mediaRecorder);
    116         if (result < 0) {
    117             throw new RuntimeException("Error registering surface from "
    118                                     + "MediaRecorder" + mediaRecorder + "!");
    119         }
    120         return result;
    121     }
    122 
    123     public void activateSurfaceWithId(int surfaceId) {
    124         if (!nativeActivateSurfaceId(surfaceId)) {
    125             throw new RuntimeException("Could not activate surface " + surfaceId + "!");
    126         }
    127     }
    128 
    129     public void unregisterSurfaceId(int surfaceId) {
    130         if (!nativeRemoveSurfaceId(surfaceId)) {
    131             throw new RuntimeException("Could not unregister surface " + surfaceId + "!");
    132         }
    133     }
    134 
    135     public void setSurfaceTimestamp(long timestamp) {
    136         if (!nativeSetSurfaceTimestamp(timestamp)) {
    137             throw new RuntimeException("Could not set timestamp for current surface!");
    138         }
    139     }
    140 
    141     static {
    142         System.loadLibrary("filterfw");
    143     }
    144 
    145     private native boolean nativeInitWithNewContext();
    146 
    147     private native boolean nativeInitWithCurrentContext();
    148 
    149     private native boolean nativeIsActive();
    150 
    151     private native boolean nativeIsContextActive();
    152 
    153     private static native boolean nativeIsAnyContextActive();
    154 
    155     private native boolean nativeActivate();
    156 
    157     private native boolean nativeDeactivate();
    158 
    159     private native boolean nativeSwapBuffers();
    160 
    161     private native boolean nativeAllocate();
    162 
    163     private native boolean nativeDeallocate();
    164 
    165     private native int nativeAddSurface(Surface surface);
    166 
    167     private native int nativeAddSurfaceTexture(SurfaceTexture surface, int width, int height);
    168 
    169     private native int nativeAddSurfaceFromMediaRecorder(MediaRecorder mediaRecorder);
    170 
    171     private native boolean  nativeDisconnectSurfaceMediaSource(MediaRecorder mediaRecorder);
    172 
    173     private native boolean nativeActivateSurfaceId(int surfaceId);
    174 
    175     private native boolean nativeRemoveSurfaceId(int surfaceId);
    176 
    177     private native boolean nativeSetSurfaceTimestamp(long timestamp);
    178 }
    179