IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

Afficher des bitmaps à haute vitesse dans une application fenêtrée


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut Afficher des bitmaps à haute vitesse dans une application fenêtrée
    Bonjour,

    J'ai developpé une application de traitement vidéo en temps réel (Domaine : astronomie), que j'ai déjà optimisé à fond au niveau vitesse de traitement. Malheureusement il me reste un goulot d'etranglement, c'est lors de l'affichage du bitmap résultant sur la fenêtre de l'application. J'utilise simplement un bitblt.

    J'utilise Delphi 3, sur un PIV 2.4Ghz. La résolution du flux vidéo est en général de 640x480.
    Si je n'affiche pas le résultat (pas de bitblt), le traitement tourne à 17-18 FPS.
    Si j'affiche (avec le bitblt), je tombe à 10 FPS.

    Je cherche donc une alternative au bitblt, qui soit bien plus rapide et me permette d'atteindre au moins 15 FPS.
    J'utilise déjà Directshow pour le contrôle de la caméra, et je pensais à DirectX.
    Cependant je ne sais pas par où commencer. Comment fait-on donc pour simplement afficher des bitmaps sur l'écran (surface plate) à très haute vitesse ?
    Attention, l'application tourne en fenêtré.

    Merci pour votre aide.

    Cordialement
    Axel

  2. #2
    mat.M
    Invité(e)
    Par défaut
    Avec Direct Show il est possible de manipuler des surfaces Direct Draw...
    sinon prendre SDL..

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Merci,

    Oui, je sais pour DirectShow et DirectDraw, mais ça ne peut fonctionner que quand le traitement se fait de A à Z dans un graph DirectShow.

    J'utilise DirectShow pour extraire des bitmaps à partir du flux vidéo.
    A partir du moment où j'ai extrait mon bitmap je ne suis plus dans un flux Directshow, j'effectue le traitement de façon classique, sur les bitmaps obtenus.
    Une fois le traitement effectué je ne peux pas me réinsérer dans un nouveau flux en sortie. Il faudrait que j'ecrive un filtre Directshow rien que pour ça et je n'ai pas du tout les compétences nécessaires.

    Après, SDL, je ne connais pas du tout.
    N'y a-t-il pas un tutoriel quelquepart juste pour afficher rapidement des bitmaps sur une surface plane ?

    ...

    Cordialement
    Axel

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 24
    Points : 27
    Points
    27
    Par défaut
    OpenGL + PBO, pour peu que votre driver expose cet extension. Fait des étincelles avec une carte en PCI-e.

    http://oss.sgi.com/projects/ogl-samp...fer_object.txt
    Voir l'exemple sur les "Streaming textures".

    Principe de base: permet de mapper une texture dans l'espace d'adressage du process, overhead minimal: je raytrace joyeusement des images en 1024x1024 en flottant à 100 fps.

    Note: Il existe des solutions équivalentes avec DirectX, mais ma religion m'en interdit l'usage.

  5. #5
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 519
    Points : 5 168
    Points
    5 168
    Par défaut
    tu devrais éviter le multipost interdit par la charte du forum et plutot demander à un modérateur de déplacer ton post lorsque tu n'as pas de réponse

    http://www.developpez.net/forums/sho...d.php?t=227436
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  6. #6
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    OpenGL + PBO
    Puisque le langage est Delphi, GLscene offre une intégration de OpenGL dans des composants VCL et un interface plus abouti.

    Pour, info qu'est-ce que PBO ?
    j'ai juste trouvé que PBO=Pixels Buffer Objects
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  7. #7
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par t.b.p.
    OpenGL + PBO, pour peu que votre driver expose cet extension. Fait des étincelles avec une carte en PCI-e.
    .
    Open GL que je sache c'est pour rendre de la 3d pas des captures vidéos....

    Oui, je sais pour DirectShow et DirectDraw, mais ça ne peut fonctionner que quand le traitement se fait de A à Z dans un graph DirectShow.

    J'utilise DirectShow pour extraire des bitmaps à partir du flux vidéo.
    A partir du moment où j'ai extrait mon bitmap je ne suis plus dans un flux Directshow, j'effectue le traitement de façon classique, sur les bitmaps obtenus.
    La solution la plus viable c'est de créer un thread pour l'acquisition de récupérer les bitmaps..et de rester avec le GDI..
    Il faut utiliser la technique des HDC en mémoire , copier la pile d'images acquises..et faire un BitBlt
    SDL et autres ne donneront pas forcément des gains très significatifs sauf si tu est en mode plein-écran.
    Direct X est presque aussi lent que le GDI en mode fenêtré..
    Le problème avec SDL c'est que c'est pas modulable..ou bien tu initialises SDL pour toute l'appli ou rien...
    Quant à Open GL c'est pour rendre des objets et primitives en 3d donc je doute de gains significatifs..
    Dernière modification par mat.M ; 27/10/2006 à 18h50.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 24
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par mat.M
    Open GL que je sache c'est pour rendre de la 3d pas des captures vidéos....
    Un stream de bitmap est un stream de bitmap. OpenGL avec l'extension PBO permet d'assurer des transferts de bitmap (sous forme de texture donc) avec le minimum de surcoût et de copies, y compris dans le driver, puisque encore une fois celà permet de faire apparaitre le bout de mémoire de la carte video ou va se trouver la texture dans l'espace d'adresse du processus.

    Les bitblt et autres techniques requierent au moins une copie supplémentaire.


    Citation Envoyé par mat.M
    ...Blah blah blah...
    Quant à Open GL c'est pour rendre des objets et primitives en 3d donc je doute de gains significatifs..
    Supputer c'est bien, essayer c'est mieux. Je l'ai fait. J'affirme qu'il y a une difference plus que significative. Donc à moins que vous fournissiez des arguments plus consistants...

    Que celà soit en fenetré ou plein écran ne change rien à l'affaire. Qu'on fasse de la 3D ou de la simple 2D non plus. Rien n'est plus facile que d'obtenir l'affichage d'une texture avec un correspondance 1:1, si tel est le souhait.

    J'insiste donc, cette méthode est la plus performante pour transferer des images vers la carte video quoiqu'on en fasse après (et si je ne m'abuse DirectX doit permettre qque chose de similaire).

    Toute la documentation nécessaire se trouve dans le lien de mon post précedent, examples inclus.

  9. #9
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par shenron666
    tu devrais éviter le multipost interdit par la charte du forum et plutot demander à un modérateur de déplacer ton post lorsque tu n'as pas de réponse

    http://www.developpez.net/forums/sho...d.php?t=227436
    Je suis désolé, je suis un peu nouveau sur ce forum. J'ai posté d'abord sur le forum que tu indiques, mais je me suis trompé. J'ai essayé de supprimer mon message mais je n'ai pas trouvé de fonction "suppression". J'ai juste trouvé "Delestage". J'ai essayé, pensant que ça supprimerait le message pendant la maintenance journaliere (je suppose qu'il y en a une ? Je bosse dans un service informatique). Mais apparemment ce n'etait pas ça...
    Navré

  10. #10
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par shenron666
    tu devrais éviter le multipost interdit par la charte du forum et plutot demander à un modérateur de déplacer ton post lorsque tu n'as pas de réponse

    http://www.developpez.net/forums/sho...d.php?t=227436
    Je suis désolé, je suis un peu nouveau sur ce forum. J'ai posté d'abord sur le forum que tu indiques, mais je me suis trompé. J'ai essayé de supprimer mon message mais je n'ai pas trouvé de fonction "suppression". J'ai juste trouvé "Delestage". J'ai essayé, pensant que ça supprimerait le message pendant la maintenance journaliere (je suppose qu'il y en a une ? Je bosse dans un service informatique). Mais apparemment ce n'etait pas ça...
    Navré

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/08/2007, 15h53
  2. Réponses: 5
    Dernier message: 06/02/2007, 14h46
  3. Afficher des bitmaps à haute vitesse dans une application
    Par acanicio dans le forum API graphiques
    Réponses: 1
    Dernier message: 27/10/2006, 11h03
  4. Réponses: 2
    Dernier message: 14/06/2006, 09h53
  5. Insérer des BITMAP de 24bit dans une toolbar ?
    Par damien99 dans le forum MFC
    Réponses: 5
    Dernier message: 01/03/2006, 22h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo