Kamil Debski | bd08a0c | 2011-03-11 06:16:22 -0300 | [diff] [blame] | 1 | <refentry> |
| 2 | <refmeta> |
| 3 | <refentrytitle>V4L2_PIX_FMT_NV12MT ('TM12')</refentrytitle> |
| 4 | &manvol; |
| 5 | </refmeta> |
| 6 | <refnamediv> |
| 7 | <refname id="V4L2-PIX-FMT-NV12MT"><constant>V4L2_PIX_FMT_NV12MT |
| 8 | </constant></refname> |
| 9 | <refpurpose>Formats with ½ horizontal and vertical |
| 10 | chroma resolution. This format has two planes - one for luminance and one for |
| 11 | chrominance. Chroma samples are interleaved. The difference to |
| 12 | <constant>V4L2_PIX_FMT_NV12</constant> is the memory layout. Pixels are |
| 13 | grouped in macroblocks of 64x32 size. The order of macroblocks in memory is |
| 14 | also not standard. |
| 15 | </refpurpose> |
| 16 | </refnamediv> |
| 17 | <refsect1> |
| 18 | <title>Description</title> |
| 19 | |
| 20 | <para>This is the two-plane versions of the YUV 4:2:0 format where data |
| 21 | is grouped into 64x32 macroblocks. The three components are separated into two |
| 22 | sub-images or planes. The Y plane has one byte per pixel and pixels are grouped |
| 23 | into 64x32 macroblocks. The CbCr plane has the same width, in bytes, as the Y |
| 24 | plane (and the image), but is half as tall in pixels. The chroma plane is also |
| 25 | grouped into 64x32 macroblocks.</para> |
| 26 | <para>Width of the buffer has to be aligned to the multiple of 128, and |
| 27 | height alignment is 32. Every four adjactent buffers - two horizontally and two |
| 28 | vertically are grouped together and are located in memory in Z or flipped Z |
| 29 | order. </para> |
| 30 | <para>Layout of macroblocks in memory is presented in the following |
| 31 | figure.</para> |
| 32 | <para><figure id="nv12mt"> |
| 33 | <title><constant>V4L2_PIX_FMT_NV12MT</constant> macroblock Z shape |
| 34 | memory layout</title> |
| 35 | <mediaobject> |
| 36 | <imageobject> |
| 37 | <imagedata fileref="nv12mt.gif" format="GIF" /> |
| 38 | </imageobject> |
| 39 | </mediaobject> |
| 40 | </figure> |
| 41 | The requirement that width is multiple of 128 is implemented because, |
| 42 | the Z shape cannot be cut in half horizontally. In case the vertical resolution |
| 43 | of macroblocks is odd then the last row of macroblocks is arranged in a linear |
| 44 | order. </para> |
| 45 | <para>In case of chroma the layout is identical. Cb and Cr samples are |
| 46 | interleaved. Height of the buffer is aligned to 32. |
| 47 | </para> |
| 48 | <example> |
| 49 | <title>Memory layout of macroblocks in <constant>V4L2_PIX_FMT_NV12 |
| 50 | </constant> format pixel image - extreme case</title> |
| 51 | <para> |
Hans Verkuil | 34fd68b | 2011-03-11 18:18:54 -0300 | [diff] [blame] | 52 | <figure id="nv12mt_ex"> |
Kamil Debski | bd08a0c | 2011-03-11 06:16:22 -0300 | [diff] [blame] | 53 | <title>Example <constant>V4L2_PIX_FMT_NV12MT</constant> memory |
| 54 | layout of macroblocks</title> |
| 55 | <mediaobject> |
| 56 | <imageobject> |
| 57 | <imagedata fileref="nv12mt_example.gif" format="GIF" /> |
| 58 | </imageobject> |
| 59 | </mediaobject> |
| 60 | </figure> |
| 61 | Memory layout of macroblocks of <constant>V4L2_PIX_FMT_NV12MT |
| 62 | </constant> format in most extreme case. |
| 63 | </para> |
| 64 | </example> |
| 65 | </refsect1> |
| 66 | </refentry> |