//
|
// Created by lilin on 2019-12-10.
|
//
|
|
#include "JavaListener.h"
|
|
JavaListener::JavaListener(JavaVM *vm, _JNIEnv *env, jobject obj) {
|
|
jvm=vm;
|
jenv=env;
|
jobj = obj;
|
jclass cls= env->GetObjectClass(obj);
|
if(!cls){return;}
|
jmid_state= env->GetMethodID( cls,"c_bareState","(Ljava/lang/String;)V");
|
jmid_codec= env->GetMethodID( cls,"c_bareCodec","(Ljava/lang/String;)V");
|
jmid_vstart= env->GetMethodID( cls,"c_bareVstart","()V");
|
jmid_vstop= env->GetMethodID( cls,"c_bareVstop","()V");
|
jmid_vdata= env->GetMethodID( cls,"c_renderYUV","(II[B[B[B)V");
|
|
}
|
|
JavaListener::~JavaListener() {
|
|
}
|
|
void JavaListener::onBaresipState(const char *msg) {
|
/**if( threadtype==0 ){
|
jstring jmsg= jenv->NewStringUTF(msg);
|
jenv->CallVoidMethod(jobj,jmid_state,jmsg);
|
jenv->DeleteLocalRef(jmsg);
|
}else{
|
JNIEnv *env1;LOGE("1xxxxxxxxxx");
|
jint res= jvm->AttachCurrentThread(&env1,0);LOGE("2xxxxxxxxxx");
|
jstring jmsg= env1->NewStringUTF(msg);LOGE("3xxxxxxxxxx");
|
env1->CallVoidMethod(jobj,jmid_state,jmsg);LOGE("4xxxxxxxxxx");
|
env1->DeleteLocalRef(jmsg);LOGE("4exxxxxxxxxx*=%d=",res);
|
if (JNI_OK == res) {LOGE("5exxxxxxxxxx1");
|
jvm->DetachCurrentThread();LOGE("5exxxxxxxxxx2");
|
}LOGE("6exxxxxxxxxx");
|
}**/
|
JNIEnv *env1;
|
bool needDetach = false;
|
if (jvm->GetEnv((void**) &env1, JNI_VERSION_1_6) != JNI_OK) {
|
jvm->AttachCurrentThread(&env1,0);
|
needDetach = true;
|
}
|
jstring jmsg= env1->NewStringUTF(msg);
|
env1->CallVoidMethod(jobj,jmid_state,jmsg);
|
env1->DeleteLocalRef(jmsg);
|
if (needDetach) {
|
jvm->DetachCurrentThread();
|
}
|
}
|
|
void JavaListener::onBaresipCodec(const char *msg) {
|
/** if( threadtype==0 ){
|
jstring jmsg= jenv->NewStringUTF(msg);
|
jenv->CallVoidMethod(jobj,jmid_codec,jmsg);
|
jenv->DeleteLocalRef(jmsg);
|
}else{
|
JNIEnv *env1;
|
jvm->AttachCurrentThread(&env1,0);
|
jstring jmsg= env1->NewStringUTF(msg);
|
env1->CallVoidMethod(jobj,jmid_codec,jmsg);
|
env1->DeleteLocalRef(jmsg);
|
jvm->DetachCurrentThread();
|
}**/
|
JNIEnv *env1;
|
bool needDetach = false;
|
if (jvm->GetEnv((void**) &env1, JNI_VERSION_1_6) != JNI_OK) {
|
jvm->AttachCurrentThread(&env1,0);
|
needDetach = true;
|
}
|
jstring jmsg= env1->NewStringUTF(msg);
|
env1->CallVoidMethod(jobj,jmid_codec,jmsg);
|
env1->DeleteLocalRef(jmsg);
|
if (needDetach) {
|
jvm->DetachCurrentThread();
|
}
|
}
|
|
void JavaListener::onBaresipVstart() {
|
/**if( threadtype==0 ){
|
jenv->CallVoidMethod(jobj,jmid_vstart);
|
}else{
|
JNIEnv *env1;
|
jvm->AttachCurrentThread(&env1,0);
|
env1->CallVoidMethod(jobj,jmid_vstart);
|
jvm->DetachCurrentThread();
|
}**/
|
JNIEnv *env1;
|
bool needDetach = false;
|
if (jvm->GetEnv((void**) &env1, JNI_VERSION_1_6) != JNI_OK) {
|
jvm->AttachCurrentThread(&env1,0);
|
needDetach = true;
|
}
|
env1->CallVoidMethod(jobj,jmid_vstart);
|
if (needDetach) {
|
jvm->DetachCurrentThread();
|
}
|
}
|
void JavaListener::onBaresipVstop() {
|
/**if( threadtype==0 ){
|
jenv->CallVoidMethod(jobj,jmid_vstop);
|
}else{
|
JNIEnv *env1;
|
jvm->AttachCurrentThread(&env1,0);
|
env1->CallVoidMethod(jobj,jmid_vstop);
|
jvm->DetachCurrentThread();
|
}**/
|
JNIEnv *env1;
|
bool needDetach = false;
|
if (jvm->GetEnv((void**) &env1, JNI_VERSION_1_6) != JNI_OK) {
|
jvm->AttachCurrentThread(&env1,0);
|
needDetach = true;
|
}
|
env1->CallVoidMethod(jobj,jmid_vstop);
|
if (needDetach) {
|
jvm->DetachCurrentThread();
|
}
|
}
|
|
void JavaListener::onBaresipVyuv(int width, int height, uint8_t *fy, uint8_t *fu, uint8_t *fv) {
|
/** if( threadtype==0 ){
|
}else{
|
JNIEnv *env1;
|
jvm->AttachCurrentThread(&env1,0);
|
jclass cls= env1->GetObjectClass(jobj);
|
if(!cls){return;}
|
|
jbyteArray y = env1->NewByteArray(width * height);
|
env1->SetByteArrayRegion(y, 0, width * height, (const jbyte *)(fy));
|
|
jbyteArray u = env1->NewByteArray(width * height / 4);
|
env1->SetByteArrayRegion(u, 0, width * height / 4, (const jbyte *)(fu) );
|
|
jbyteArray v = env1->NewByteArray(width * height / 4);
|
env1->SetByteArrayRegion(v, 0, width * height / 4, (const jbyte *)(fv));
|
|
env1->CallVoidMethod(jobj,jmid_vdata ,width, height, y, u, v);
|
|
env1->DeleteLocalRef(y);
|
env1->DeleteLocalRef(u);
|
env1->DeleteLocalRef(v);
|
jvm->DetachCurrentThread();
|
}**/
|
JNIEnv *env1;
|
bool needDetach = false;
|
if (jvm->GetEnv((void**) &env1, JNI_VERSION_1_6) != JNI_OK) {
|
jvm->AttachCurrentThread(&env1,0);
|
needDetach = true;
|
}
|
jbyteArray y = env1->NewByteArray(width * height);
|
env1->SetByteArrayRegion(y, 0, width * height, (const jbyte *)(fy));
|
|
jbyteArray u = env1->NewByteArray(width * height / 4);
|
env1->SetByteArrayRegion(u, 0, width * height / 4, (const jbyte *)(fu) );
|
|
jbyteArray v = env1->NewByteArray(width * height / 4);
|
env1->SetByteArrayRegion(v, 0, width * height / 4, (const jbyte *)(fv));
|
|
env1->CallVoidMethod(jobj,jmid_vdata ,width, height, y, u, v);
|
env1->DeleteLocalRef(y);
|
env1->DeleteLocalRef(u);
|
env1->DeleteLocalRef(v);
|
if (needDetach) {
|
jvm->DetachCurrentThread();
|
}
|
}
|
|
|