Skip to content

Commit ecf5cab

Browse files
author
Alain Volmat
committed
video: add planar formats (NV12/NV21/NV16/NV61/NV24/NV42/YUV420/YVU420)
Add description and fourcc define for some of the 2 and 3 planes pixel formats. Signed-off-by: Alain Volmat <[email protected]>
1 parent a8ecd94 commit ecf5cab

File tree

1 file changed

+222
-0
lines changed

1 file changed

+222
-0
lines changed

include/zephyr/drivers/video.h

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1551,6 +1551,220 @@ int64_t video_get_csi_link_freq(const struct device *dev, uint8_t bpp, uint8_t l
15511551
*/
15521552
#define VIDEO_PIX_FMT_XYUV32 VIDEO_FOURCC('X', 'Y', 'U', 'V')
15531553

1554+
/**
1555+
* Planar formats
1556+
*/
1557+
/**
1558+
* Chroma (U/V) are subsampled horizontaly and vertically
1559+
*
1560+
* @code{.unparsed}
1561+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | ...
1562+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | ...
1563+
* | ... |
1564+
* | Uuuuuuuu Vvvvvvvv | Uuuuuuuu Vvvvvvvv | ...
1565+
* | ... |
1566+
* @endcode
1567+
*
1568+
* Below diagram show how luma and chroma relate to each others
1569+
*
1570+
* @code{.unparsed}
1571+
* Y0 Y1 Y2 Y3 ...
1572+
* Y6 Y7 Y8 Y9 ...
1573+
* ...
1574+
*
1575+
* U0/1/6/7 V0/1/6/7 U2/3/8/9 V2/3/8/9 ...
1576+
* ...
1577+
* @endcode
1578+
*/
1579+
#define VIDEO_PIX_FMT_NV12 VIDEO_FOURCC('N', 'V', '1', '2')
1580+
1581+
/**
1582+
* Chroma (U/V) are subsampled horizontaly and vertically
1583+
*
1584+
* @code{.unparsed}
1585+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | ...
1586+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | ...
1587+
* | ... |
1588+
* | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu | ...
1589+
* | ... |
1590+
* @endcode
1591+
*
1592+
* Below diagram show how luma and chroma relate to each others
1593+
*
1594+
* @code{.unparsed}
1595+
* Y0 Y1 Y2 Y3 ...
1596+
* Y6 Y7 Y8 Y9 ...
1597+
* ...
1598+
*
1599+
* V0/1/6/7 U0/1/6/7 V2/3/8/9 U2/3/8/9 ...
1600+
* ...
1601+
* @endcode
1602+
*/
1603+
#define VIDEO_PIX_FMT_NV21 VIDEO_FOURCC('N', 'V', '2', '1')
1604+
1605+
/**
1606+
* Chroma (U/V) are subsampled horizontaly
1607+
*
1608+
* @code{.unparsed}
1609+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | ...
1610+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | ...
1611+
* | ... |
1612+
* | Uuuuuuuu Vvvvvvvv | Uuuuuuuu Vvvvvvvv | ...
1613+
* | Uuuuuuuu Vvvvvvvv | Uuuuuuuu Vvvvvvvv | ...
1614+
* | ... |
1615+
* @endcode
1616+
*
1617+
* Below diagram show how luma and chroma relate to each others
1618+
*
1619+
* @code{.unparsed}
1620+
* Y0 Y1 Y2 Y3 ...
1621+
* Y6 Y7 Y8 Y9 ...
1622+
* ...
1623+
*
1624+
* U0/1 V0/1 U2/3 V2/3 ...
1625+
* U6/7 V6/7 U8/9 V8/9 ...
1626+
* ...
1627+
* @endcode
1628+
*/
1629+
#define VIDEO_PIX_FMT_NV16 VIDEO_FOURCC('N', 'V', '1', '6')
1630+
1631+
/**
1632+
* Chroma (U/V) are subsampled horizontaly
1633+
*
1634+
* @code{.unparsed}
1635+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | ...
1636+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | ...
1637+
* | ... |
1638+
* | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu | ...
1639+
* | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu | ...
1640+
* | ... |
1641+
* @endcode
1642+
*
1643+
* Below diagram show how luma and chroma relate to each others
1644+
*
1645+
* @code{.unparsed}
1646+
* Y0 Y1 Y2 Y3 ...
1647+
* Y6 Y7 Y8 Y9 ...
1648+
* ...
1649+
*
1650+
* V0/1 U0/1 V2/3 U2/3 ...
1651+
* V6/7 U6/7 V8/9 U8/9 ...
1652+
* ...
1653+
* @endcode
1654+
*/
1655+
1656+
#define VIDEO_PIX_FMT_NV61 VIDEO_FOURCC('N', 'V', '6', '1')
1657+
1658+
/**
1659+
* Chroma (U/V) are not subsampled
1660+
*
1661+
* @code{.unparsed}
1662+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy |
1663+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy |
1664+
* | ... |
1665+
* | Uuuuuuuu Vvvvvvvv | Uuuuuuuu Vvvvvvvv | Uuuuuuuu Vvvvvvvv | Uuuuuuuu Vvvvvvvv |
1666+
* | Uuuuuuuu Vvvvvvvv | Uuuuuuuu Vvvvvvvv | Uuuuuuuu Vvvvvvvv | Uuuuuuuu Vvvvvvvv |
1667+
* | ... |
1668+
* @endcode
1669+
*
1670+
* Below diagram show how luma and chroma relate to each others
1671+
*
1672+
* @code{.unparsed}
1673+
* Y0 Y1 Y2 Y3 ...
1674+
* Y6 Y7 Y8 Y9 ...
1675+
* ...
1676+
*
1677+
* U0 V0 U1 V1 U2 V2 U3 V3 ...
1678+
* U6 V6 U7 V7 U8 V8 U9 V9 ...
1679+
* ...
1680+
* @endcode
1681+
*/
1682+
#define VIDEO_PIX_FMT_NV24 VIDEO_FOURCC('N', 'V', '2', '4')
1683+
1684+
/**
1685+
* Chroma (U/V) are not subsampled
1686+
*
1687+
* @code{.unparsed}
1688+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy |
1689+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy |
1690+
* | ... |
1691+
* | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu |
1692+
* | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu |
1693+
* | ... |
1694+
* @endcode
1695+
*
1696+
* Below diagram show how luma and chroma relate to each others
1697+
*
1698+
* @code{.unparsed}
1699+
* Y0 Y1 Y2 Y3 ...
1700+
* Y6 Y7 Y8 Y9 ...
1701+
* ...
1702+
*
1703+
* V0 U0 V1 U1 V2 U2 V3 U3 ...
1704+
* V6 U6 V7 U7 V8 U8 V9 U9 ...
1705+
* ...
1706+
* @endcode
1707+
*/
1708+
#define VIDEO_PIX_FMT_NV42 VIDEO_FOURCC('N', 'V', '4', '2')
1709+
1710+
/**
1711+
* Chroma (U/V) are subsampled horizontaly and vertically
1712+
*
1713+
* @code{.unparsed}
1714+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy |
1715+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy |
1716+
* | ... |
1717+
* | Uuuuuuuu | Uuuuuuuu |
1718+
* | ... |
1719+
* | Vvvvvvvv | Vvvvvvvv |
1720+
* | ... |
1721+
* @endcode
1722+
*
1723+
* Below diagram show how luma and chroma relate to each others
1724+
*
1725+
* @code{.unparsed}
1726+
* Y0 Y1 Y2 Y3 ...
1727+
* Y6 Y7 Y8 Y9 ...
1728+
* ...
1729+
*
1730+
* U0/1/6/7 U2/3/8/9 ...
1731+
* ...
1732+
*
1733+
* V0/1/6/7 V2/3/8/9 ...
1734+
* ...
1735+
* @endcode
1736+
*/
1737+
#define VIDEO_PIX_FMT_YUV420 VIDEO_FOURCC('Y', 'U', '1', '2')
1738+
1739+
/**
1740+
* Chroma (U/V) are subsampled horizontaly and vertically
1741+
*
1742+
* @code{.unparsed}
1743+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy |
1744+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy |
1745+
* | ... |
1746+
* | Vvvvvvvv | Vvvvvvvv |
1747+
* | ... |
1748+
* | Uuuuuuuu | Uuuuuuuu |
1749+
* | ... |
1750+
* @endcode
1751+
*
1752+
* Below diagram show how luma and chroma relate to each others
1753+
*
1754+
* @code{.unparsed}
1755+
* Y0 Y1 Y2 Y3 ...
1756+
* Y6 Y7 Y8 Y9 ...
1757+
* ...
1758+
*
1759+
* V0/1/6/7 V2/3/8/9 ...
1760+
* ...
1761+
*
1762+
* U0/1/6/7 U2/3/8/9 ...
1763+
* ...
1764+
* @endcode
1765+
*/
1766+
#define VIDEO_PIX_FMT_YVU420 VIDEO_FOURCC('Y', 'V', '1', '2')
1767+
15541768
/**
15551769
* @}
15561770
*/
@@ -1597,6 +1811,10 @@ static inline unsigned int video_bits_per_pixel(uint32_t pixfmt)
15971811
case VIDEO_PIX_FMT_SGRBG12P:
15981812
case VIDEO_PIX_FMT_SRGGB12P:
15991813
case VIDEO_PIX_FMT_Y12P:
1814+
case VIDEO_PIX_FMT_NV12:
1815+
case VIDEO_PIX_FMT_NV21:
1816+
case VIDEO_PIX_FMT_YUV420:
1817+
case VIDEO_PIX_FMT_YVU420:
16001818
return 12;
16011819
case VIDEO_PIX_FMT_SBGGR14P:
16021820
case VIDEO_PIX_FMT_SGBRG14P:
@@ -1629,9 +1847,13 @@ static inline unsigned int video_bits_per_pixel(uint32_t pixfmt)
16291847
case VIDEO_PIX_FMT_Y12:
16301848
case VIDEO_PIX_FMT_Y14:
16311849
case VIDEO_PIX_FMT_Y16:
1850+
case VIDEO_PIX_FMT_NV16:
1851+
case VIDEO_PIX_FMT_NV61:
16321852
return 16;
16331853
case VIDEO_PIX_FMT_BGR24:
16341854
case VIDEO_PIX_FMT_RGB24:
1855+
case VIDEO_PIX_FMT_NV24:
1856+
case VIDEO_PIX_FMT_NV42:
16351857
return 24;
16361858
case VIDEO_PIX_FMT_XRGB32:
16371859
case VIDEO_PIX_FMT_XYUV32:

0 commit comments

Comments
 (0)