jni: build using LLVM/clang
* update build system to use LLVM/Clang for contrib/daemon/JNI
compilation
* unify build system between daemon and JNI modules
* requires Android NDK r12b+ (build machine)
* uses clang 3.8, links with static stdc++
Tuleap: #575
Change-Id: I7003ee4469418b334fd98eaeb259616c5f8192ee
diff --git a/ring-android/app/src/main/jni/videomanager.i b/ring-android/app/src/main/jni/videomanager.i
index 4fc50d3..36b2414 100644
--- a/ring-android/app/src/main/jni/videomanager.i
+++ b/ring-android/app/src/main/jni/videomanager.i
@@ -86,17 +86,17 @@
output[vOut] = input[vIn];
}
}
- return output;
+ return;
}
-JNIEXPORT void JNICALL Java_cx_ring_service_RingserviceJNI_setVideoFrame(JNIEnv *jenv, jclass jcls, void* frame, int frame_size, jlong target, int w, int h, int rotation)
+JNIEXPORT void JNICALL Java_cx_ring_service_RingserviceJNI_setVideoFrame(JNIEnv *jenv, jclass jcls, jbyteArray frame, int frame_size, jlong target, int w, int h, int rotation)
{
uint8_t* f_target = (uint8_t*) ((intptr_t) target);
if (rotation == 0)
- jenv->GetByteArrayRegion(frame, 0, frame_size, f_target);
+ jenv->GetByteArrayRegion(frame, 0, frame_size, (jbyte*)f_target);
else {
workspace.resize(frame_size);
- jenv->GetByteArrayRegion(frame, 0, frame_size, workspace.data());
+ jenv->GetByteArrayRegion(frame, 0, frame_size, (jbyte*)workspace.data());
rotateNV21(workspace, w, h, rotation, f_target);
}
}
@@ -133,7 +133,7 @@
size_t line_size_in = frame->width * 4;
size_t line_size_out = buffer.stride * 4;
for (size_t i=0, n=frame->height; i<n; i++)
- memcpy(buffer.bits + line_size_out * i, frame->ptr + line_size_in * i, line_size_in);
+ memcpy((uint8_t*)buffer.bits + line_size_out * i, frame->ptr + line_size_in * i, line_size_in);
}
}
else
@@ -173,11 +173,11 @@
{
if(!sinkId) {
SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string");
- return 0;
+ return;
}
const char *arg1_pstr = (const char *)jenv->GetStringUTFChars(sinkId, 0);
if (!arg1_pstr)
- return 0;
+ return;
const std::string sink(arg1_pstr);
jenv->ReleaseStringUTFChars(sinkId, arg1_pstr);
@@ -194,17 +194,18 @@
{
if(!sinkId) {
SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null string");
- return 0;
+ return;
}
const char *arg1_pstr = (const char *)jenv->GetStringUTFChars(sinkId, 0);
if (!arg1_pstr)
- return 0;
+ return;
const std::string sink(arg1_pstr);
jenv->ReleaseStringUTFChars(sinkId, arg1_pstr);
std::lock_guard<std::mutex> guard(windows_mutex);
DRing::registerSinkTarget(sink, DRing::SinkTarget {});
- windows.erase(window);
+ ANativeWindow* nativeWindow = (ANativeWindow*)((intptr_t) window);
+ windows.erase(nativeWindow);
}
%}
@@ -231,8 +232,8 @@
void addVideoDevice(const std::string &node);
void removeVideoDevice(const std::string &node);
-uintptr_t obtainFrame(int length);
-void releaseFrame(uintptr_t frame);
+uint8_t* obtainFrame(int length);
+void releaseFrame(uint8_t* frame);
void registerSinkTarget(const std::string& sinkId, const DRing::SinkTarget& target);
}