2012-06-27 7 views
1

Mon problème est simple: je dois traiter chaque image d'une vidéo. Le processus calcule une zone à recadrer sur le cadre d'origine. Pour avoir de meilleures performances, je dois redimensionner le cadre d'origine. De nos jours, c'est fait grâce à une bibliothèque dédiée. Cependant, c'est lent. Nous nous demandons s'il y a une possibilité de réduire cette frame grâce à OpenGL ES 2.0 glsl.Redimensionner une image avec OpenGL ES 2.0

David

+0

@Radu Je suis totalement d'accord –

+0

vous essayez de les réduire les effectifs en temps réel? Ou est-il possible que vous fassiez une étape de pré-traitement avant de présenter la vidéo? –

+0

En fait, mon traitement devrait avoir lieu en temps réel pendant la lecture de la vidéo. Je vais vérifier la vidéo wwdc 2012. – zebeurton

Répondre

1

Si vous utilisez AV Foundation pour charger la vidéo à partir du disque ou de tirer vidéo de la caméra, vous pouvez utiliser mon framework open source GPUImage pour gérer le sous-jacent traitement OpenGL ES pour vous. Plus précisément, vous pouvez utiliser un GPUImageCropFilter pour rogner une zone sélectionnée de la vidéo d'entrée en utilisant les coordonnées normalisées 0.0-1.0 dans un CGRect. L'exemple FilterShowcase montre comment cela fonctionne en pratique pour la vidéo en direct de la caméra. Avec cela, vous n'avez pas besoin de toucher les appels d'API OpenGL ES manuels si vous ne le souhaitez pas.

+0

Merci Brad je suis déjà votre projet dans github :). J'utiliserai votre filtre de culture à la fin de mon pipeline vidéo. Avant de recadrer chaque image, j'ai besoin de calculer une boîte englobante. Et pour le traiter j'ai besoin d'une image sous-échantillonnée (de HD j'ai besoin d'une image de 320x200). – zebeurton

0

Enfin, je vais utiliser un objet frame buffer pour rendre ma texture. Je vais définir la fenêtre à la taille désirée et rendre ma texture comme d'habitude. Pour récupérer l'image sous-échantillonnée, j'utiliserai glGetReadPixels.

David