Skip to content

Commit d516740

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 d516740

File tree

1 file changed

+198
-0
lines changed

1 file changed

+198
-0
lines changed

include/zephyr/drivers/video.h

Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1551,6 +1551,196 @@ 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+
* Y0 Y1 Y2 Y3 ...
1570+
* Y6 Y7 Y8 Y9 ...
1571+
* ...
1572+
*
1573+
* U0/1/6/7 V0/1/6/7 U2/3/8/9 V2/3/8/9 ...
1574+
* ...
1575+
*/
1576+
#define VIDEO_PIX_FMT_NV12 VIDEO_FOURCC('N', 'V', '1', '2')
1577+
1578+
/**
1579+
* Chroma (U/V) are subsampled horizontaly and vertically
1580+
*
1581+
* @code{.unparsed}
1582+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | ...
1583+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | ...
1584+
* | ... |
1585+
* | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu | ...
1586+
* | ... |
1587+
* @endcode
1588+
*
1589+
* Below diagram show how luma and chroma relate to each others
1590+
* Y0 Y1 Y2 Y3 ...
1591+
* Y6 Y7 Y8 Y9 ...
1592+
* ...
1593+
*
1594+
* V0/1/6/7 U0/1/6/7 V2/3/8/9 U2/3/8/9 ...
1595+
* ...
1596+
*/
1597+
#define VIDEO_PIX_FMT_NV21 VIDEO_FOURCC('N', 'V', '2', '1')
1598+
1599+
/**
1600+
* Chroma (U/V) are subsampled horizontaly
1601+
*
1602+
* @code{.unparsed}
1603+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | ...
1604+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | ...
1605+
* | ... |
1606+
* | Uuuuuuuu Vvvvvvvv | Uuuuuuuu Vvvvvvvv | ...
1607+
* | Uuuuuuuu Vvvvvvvv | Uuuuuuuu Vvvvvvvv | ...
1608+
* | ... |
1609+
* @endcode
1610+
*
1611+
* Below diagram show how luma and chroma relate to each others
1612+
* Y0 Y1 Y2 Y3 ...
1613+
* Y6 Y7 Y8 Y9 ...
1614+
* ...
1615+
*
1616+
* U0/1 V0/1 U2/3 V2/3 ...
1617+
* U6/7 V6/7 U8/9 V8/9 ...
1618+
* ...
1619+
*/
1620+
#define VIDEO_PIX_FMT_NV16 VIDEO_FOURCC('N', 'V', '1', '6')
1621+
1622+
/**
1623+
* Chroma (U/V) are subsampled horizontaly
1624+
*
1625+
* @code{.unparsed}
1626+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | ...
1627+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | ...
1628+
* | ... |
1629+
* | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu | ...
1630+
* | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu | ...
1631+
* | ... |
1632+
*
1633+
* Below diagram show how luma and chroma relate to each others
1634+
* Y0 Y1 Y2 Y3 ...
1635+
* Y6 Y7 Y8 Y9 ...
1636+
* ...
1637+
*
1638+
* V0/1 U0/1 V2/3 U2/3 ...
1639+
* V6/7 U6/7 V8/9 U8/9 ...
1640+
* ...
1641+
* @endcode
1642+
*/
1643+
1644+
#define VIDEO_PIX_FMT_NV61 VIDEO_FOURCC('N', 'V', '6', '1')
1645+
1646+
/**
1647+
* Chroma (U/V) are not subsampled
1648+
*
1649+
* @code{.unparsed}
1650+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy |
1651+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy |
1652+
* | ... |
1653+
* | Uuuuuuuu Vvvvvvvv | Uuuuuuuu Vvvvvvvv | Uuuuuuuu Vvvvvvvv | Uuuuuuuu Vvvvvvvv |
1654+
* | Uuuuuuuu Vvvvvvvv | Uuuuuuuu Vvvvvvvv | Uuuuuuuu Vvvvvvvv | Uuuuuuuu Vvvvvvvv |
1655+
* | ... |
1656+
* @endcode
1657+
*
1658+
* Below diagram show how luma and chroma relate to each others
1659+
* Y0 Y1 Y2 Y3 ...
1660+
* Y6 Y7 Y8 Y9 ...
1661+
* ...
1662+
*
1663+
* U0 V0 U1 V1 U2 V2 U3 V3 ...
1664+
* U6 V6 U7 V7 U8 V8 U9 V9 ...
1665+
* ...
1666+
*/
1667+
#define VIDEO_PIX_FMT_NV24 VIDEO_FOURCC('N', 'V', '2', '4')
1668+
1669+
/**
1670+
* Chroma (U/V) are not subsampled
1671+
*
1672+
* @code{.unparsed}
1673+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy |
1674+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy |
1675+
* | ... |
1676+
* | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu |
1677+
* | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu | Vvvvvvvv Uuuuuuuu |
1678+
* | ... |
1679+
* @endcode
1680+
*
1681+
* Below diagram show how luma and chroma relate to each others
1682+
* Y0 Y1 Y2 Y3 ...
1683+
* Y6 Y7 Y8 Y9 ...
1684+
* ...
1685+
*
1686+
* V0 U0 V1 U1 V2 U2 V3 U3 ...
1687+
* V6 U6 V7 U7 V8 U8 V9 U9 ...
1688+
* ...
1689+
*/
1690+
#define VIDEO_PIX_FMT_NV42 VIDEO_FOURCC('N', 'V', '4', '2')
1691+
1692+
/**
1693+
* Chroma (U/V) are subsampled horizontaly and vertically
1694+
*
1695+
* @code{.unparsed}
1696+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy |
1697+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy |
1698+
* | ... |
1699+
* | Uuuuuuuu | Uuuuuuuu |
1700+
* | ... |
1701+
* | Vvvvvvvv | Vvvvvvvv |
1702+
* | ... |
1703+
* @endcode
1704+
*
1705+
* Below diagram show how luma and chroma relate to each others
1706+
* Y0 Y1 Y2 Y3 ...
1707+
* Y6 Y7 Y8 Y9 ...
1708+
* ...
1709+
*
1710+
* U0/1/6/7 U2/3/8/9 ...
1711+
* ...
1712+
*
1713+
* V0/1/6/7 V2/3/8/9 ...
1714+
* ...
1715+
*/
1716+
#define VIDEO_PIX_FMT_YUV420 VIDEO_FOURCC('Y', 'U', '1', '2')
1717+
1718+
/**
1719+
* Chroma (U/V) are subsampled horizontaly and vertically
1720+
*
1721+
* @code{.unparsed}
1722+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy |
1723+
* | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy | Yyyyyyyy |
1724+
* | ... |
1725+
* | Vvvvvvvv | Vvvvvvvv |
1726+
* | ... |
1727+
* | Uuuuuuuu | Uuuuuuuu |
1728+
* | ... |
1729+
* @endcode
1730+
*
1731+
* Below diagram show how luma and chroma relate to each others
1732+
* Y0 Y1 Y2 Y3 ...
1733+
* Y6 Y7 Y8 Y9 ...
1734+
* ...
1735+
*
1736+
* V0/1/6/7 V2/3/8/9 ...
1737+
* ...
1738+
*
1739+
* U0/1/6/7 U2/3/8/9 ...
1740+
* ...
1741+
*/
1742+
#define VIDEO_PIX_FMT_YVU420 VIDEO_FOURCC('Y', 'V', '1', '2')
1743+
15541744
/**
15551745
* @}
15561746
*/
@@ -1597,6 +1787,10 @@ static inline unsigned int video_bits_per_pixel(uint32_t pixfmt)
15971787
case VIDEO_PIX_FMT_SGRBG12P:
15981788
case VIDEO_PIX_FMT_SRGGB12P:
15991789
case VIDEO_PIX_FMT_Y12P:
1790+
case VIDEO_PIX_FMT_NV12:
1791+
case VIDEO_PIX_FMT_NV21:
1792+
case VIDEO_PIX_FMT_YUV420:
1793+
case VIDEO_PIX_FMT_YVU420:
16001794
return 12;
16011795
case VIDEO_PIX_FMT_SBGGR14P:
16021796
case VIDEO_PIX_FMT_SGBRG14P:
@@ -1629,9 +1823,13 @@ static inline unsigned int video_bits_per_pixel(uint32_t pixfmt)
16291823
case VIDEO_PIX_FMT_Y12:
16301824
case VIDEO_PIX_FMT_Y14:
16311825
case VIDEO_PIX_FMT_Y16:
1826+
case VIDEO_PIX_FMT_NV16:
1827+
case VIDEO_PIX_FMT_NV61:
16321828
return 16;
16331829
case VIDEO_PIX_FMT_BGR24:
16341830
case VIDEO_PIX_FMT_RGB24:
1831+
case VIDEO_PIX_FMT_NV24:
1832+
case VIDEO_PIX_FMT_NV42:
16351833
return 24;
16361834
case VIDEO_PIX_FMT_XRGB32:
16371835
case VIDEO_PIX_FMT_XYUV32:

0 commit comments

Comments
 (0)