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 package com.android.camera;
18 
19 /**
20  * The Java interface to JNI calls regarding mosaic preview rendering.
21  *
22  */
23 public class MosaicRenderer
24 {
25      static
26      {
27          System.loadLibrary("jni_mosaic");
28      }
29 
30      /**
31       * Function to be called in onSurfaceCreated() to initialize
32       * the GL context, load and link the shaders and create the
33       * program. Returns a texture ID to be used for SurfaceTexture.
34       *
35       * @return textureID the texture ID of the newly generated texture to
36       *          be assigned to the SurfaceTexture object.
37       */
init()38      public static native int init();
39 
40      /**
41       * Pass the drawing surface's width and height to initialize the
42       * renderer viewports and FBO dimensions.
43       *
44       * @param width width of the drawing surface in pixels.
45       * @param height height of the drawing surface in pixels.
46       * @param isLandscapeOrientation is the orientation of the activity layout in landscape.
47       */
reset(int width, int height, boolean isLandscapeOrientation)48      public static native void reset(int width, int height, boolean isLandscapeOrientation);
49 
50      /**
51       * Calling this function will render the SurfaceTexture to a new 2D texture
52       * using the provided STMatrix.
53       *
54       * @param stMatrix texture coordinate transform matrix obtained from the
55       *        Surface texture
56       */
preprocess(float[] stMatrix)57      public static native void preprocess(float[] stMatrix);
58 
59      /**
60       * This function calls glReadPixels to transfer both the low-res and high-res
61       * data from the GPU memory to the CPU memory for further processing by the
62       * mosaicing library.
63       */
transferGPUtoCPU()64      public static native void transferGPUtoCPU();
65 
66      /**
67       * Function to be called in onDrawFrame() to update the screen with
68       * the new frame data.
69       */
step()70      public static native void step();
71 
72      /**
73       * Call this function when a new low-res frame has been processed by
74       * the mosaicing library. This will tell the renderer library to
75       * update its texture and warping transformation. Any calls to step()
76       * after this call will use the new image frame and transformation data.
77       */
updateMatrix()78      public static native void updateMatrix();
79 
80      /**
81       * This function allows toggling between showing the input image data
82       * (without applying any warp) and the warped image data. For running
83       * the renderer as a viewfinder, we set the flag to false. To see the
84       * preview mosaic, we set the flag to true.
85       *
86       * @param flag boolean flag to set the warping to true or false.
87       */
setWarping(boolean flag)88      public static native void setWarping(boolean flag);
89 }
90