Skip to content

Commit 5b488cb

Browse files
Alain Volmatfabiobaltieri
authored andcommitted
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 051539e commit 5b488cb

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
@@ -1540,6 +1540,220 @@ int64_t video_get_csi_link_freq(const struct device *dev, uint8_t bpp, uint8_t l
15401540
*/
15411541
#define VIDEO_PIX_FMT_XYUV32 VIDEO_FOURCC('X', 'Y', 'U', 'V')
15421542

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

0 commit comments

Comments
 (0)