Fixed a bug in the video decoder

This commit is contained in:
Bastian Kohler 2023-05-18 12:02:18 +02:00
parent d04d166e14
commit 2501662737
2 changed files with 14 additions and 41 deletions

View File

@ -54,7 +54,7 @@ public class MainActivity extends AppCompatActivity {
vd.setOnDetectionListener(new VideoDetector.OnDetectionListener() { vd.setOnDetectionListener(new VideoDetector.OnDetectionListener() {
@Override @Override
public void onDetection(DetectionReport detectionReport) { public void onDetection(DetectionReport detectionReport) {
Log.d("Listener", detectionReport.detectionType); detectionReport.log("OnDetection");
} }
}); });
vd.startDetection(); vd.startDetection();
@ -99,39 +99,4 @@ public class MainActivity extends AppCompatActivity {
} }
} }
} }
private void previewCamera() {
// Request Camera Access
getCameraAccess();
// Return when Camera Access not allowed or Camera Preview is running
if (!isCameraAccessAllowed() || cameraPreviewIsRunning)
return;
// Camera Preview is running
cameraPreviewIsRunning = true;
// Request Camera Provider
final ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(this);
//Check for Camera availability
cameraProviderFuture.addListener(new Runnable() {
@Override
public void run() {
try {
ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
bindPreview(cameraProvider);
} catch (ExecutionException | InterruptedException e) {
// No errors need to be handled for this Future. This should never be reached.
}
}
},ContextCompat.getMainExecutor(this));
}
private void bindPreview(@NonNull ProcessCameraProvider cameraProvider) {
// Create Preview
Preview preview = new Preview.Builder().build();
// Specify which Camera to use
CameraSelector cameraSelector = new CameraSelector.Builder().requireLensFacing(CameraSelector.LENS_FACING_BACK).build();
// Connect Preview to PreviewView
preview.setSurfaceProvider(previewView.getSurfaceProvider());
Camera camera = cameraProvider.bindToLifecycle((LifecycleOwner)this, cameraSelector, preview);
}
} }

View File

@ -25,6 +25,7 @@ import java.util.concurrent.ExecutionException;
@ExperimentalGetImage @ExperimentalGetImage
public class VideoDetector { public class VideoDetector {
// Calling Activity // Calling Activity
private final Context context; private final Context context;
// Camera Provider // Camera Provider
@ -41,21 +42,24 @@ public class VideoDetector {
/** Constructor */ /** Constructor */
public VideoDetector(Context context) { this.context = context; } public VideoDetector(Context context) {
this.context = context;
}
/** On Detection Listener - runs when a violation is reported */ /** On Detection Listener - runs when a violation is reported */
public interface OnDetectionListener { public interface OnDetectionListener {
public void onDetection(DetectionReport detectionReport); void onDetection(DetectionReport detectionReport);
} }
public void setOnDetectionListener(OnDetectionListener listener) { public void setOnDetectionListener(OnDetectionListener listener) {
this.listener = listener; this.listener = listener;
} }
public void reportViolation(float amplitude) { public void reportViolation(float amplitude) {
if (listener != null) {
DetectionReport detectionReport = new DetectionReport("123", "Video", amplitude); DetectionReport detectionReport = new DetectionReport("123", "Video", amplitude);
if (listener != null)
listener.onDetection(detectionReport); listener.onDetection(detectionReport);
} }
}
/** Return State of Video Detector */ /** Return State of Video Detector */
@ -66,7 +70,8 @@ public class VideoDetector {
/** Starts Video Detection */ /** Starts Video Detection */
public void startDetection() { public void startDetection() {
isDetectionRunning = true; if (isDetectionRunning)
return;
// Request Camera Provider // Request Camera Provider
final ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(context); final ListenableFuture<ProcessCameraProvider> cameraProviderFuture = ProcessCameraProvider.getInstance(context);
//Check for Camera availability //Check for Camera availability
@ -76,6 +81,7 @@ public class VideoDetector {
try { try {
cameraProvider = cameraProviderFuture.get(); cameraProvider = cameraProviderFuture.get();
bindLuminosityAnalysis(cameraProvider); bindLuminosityAnalysis(cameraProvider);
isDetectionRunning = true;
} catch (ExecutionException | InterruptedException e) { } catch (ExecutionException | InterruptedException e) {
// No errors need to be handled for this Future. This should never be reached. // No errors need to be handled for this Future. This should never be reached.
} }
@ -86,6 +92,8 @@ public class VideoDetector {
/** Stops Video Detection */ /** Stops Video Detection */
public void stopDetection() { public void stopDetection() {
if (!isDetectionRunning)
return;
cameraProvider.unbindAll(); cameraProvider.unbindAll();
isDetectionRunning = false; isDetectionRunning = false;
} }