ARToolkitPlugin

Hi, I encountered a problem after installing ARToolkitPlugin from unreal4ar, I can not change the camera resolution for android. When I change the resolution to 640x480 there are artifacts (at any resolution appear artifacts) how can I increase the resolution?


//
// Copyright 2016 Adam Horvath - WWW.UNREAL4AR.COM - info@unreal4ar.com - All Rights Reserved.
//

#include "ARToolkitPluginPrivatePCH.h"
#include "IARToolkitPlugin.h"


#ifdef __ANDROID__
#include "../../../Core/Public/Android/AndroidApplication.h"
#include "../../../Launch/Public/Android/AndroidJNI.h"
#include <android/log.h>

#define LOG_TAG "CameraLOG"

int SetupJNICamera(JNIEnv* env);
JNIEnv* ENV = NULL;

static jmethodID AndroidThunkJava_CamStart;
static jmethodID AndroidThunkJava_CamStop;
static jmethodID AndroidThunkJava_UnpackData;

int FrameWidth = 640;
int FrameHeight = 480;
bool newFrame = false;
bool processing = false;

unsigned char* Buffer =  new unsigned char[FrameWidth*FrameHeight];
signed char* BufferTmp = new signed char[FrameWidth*FrameHeight];

#endif

bool processingTexture = false;

class FARToolkitPlugin : public IARToolkitPlugin
{
	/** IModuleInterface implementation */
	virtual void StartupModule() override;
	virtual void ShutdownModule() override;
};

IMPLEMENT_MODULE( FARToolkitPlugin, ARToolkitPlugin )

void FARToolkitPlugin::StartupModule()
{
	// This code will execute after your module is loaded into memory (but after global variables are initialized, of course.)
	// Attempt to create the device, and start it up.  Caches a pointer to the device if it successfully initializes

#if PLATFORM_ANDROID
	JNIEnv* env = FAndroidApplication::GetJavaEnv();
	SetupJNICamera(env);
#endif


	TSharedPtr<FARToolkitDevice> ARToolkitStartup(new FARToolkitDevice);
	if (ARToolkitStartup->StartupDevice())
	{
		ARToolkitDevice = ARToolkitStartup;
	}
	//TODO: error handling	if dll cannot be loaded  

}


void FARToolkitPlugin::ShutdownModule()
{
	// This function may be called during shutdown to clean up your module.  For modules that support dynamic reloading,
	// we call this function before unloading the module.
	if (ARToolkitDevice.IsValid())
	{
		ARToolkitDevice->ShutdownDevice();
		ARToolkitDevice = nullptr;
	}

#ifdef __ANDROID__
	FMemory::Free(Buffer);
	FMemory::Free(BufferTmp);
#endif

	
}

#ifdef __ANDROID__
int SetupJNICamera(JNIEnv* env)
{
	if (!env) return JNI_ERR;

	ENV = env;


	AndroidThunkJava_CamStart = FJavaWrapper::FindMethod(ENV, FJavaWrapper::GameActivityClassID, "AndroidThunkJava_CamStart", "()V", false);
	if (!AndroidThunkJava_CamStart)
	{
		UE_LOG(ARToolkit, Log, TEXT("ERROR: CamStart"));
		return JNI_ERR;
	}

	AndroidThunkJava_CamStop = FJavaWrapper::FindMethod(ENV, FJavaWrapper::GameActivityClassID, "AndroidThunkJava_CamStop", "()V", false);
	if (!AndroidThunkJava_CamStop)
	{
		UE_LOG(ARToolkit, Log, TEXT("ERROR: CamStop"));
		return JNI_ERR;
	}

	AndroidThunkJava_UnpackData = FJavaWrapper::FindMethod(ENV, FJavaWrapper::GameActivityClassID, "AndroidThunkJava_UnpackData", "()V", false);
	if (!AndroidThunkJava_UnpackData)
	{
		UE_LOG(ARToolkit, Log, TEXT("ERROR: UnpackData"));
		return JNI_ERR;
	}

	return JNI_OK;
}
void AndroidThunkCpp_CamStart()
{
	if (JNIEnv* Env = FAndroidApplication::GetJavaEnv())
	{
		FJavaWrapper::CallVoidMethod(Env, FJavaWrapper::GameActivityThis, AndroidThunkJava_CamStart);
	}
}

void AndroidThunkCpp_CamStop()
{
	if (JNIEnv* Env = FAndroidApplication::GetJavaEnv())
	{
		FJavaWrapper::CallVoidMethod(Env, FJavaWrapper::GameActivityThis, AndroidThunkJava_CamStop);
	}
}

void AndroidThunkCpp_UnpackData()
{
	if (JNIEnv* Env = FAndroidApplication::GetJavaEnv())
	{
		FJavaWrapper::CallVoidMethod(Env, FJavaWrapper::GameActivityThis, AndroidThunkJava_UnpackData);
	}
}

extern "C" bool Java_com_epicgames_ue4_GameActivity_nativeCameraFrameArrived(JNIEnv* LocalJNIEnv, jobject LocalThiz, jint frameWidth, jint frameHeight, jbyteArray data)
{
	if (!processingTexture){
		int len = LocalJNIEnv->GetArrayLength(data);

		//Copy webcam data to the buffer
		LocalJNIEnv->GetByteArrayRegion(data, 0, len, reinterpret_cast<jbyte*>(BufferTmp));
		Buffer = (unsigned char*)BufferTmp;
		newFrame = true;
		//FPlatformMisc::LowLevelOutputDebugStringf(TEXT("Native Camera frame arrived: '%d %d'
"), frameWidth, frameHeight);
	}

	return JNI_TRUE;
}
#endif





I had to re-package the plugin for it to work