164a55af0ac700baecb0877235eb42caac59a3560Jeff Brown/* 264a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * Copyright (C) 2012 The Android Open Source Project 364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * 464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 564a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * you may not use this file except in compliance with the License. 664a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * You may obtain a copy of the License at 764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * 864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * 1064a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * Unless required by applicable law or agreed to in writing, software 1164a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 1264a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * See the License for the specific language governing permissions and 1464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown * limitations under the License. 1564a55af0ac700baecb0877235eb42caac59a3560Jeff Brown */ 1664a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 1764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown#define LOG_TAG "SurfaceSession" 1864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 1964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown#include "JNIHelp.h" 2064a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 2164a55af0ac700baecb0877235eb42caac59a3560Jeff Brown#include <android_runtime/AndroidRuntime.h> 2264a55af0ac700baecb0877235eb42caac59a3560Jeff Brown#include <android_runtime/android_view_SurfaceSession.h> 2364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown#include <utils/Log.h> 2464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown#include <utils/RefBase.h> 2564a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 2664a55af0ac700baecb0877235eb42caac59a3560Jeff Brown#include <gui/SurfaceComposerClient.h> 27d5c7dd6da810a6b89151b337bea79fd817e6b72aRobert Carr#include <gui/Surface.h> 2864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 2964a55af0ac700baecb0877235eb42caac59a3560Jeff Brownnamespace android { 3064a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 3164a55af0ac700baecb0877235eb42caac59a3560Jeff Brownstatic struct { 3264a55af0ac700baecb0877235eb42caac59a3560Jeff Brown jfieldID mNativeClient; 3364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown} gSurfaceSessionClassInfo; 3464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 3564a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 3664a55af0ac700baecb0877235eb42caac59a3560Jeff Brownsp<SurfaceComposerClient> android_view_SurfaceSession_getClient( 3764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown JNIEnv* env, jobject surfaceSessionObj) { 3864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown return reinterpret_cast<SurfaceComposerClient*>( 39a3850d8f8fc096a7195d34f05f45a4e29926e36cAshok Bhat env->GetLongField(surfaceSessionObj, gSurfaceSessionClassInfo.mNativeClient)); 4064a55af0ac700baecb0877235eb42caac59a3560Jeff Brown} 4164a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 4264a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 43a3850d8f8fc096a7195d34f05f45a4e29926e36cAshok Bhatstatic jlong nativeCreate(JNIEnv* env, jclass clazz) { 4464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown SurfaceComposerClient* client = new SurfaceComposerClient(); 45b1d90c8f60f71422196c337f1d078b68867f5710Mathias Agopian client->incStrong((void*)nativeCreate); 46a3850d8f8fc096a7195d34f05f45a4e29926e36cAshok Bhat return reinterpret_cast<jlong>(client); 4764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown} 4864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 49d5c7dd6da810a6b89151b337bea79fd817e6b72aRobert Carrstatic jlong nativeCreateScoped(JNIEnv* env, jclass clazz, jlong surfaceObject) { 50d5c7dd6da810a6b89151b337bea79fd817e6b72aRobert Carr Surface *parent = reinterpret_cast<Surface*>(surfaceObject); 51d5c7dd6da810a6b89151b337bea79fd817e6b72aRobert Carr SurfaceComposerClient* client = new SurfaceComposerClient(parent->getIGraphicBufferProducer()); 52d5c7dd6da810a6b89151b337bea79fd817e6b72aRobert Carr client->incStrong((void*)nativeCreate); 53d5c7dd6da810a6b89151b337bea79fd817e6b72aRobert Carr return reinterpret_cast<jlong>(client); 54d5c7dd6da810a6b89151b337bea79fd817e6b72aRobert Carr} 55d5c7dd6da810a6b89151b337bea79fd817e6b72aRobert Carr 56a3850d8f8fc096a7195d34f05f45a4e29926e36cAshok Bhatstatic void nativeDestroy(JNIEnv* env, jclass clazz, jlong ptr) { 5764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown SurfaceComposerClient* client = reinterpret_cast<SurfaceComposerClient*>(ptr); 58b1d90c8f60f71422196c337f1d078b68867f5710Mathias Agopian client->decStrong((void*)nativeCreate); 5964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown} 6064a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 61a3850d8f8fc096a7195d34f05f45a4e29926e36cAshok Bhatstatic void nativeKill(JNIEnv* env, jclass clazz, jlong ptr) { 6264a55af0ac700baecb0877235eb42caac59a3560Jeff Brown SurfaceComposerClient* client = reinterpret_cast<SurfaceComposerClient*>(ptr); 6364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown client->dispose(); 6464a55af0ac700baecb0877235eb42caac59a3560Jeff Brown} 6564a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 6676f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod gMethods[] = { 6764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown /* name, signature, funcPtr */ 68a3850d8f8fc096a7195d34f05f45a4e29926e36cAshok Bhat { "nativeCreate", "()J", 6964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown (void*)nativeCreate }, 70d5c7dd6da810a6b89151b337bea79fd817e6b72aRobert Carr { "nativeCreateScoped", "(J)J", 71d5c7dd6da810a6b89151b337bea79fd817e6b72aRobert Carr (void*)nativeCreateScoped }, 72a3850d8f8fc096a7195d34f05f45a4e29926e36cAshok Bhat { "nativeDestroy", "(J)V", 7364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown (void*)nativeDestroy }, 74a3850d8f8fc096a7195d34f05f45a4e29926e36cAshok Bhat { "nativeKill", "(J)V", 7564a55af0ac700baecb0877235eb42caac59a3560Jeff Brown (void*)nativeKill } 7664a55af0ac700baecb0877235eb42caac59a3560Jeff Brown}; 7764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 7864a55af0ac700baecb0877235eb42caac59a3560Jeff Brownint register_android_view_SurfaceSession(JNIEnv* env) { 7964a55af0ac700baecb0877235eb42caac59a3560Jeff Brown int res = jniRegisterNativeMethods(env, "android/view/SurfaceSession", 8064a55af0ac700baecb0877235eb42caac59a3560Jeff Brown gMethods, NELEM(gMethods)); 8164a55af0ac700baecb0877235eb42caac59a3560Jeff Brown LOG_ALWAYS_FATAL_IF(res < 0, "Unable to register native methods."); 8264a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 8364a55af0ac700baecb0877235eb42caac59a3560Jeff Brown jclass clazz = env->FindClass("android/view/SurfaceSession"); 84a3850d8f8fc096a7195d34f05f45a4e29926e36cAshok Bhat gSurfaceSessionClassInfo.mNativeClient = env->GetFieldID(clazz, "mNativeClient", "J"); 8564a55af0ac700baecb0877235eb42caac59a3560Jeff Brown return 0; 8664a55af0ac700baecb0877235eb42caac59a3560Jeff Brown} 8764a55af0ac700baecb0877235eb42caac59a3560Jeff Brown 8864a55af0ac700baecb0877235eb42caac59a3560Jeff Brown} // namespace android 89