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) :
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 :
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 :
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 !!
Partager