Comment faire pour afficher un raw YUV dans un cadre de Cacao programme OpenGL
J'ai été assigné à l'esprit la tâche d'écrire un programme qui prend un échantillon brut YUV fichier et l'afficher dans un Cacao programme OpenGL.
Je suis un stagiaire dans mon travail et j'ai peu ou aucune idée de comment commencer. J'ai été la lecture de wikipédia & des articles sur YUV, mais je ne pouvais pas trouver une bonne source code sur comment ouvrir un raw YUV fichier, extraire les données et de les convertir en RVB et l'afficher dans la fenêtre d'affichage.
Essentiellement, j'ai besoin d'aide avec les aspects suivants de la tâche
-comment extraire le YUV données à partir de l'exemple de fichier YUV
-comment faire pour convertir le YUV données dans l'espace de couleurs RVB
-comment faire pour afficher l'espace de couleurs RVB en OpenGL. (Celui-ci je pense que je peux comprendre avec le temps, mais j'ai vraiment besoin d'aide avec les deux premiers points)
veuillez me dire les classes à utiliser, ou de m'indiquer les endroits où je peux apprendre sur YUV graphique/affichage vidéo
Vous devez vous connecter pour publier un commentaire.
Cette réponse n'est pas correcte, voir les autres réponses et commentaires. Réponse originale à cette question à gauche en dessous pour la postérité.
Vous ne pouvez pas l'afficher directement.Vous aurez besoin de les convertir en RVB texture. Comme vous l'avez compris de Wikipédia, il y a un tas de variations sur l'espace de couleurs YUV. Assurez-vous que vous utilisez la bonne.Pour chaque pixel, la conversion YUV vers RGB est une simple transformation linéaire. Vous venez de faire la même chose à chaque pixel de façon indépendante.
Une fois que vous avez converti l'image en RVB, vous pouvez l'afficher par la création d'une texture. Vous devez appeler
glGenTextures()
d'allouer une texture poignée,glBindTexture()
pour lier la texture à la rendre contexte, etglTexImage2D()
pour télécharger les données de la texture pour le GPU. Le rendre, vous à nouveau appelglBindTexture()
, suivi par le rendu d'un quad, avec des coordonnées de texture correctement configuré.À rendre:
Et n'oubliez pas d'appeler
glEnable(GL_TEXTURE_2D)
à un certain moment au cours de l'initialisation, et de l'appelerglDeleteTextures(1, &texture)
lors de l'arrêt.Je l'ai fait avec YUV images capturées par une caméra CCD. Malheureusement, il y a un certain nombre de différents formats YUV. Je crois que celui que Apple utilise pour la
GL_YCBCR_422_APPLE
format de texture est techniquement 2VUY422. Pour convertir une image à partir d'un YUV422 image générée par un IIDC caméra Firewire à 2VUY422, j'ai utilisé le suivant:Efficace de l'affichage d'une vidéo YUV source, vous pouvez utiliser Apple client extension de stockage, que vous pouvez configurer à l'aide de quelque chose comme ce qui suit:
Cela vous permet de modifier rapidement les données stockées au sein de votre côté client texture vidéo avant chaque image à afficher sur l'écran.
Pour dessiner, vous pouvez utiliser le code suivant:
Adam Rosenfield du commentaire est incorrect. Sur Mac, vous pouvez afficher YCbCr (l'équivalent numérique YUV) des textures à l'aide de la
GL_YCBCR_422_APPLE
format de texture, comme spécifié dans le APPLE_ycbcr_422 extension.