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 avpriv_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_CPIA1
50 { AV_PIX_FMT_NONE
, AV_CODEC_ID_CPIA
, V4L2_PIX_FMT_CPIA1
},
52 #ifdef V4L2_PIX_FMT_SRGGB8
53 { AV_PIX_FMT_BAYER_BGGR8
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_SBGGR8
},
54 { AV_PIX_FMT_BAYER_GBRG8
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_SGBRG8
},
55 { AV_PIX_FMT_BAYER_GRBG8
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_SGRBG8
},
56 { AV_PIX_FMT_BAYER_RGGB8
, AV_CODEC_ID_RAWVIDEO
, V4L2_PIX_FMT_SRGGB8
},
58 { AV_PIX_FMT_NONE
, AV_CODEC_ID_NONE
, 0 },
61 uint32_t avpriv_fmt_ff2v4l(enum AVPixelFormat pix_fmt
, enum AVCodecID codec_id
)
65 for (i
= 0; avpriv_fmt_conversion_table
[i
].codec_id
!= AV_CODEC_ID_NONE
; i
++) {
66 if ((codec_id
== AV_CODEC_ID_NONE
||
67 avpriv_fmt_conversion_table
[i
].codec_id
== codec_id
) &&
68 (pix_fmt
== AV_PIX_FMT_NONE
||
69 avpriv_fmt_conversion_table
[i
].ff_fmt
== pix_fmt
)) {
70 return avpriv_fmt_conversion_table
[i
].v4l2_fmt
;
77 enum AVPixelFormat
avpriv_fmt_v4l2ff(uint32_t v4l2_fmt
, enum AVCodecID codec_id
)
81 for (i
= 0; avpriv_fmt_conversion_table
[i
].codec_id
!= AV_CODEC_ID_NONE
; i
++) {
82 if (avpriv_fmt_conversion_table
[i
].v4l2_fmt
== v4l2_fmt
&&
83 avpriv_fmt_conversion_table
[i
].codec_id
== codec_id
) {
84 return avpriv_fmt_conversion_table
[i
].ff_fmt
;
88 return AV_PIX_FMT_NONE
;
91 enum AVCodecID
avpriv_fmt_v4l2codec(uint32_t v4l2_fmt
)
95 for (i
= 0; avpriv_fmt_conversion_table
[i
].codec_id
!= AV_CODEC_ID_NONE
; i
++) {
96 if (avpriv_fmt_conversion_table
[i
].v4l2_fmt
== v4l2_fmt
) {
97 return avpriv_fmt_conversion_table
[i
].codec_id
;
101 return AV_CODEC_ID_NONE
;