Пример #1
0
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;
}
Пример #2
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;
}