Bonsoir,

je réalise un petit soft d'analyse de vidéo.
Pour cela, j'ai divisé mon application en deux couches (sur les conseils reçus dans ce forum) :
- Preview qui récupère le flux vidéo et réalise le travail.
- AugmentedReality qui s'occupe de l'affichage des informations.
Voici un code rapide de ce que j'ai fait :
Code java : Sélectionner tout - Visualiser dans une fenêtre à part
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
 
public class MonAppli extends Activity
{
 
private Preview mPreview = null ;
 
 
/** Called when the activity is first created.*/
public void onCreate(Bundle savedInstanceState)
	{
	super.onCreate(savedInstanceState) ;
 
	requestWindowFeature(Window.FEATURE_NO_TITLE) ; // Hide the window title.
 
	AugmentedRealityLayer augrea = new AugmentedRealityLayer(this) ;
	mPreview = new Preview(this, augrea, 1) ; // Create our Preview view and set it as the content of our activity.
 
	FrameLayout frameLayout = new FrameLayout(this) ; // L'affichage en deux couches
	frameLayout.addView(mPreview) ;
	frameLayout.addView(augrea) ;
 
 
	setContentView(frameLayout) ;
	}
 
}
 
 
 
public class AugmentedRealityLayer extends View
{
 
 
public AugmentedRealityLayer(Context context)
	{
	super(context) ;
	}
 
protected void onDraw(Canvas canvas)
	{
	super.onDraw(canvas) ;
 
	// J'affiche ici ce que je veux.
	}
}
 
 
 
public class Preview extends SurfaceView implements SurfaceHolder.Callback
{
 
private SurfaceHolder mHolder = null ;
private Camera mCamera = null ;
 
public Preview(Context context, AugmentedRealityLayer augrea, int nbCPU)
	{
	super(context) ;
	// Install a SurfaceHolder.Callback so we get notified when the underlying surface is created and destroyed.
	mHolder = getHolder() ;
	mHolder.addCallback(this) ;
	mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS) ;
	}
 
public void surfaceCreated(SurfaceHolder holder)
	{
	// The Surface has been created, acquire the camera and tell it where to draw.
	mCamera = Camera.open() ;
 
 
	mCamera.setPreviewCallback(
		new PreviewCallback()
			{
			public void onPreviewFrame(final byte[] data, final Camera camera)
				{
				// J'analyse mon flux vidéo ici grâce à ce callback.
				}
			}
		) ;
	}
 
... // Le code classique d'affichage dans la doc Android.
 
}


Mais une fois que mon travail est terminé, je souhaiterai savoir comment forcer l'appel de la méthode onDraw() qui gère les affichages ?
J'ai essayé "invalidate", mais cela provoque une erreur :-(
Est ce que quelqu'un aurait une idée ?

Merci par avance