[Moverio BT-200 General] nomisch:
Hello,

First a quick answer for the compilation problem:

--> have a look at the manual (https://tech.moverio.epson.com/en/bt-2000/tools.html), putting and referring correctly the H725Ctrl.jar is a key.

--> they even propose a kind of partial solution in order to have completion. It has to be redone every time you compile/recompile your program though. (Changing the order in the app.iml file)

On my side, I have a very painful problem: (version R1.3 here)

I have carefully followed their Sample Code (Ch. 6.10) but I am unable to open the camera. The system always fails at the camera.open() command in the function below, the output error is shown below the function.

Do any of you understand what may be the problem ? Or anyone could submit a working source code that I could try ....

@Override
public void surfaceCreated(SurfaceHolder holder) {
Log.d(TAG, "surfaceCreated");
try {
camera = android.hardware.Camera.open();
camera.setPreviewDisplay(holder);
} catch (RuntimeException e) {
Log.d("SR-DEBUG", "There has been a problem opening the camera");
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}
camera.addCallbackBuffer(mPreviewBuf);
camera.setPreviewCallbackWithBuffer(mPreviewCB);
}

Returned Error:

09-22 14:28:28.437 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 D/com.example.simonruffieux.test_cameradisplay_bt2000.MainActivity: surfaceCreated
09-22 14:28:28.437 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 V/Camera: connect
09-22 14:28:28.445 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 D/SR-DEBUG: There has been a problem opening the camera
09-22 14:28:28.445 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: java.lang.RuntimeException: Fail to connect to camera service
09-22 14:28:28.445 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at android.hardware.Camera.native_setup(Native Method)
09-22 14:28:28.445 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at android.hardware.Camera.<init>(Camera.java:317)
09-22 14:28:28.445 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at android.hardware.Camera.open(Camera.java:294)
09-22 14:28:28.453 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at com.example.simonruffieux.test_cameradisplay_bt2000.MainActivity$2.surfaceCreated(MainActivity.java:70)
09-22 14:28:28.453 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at android.view.SurfaceView.updateWindow(SurfaceView.java:543)
09-22 14:28:28.453 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at android.view.SurfaceView.access$000(SurfaceView.java:82)
09-22 14:28:28.453 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:170)
09-22 14:28:28.453 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:590)
09-22 14:28:28.453 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1617)
09-22 14:28:28.460 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
09-22 14:28:28.460 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at android.os.Handler.dispatchMessage(Handler.java:99)
09-22 14:28:28.460 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at android.os.Looper.loop(Looper.java:137)
09-22 14:28:28.460 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at android.app.ActivityThread.main(ActivityThread.java:4424)
09-22 14:28:28.460 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at java.lang.reflect.Method.invokeNative(Native Method)
09-22 14:28:28.460 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at java.lang.reflect.Method.invoke(Method.java:511)
09-22 14:28:28.460 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
09-22 14:28:28.468 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
09-22 14:28:28.468 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/System.err: at dalvik.system.NativeStart.main(Native Method)
09-22 14:28:28.468 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 D/AndroidRuntime: Shutting down VM
09-22 14:28:28.468 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x40a891f8)
09-22 14:28:28.484 11461-11461/com.example.simonruffieux.test_cameradisplay_bt2000 E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
at com.example.simonruffieux.test_cameradisplay_bt2000.MainActivity$2.surfaceCreated(MainActivity.java:79)
at android.view.SurfaceView.updateWindow(SurfaceView.java:543)
at android.view.SurfaceView.access$000(SurfaceView.java:82)
at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:170)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:590)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1617)
at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)

I am using the following <project>/app/build.gradle:

apply plugin: 'com.android.application'

android {
compileSdkVersion 24
buildToolsVersion "24.0.2"

defaultConfig {
applicationId "com.example.simonruffieux.test_cameradisplay_bt2000"
minSdkVersion 15
targetSdkVersion 24
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
testCompile 'junit:junit:4.12'
compile files('libs/H725Ctrl.jar')
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.android.support:support-v4:24.2.1'
}

The following <project>/build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.3'

// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
jcenter()
}

gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs.add('-Xbootclasspath/p:D:/Devel/Android/test_CameraDisplay_BT2000/app/libs/H725Ctrl.jar')
}
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}

And finally, the whole MainActivity.java class:

package com.example.simonruffieux.test_cameradisplay_bt2000;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.app.Activity;
import android.util.Log;
import android.hardware.Camera;
import android.view.WindowManager;
import android.os.Bundle;
import java.util.List;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {
private String TAG = this.getClass().getName();
private Camera camera = null;
private SurfaceHolder mHolder = null;

private byte[] mPreviewData = new byte[1920 * 1080 * 3 / 2];
private byte[] mPreviewBuf = new byte[1920 * 1080 * 3 / 2];
private Object lockObject = new Object();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//SR Full Screen
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().addFlags(0x80000000);

//SR Tests
//camera = Camera.open();
//Camera.Parameters params = camera.getParameters();
//List<String> supportedMode = params.getSupportedEpsonCameraMode(); not accepted, says it does not know this method ...

//SR set camera callback to SurfaceView
SurfaceView cameraPreview = (SurfaceView) findViewById(R.id.preview);
mHolder = cameraPreview.getHolder();
mHolder.addCallback(previewCallback);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

private Camera.PreviewCallback mPreviewCB = new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte data[], Camera camera) {
Log.d(TAG, "Save preview image");
synchronized (lockObject) {
mPreviewData = data;
}
camera.addCallbackBuffer(mPreviewBuf);
}
};

private SurfaceHolder.Callback previewCallback = new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
Log.d(TAG, "surfaceDestroyed");
camera.stopPreview();
camera.release();
camera = null;
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
Log.d(TAG, "surfaceCreated");
try {
camera = android.hardware.Camera.open();
camera.setPreviewDisplay(holder);
} catch (RuntimeException e) {
Log.d("SR-DEBUG", "There has been a problem opening the camera");
e.printStackTrace();
}
catch(IOException e){
e.printStackTrace();
}
camera.addCallbackBuffer(mPreviewBuf);
camera.setPreviewCallbackWithBuffer(mPreviewCB);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
camera.stopPreview();
Camera.Parameters params = camera.getParameters();
/* Set camera mode to single-through-5m mode*/
params.setEpsonCameraMode(Camera.Parameters.EPSON_CAMERA_MODE_SINGLE_THROUGH_5M);
/* Set preview resolution to 1080p */
params.setPreviewSize(1920, 1080);
/* Set frame rate to 7.5fps */
params.setPreviewFpsRange(7500, 7500);
/* Reflect parameter change to camera device */
camera.setParameters(params);
camera.addCallbackBuffer(mPreviewData);
camera.setPreviewCallbackWithBuffer(mPreviewCB);
try {
camera.startPreview();
} catch (RuntimeException e) {
e.printStackTrace();
}
}
};
}