Un malentendu de V4L2

J’ai un petit problème avec la taille de mes tampons dans un programme C ++. Je récupère les images YUYV d’une caméra utilisant V4L2 (un exemple est disponible ici )

Je veux prendre une image et la placer dans ma propre structure d’image. Voici le tampon donné par la structure V4L2 et sa taille

(uchar*)buffers_[buf.index].start, buf.bytesused 

Dans ma structure, je crée un nouveau tampon (mybuffer) de la largeur * height * bitSize (la taille en octets est de 4 puisque je saisis des images YUYV ou YUV422).

Le problème est que je m’attendais à ce que le tampon buf ait la même taille que celui que j’ai créé. Mais ce n’est pas le cas, par exemple lorsque je saisis une image 640 * 480 buf = 614400 et mybuffer = 1228800 (deux fois plus grande).

Est-ce que quelqu’un a une idée de pourquoi c’est le cas?

YUV422 utilise 4 octets par 2 pixels

En mode YUV422 , les valeurs U et V sont partagées par deux pixels. Les octets dans l’image sont classés comme U0 Y0 V0 Y1 U2 Y2 V2 Y3 etc.

Donner des pixels comme:

 pixel 0 U0Y0V0 pixel 1 U0Y1V0 pixel 2 U2Y2V2 pixel 3 U2Y3V2