adding cmake based android scripts and a reusable android library - samples to follow - haven't tested yet completely
This commit is contained in:
86
android/android-jni/jni/image_pool.cpp
Normal file
86
android/android-jni/jni/image_pool.cpp
Normal file
@@ -0,0 +1,86 @@
|
||||
#include "image_pool.h"
|
||||
|
||||
#include "yuv420sp2rgb.h"
|
||||
|
||||
#include <android/log.h>
|
||||
#include <opencv2/imgproc/imgproc.hpp>
|
||||
|
||||
|
||||
JNIEXPORT void JNICALL Java_com_opencv_jni_opencvJNI_addYUVtoPool(JNIEnv * env,
|
||||
jclass thiz, jlong ppool, jobject _jpool, jbyteArray jbuffer,
|
||||
jint jidx, jint jwidth, jint jheight, jboolean jgrey) {
|
||||
image_pool *pool = (image_pool *) ppool;
|
||||
|
||||
Ptr<Mat> mat = pool->getYUV(jidx);
|
||||
|
||||
if (mat.empty() || mat->cols != jwidth || mat->rows != jheight * 2) {
|
||||
//pool->deleteGrey(jidx);
|
||||
mat = new Mat(jheight * 2, jwidth, CV_8UC1);
|
||||
}
|
||||
|
||||
jsize sz = env->GetArrayLength(jbuffer);
|
||||
uchar* buff = mat->ptr<uchar> (0);
|
||||
|
||||
env->GetByteArrayRegion(jbuffer, 0, sz, (jbyte*) buff);
|
||||
|
||||
pool->addYUVMat(jidx, mat);
|
||||
Ptr<Mat> color = pool->getImage(jidx);
|
||||
if (color.empty() || color->cols != jwidth || color->rows != jheight) {
|
||||
//pool->deleteImage(jidx);
|
||||
color = new Mat(jheight, jwidth, CV_8UC3);
|
||||
}
|
||||
if (!jgrey) {
|
||||
|
||||
//doesn't work unfortunately..
|
||||
//cvtColor(*mat,*color, CV_YCrCb2RGB);
|
||||
color_convert_common(buff, buff + jwidth * jheight, jwidth, jheight,
|
||||
color->ptr<uchar> (0), false);
|
||||
|
||||
}
|
||||
|
||||
if (jgrey) {
|
||||
Mat grey;
|
||||
pool->getGrey(jidx, grey);
|
||||
|
||||
cvtColor(grey, *color, CV_GRAY2RGB);
|
||||
|
||||
}
|
||||
|
||||
pool->addImage(jidx, color);
|
||||
|
||||
}
|
||||
|
||||
image_pool::image_pool() {
|
||||
|
||||
}
|
||||
|
||||
image_pool::~image_pool() {
|
||||
__android_log_print(ANDROID_LOG_INFO, "image_pool", "destructor called");
|
||||
}
|
||||
|
||||
cv::Ptr<Mat> image_pool::getImage(int i) {
|
||||
return imagesmap[i];
|
||||
}
|
||||
void image_pool::getGrey(int i, Mat & grey) {
|
||||
|
||||
cv::Ptr<Mat> tm = yuvImagesMap[i];
|
||||
if (tm.empty())
|
||||
return;
|
||||
grey = (*tm)(Range(0, tm->rows / 2), Range::all());
|
||||
}
|
||||
cv::Ptr<Mat> image_pool::getYUV(int i) {
|
||||
|
||||
return yuvImagesMap[i];
|
||||
|
||||
}
|
||||
void image_pool::addYUVMat(int i, cv::Ptr<Mat> mat) {
|
||||
|
||||
yuvImagesMap[i] = mat;
|
||||
|
||||
}
|
||||
void image_pool::addImage(int i, cv::Ptr<Mat> mat) {
|
||||
|
||||
imagesmap[i] = mat;
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user