This commit is contained in:
2022-03-11 08:43:32 +08:00
commit 8f9ae202db
148 changed files with 23318 additions and 0 deletions

View File

@@ -0,0 +1,104 @@
#include "colorConvert.h"
#include "log.h"
#include "jni.h"
#include <string.h>
#include <android/native_window_jni.h>
JNIEXPORT void JNICALL Java_me_lake_librestreaming_core_ColorHelper_NV21TOYUV420SP
(JNIEnv * env, jobject thiz, jbyteArray srcarray,jbyteArray dstarray,jint ySize) {
unsigned char *src = (unsigned char *)(*env)->GetByteArrayElements(env,srcarray, 0);
unsigned char *dst = (unsigned char*)(*env)->GetByteArrayElements(env,dstarray, 0);
NV21TOYUV420SP(src,dst,ySize);
(*env)->ReleaseByteArrayElements(env,srcarray,src,JNI_ABORT);
(*env)->ReleaseByteArrayElements(env,dstarray,dst,JNI_ABORT);
return;
}
JNIEXPORT void JNICALL Java_me_lake_librestreaming_core_ColorHelper_YUV420SPTOYUV420P
(JNIEnv * env, jobject thiz, jbyteArray srcarray,jbyteArray dstarray,jint ySize) {
unsigned char *src = (unsigned char *)(*env)->GetByteArrayElements(env,srcarray, 0);
unsigned char *dst = (unsigned char*)(*env)->GetByteArrayElements(env,dstarray, 0);
YUV420SPTOYUV420P(src,dst,ySize);
(*env)->ReleaseByteArrayElements(env,srcarray,src,JNI_ABORT);
(*env)->ReleaseByteArrayElements(env,dstarray,dst,JNI_ABORT);
return;
}
JNIEXPORT void JNICALL Java_me_lake_librestreaming_core_ColorHelper_NV21TOYUV420P
(JNIEnv * env, jobject thiz, jbyteArray srcarray,jbyteArray dstarray,jint ySize) {
unsigned char *src = (unsigned char *)(*env)->GetByteArrayElements(env,srcarray, 0);
unsigned char *dst = (unsigned char*)(*env)->GetByteArrayElements(env,dstarray, 0);
NV21TOYUV420P(src,dst,ySize);
(*env)->ReleaseByteArrayElements(env,srcarray,src,JNI_ABORT);
(*env)->ReleaseByteArrayElements(env,dstarray,dst,JNI_ABORT);
return;
}
JNIEXPORT void JNICALL Java_me_lake_librestreaming_core_ColorHelper_NV21TOARGB
(JNIEnv *env, jobject thiz,jbyteArray srcarray,jintArray dstarray,jint width,jint height){
unsigned char *src = (unsigned char *)(*env)->GetByteArrayElements(env,srcarray, 0);
unsigned int *dst = (unsigned int*)(*env)->GetIntArrayElements(env,dstarray, 0);
NV21TOARGB(src,dst,width,height);
(*env)->ReleaseByteArrayElements(env,srcarray,src,JNI_ABORT);
(*env)->ReleaseIntArrayElements(env,dstarray,dst,JNI_ABORT);
return;
}
JNIEXPORT void JNICALL Java_me_lake_librestreaming_core_ColorHelper_NV21Transform
(JNIEnv * env, jobject thiz, jbyteArray srcarray,jbyteArray dstarray,jint srcwidth,jint srcheight,jint directionflag) {
unsigned char *src = (unsigned char*)(*env)->GetByteArrayElements(env,srcarray, 0);
unsigned char *dst = (unsigned char*)(*env)->GetByteArrayElements(env,dstarray, 0);
NV21Transform(src,dst,srcwidth,srcheight,directionflag);
(*env)->ReleaseByteArrayElements(env,srcarray,src,JNI_ABORT);
(*env)->ReleaseByteArrayElements(env,dstarray,dst,JNI_ABORT);
return;
}
JNIEXPORT void JNICALL Java_me_lake_librestreaming_render_GLESRender_NV21TOYUV
(JNIEnv *env, jobject thiz,jbyteArray srcarray,jbyteArray dstYarray,jbyteArray dstUarray,jbyteArray dstVarray,jint width,jint height){
unsigned char *src = (unsigned char*)(*env)->GetByteArrayElements(env,srcarray, 0);
unsigned char *dsty = (unsigned char*)(*env)->GetByteArrayElements(env,dstYarray, 0);
unsigned char *dstu = (unsigned char*)(*env)->GetByteArrayElements(env,dstUarray, 0);
unsigned char *dstv = (unsigned char*)(*env)->GetByteArrayElements(env,dstVarray, 0);
NV21TOYUV(src,dsty,dstu,dstv,width,height);
(*env)->ReleaseByteArrayElements(env,srcarray,src,JNI_ABORT);
(*env)->ReleaseByteArrayElements(env,dstYarray,dsty,JNI_ABORT);
(*env)->ReleaseByteArrayElements(env,dstUarray,dstu,JNI_ABORT);
(*env)->ReleaseByteArrayElements(env,dstVarray,dstv,JNI_ABORT);
return;
}
JNIEXPORT void JNICALL Java_me_lake_librestreaming_core_ColorHelper_FIXGLPIXEL
(JNIEnv * env, jobject thiz, jintArray srcarray,jintArray dstarray,jint w,jint h) {
unsigned int *src = (unsigned int *)(*env)->GetIntArrayElements(env,srcarray, 0);
unsigned int *dst = (unsigned int *)(*env)->GetIntArrayElements(env,dstarray, 0);
FIXGLPIXEL(src,dst,w,h);
(*env)->ReleaseIntArrayElements(env,srcarray,src,JNI_ABORT);
(*env)->ReleaseIntArrayElements(env,dstarray,dst,JNI_ABORT);
return;
}
//rendering
JNIEXPORT void JNICALL Java_me_lake_librestreaming_render_NativeRender_renderingSurface
(JNIEnv * env, jobject thiz,jobject javaSurface,jbyteArray pixelsArray,jint w,jint h,jint size) {
ANativeWindow* window = ANativeWindow_fromSurface(env, javaSurface);
if(window!=NULL)
{
ANativeWindow_setBuffersGeometry(window,w,h,COLOR_FORMAT_NV21);
ANativeWindow_Buffer buffer;
if (ANativeWindow_lock(window, &buffer, NULL) == 0) {
unsigned char *pixels = (unsigned char*)(*env)->GetByteArrayElements(env,pixelsArray, 0);
if(buffer.width==buffer.stride){
memcpy(buffer.bits, pixels, size);
}else{
int height = h*3/2;
int width = w;
int i=0;
for(;i<height;++i)
memcpy(buffer.bits + buffer.stride * i
, pixels + width * i
, width);
}
(*env)->ReleaseByteArrayElements(env,pixelsArray,pixels,JNI_ABORT);
ANativeWindow_unlockAndPost(window);
}
ANativeWindow_release(window);
}
return;
}