- Now they are in ndkHelper:: name space - Changed module name to ndk_helper - Changed some static members to class var or stand alone function - Added syncronization for JNIHelper.cpp - For a documentation, I will work with doc writer for future improvement Change-Id: I0055061a4f53b1904cde2e0339550ee277b35fc5 Addressed most of feedbacks, - Switched coding standard to Chrome style - Update JNI helper, and documented - Fixed other issues that is pointed out Change-Id: Icc729a55ed8dd613759f34a3fc35cb4949d2d205
172 lines
5.7 KiB
C++
172 lines
5.7 KiB
C++
/*
|
|
* Copyright 2013 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <jni.h>
|
|
#include <vector>
|
|
#include <string>
|
|
|
|
#include <android/log.h>
|
|
#include <android_native_app_glue.h>
|
|
|
|
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, ndk_helper::JNIHelper::GetInstance()->GetAppName(), __VA_ARGS__))
|
|
#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, ndk_helper::JNIHelper::GetInstance()->GetAppName(), __VA_ARGS__))
|
|
#define LOGE(...) ((void)__android_log_print(ANDROID_LOG_ERROR, ndk_helper::JNIHelper::GetInstance()->GetAppName(), __VA_ARGS__))
|
|
|
|
namespace ndk_helper
|
|
{
|
|
|
|
/******************************************************************
|
|
* Helper functions for JNI calls
|
|
* This class wraps JNI calls and provides handy interface calling commonly used features
|
|
* in Java SDK.
|
|
* Such as
|
|
* - loading graphics files (e.g. PNG, JPG)
|
|
* - character code conversion
|
|
* - retrieving system properties which only supported in Java SDK
|
|
*
|
|
* NOTE: To use this class, add NDKHelper.java as a corresponding helpers in Java code
|
|
*/
|
|
class JNIHelper
|
|
{
|
|
private:
|
|
std::string app_name_;
|
|
|
|
ANativeActivity* activity_;
|
|
jobject jni_helper_java_ref_;
|
|
jclass jni_helper_java_class_;
|
|
|
|
//mutex for synchronization
|
|
//This class uses singleton pattern and can be invoked from multiple threads,
|
|
//each methods locks the mutex for a thread safety
|
|
mutable pthread_mutex_t mutex_;
|
|
|
|
jstring GetExternalFilesDirJString( JNIEnv *env );
|
|
jclass RetrieveClass( JNIEnv *jni,
|
|
const char* class_name );
|
|
|
|
JNIHelper();
|
|
~JNIHelper();
|
|
JNIHelper( const JNIHelper& rhs );
|
|
JNIHelper& operator=( const JNIHelper& rhs );
|
|
|
|
public:
|
|
/*
|
|
* To load your own Java classes, JNIHelper requires to be initialized with a ANativeActivity handle.
|
|
* This methods need to be called before any call to the helper class.
|
|
* Static member of the class
|
|
*
|
|
* arguments:
|
|
* in: activity, pointer to ANativeActivity. Used internally to set up JNI environment
|
|
* in: helper_class_name, pointer to Java side helper class name. (e.g. "com/sample/helper/NDKHelper" in samples )
|
|
*/
|
|
static void Init( ANativeActivity* activity,
|
|
const char* helper_class_name );
|
|
|
|
/*
|
|
* Retrieve the singleton object of the helper.
|
|
* Static member of the class
|
|
|
|
* Methods in the class are designed as thread safe.
|
|
*/
|
|
static JNIHelper* GetInstance();
|
|
|
|
/*
|
|
* Read a file from a strorage.
|
|
* First, the method tries to read the file from an external storage.
|
|
* If it fails to read, it falls back to use assset manager and try to read the file from APK asset.
|
|
*
|
|
* arguments:
|
|
* in: file_name, file name to read
|
|
* out: buffer_ref, pointer to a vector buffer to read a file.
|
|
* when the call succeeded, the buffer includes contents of specified file
|
|
* when the call failed, contents of the buffer remains same
|
|
* return:
|
|
* true when file read succeeded
|
|
* false when it failed to read the file
|
|
*/
|
|
bool ReadFile( const char* file_name,
|
|
std::vector<uint8_t>* buffer_ref );
|
|
|
|
/*
|
|
* Load and create OpenGL texture from given file name.
|
|
* The method invokes BitmapFactory in Java so it can read jpeg/png formatted files
|
|
*
|
|
* The methods creates mip-map and set texture parameters like this,
|
|
* glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST );
|
|
* glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
|
|
* glGenerateMipmap( GL_TEXTURE_2D );
|
|
*
|
|
* arguments:
|
|
* in: file_name, file name to read, PNG&JPG is supported
|
|
* return:
|
|
* OpenGL texture name when the call succeeded
|
|
* When it failed to load the texture, it returns -1
|
|
*/
|
|
uint32_t LoadTexture( const char* file_name );
|
|
|
|
/*
|
|
* Convert string from character code other than UTF-8
|
|
*
|
|
* arguments:
|
|
* in: str, pointer to a string which is encoded other than UTF-8
|
|
* in: encoding, pointer to a character encoding string.
|
|
* The encoding string can be any valid java.nio.charset.Charset name
|
|
* e.g. "UTF-16", "Shift_JIS"
|
|
* return: converted input string as an UTF-8 std::string
|
|
*/
|
|
std::string ConvertString( const char* str,
|
|
const char* encode );
|
|
/*
|
|
* Retrieve external file directory through JNI call
|
|
*
|
|
* return: std::string containing external file diretory
|
|
*/
|
|
std::string GetExternalFilesDir();
|
|
|
|
/*
|
|
* Audio helper
|
|
* Retrieves native audio buffer size which is required to achieve low latency audio
|
|
*
|
|
* return: Native audio buffer size which is a hint to achieve low latency audio
|
|
* If the API is not supported (API level < 17), it returns 0
|
|
*/
|
|
int32_t GetNativeAudioBufferSize();
|
|
|
|
/*
|
|
* Audio helper
|
|
* Retrieves native audio sample rate which is required to achieve low latency audio
|
|
*
|
|
* return: Native audio sample rate which is a hint to achieve low latency audio
|
|
*/
|
|
int32_t GetNativeAudioSampleRate();
|
|
|
|
/*
|
|
* Retrieves application bundle name
|
|
*
|
|
* return: pointer to an app name string
|
|
*
|
|
*/
|
|
const char* GetAppName()
|
|
{
|
|
return app_name_.c_str();
|
|
}
|
|
|
|
};
|
|
|
|
} //namespace ndkHelper
|