File Index
Files and directories
Sign in
FILE

sun8i_formats.c

File preview with syntax highlighting.

linux-6.19.14/drivers/media/platform/sunxi/sun8i-rotate/sun8i_formats.c C
  1// SPDX-License-Identifier: GPL-2.0
  2/* Copyright (C) 2020 Jernej Skrabec <jernej.skrabec@siol.net> */
  3
  4#include "sun8i-formats.h"
  5#include "sun8i-rotate.h"
  6
  7/*
  8 * Formats not included in array:
  9 * ROTATE_FORMAT_BGR565
 10 * ROTATE_FORMAT_VYUV
 11 */
 12
 13static const struct rotate_format rotate_formats[] = {
 14	{
 15		.fourcc = V4L2_PIX_FMT_ARGB32,
 16		.hw_format = ROTATE_FORMAT_ARGB32,
 17		.planes = 1,
 18		.bpp = { 4, 0, 0 },
 19		.hsub = 1,
 20		.vsub = 1,
 21		.flags = ROTATE_FLAG_OUTPUT
 22	}, {
 23		.fourcc = V4L2_PIX_FMT_ABGR32,
 24		.hw_format = ROTATE_FORMAT_ABGR32,
 25		.planes = 1,
 26		.bpp = { 4, 0, 0 },
 27		.hsub = 1,
 28		.vsub = 1,
 29		.flags = ROTATE_FLAG_OUTPUT
 30	}, {
 31		.fourcc = V4L2_PIX_FMT_RGBA32,
 32		.hw_format = ROTATE_FORMAT_RGBA32,
 33		.planes = 1,
 34		.bpp = { 4, 0, 0 },
 35		.hsub = 1,
 36		.vsub = 1,
 37		.flags = ROTATE_FLAG_OUTPUT
 38	}, {
 39		.fourcc = V4L2_PIX_FMT_BGRA32,
 40		.hw_format = ROTATE_FORMAT_BGRA32,
 41		.planes = 1,
 42		.bpp = { 4, 0, 0 },
 43		.hsub = 1,
 44		.vsub = 1,
 45		.flags = ROTATE_FLAG_OUTPUT
 46	}, {
 47		.fourcc = V4L2_PIX_FMT_XRGB32,
 48		.hw_format = ROTATE_FORMAT_XRGB32,
 49		.planes = 1,
 50		.bpp = { 4, 0, 0 },
 51		.hsub = 1,
 52		.vsub = 1,
 53		.flags = ROTATE_FLAG_OUTPUT
 54	}, {
 55		.fourcc = V4L2_PIX_FMT_XBGR32,
 56		.hw_format = ROTATE_FORMAT_XBGR32,
 57		.planes = 1,
 58		.bpp = { 4, 0, 0 },
 59		.hsub = 1,
 60		.vsub = 1,
 61		.flags = ROTATE_FLAG_OUTPUT
 62	}, {
 63		.fourcc = V4L2_PIX_FMT_RGB32,
 64		.hw_format = ROTATE_FORMAT_RGBX32,
 65		.planes = 1,
 66		.bpp = { 4, 0, 0 },
 67		.hsub = 1,
 68		.vsub = 1,
 69		.flags = ROTATE_FLAG_OUTPUT
 70	}, {
 71		.fourcc = V4L2_PIX_FMT_BGR32,
 72		.hw_format = ROTATE_FORMAT_BGRX32,
 73		.planes = 1,
 74		.bpp = { 4, 0, 0 },
 75		.hsub = 1,
 76		.vsub = 1,
 77		.flags = ROTATE_FLAG_OUTPUT
 78	}, {
 79		.fourcc = V4L2_PIX_FMT_RGB24,
 80		.hw_format = ROTATE_FORMAT_RGB24,
 81		.planes = 1,
 82		.bpp = { 3, 0, 0 },
 83		.hsub = 1,
 84		.vsub = 1,
 85		.flags = ROTATE_FLAG_OUTPUT
 86	}, {
 87		.fourcc = V4L2_PIX_FMT_BGR24,
 88		.hw_format = ROTATE_FORMAT_BGR24,
 89		.planes = 1,
 90		.bpp = { 3, 0, 0 },
 91		.hsub = 1,
 92		.vsub = 1,
 93		.flags = ROTATE_FLAG_OUTPUT
 94	}, {
 95		.fourcc = V4L2_PIX_FMT_RGB565,
 96		.hw_format = ROTATE_FORMAT_RGB565,
 97		.planes = 1,
 98		.bpp = { 2, 0, 0 },
 99		.hsub = 1,
100		.vsub = 1,
101		.flags = ROTATE_FLAG_OUTPUT
102	}, {
103		.fourcc = V4L2_PIX_FMT_ARGB444,
104		.hw_format = ROTATE_FORMAT_ARGB4444,
105		.planes = 1,
106		.bpp = { 2, 0, 0 },
107		.hsub = 1,
108		.vsub = 1,
109		.flags = ROTATE_FLAG_OUTPUT
110	}, {
111		.fourcc = V4L2_PIX_FMT_ABGR444,
112		.hw_format = ROTATE_FORMAT_ABGR4444,
113		.planes = 1,
114		.bpp = { 2, 0, 0 },
115		.hsub = 1,
116		.vsub = 1,
117		.flags = ROTATE_FLAG_OUTPUT
118	}, {
119		.fourcc = V4L2_PIX_FMT_RGBA444,
120		.hw_format = ROTATE_FORMAT_RGBA4444,
121		.planes = 1,
122		.bpp = { 2, 0, 0 },
123		.hsub = 1,
124		.vsub = 1,
125		.flags = ROTATE_FLAG_OUTPUT
126	}, {
127		.fourcc = V4L2_PIX_FMT_BGRA444,
128		.hw_format = ROTATE_FORMAT_BGRA4444,
129		.planes = 1,
130		.bpp = { 2, 0, 0 },
131		.hsub = 1,
132		.vsub = 1,
133		.flags = ROTATE_FLAG_OUTPUT
134	}, {
135		.fourcc = V4L2_PIX_FMT_ARGB555,
136		.hw_format = ROTATE_FORMAT_ARGB1555,
137		.planes = 1,
138		.bpp = { 2, 0, 0 },
139		.hsub = 1,
140		.vsub = 1,
141		.flags = ROTATE_FLAG_OUTPUT
142	}, {
143		.fourcc = V4L2_PIX_FMT_ABGR555,
144		.hw_format = ROTATE_FORMAT_ABGR1555,
145		.planes = 1,
146		.bpp = { 2, 0, 0 },
147		.hsub = 1,
148		.vsub = 1,
149		.flags = ROTATE_FLAG_OUTPUT
150	}, {
151		.fourcc = V4L2_PIX_FMT_RGBA555,
152		.hw_format = ROTATE_FORMAT_RGBA5551,
153		.planes = 1,
154		.bpp = { 2, 0, 0 },
155		.hsub = 1,
156		.vsub = 1,
157		.flags = ROTATE_FLAG_OUTPUT
158	}, {
159		.fourcc = V4L2_PIX_FMT_BGRA555,
160		.hw_format = ROTATE_FORMAT_BGRA5551,
161		.planes = 1,
162		.bpp = { 2, 0, 0 },
163		.hsub = 1,
164		.vsub = 1,
165		.flags = ROTATE_FLAG_OUTPUT
166	}, {
167		.fourcc = V4L2_PIX_FMT_YVYU,
168		.hw_format = ROTATE_FORMAT_YVYU,
169		.planes = 1,
170		.bpp = { 2, 0, 0 },
171		.hsub = 2,
172		.vsub = 1,
173		.flags = ROTATE_FLAG_YUV
174	}, {
175		.fourcc = V4L2_PIX_FMT_UYVY,
176		.hw_format = ROTATE_FORMAT_UYVY,
177		.planes = 1,
178		.bpp = { 2, 0, 0 },
179		.hsub = 2,
180		.vsub = 1,
181		.flags = ROTATE_FLAG_YUV
182	}, {
183		.fourcc = V4L2_PIX_FMT_YUYV,
184		.hw_format = ROTATE_FORMAT_YUYV,
185		.planes = 1,
186		.bpp = { 2, 0, 0 },
187		.hsub = 2,
188		.vsub = 1,
189		.flags = ROTATE_FLAG_YUV
190	}, {
191		.fourcc = V4L2_PIX_FMT_NV61,
192		.hw_format = ROTATE_FORMAT_NV61,
193		.planes = 2,
194		.bpp = { 1, 2, 0 },
195		.hsub = 2,
196		.vsub = 1,
197		.flags = ROTATE_FLAG_YUV
198	}, {
199		.fourcc = V4L2_PIX_FMT_NV16,
200		.hw_format = ROTATE_FORMAT_NV16,
201		.planes = 2,
202		.bpp = { 1, 2, 0 },
203		.hsub = 2,
204		.vsub = 1,
205		.flags = ROTATE_FLAG_YUV
206	}, {
207		.fourcc = V4L2_PIX_FMT_YUV422P,
208		.hw_format = ROTATE_FORMAT_YUV422P,
209		.planes = 3,
210		.bpp = { 1, 1, 1 },
211		.hsub = 2,
212		.vsub = 1,
213		.flags = ROTATE_FLAG_YUV
214	}, {
215		.fourcc = V4L2_PIX_FMT_NV21,
216		.hw_format = ROTATE_FORMAT_NV21,
217		.planes = 2,
218		.bpp = { 1, 2, 0 },
219		.hsub = 2,
220		.vsub = 2,
221		.flags = ROTATE_FLAG_YUV
222	}, {
223		.fourcc = V4L2_PIX_FMT_NV12,
224		.hw_format = ROTATE_FORMAT_NV12,
225		.planes = 2,
226		.bpp = { 1, 2, 0 },
227		.hsub = 2,
228		.vsub = 2,
229		.flags = ROTATE_FLAG_YUV
230	}, {
231		.fourcc = V4L2_PIX_FMT_YUV420,
232		.hw_format = ROTATE_FORMAT_YUV420P,
233		.planes = 3,
234		.bpp = { 1, 1, 1 },
235		.hsub = 2,
236		.vsub = 2,
237		.flags = ROTATE_FLAG_YUV | ROTATE_FLAG_OUTPUT
238	},
239};
240
241const struct rotate_format *rotate_find_format(u32 pixelformat)
242{
243	unsigned int i;
244
245	for (i = 0; i < ARRAY_SIZE(rotate_formats); i++)
246		if (rotate_formats[i].fourcc == pixelformat)
247			return &rotate_formats[i];
248
249	return NULL;
250}
251
252int rotate_enum_fmt(struct v4l2_fmtdesc *f, bool dst)
253{
254	int i, index;
255
256	index = 0;
257
258	for (i = 0; i < ARRAY_SIZE(rotate_formats); i++) {
259		/* not all formats can be used for capture buffers */
260		if (dst && !(rotate_formats[i].flags & ROTATE_FLAG_OUTPUT))
261			continue;
262
263		if (index == f->index) {
264			f->pixelformat = rotate_formats[i].fourcc;
265
266			return 0;
267		}
268
269		index++;
270	}
271
272	return -EINVAL;
273}
~/ Read-only file preview.