1*0ec5a0ecSAndroid Build Coastguard Worker // Copyright 2019 The Chromium Authors. All rights reserved.
2*0ec5a0ecSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*0ec5a0ecSAndroid Build Coastguard Worker // found in the LICENSE file.
4*0ec5a0ecSAndroid Build Coastguard Worker
5*0ec5a0ecSAndroid Build Coastguard Worker //#define LOG_NDEBUG 0
6*0ec5a0ecSAndroid Build Coastguard Worker #define LOG_TAG "Fourcc"
7*0ec5a0ecSAndroid Build Coastguard Worker
8*0ec5a0ecSAndroid Build Coastguard Worker #include <v4l2_codec2/common/Fourcc.h>
9*0ec5a0ecSAndroid Build Coastguard Worker
10*0ec5a0ecSAndroid Build Coastguard Worker #include <linux/videodev2.h>
11*0ec5a0ecSAndroid Build Coastguard Worker
12*0ec5a0ecSAndroid Build Coastguard Worker #include <utils/Log.h>
13*0ec5a0ecSAndroid Build Coastguard Worker
14*0ec5a0ecSAndroid Build Coastguard Worker namespace android {
15*0ec5a0ecSAndroid Build Coastguard Worker
Fourcc(Fourcc::Value fourcc)16*0ec5a0ecSAndroid Build Coastguard Worker Fourcc::Fourcc(Fourcc::Value fourcc) : mValue(fourcc) {}
17*0ec5a0ecSAndroid Build Coastguard Worker Fourcc::~Fourcc() = default;
18*0ec5a0ecSAndroid Build Coastguard Worker Fourcc& Fourcc::operator=(const Fourcc& other) = default;
19*0ec5a0ecSAndroid Build Coastguard Worker
20*0ec5a0ecSAndroid Build Coastguard Worker // static
fromUint32(uint32_t fourcc)21*0ec5a0ecSAndroid Build Coastguard Worker std::optional<Fourcc> Fourcc::fromUint32(uint32_t fourcc) {
22*0ec5a0ecSAndroid Build Coastguard Worker switch (fourcc) {
23*0ec5a0ecSAndroid Build Coastguard Worker case AR24:
24*0ec5a0ecSAndroid Build Coastguard Worker case AB24:
25*0ec5a0ecSAndroid Build Coastguard Worker case XR24:
26*0ec5a0ecSAndroid Build Coastguard Worker case XB24:
27*0ec5a0ecSAndroid Build Coastguard Worker case RGB4:
28*0ec5a0ecSAndroid Build Coastguard Worker case BGR4:
29*0ec5a0ecSAndroid Build Coastguard Worker case YU12:
30*0ec5a0ecSAndroid Build Coastguard Worker case YV12:
31*0ec5a0ecSAndroid Build Coastguard Worker case YM12:
32*0ec5a0ecSAndroid Build Coastguard Worker case YM21:
33*0ec5a0ecSAndroid Build Coastguard Worker case YUYV:
34*0ec5a0ecSAndroid Build Coastguard Worker case NV12:
35*0ec5a0ecSAndroid Build Coastguard Worker case NV21:
36*0ec5a0ecSAndroid Build Coastguard Worker case NM12:
37*0ec5a0ecSAndroid Build Coastguard Worker case NM21:
38*0ec5a0ecSAndroid Build Coastguard Worker case YM16:
39*0ec5a0ecSAndroid Build Coastguard Worker case MT21:
40*0ec5a0ecSAndroid Build Coastguard Worker case MM21:
41*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(static_cast<Value>(fourcc));
42*0ec5a0ecSAndroid Build Coastguard Worker }
43*0ec5a0ecSAndroid Build Coastguard Worker ALOGV("Unmapped fourcc: %s", fourccToString(fourcc).c_str());
44*0ec5a0ecSAndroid Build Coastguard Worker return std::nullopt;
45*0ec5a0ecSAndroid Build Coastguard Worker }
46*0ec5a0ecSAndroid Build Coastguard Worker
47*0ec5a0ecSAndroid Build Coastguard Worker // static
fromVideoPixelFormat(VideoPixelFormat pixelFormat,bool singlePlanar)48*0ec5a0ecSAndroid Build Coastguard Worker std::optional<Fourcc> Fourcc::fromVideoPixelFormat(VideoPixelFormat pixelFormat,
49*0ec5a0ecSAndroid Build Coastguard Worker bool singlePlanar) {
50*0ec5a0ecSAndroid Build Coastguard Worker if (singlePlanar) {
51*0ec5a0ecSAndroid Build Coastguard Worker switch (pixelFormat) {
52*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::ARGB:
53*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(AR24);
54*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::ABGR:
55*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(AB24);
56*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::XRGB:
57*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(XR24);
58*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::XBGR:
59*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(XB24);
60*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::BGRA:
61*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(RGB4);
62*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::RGBA:
63*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(BGR4);
64*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::I420:
65*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(YU12);
66*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YV12:
67*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(YV12);
68*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUY2:
69*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(YUYV);
70*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::NV12:
71*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(NV12);
72*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::NV21:
73*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(NV21);
74*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::I422:
75*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::I420A:
76*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::I444:
77*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::RGB24:
78*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::MJPEG:
79*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV420P9:
80*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV420P10:
81*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV422P9:
82*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV422P10:
83*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV444P9:
84*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV444P10:
85*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV420P12:
86*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV422P12:
87*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV444P12:
88*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::Y16:
89*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::P016LE:
90*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::XR30:
91*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::XB30:
92*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::UNKNOWN:
93*0ec5a0ecSAndroid Build Coastguard Worker break;
94*0ec5a0ecSAndroid Build Coastguard Worker }
95*0ec5a0ecSAndroid Build Coastguard Worker } else {
96*0ec5a0ecSAndroid Build Coastguard Worker switch (pixelFormat) {
97*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::I420:
98*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(YM12);
99*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YV12:
100*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(YM21);
101*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::NV12:
102*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(NM12);
103*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::I422:
104*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(YM16);
105*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::NV21:
106*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(NM21);
107*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::I420A:
108*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::I444:
109*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUY2:
110*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::ARGB:
111*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::XRGB:
112*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::RGB24:
113*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::MJPEG:
114*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV420P9:
115*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV420P10:
116*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV422P9:
117*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV422P10:
118*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV444P9:
119*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV444P10:
120*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV420P12:
121*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV422P12:
122*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::YUV444P12:
123*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::Y16:
124*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::ABGR:
125*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::XBGR:
126*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::P016LE:
127*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::XR30:
128*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::XB30:
129*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::BGRA:
130*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::RGBA:
131*0ec5a0ecSAndroid Build Coastguard Worker case VideoPixelFormat::UNKNOWN:
132*0ec5a0ecSAndroid Build Coastguard Worker break;
133*0ec5a0ecSAndroid Build Coastguard Worker }
134*0ec5a0ecSAndroid Build Coastguard Worker }
135*0ec5a0ecSAndroid Build Coastguard Worker ALOGE("Unmapped %s for %s", videoPixelFormatToString(pixelFormat).c_str(),
136*0ec5a0ecSAndroid Build Coastguard Worker singlePlanar ? "single-planar" : "multi-planar");
137*0ec5a0ecSAndroid Build Coastguard Worker return std::nullopt;
138*0ec5a0ecSAndroid Build Coastguard Worker }
139*0ec5a0ecSAndroid Build Coastguard Worker
toVideoPixelFormat() const140*0ec5a0ecSAndroid Build Coastguard Worker VideoPixelFormat Fourcc::toVideoPixelFormat() const {
141*0ec5a0ecSAndroid Build Coastguard Worker switch (mValue) {
142*0ec5a0ecSAndroid Build Coastguard Worker case AR24:
143*0ec5a0ecSAndroid Build Coastguard Worker return VideoPixelFormat::ARGB;
144*0ec5a0ecSAndroid Build Coastguard Worker case AB24:
145*0ec5a0ecSAndroid Build Coastguard Worker return VideoPixelFormat::ABGR;
146*0ec5a0ecSAndroid Build Coastguard Worker case XR24:
147*0ec5a0ecSAndroid Build Coastguard Worker return VideoPixelFormat::XRGB;
148*0ec5a0ecSAndroid Build Coastguard Worker case XB24:
149*0ec5a0ecSAndroid Build Coastguard Worker return VideoPixelFormat::XBGR;
150*0ec5a0ecSAndroid Build Coastguard Worker case RGB4:
151*0ec5a0ecSAndroid Build Coastguard Worker return VideoPixelFormat::BGRA;
152*0ec5a0ecSAndroid Build Coastguard Worker case BGR4:
153*0ec5a0ecSAndroid Build Coastguard Worker return VideoPixelFormat::RGBA;
154*0ec5a0ecSAndroid Build Coastguard Worker case YU12:
155*0ec5a0ecSAndroid Build Coastguard Worker case YM12:
156*0ec5a0ecSAndroid Build Coastguard Worker return VideoPixelFormat::I420;
157*0ec5a0ecSAndroid Build Coastguard Worker case YV12:
158*0ec5a0ecSAndroid Build Coastguard Worker case YM21:
159*0ec5a0ecSAndroid Build Coastguard Worker return VideoPixelFormat::YV12;
160*0ec5a0ecSAndroid Build Coastguard Worker case YUYV:
161*0ec5a0ecSAndroid Build Coastguard Worker return VideoPixelFormat::YUY2;
162*0ec5a0ecSAndroid Build Coastguard Worker case NV12:
163*0ec5a0ecSAndroid Build Coastguard Worker case NM12:
164*0ec5a0ecSAndroid Build Coastguard Worker return VideoPixelFormat::NV12;
165*0ec5a0ecSAndroid Build Coastguard Worker case NV21:
166*0ec5a0ecSAndroid Build Coastguard Worker case NM21:
167*0ec5a0ecSAndroid Build Coastguard Worker return VideoPixelFormat::NV21;
168*0ec5a0ecSAndroid Build Coastguard Worker case YM16:
169*0ec5a0ecSAndroid Build Coastguard Worker return VideoPixelFormat::I422;
170*0ec5a0ecSAndroid Build Coastguard Worker // V4L2_PIX_FMT_MT21C is only used for MT8173 hardware video decoder output
171*0ec5a0ecSAndroid Build Coastguard Worker // and should be converted by MT8173 image processor for compositor to
172*0ec5a0ecSAndroid Build Coastguard Worker // render. Since it is an intermediate format for video decoder,
173*0ec5a0ecSAndroid Build Coastguard Worker // VideoPixelFormat shall not have its mapping. However, we need to create a
174*0ec5a0ecSAndroid Build Coastguard Worker // VideoFrameLayout for the format to process the intermediate frame. Hence
175*0ec5a0ecSAndroid Build Coastguard Worker // we map V4L2_PIX_FMT_MT21C to PIXEL_FORMAT_NV12 as their layout are the
176*0ec5a0ecSAndroid Build Coastguard Worker // same.
177*0ec5a0ecSAndroid Build Coastguard Worker case MT21:
178*0ec5a0ecSAndroid Build Coastguard Worker // V4L2_PIX_FMT_MM21 is used for MT8183 hardware video decoder. It is
179*0ec5a0ecSAndroid Build Coastguard Worker // similar to V4L2_PIX_FMT_MT21C but is not compressed ; thus it can also
180*0ec5a0ecSAndroid Build Coastguard Worker // be mapped to PIXEL_FORMAT_NV12.
181*0ec5a0ecSAndroid Build Coastguard Worker case MM21:
182*0ec5a0ecSAndroid Build Coastguard Worker return VideoPixelFormat::NV12;
183*0ec5a0ecSAndroid Build Coastguard Worker }
184*0ec5a0ecSAndroid Build Coastguard Worker
185*0ec5a0ecSAndroid Build Coastguard Worker ALOGE("Unmapped Fourcc: %s", toString().c_str());
186*0ec5a0ecSAndroid Build Coastguard Worker return VideoPixelFormat::UNKNOWN;
187*0ec5a0ecSAndroid Build Coastguard Worker }
188*0ec5a0ecSAndroid Build Coastguard Worker
189*0ec5a0ecSAndroid Build Coastguard Worker // static
fromV4L2PixFmt(uint32_t v4l2PixFmt)190*0ec5a0ecSAndroid Build Coastguard Worker std::optional<Fourcc> Fourcc::fromV4L2PixFmt(uint32_t v4l2PixFmt) {
191*0ec5a0ecSAndroid Build Coastguard Worker // We can do that because we adopt the same internal definition of Fourcc as
192*0ec5a0ecSAndroid Build Coastguard Worker // V4L2.
193*0ec5a0ecSAndroid Build Coastguard Worker return fromUint32(v4l2PixFmt);
194*0ec5a0ecSAndroid Build Coastguard Worker }
195*0ec5a0ecSAndroid Build Coastguard Worker
toV4L2PixFmt() const196*0ec5a0ecSAndroid Build Coastguard Worker uint32_t Fourcc::toV4L2PixFmt() const {
197*0ec5a0ecSAndroid Build Coastguard Worker // Note that we can do that because we adopt the same internal definition of
198*0ec5a0ecSAndroid Build Coastguard Worker // Fourcc as V4L2.
199*0ec5a0ecSAndroid Build Coastguard Worker return static_cast<uint32_t>(mValue);
200*0ec5a0ecSAndroid Build Coastguard Worker }
201*0ec5a0ecSAndroid Build Coastguard Worker
toSinglePlanar() const202*0ec5a0ecSAndroid Build Coastguard Worker std::optional<Fourcc> Fourcc::toSinglePlanar() const {
203*0ec5a0ecSAndroid Build Coastguard Worker switch (mValue) {
204*0ec5a0ecSAndroid Build Coastguard Worker case AR24:
205*0ec5a0ecSAndroid Build Coastguard Worker case AB24:
206*0ec5a0ecSAndroid Build Coastguard Worker case XR24:
207*0ec5a0ecSAndroid Build Coastguard Worker case XB24:
208*0ec5a0ecSAndroid Build Coastguard Worker case RGB4:
209*0ec5a0ecSAndroid Build Coastguard Worker case BGR4:
210*0ec5a0ecSAndroid Build Coastguard Worker case YU12:
211*0ec5a0ecSAndroid Build Coastguard Worker case YV12:
212*0ec5a0ecSAndroid Build Coastguard Worker case YUYV:
213*0ec5a0ecSAndroid Build Coastguard Worker case NV12:
214*0ec5a0ecSAndroid Build Coastguard Worker case NV21:
215*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(mValue);
216*0ec5a0ecSAndroid Build Coastguard Worker case YM12:
217*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(YU12);
218*0ec5a0ecSAndroid Build Coastguard Worker case YM21:
219*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(YV12);
220*0ec5a0ecSAndroid Build Coastguard Worker case NM12:
221*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(NV12);
222*0ec5a0ecSAndroid Build Coastguard Worker case NM21:
223*0ec5a0ecSAndroid Build Coastguard Worker return Fourcc(NV21);
224*0ec5a0ecSAndroid Build Coastguard Worker case YM16:
225*0ec5a0ecSAndroid Build Coastguard Worker case MT21:
226*0ec5a0ecSAndroid Build Coastguard Worker case MM21:
227*0ec5a0ecSAndroid Build Coastguard Worker return std::nullopt;
228*0ec5a0ecSAndroid Build Coastguard Worker }
229*0ec5a0ecSAndroid Build Coastguard Worker }
230*0ec5a0ecSAndroid Build Coastguard Worker
operator !=(const Fourcc & lhs,const Fourcc & rhs)231*0ec5a0ecSAndroid Build Coastguard Worker bool operator!=(const Fourcc& lhs, const Fourcc& rhs) {
232*0ec5a0ecSAndroid Build Coastguard Worker return !(lhs == rhs);
233*0ec5a0ecSAndroid Build Coastguard Worker }
234*0ec5a0ecSAndroid Build Coastguard Worker
isMultiPlanar() const235*0ec5a0ecSAndroid Build Coastguard Worker bool Fourcc::isMultiPlanar() const {
236*0ec5a0ecSAndroid Build Coastguard Worker switch (mValue) {
237*0ec5a0ecSAndroid Build Coastguard Worker case AR24:
238*0ec5a0ecSAndroid Build Coastguard Worker case AB24:
239*0ec5a0ecSAndroid Build Coastguard Worker case XR24:
240*0ec5a0ecSAndroid Build Coastguard Worker case XB24:
241*0ec5a0ecSAndroid Build Coastguard Worker case RGB4:
242*0ec5a0ecSAndroid Build Coastguard Worker case BGR4:
243*0ec5a0ecSAndroid Build Coastguard Worker case YU12:
244*0ec5a0ecSAndroid Build Coastguard Worker case YV12:
245*0ec5a0ecSAndroid Build Coastguard Worker case YUYV:
246*0ec5a0ecSAndroid Build Coastguard Worker case NV12:
247*0ec5a0ecSAndroid Build Coastguard Worker case NV21:
248*0ec5a0ecSAndroid Build Coastguard Worker return false;
249*0ec5a0ecSAndroid Build Coastguard Worker case YM12:
250*0ec5a0ecSAndroid Build Coastguard Worker case YM21:
251*0ec5a0ecSAndroid Build Coastguard Worker case NM12:
252*0ec5a0ecSAndroid Build Coastguard Worker case NM21:
253*0ec5a0ecSAndroid Build Coastguard Worker case YM16:
254*0ec5a0ecSAndroid Build Coastguard Worker case MT21:
255*0ec5a0ecSAndroid Build Coastguard Worker case MM21:
256*0ec5a0ecSAndroid Build Coastguard Worker return true;
257*0ec5a0ecSAndroid Build Coastguard Worker }
258*0ec5a0ecSAndroid Build Coastguard Worker }
259*0ec5a0ecSAndroid Build Coastguard Worker
toString() const260*0ec5a0ecSAndroid Build Coastguard Worker std::string Fourcc::toString() const {
261*0ec5a0ecSAndroid Build Coastguard Worker return fourccToString(static_cast<uint32_t>(mValue));
262*0ec5a0ecSAndroid Build Coastguard Worker }
263*0ec5a0ecSAndroid Build Coastguard Worker
264*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::AR24 == V4L2_PIX_FMT_ABGR32, "Mismatch Fourcc");
265*0ec5a0ecSAndroid Build Coastguard Worker #ifdef V4L2_PIX_FMT_RGBA32
266*0ec5a0ecSAndroid Build Coastguard Worker // V4L2_PIX_FMT_RGBA32 is defined since v5.2
267*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::AB24 == V4L2_PIX_FMT_RGBA32, "Mismatch Fourcc");
268*0ec5a0ecSAndroid Build Coastguard Worker #endif // V4L2_PIX_FMT_RGBA32
269*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::XR24 == V4L2_PIX_FMT_XBGR32, "Mismatch Fourcc");
270*0ec5a0ecSAndroid Build Coastguard Worker #ifdef V4L2_PIX_FMT_RGBX32
271*0ec5a0ecSAndroid Build Coastguard Worker // V4L2_PIX_FMT_RGBX32 is defined since v5.2
272*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::XB24 == V4L2_PIX_FMT_RGBX32, "Mismatch Fourcc");
273*0ec5a0ecSAndroid Build Coastguard Worker #endif // V4L2_PIX_FMT_RGBX32
274*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::RGB4 == V4L2_PIX_FMT_RGB32, "Mismatch Fourcc");
275*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::BGR4 == V4L2_PIX_FMT_BGR32, "Mismatch Fourcc");
276*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::YU12 == V4L2_PIX_FMT_YUV420, "Mismatch Fourcc");
277*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::YV12 == V4L2_PIX_FMT_YVU420, "Mismatch Fourcc");
278*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::YM12 == V4L2_PIX_FMT_YUV420M, "Mismatch Fourcc");
279*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::YM21 == V4L2_PIX_FMT_YVU420M, "Mismatch Fourcc");
280*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::YUYV == V4L2_PIX_FMT_YUYV, "Mismatch Fourcc");
281*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::NV12 == V4L2_PIX_FMT_NV12, "Mismatch Fourcc");
282*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::NV21 == V4L2_PIX_FMT_NV21, "Mismatch Fourcc");
283*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::NM12 == V4L2_PIX_FMT_NV12M, "Mismatch Fourcc");
284*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::NM21 == V4L2_PIX_FMT_NV21M, "Mismatch Fourcc");
285*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::YM16 == V4L2_PIX_FMT_YUV422M, "Mismatch Fourcc");
286*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::MT21 == V4L2_PIX_FMT_MT21C, "Mismatch Fourcc");
287*0ec5a0ecSAndroid Build Coastguard Worker #ifdef V4L2_PIX_FMT_MM21
288*0ec5a0ecSAndroid Build Coastguard Worker // V4L2_PIX_FMT_MM21 is not yet upstreamed.
289*0ec5a0ecSAndroid Build Coastguard Worker static_assert(Fourcc::MM21 == V4L2_PIX_FMT_MM21, "Mismatch Fourcc");
290*0ec5a0ecSAndroid Build Coastguard Worker #endif // V4L2_PIX_FMT_MM21
291*0ec5a0ecSAndroid Build Coastguard Worker
292*0ec5a0ecSAndroid Build Coastguard Worker } // namespace android
293