Les formats d'Image NV12 de stockage dans la mémoire
Je suis tout à fait comprendre au sujet de la taille de la NV12 format comme décrit à la question
Maintenant, je suis de lecture à partir de deux sources sur le stockage des UV avion dans ce format:
on est https://msdn.microsoft.com/en-us/library/windows/desktop/dd206750(v=vs. 85).aspx
NV12
Tous les échantillons Y apparaissent en premier dans la mémoire comme un tableau de unsigned char valeurs avec un même nombre de lignes. L'axe de l'avion est immédiatement suivi par un tableau de unsigned char valeurs qui contient des paniers U (Cb) et V (Cr) des échantillons. Lorsque le combiné U-V tableau est traitée comme un tableau de little-endian valeur d'un MOT, le Lsb contiennent les valeurs U, et l'Esm contenir le V de valeurs. NV12 est le préféré 4:2:0 format de pixel pour DirectX VA. Il est prévu à moyen terme, l'exigence pour DirectX VA accélérateurs de soutien 4:2:0 vidéo. L'illustration suivante montre l'axe de l'avion et le tableau qui contient des paniers U et V des échantillons.
Ce que je comprends, c'est: dans l'UV avion chaque U et V sont stockés dans un seul octet.
Quand j'ai lu l'article de wikipédia à ce sujet:
https://wiki.videolan.org/YUV#NV12
Il dit:
NV12
Liées à I420, NV12 a une luminance "luminance" plan Y et un avion avec U et V des valeurs entrelacés.
Dans NV12, chroma avions (bleu et rouge) sont sous-échantillonnés dans les deux dimensions horizontales et verticales par un facteur de 2.
Pour une 2x2 groupe de pixels, vous disposez de 4 Y les échantillons et les 1 et U 1 V de l'échantillon.
Il peut être utile de penser à NV12 comme I420 avec U et V des avions entrelacés.
Voici une représentation graphique de NV12. Chaque lettre correspond à un bit:
Pour 1 NV12 pixel: YYYYYYYY UVUV
Pour un 2-pixel NV12 cadre: YYYYYYYYYYYYYYYY UVUVUVUV
Pour un 50 pixels NV12 cadre: Y*8*50 (UV)*2*50
Pour un n-pixel NV12 cadre: Y*8*n (UV)*2*n
Ce que je comprends, ici, est : chaque U et V sont entrelacés peu à peu dans chaque octet. De sorte que chaque chaque octet de l'UV plan contiendra 4U bits et 4V bits entrelacés.
Quelqu'un peut éclaircir mes doutes?
OriginalL'auteur Manish Kumar | 2015-07-15
Vous devez vous connecter pour publier un commentaire.
TL;DR: MSDN est correct
Pour vérifier cette (ou au moins vérifier qu'il n'y a pas d'entrelacement de bits de niveau), on peut utiliser
ffmpeg
, qui est largement utilisé la vidéo de l'outil. J'ai fait l'expérience suivante:ffmpeg
à lire comme uneI420
image vidéo d'une petite tailleffmpeg
pour le convertir enNV12
formatVoici un exemple de ligne de commande (2) et (3):
Voici ce que j'ai obtenu en sortie:
J'ai marqué de la chrominance (U et V) des échantillons en gras. Il est évident que ce sont les mêmes valeurs (ASCII des lettres), tout brouillés commande. Si l'un des bits de l'entrelacement ont été effectuées, je voudrais obtenir des valeurs différentes.
Donc la description dans le VLC wiki (BTW c'est pas Wikipedia) est incorrect. Quelqu'un avec le nom "Edwardw", a ajouté l ' "illustration" de mentionner pixels ici, et plus tard changé en "bits" ici. J'espère que quelqu'un change d'être moins trompeuse (le wiki nécessite une inscription donc je ne peux pas le modifier).
OriginalL'auteur anatolyg