2 * This file is part of FFmpeg.
4 * FFmpeg is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * FFmpeg is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with FFmpeg; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 #include "v4l2-common.h"
21 const struct fmt_map ff_fmt_conversion_table
[] = {
22 //ff_fmt codec_id v4l2_fmt
23 { AV_PIX_FMT_YUV420P
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_YUV420
},
24 { AV_PIX_FMT_YUV420P
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_YVU420
},
25 { AV_PIX_FMT_YUV422P
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_YUV422P
},
26 { AV_PIX_FMT_YUYV422
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_YUYV
},
27 { AV_PIX_FMT_UYVY422
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_UYVY
},
28 { AV_PIX_FMT_YUV411P
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_YUV411P
},
29 { AV_PIX_FMT_YUV410P
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_YUV410
},
30 { AV_PIX_FMT_YUV410P
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_YVU410
},
31 { AV_PIX_FMT_RGB555LE
,AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_RGB555
},
32 { AV_PIX_FMT_RGB555BE
,AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_RGB555X
},
33 { AV_PIX_FMT_RGB565LE
,AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_RGB565
},
34 { AV_PIX_FMT_RGB565BE
,AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_RGB565X
},
35 { AV_PIX_FMT_BGR24
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_BGR24
},
36 { AV_PIX_FMT_RGB24
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_RGB24
},
37 { AV_PIX_FMT_BGR0
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_BGR32
},
38 { AV_PIX_FMT_0RGB
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_RGB32
},
39 { AV_PIX_FMT_GRAY8
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_GREY
},
40 #ifdef V4L2_PIX_FMT_Y16
41 { AV_PIX_FMT_GRAY16LE
,AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_Y16
},
43 { AV_PIX_FMT_NV12
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_NV12
},
44 { AV_PIX_FMT_NONE
, AV_CODEC_ID_MJPEG
, V4L2_PIX_FMT_MJPEG
},
45 { AV_PIX_FMT_NONE
, AV_CODEC_ID_MJPEG
, V4L2_PIX_FMT_JPEG
},
46 #ifdef V4L2_PIX_FMT_H264
47 { AV_PIX_FMT_NONE
, AV_CODEC_ID_H264
, V4L2_PIX_FMT_H264
},
49 #ifdef V4L2_PIX_FMT_MPEG4
50 { AV_PIX_FMT_NONE
, AV_CODEC_ID_MPEG4
, V4L2_PIX_FMT_MPEG4
},
52 #ifdef V4L2_PIX_FMT_CPIA1
53 { AV_PIX_FMT_NONE
, AV_CODEC_ID_CPIA
, V4L2_PIX_FMT_CPIA1
},
55 #ifdef V4L2_PIX_FMT_SRGGB8
56 { AV_PIX_FMT_BAYER_BGGR8
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_SBGGR8
},
57 { AV_PIX_FMT_BAYER_GBRG8
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_SGBRG8
},
58 { AV_PIX_FMT_BAYER_GRBG8
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_SGRBG8
},
59 { AV_PIX_FMT_BAYER_RGGB8
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_SRGGB8
},
61 { AV_PIX_FMT_NONE
, AV_CODEC_ID_NONE
, 0 },
64 uint32_t ff_fmt_ff2v4l(enum AVPixelFormat pix_fmt
, enum AVCodecID codec_id
)
68 for (i
= 0; ff_fmt_conversion_table
[i
].codec_id
!= AV_CODEC_ID_NONE
; i
++) {
69 if ((codec_id
== AV_CODEC_ID_NONE
||
70 ff_fmt_conversion_table
[i
].codec_id
== codec_id
) &&
71 (pix_fmt
== AV_PIX_FMT_NONE
||
72 ff_fmt_conversion_table
[i
].ff_fmt
== pix_fmt
)) {
73 return ff_fmt_conversion_table
[i
].v4l2_fmt
;
80 enum AVPixelFormat
ff_fmt_v4l2ff(uint32_t v4l2_fmt
, enum AVCodecID codec_id
)
84 for (i
= 0; ff_fmt_conversion_table
[i
].codec_id
!= AV_CODEC_ID_NONE
; i
++) {
85 if (ff_fmt_conversion_table
[i
].v4l2_fmt
== v4l2_fmt
&&
86 ff_fmt_conversion_table
[i
].codec_id
== codec_id
) {
87 return ff_fmt_conversion_table
[i
].ff_fmt
;
91 return AV_PIX_FMT_NONE
;
94 enum AVCodecID
ff_fmt_v4l2codec(uint32_t v4l2_fmt
)
98 for (i
= 0; ff_fmt_conversion_table
[i
].codec_id
!= AV_CODEC_ID_NONE
; i
++) {
99 if (ff_fmt_conversion_table
[i
].v4l2_fmt
== v4l2_fmt
) {
100 return ff_fmt_conversion_table
[i
].codec_id
;
104 return AV_CODEC_ID_NONE
;