Ecrire sur la preview de la camera
Bonjour,
Je dois afficher du texte et dessiner sur la preview de la camera (pour faire un semblant de réalité augmentée).
Je précise que je suis partit de ce tutoriel : http://imrannazar.com/Augmented-Real...id-NDK:-Part-1
La différence est que moi, je dois bien séparer le code. Du coup j'ai créé 3 classes : MyActivity, Preview (qui extend une surfaceView pour afficher la camera et implements SurfaceHolder.Callback) et une classe OverlayView (qui extends SurfaceView) qui sert a dessiner dessus.
Or le tutoriel utilise 2 classes seulement : une Activité qui contient la preview de la camera (et qui implements directement SurfaceHolder.Callback) et une OverlayView.
Mon XML est celui-ci (je n'utilise pas de FrameLayout contrairement à lui, mais je ne pense pas que cela soit la cause du soucis) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayoutCamera"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:layout_weight="2" >
<!-- <com.android.sod.OverlayView -->
<!-- android:id="@+id/surface_overlay" -->
<!-- android:layout_width="wrap_content" -->
<!-- android:layout_height="wrap_content" /> -->
<!-- <SurfaceView -->
<!-- android:id="@+id/surface_camera" -->
<!-- android:layout_width="wrap_content" -->
<!-- android:layout_height="wrap_content" /> -->
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayoutMenu"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="bottom" >
<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_gravity="bottom"
android:layout_weight="1"
android:text="boutton1" />
<Button
android:id="@+id/button2"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_gravity="bottom"
android:layout_weight="1"
android:text="button2" />
</LinearLayout>
</LinearLayout> |
J'ai commenté les tags surfaceview et overlayview car j'aimerai les rajouter directement dans le code, sans passer par le XML. Et c'est (peut-être) la où se situe mon problème.
En faisant ceci dans mon activity :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
public class MyActivity extends Activity
{
private static final String LOG_TAG_VIDEO_PREVIEW = "VideoPreview";
private Camera mCam;
private SurfaceView mCamSV;
private SurfaceHolder mCamSH;
private OverlayView mOverSV;
private int CAMERA_ID_SELECTED = 0;
private Preview mPreview;
private int cameraCurrentlyLocked;
private LinearLayout llCam;
/* Activity event handlers */
// Called when activity is initialised by OS
@Override
public void onCreate(Bundle inst)
{
super.onCreate(inst);
setContentView(R.layout.main);
//full screen
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
llCam = (LinearLayout)findViewById(R.id.linearLayoutCamera);
// Initialise camera
initCamera();
}
//-----PRIVATE METHODs
// Initialise camera and surface
private void initCamera()
{
//preview
mPreview = new Preview(this);
//je l'ajoute a mon llCam
llCam.addView(mPreview);
//on fait appel a surfaceCreated de Preview car c'est ici qu'on instancie mCam (Camera.open()), et on pourra la recuperer par getCamera() par la suite
mPreview.surfaceCreated(mPreview.getHolder());
//OverlayView
mOverSV = new OverlayView(this); //(OverlayView)findViewById(R.id.surface_overlay);
//mOverSV.getHolder().setFormat(PixelFormat.TRANSLUCENT);
mOverSV.setCamera(mPreview.getCamera());
llCam.addView(mOverSV);
}
// Stop camera when application ends
private void stopCamera()
{
mPreview.surfaceDestroyed(mCamSH);
}
} |
et ça plante :
Code:
01-31 00:30:53.613: E/AndroidRuntime(10693): java.lang.RuntimeException: Fail to connect to camera service
à la sortie du initCamera() ...
J'essaye pourtant de reproduire le même comportement que le XML du tutoriel mais apparemment il y a quelque chose qui cloche :?
Avez-vous une idée sur la façon de résoudre ce soucis ? D'avance merci !!
:)