mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
1.8 KiB
86 lines
1.8 KiB
#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; |
|
|
|
} |
|
|
|
|