Bonsoir à tous,
J’aurais une petite question concernant un code contenant une capture vidéo. Ce dernier ayant une boucle qui modifie la géométrie de l’image grâce à une captation sonore ainsi que des filtres appliqué à la vidéo, fini par ramer. Je souhaiterais savoir s’il est possible de vider le cache de processing à chaque exécution d’une boucle. Background(0) ne fonctionnant pas ni dans void set up() ni dans void draw() ou void captureEvent(Capture video).
En vous remerciant d’avance.
Hors ligne
Bonsoir,
Qu'est ce que tu entends par "cache de Processing" ? background(0) change la couleur de fond pour du noir, il ne s'agit pas de mémoire cache
Il peut y avoir différents moyens d'optimiser ton code quand il commence à ramer, tout ça dépend de ton code et de ce qu'il utilise spécifiquement
Limiter les calculs, limiter les parcours de grandes structures de données, limiter la création de multiples objets, etc. Sans le code, c'est difficile à dire, mais dans ton cas, peut-être que c'est la modification de la géométrie, et les calculs que ça engendre qui ralentissent ? Ou alors c'est liée à l'arrivée de l'image capturée ?
Hors ligne
En fait effectivement vider le cache n’est pas vraiment le bon terme. Je pense qu’il s’agit de rafraichir l’image à chaque boucle. Il me semble que c’est la capture vidéo qui fait ramer le code, puisque la modification géométrique n’est pas énorme. J’utilise une camera miniDV. Voici le code :
import ddf.minim.*; Minim minim; AudioInput in; import processing.video.*; Capture video; float moyenneTemp; float moyenne; void setup() { size(1024, 768); video = new Capture(this, width, height, 60); minim = new Minim(this); minim.debugOn(); in = minim.getLineIn(Minim.STEREO, 512); } void captureEvent(Capture video){ video.read(); } void draw() { moyenneTemp = 0; moyenne = 0; for(int i = 0; i < in.bufferSize() - 1; i++){ println (in.bufferSize()); moyenneTemp = moyenneTemp + abs(in.left.get(i)); } moyenne = moyenneTemp/in.bufferSize(); println(moyenne); float angle = cos(moyenne+1); translate(width/2, height/2); rotate(-angle); image(video, -width/2, -height/2); filter(INVERT); filter(GRAY); } void stop(){ in.close(); minim.stop(); super.stop(); }
J’ai essayé le code en éclaté et apparemment ca fonctionne mais le tout ensemble pose problème. Du coup je cherche un moyen pour qu’à la fin de chaque boucle concernant la vidéo, il y ai une sorte de remise à zéro afin que processing n’ai pas à calculer sans cesse une suite d’images.
Hors ligne