jint NS_SendData(JNIEnv *env, jobject object, jlong handler, jbyteArray data, jint size) { #ifdef DEBUG unsigned long cost = GTimeGet(); #endif LPSERIAL engine = (LPSERIAL)handler; env->GetByteArrayRegion(data, 0, size, (signed char*)engine->pWriteBuffer); Write_Port(engine->mHandle, engine->pWriteBuffer, size); #ifdef DEBUG engine->pWriteBuffer[size] = '\0'; LOGI("(%s,%d) cost = %ld", engine->pWriteBuffer, size, GTimeGet() - cost); #endif return 0; }
jint NV_ReadData(JNIEnv *env, jobject object, jlong handler, jbyteArray data, jint size) { #ifdef DEBUG unsigned long cost = GTimeGet(); #endif jint ret = 0; jboolean isCopy = false; LPVIDEO engine = (LPVIDEO)handler; signed char* buffer = env->GetByteArrayElements(data, &isCopy); if (buffer == NULL) { LOGI("buffer failed!\n"); return 0; } //LOGE("%d, %d", engine->mSourceFormat, engine->mTargetFormat); ret = Read_Video(engine->mHandle, engine->pSourceBuffer, engine->mSourceSize); #ifdef DEBUG LOGE("Read_Video = %d", ret); #endif if (ret > 0) { if (engine->mSourceFormat == CP_MJPEG) { //MJPG PROCESS ret = mjpg_raw_insert_huffman(engine->pSourceBuffer, ret, (unsigned char *)engine->pTargetBuffer); //mjpg data. decode to raw and convert. #ifdef DEBUG LOGE("mjpeg full size = %d", ret); #endif if (engine->mTargetFormat == CP_MJPEG) { memcpy(buffer, engine->pTargetBuffer, ret); #ifdef DEBUG_DUMP if (engine->frame > 0) { fwrite(engine->pTargetBuffer, sizeof(char), ret, engine->pfile); fclose(engine->pfile); engine->frame = 0; } #endif } else { LOGE("NOT SUPPORT DECODE!"); } } else if (engine->mSourceFormat != engine->mTargetFormat) { if (engine->mSourceFormat == CP_PAF_YUYV && engine->mTargetFormat == CP_PAF_NV21) { convert_YUYV_NV21(engine->pSourceBuffer, (unsigned char *)buffer, engine->mWidth, engine->mHeight); ret = calcImageSize(engine->mWidth, engine->mHeight, engine->mTargetFormat); } else if (engine->mSourceFormat == CP_PAF_YUYV && engine->mTargetFormat == CP_PAF_NV12) { convert_YUYV_NV12(engine->pSourceBuffer, (unsigned char *)buffer, engine->mWidth, engine->mHeight); ret = calcImageSize(engine->mWidth, engine->mHeight, engine->mTargetFormat); } else { LOGE("convert color format failed!"); ret = 0; } } else { // copy out memcpy(buffer, engine->pSourceBuffer, engine->mSourceSize); } } env->ReleaseByteArrayElements(data, buffer, isCopy); return ret; }