mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 03:31:05 +00:00
v4l2: object: Map GST/V4L2 formats in a C array
This makes it easier to add new format in the future without forgetting to update one of the numerous switch case. This will also help mapping DRM formats. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7540>
This commit is contained in:
parent
b7d4e576ea
commit
746977b6d3
1 changed files with 220 additions and 486 deletions
|
@ -73,150 +73,157 @@ typedef enum
|
|||
GST_V4L2_CODEC = 1u << 1,
|
||||
GST_V4L2_TRANSPORT = 1u << 2,
|
||||
GST_V4L2_NO_PARSE = 1u << 3,
|
||||
GST_V4L2_BAYER = GST_V4L2_RAW | (1u << 5),
|
||||
GST_V4L2_ALL = 0xffff
|
||||
} GstV4L2FormatFlags;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
guint32 format;
|
||||
guint32 v4l2_format;
|
||||
GstVideoFormat gst_format;
|
||||
GstV4L2FormatFlags flags;
|
||||
} GstV4L2FormatDesc;
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
#define MAP_FMT(v4l2_format, gst_fmt) V4L2_PIX_FMT_##v4l2_format, GST_VIDEO_FORMAT_##gst_fmt
|
||||
static const GstV4L2FormatDesc gst_v4l2_formats[] = {
|
||||
/* RGB formats */
|
||||
{V4L2_PIX_FMT_RGB332, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_ARGB555, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_XRGB555, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_ARGB555X, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_XRGB555X, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_RGB565, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_RGB565X, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_BGR666, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_BGR24, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_RGB24, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_ABGR32, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_XBGR32, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_BGRA32, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_BGRX32, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_RGBA32, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_RGBX32, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_ARGB32, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_XRGB32, GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB332, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (ARGB555, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (XRGB555, RGB15), GST_V4L2_RAW},
|
||||
{MAP_FMT (XRGB555X, RGB15), GST_V4L2_RAW},
|
||||
{MAP_FMT (ARGB555X, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB565, RGB16), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB565X, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (BGR666, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (BGR24, BGR), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB24, RGB), GST_V4L2_RAW},
|
||||
{MAP_FMT (ABGR32, BGRA), GST_V4L2_RAW},
|
||||
{MAP_FMT (XBGR32, BGRx), GST_V4L2_RAW},
|
||||
{MAP_FMT (BGRA32, ABGR), GST_V4L2_RAW},
|
||||
{MAP_FMT (BGRX32, xBGR), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGBA32, RGBA), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGBX32, RGBx), GST_V4L2_RAW},
|
||||
{MAP_FMT (ARGB32, ARGB), GST_V4L2_RAW},
|
||||
{MAP_FMT (XRGB32, xRGB), GST_V4L2_RAW},
|
||||
|
||||
/* Deprecated Packed RGB Image Formats (alpha ambiguity) */
|
||||
{V4L2_PIX_FMT_RGB444, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_RGB555, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_RGB555X, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_BGR32, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_RGB32, GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB444, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB555, RGB15), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB555X, BGR15), GST_V4L2_RAW},
|
||||
{MAP_FMT (BGR32, BGRx), GST_V4L2_RAW},
|
||||
{MAP_FMT (BGR32, BGRA), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB32, xRGB), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB32, ARGB), GST_V4L2_RAW},
|
||||
|
||||
/* Grey formats */
|
||||
{V4L2_PIX_FMT_GREY, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_Y4, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_Y6, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_Y10, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_Y12, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_Y16, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_Y16_BE, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_Y10BPACK, GST_V4L2_RAW},
|
||||
{MAP_FMT (GREY, GRAY8), GST_V4L2_RAW},
|
||||
{MAP_FMT (Y4, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (Y6, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (Y10, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (Y12, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (Y16, GRAY16_LE), GST_V4L2_RAW},
|
||||
{MAP_FMT (Y16_BE, GRAY16_BE), GST_V4L2_RAW},
|
||||
{MAP_FMT (Y10BPACK, UNKNOWN), GST_V4L2_RAW},
|
||||
|
||||
/* Palette formats */
|
||||
{V4L2_PIX_FMT_PAL8, GST_V4L2_RAW},
|
||||
{MAP_FMT (PAL8, UNKNOWN), GST_V4L2_RAW},
|
||||
|
||||
/* Chrominance formats */
|
||||
{V4L2_PIX_FMT_UV8, GST_V4L2_RAW},
|
||||
{MAP_FMT (UV8, UNKNOWN), GST_V4L2_RAW},
|
||||
|
||||
/* Luminance+Chrominance formats */
|
||||
{V4L2_PIX_FMT_YVU410, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_YVU420, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_YVU420M, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_YUYV, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_YYUV, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_YVYU, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_UYVY, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_VYUY, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_YUV422P, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_YUV422M, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_YUV411P, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_Y41P, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_YUV444, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_YUV555, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_YUV565, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_YUV32, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_YUV410, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_YUV420, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_YUV420M, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_HI240, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_HM12, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_M420, GST_V4L2_RAW},
|
||||
{MAP_FMT (YVU410, YVU9), GST_V4L2_RAW},
|
||||
{MAP_FMT (YVU420M, YV12), GST_V4L2_RAW},
|
||||
{MAP_FMT (YVU420, YV12), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUYV, YUY2), GST_V4L2_RAW},
|
||||
{MAP_FMT (YYUV, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (YVYU, YVYU), GST_V4L2_RAW},
|
||||
{MAP_FMT (UYVY, UYVY), GST_V4L2_RAW},
|
||||
{MAP_FMT (VYUY, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV422M, Y42B), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV422P, Y42B), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV411P, Y41B), GST_V4L2_RAW},
|
||||
{MAP_FMT (Y41P, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV444, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV555, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV565, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV32, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV410, YUV9), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV420M, I420), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV420, I420), GST_V4L2_RAW},
|
||||
{MAP_FMT (HI240, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (M420, UNKNOWN), GST_V4L2_RAW},
|
||||
|
||||
/* two planes -- one Y, one Cr + Cb interleaved */
|
||||
{V4L2_PIX_FMT_NV12, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_NV12M, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_NV12MT, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_NV12MT_16X16, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_NV12M_8L128, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_NV12M_10BE_8L128, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_NV21, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_NV21M, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_NV16, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_NV16M, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_NV61, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_NV61M, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_NV24, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_NV42, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_MM21, GST_V4L2_RAW},
|
||||
/* two planes -- one Y, one Cr + Cb interleaved */
|
||||
{MAP_FMT (NV12M, NV12), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV12, NV12), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV12MT, NV12_64Z32), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV12MT_16X16, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV12_16L16, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV12M_8L128, NV12_8L128), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV12M_10BE_8L128, NV12_10BE_8L128), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV21M, NV21), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV21, NV21), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV16M, NV16), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV16, NV16), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV61M, NV61), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV61, NV61), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV24, NV24), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV42, UNKNOWN), GST_V4L2_RAW},
|
||||
{MAP_FMT (MM21, NV12_16L32S), GST_V4L2_RAW},
|
||||
|
||||
/* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
|
||||
{V4L2_PIX_FMT_SBGGR8, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SGBRG8, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SGRBG8, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SRGGB8, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SBGGR10, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SGBRG10, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SGRBG10, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SRGGB10, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SBGGR12, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SGBRG12, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SGRBG12, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SRGGB12, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SBGGR14, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SGBRG14, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SGRBG14, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SRGGB14, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SBGGR16, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SGBRG16, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SGRBG16, GST_V4L2_RAW},
|
||||
{V4L2_PIX_FMT_SRGGB16, GST_V4L2_RAW},
|
||||
{MAP_FMT (SBGGR8, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SGBRG8, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SGRBG8, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SRGGB8, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SBGGR10, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SGBRG10, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SGRBG10, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SRGGB10, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SBGGR12, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SGBRG12, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SGRBG12, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SRGGB12, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SBGGR14, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SGBRG14, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SGRBG14, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SRGGB14, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SBGGR16, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SGBRG16, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SGRBG16, ENCODED), GST_V4L2_BAYER},
|
||||
{MAP_FMT (SRGGB16, ENCODED), GST_V4L2_BAYER},
|
||||
|
||||
/* compressed formats */
|
||||
{V4L2_PIX_FMT_MJPEG, GST_V4L2_CODEC},
|
||||
{V4L2_PIX_FMT_JPEG, GST_V4L2_CODEC},
|
||||
{V4L2_PIX_FMT_PJPG, GST_V4L2_CODEC},
|
||||
{V4L2_PIX_FMT_DV, GST_V4L2_TRANSPORT},
|
||||
{V4L2_PIX_FMT_MPEG, GST_V4L2_TRANSPORT},
|
||||
{V4L2_PIX_FMT_FWHT, GST_V4L2_CODEC},
|
||||
{V4L2_PIX_FMT_H264, GST_V4L2_CODEC},
|
||||
{V4L2_PIX_FMT_H264_NO_SC, GST_V4L2_CODEC},
|
||||
{V4L2_PIX_FMT_H264_MVC, GST_V4L2_CODEC},
|
||||
{V4L2_PIX_FMT_HEVC, GST_V4L2_CODEC},
|
||||
{V4L2_PIX_FMT_H263, GST_V4L2_CODEC},
|
||||
{V4L2_PIX_FMT_MPEG1, GST_V4L2_CODEC},
|
||||
{V4L2_PIX_FMT_MPEG2, GST_V4L2_CODEC},
|
||||
{V4L2_PIX_FMT_MPEG4, GST_V4L2_CODEC},
|
||||
{V4L2_PIX_FMT_XVID, GST_V4L2_CODEC},
|
||||
{V4L2_PIX_FMT_VC1_ANNEX_G, GST_V4L2_CODEC},
|
||||
{V4L2_PIX_FMT_VC1_ANNEX_L, GST_V4L2_CODEC},
|
||||
{V4L2_PIX_FMT_VP8, GST_V4L2_CODEC | GST_V4L2_NO_PARSE},
|
||||
{V4L2_PIX_FMT_VP9, GST_V4L2_CODEC | GST_V4L2_NO_PARSE},
|
||||
{MAP_FMT (MJPEG, ENCODED), GST_V4L2_CODEC},
|
||||
{MAP_FMT (JPEG, ENCODED), GST_V4L2_CODEC},
|
||||
{MAP_FMT (PJPG, ENCODED), GST_V4L2_CODEC},
|
||||
{MAP_FMT (DV, ENCODED), GST_V4L2_TRANSPORT},
|
||||
{MAP_FMT (MPEG, ENCODED), GST_V4L2_TRANSPORT},
|
||||
{MAP_FMT (FWHT, ENCODED), GST_V4L2_CODEC},
|
||||
{MAP_FMT (H264, ENCODED), GST_V4L2_CODEC},
|
||||
{MAP_FMT (H264_NO_SC, ENCODED), GST_V4L2_CODEC},
|
||||
{MAP_FMT (H264_MVC, ENCODED), GST_V4L2_CODEC},
|
||||
{MAP_FMT (HEVC, ENCODED), GST_V4L2_CODEC},
|
||||
{MAP_FMT (H263, ENCODED), GST_V4L2_CODEC},
|
||||
{MAP_FMT (MPEG1, ENCODED), GST_V4L2_CODEC},
|
||||
{MAP_FMT (MPEG2, ENCODED), GST_V4L2_CODEC},
|
||||
{MAP_FMT (MPEG4, ENCODED), GST_V4L2_CODEC},
|
||||
{MAP_FMT (XVID, ENCODED), GST_V4L2_CODEC},
|
||||
{MAP_FMT (VC1_ANNEX_G, ENCODED), GST_V4L2_CODEC},
|
||||
{MAP_FMT (VC1_ANNEX_L, ENCODED), GST_V4L2_CODEC},
|
||||
{MAP_FMT (VP8, ENCODED), GST_V4L2_CODEC | GST_V4L2_NO_PARSE},
|
||||
{MAP_FMT (VP9, ENCODED), GST_V4L2_CODEC | GST_V4L2_NO_PARSE},
|
||||
|
||||
/* Vendor-specific formats */
|
||||
{V4L2_PIX_FMT_WNVA, GST_V4L2_CODEC | GST_V4L2_RESOLUTION_AND_RATE},
|
||||
{V4L2_PIX_FMT_SN9C10X, GST_V4L2_CODEC | GST_V4L2_RESOLUTION_AND_RATE},
|
||||
{V4L2_PIX_FMT_PWC1, GST_V4L2_CODEC | GST_V4L2_RESOLUTION_AND_RATE},
|
||||
{V4L2_PIX_FMT_PWC2, GST_V4L2_CODEC | GST_V4L2_RESOLUTION_AND_RATE},
|
||||
{MAP_FMT (WNVA, ENCODED), GST_V4L2_CODEC | GST_V4L2_RESOLUTION_AND_RATE},
|
||||
{MAP_FMT (SN9C10X, ENCODED), GST_V4L2_CODEC | GST_V4L2_RESOLUTION_AND_RATE},
|
||||
{MAP_FMT (PWC1, ENCODED), GST_V4L2_CODEC | GST_V4L2_RESOLUTION_AND_RATE},
|
||||
{MAP_FMT (PWC2, ENCODED), GST_V4L2_CODEC | GST_V4L2_RESOLUTION_AND_RATE},
|
||||
};
|
||||
|
||||
#undef MAP_FMT
|
||||
/* *INDENT-ON* */
|
||||
#define GST_V4L2_FORMAT_COUNT (G_N_ELEMENTS (gst_v4l2_formats))
|
||||
|
||||
static GSList *gst_v4l2_object_get_format_list (GstV4l2Object * v4l2object);
|
||||
|
@ -1347,180 +1354,75 @@ gst_v4l2_object_get_format_list (GstV4l2Object * v4l2object)
|
|||
return v4l2object->formats;
|
||||
}
|
||||
|
||||
static const GstV4L2FormatDesc *
|
||||
gst_v4l2_object_get_desc_from_v4l2fourcc (guint32 fourcc)
|
||||
{
|
||||
gint i;
|
||||
|
||||
for (i = 0; i < GST_V4L2_FORMAT_COUNT; i++) {
|
||||
if (gst_v4l2_formats[i].v4l2_format == fourcc) {
|
||||
return &gst_v4l2_formats[i];
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GstVideoFormat
|
||||
gst_v4l2_object_v4l2fourcc_to_video_format (guint32 fourcc)
|
||||
{
|
||||
GstVideoFormat format;
|
||||
const GstV4L2FormatDesc *desc;
|
||||
desc = gst_v4l2_object_get_desc_from_v4l2fourcc (fourcc);
|
||||
if (!desc)
|
||||
return GST_VIDEO_FORMAT_UNKNOWN;
|
||||
|
||||
switch (fourcc) {
|
||||
case V4L2_PIX_FMT_GREY: /* 8 Greyscale */
|
||||
format = GST_VIDEO_FORMAT_GRAY8;
|
||||
break;
|
||||
case V4L2_PIX_FMT_Y16:
|
||||
format = GST_VIDEO_FORMAT_GRAY16_LE;
|
||||
break;
|
||||
case V4L2_PIX_FMT_Y16_BE:
|
||||
format = GST_VIDEO_FORMAT_GRAY16_BE;
|
||||
break;
|
||||
case V4L2_PIX_FMT_XRGB555:
|
||||
case V4L2_PIX_FMT_RGB555:
|
||||
format = GST_VIDEO_FORMAT_RGB15;
|
||||
break;
|
||||
case V4L2_PIX_FMT_XRGB555X:
|
||||
case V4L2_PIX_FMT_RGB555X:
|
||||
format = GST_VIDEO_FORMAT_BGR15;
|
||||
break;
|
||||
case V4L2_PIX_FMT_RGB565:
|
||||
format = GST_VIDEO_FORMAT_RGB16;
|
||||
break;
|
||||
case V4L2_PIX_FMT_RGB24:
|
||||
format = GST_VIDEO_FORMAT_RGB;
|
||||
break;
|
||||
case V4L2_PIX_FMT_BGR24:
|
||||
format = GST_VIDEO_FORMAT_BGR;
|
||||
break;
|
||||
case V4L2_PIX_FMT_XRGB32:
|
||||
case V4L2_PIX_FMT_RGB32:
|
||||
format = GST_VIDEO_FORMAT_xRGB;
|
||||
break;
|
||||
case V4L2_PIX_FMT_RGBX32:
|
||||
format = GST_VIDEO_FORMAT_RGBx;
|
||||
break;
|
||||
case V4L2_PIX_FMT_XBGR32:
|
||||
case V4L2_PIX_FMT_BGR32:
|
||||
format = GST_VIDEO_FORMAT_BGRx;
|
||||
break;
|
||||
case V4L2_PIX_FMT_BGRX32:
|
||||
format = GST_VIDEO_FORMAT_xBGR;
|
||||
break;
|
||||
case V4L2_PIX_FMT_ABGR32:
|
||||
format = GST_VIDEO_FORMAT_BGRA;
|
||||
break;
|
||||
case V4L2_PIX_FMT_BGRA32:
|
||||
format = GST_VIDEO_FORMAT_ABGR;
|
||||
break;
|
||||
case V4L2_PIX_FMT_RGBA32:
|
||||
format = GST_VIDEO_FORMAT_RGBA;
|
||||
break;
|
||||
case V4L2_PIX_FMT_ARGB32:
|
||||
format = GST_VIDEO_FORMAT_ARGB;
|
||||
break;
|
||||
case V4L2_PIX_FMT_NV12:
|
||||
case V4L2_PIX_FMT_NV12M:
|
||||
format = GST_VIDEO_FORMAT_NV12;
|
||||
break;
|
||||
case V4L2_PIX_FMT_NV12MT:
|
||||
format = GST_VIDEO_FORMAT_NV12_64Z32;
|
||||
break;
|
||||
case V4L2_PIX_FMT_MM21:
|
||||
format = GST_VIDEO_FORMAT_NV12_16L32S;
|
||||
break;
|
||||
case V4L2_PIX_FMT_NV12M_8L128:
|
||||
format = GST_VIDEO_FORMAT_NV12_8L128;
|
||||
break;
|
||||
case V4L2_PIX_FMT_NV12M_10BE_8L128:
|
||||
format = GST_VIDEO_FORMAT_NV12_10BE_8L128;
|
||||
break;
|
||||
case V4L2_PIX_FMT_NV21:
|
||||
case V4L2_PIX_FMT_NV21M:
|
||||
format = GST_VIDEO_FORMAT_NV21;
|
||||
break;
|
||||
case V4L2_PIX_FMT_YVU410:
|
||||
format = GST_VIDEO_FORMAT_YVU9;
|
||||
break;
|
||||
case V4L2_PIX_FMT_YUV410:
|
||||
format = GST_VIDEO_FORMAT_YUV9;
|
||||
break;
|
||||
case V4L2_PIX_FMT_YUV420:
|
||||
case V4L2_PIX_FMT_YUV420M:
|
||||
format = GST_VIDEO_FORMAT_I420;
|
||||
break;
|
||||
case V4L2_PIX_FMT_YUYV:
|
||||
format = GST_VIDEO_FORMAT_YUY2;
|
||||
break;
|
||||
case V4L2_PIX_FMT_YVU420:
|
||||
case V4L2_PIX_FMT_YVU420M:
|
||||
format = GST_VIDEO_FORMAT_YV12;
|
||||
break;
|
||||
case V4L2_PIX_FMT_UYVY:
|
||||
format = GST_VIDEO_FORMAT_UYVY;
|
||||
break;
|
||||
case V4L2_PIX_FMT_YUV411P:
|
||||
format = GST_VIDEO_FORMAT_Y41B;
|
||||
break;
|
||||
case V4L2_PIX_FMT_YUV422P:
|
||||
case V4L2_PIX_FMT_YUV422M:
|
||||
format = GST_VIDEO_FORMAT_Y42B;
|
||||
break;
|
||||
case V4L2_PIX_FMT_YVYU:
|
||||
format = GST_VIDEO_FORMAT_YVYU;
|
||||
break;
|
||||
case V4L2_PIX_FMT_NV16:
|
||||
case V4L2_PIX_FMT_NV16M:
|
||||
format = GST_VIDEO_FORMAT_NV16;
|
||||
break;
|
||||
case V4L2_PIX_FMT_NV61:
|
||||
case V4L2_PIX_FMT_NV61M:
|
||||
format = GST_VIDEO_FORMAT_NV61;
|
||||
break;
|
||||
case V4L2_PIX_FMT_NV24:
|
||||
format = GST_VIDEO_FORMAT_NV24;
|
||||
break;
|
||||
default:
|
||||
format = GST_VIDEO_FORMAT_UNKNOWN;
|
||||
break;
|
||||
}
|
||||
|
||||
return format;
|
||||
return desc->gst_format;
|
||||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
gst_v4l2_object_v4l2fourcc_is_rgb (guint32 fourcc)
|
||||
{
|
||||
gboolean ret = FALSE;
|
||||
const GstV4L2FormatDesc *desc;
|
||||
const GstVideoFormatInfo *finfo;
|
||||
|
||||
switch (fourcc) {
|
||||
case V4L2_PIX_FMT_XRGB555:
|
||||
case V4L2_PIX_FMT_RGB555:
|
||||
case V4L2_PIX_FMT_XRGB555X:
|
||||
case V4L2_PIX_FMT_RGB555X:
|
||||
case V4L2_PIX_FMT_RGB565:
|
||||
case V4L2_PIX_FMT_RGB24:
|
||||
case V4L2_PIX_FMT_BGR24:
|
||||
case V4L2_PIX_FMT_XRGB32:
|
||||
case V4L2_PIX_FMT_RGB32:
|
||||
case V4L2_PIX_FMT_RGBA32:
|
||||
case V4L2_PIX_FMT_RGBX32:
|
||||
case V4L2_PIX_FMT_XBGR32:
|
||||
case V4L2_PIX_FMT_BGR32:
|
||||
case V4L2_PIX_FMT_BGRA32:
|
||||
case V4L2_PIX_FMT_BGRX32:
|
||||
case V4L2_PIX_FMT_ABGR32:
|
||||
case V4L2_PIX_FMT_ARGB32:
|
||||
case V4L2_PIX_FMT_SBGGR8:
|
||||
case V4L2_PIX_FMT_SGBRG8:
|
||||
case V4L2_PIX_FMT_SGRBG8:
|
||||
case V4L2_PIX_FMT_SRGGB8:
|
||||
case V4L2_PIX_FMT_SBGGR10:
|
||||
case V4L2_PIX_FMT_SGBRG10:
|
||||
case V4L2_PIX_FMT_SGRBG10:
|
||||
case V4L2_PIX_FMT_SRGGB10:
|
||||
case V4L2_PIX_FMT_SBGGR12:
|
||||
case V4L2_PIX_FMT_SGBRG12:
|
||||
case V4L2_PIX_FMT_SGRBG12:
|
||||
case V4L2_PIX_FMT_SRGGB12:
|
||||
case V4L2_PIX_FMT_SBGGR14:
|
||||
case V4L2_PIX_FMT_SGBRG14:
|
||||
case V4L2_PIX_FMT_SGRBG14:
|
||||
case V4L2_PIX_FMT_SRGGB14:
|
||||
case V4L2_PIX_FMT_SBGGR16:
|
||||
case V4L2_PIX_FMT_SGBRG16:
|
||||
case V4L2_PIX_FMT_SGRBG16:
|
||||
case V4L2_PIX_FMT_SRGGB16:
|
||||
ret = TRUE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
desc = gst_v4l2_object_get_desc_from_v4l2fourcc (fourcc);
|
||||
if (!desc || desc->gst_format == GST_VIDEO_FORMAT_UNKNOWN)
|
||||
return FALSE;
|
||||
|
||||
finfo = gst_video_format_get_info (desc->gst_format);
|
||||
if (finfo) {
|
||||
if (GST_VIDEO_FORMAT_INFO_IS_RGB (finfo))
|
||||
return TRUE;
|
||||
if (GST_VIDEO_FORMAT_INFO_IS_GRAY (finfo))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
if ((desc->flags & GST_V4L2_BAYER) == GST_V4L2_BAYER)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static const GstV4L2FormatDesc *
|
||||
gst_v4l2_object_get_desc_from_video_format (GstVideoFormat format,
|
||||
const GstV4L2FormatDesc ** fallback)
|
||||
{
|
||||
const GstV4L2FormatDesc *ret = NULL;
|
||||
gint i;
|
||||
|
||||
if (fallback)
|
||||
*fallback = NULL;
|
||||
|
||||
for (i = 0; i < GST_V4L2_FORMAT_COUNT; i++) {
|
||||
if (gst_v4l2_formats[i].gst_format == format) {
|
||||
if (!ret)
|
||||
ret = &gst_v4l2_formats[i];
|
||||
else if (fallback && !*fallback)
|
||||
*fallback = &gst_v4l2_formats[i];
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -1529,16 +1431,14 @@ gst_v4l2_object_v4l2fourcc_is_rgb (guint32 fourcc)
|
|||
static gboolean
|
||||
gst_v4l2_object_v4l2fourcc_is_codec (guint32 fourcc)
|
||||
{
|
||||
gint i;
|
||||
const GstV4L2FormatDesc *desc;
|
||||
|
||||
for (i = 0; i < GST_V4L2_FORMAT_COUNT; i++) {
|
||||
if (gst_v4l2_formats[i].format == fourcc) {
|
||||
if (gst_v4l2_formats[i].flags & (GST_V4L2_CODEC | GST_V4L2_TRANSPORT))
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
desc = gst_v4l2_object_get_desc_from_v4l2fourcc (fourcc);
|
||||
if (!desc)
|
||||
return FALSE;
|
||||
|
||||
if (desc->flags & (GST_V4L2_CODEC | GST_V4L2_TRANSPORT))
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -1603,58 +1503,6 @@ gst_v4l2_object_v4l2fourcc_to_bare_struct (guint32 fourcc)
|
|||
case V4L2_PIX_FMT_VP9:
|
||||
structure = gst_structure_new_empty ("video/x-vp9");
|
||||
break;
|
||||
case V4L2_PIX_FMT_GREY: /* 8 Greyscale */
|
||||
case V4L2_PIX_FMT_Y16:
|
||||
case V4L2_PIX_FMT_Y16_BE:
|
||||
case V4L2_PIX_FMT_XRGB555:
|
||||
case V4L2_PIX_FMT_RGB555:
|
||||
case V4L2_PIX_FMT_XRGB555X:
|
||||
case V4L2_PIX_FMT_RGB555X:
|
||||
case V4L2_PIX_FMT_RGB565:
|
||||
case V4L2_PIX_FMT_RGB24:
|
||||
case V4L2_PIX_FMT_BGR24:
|
||||
case V4L2_PIX_FMT_RGB32:
|
||||
case V4L2_PIX_FMT_XRGB32:
|
||||
case V4L2_PIX_FMT_ARGB32:
|
||||
case V4L2_PIX_FMT_RGBX32:
|
||||
case V4L2_PIX_FMT_RGBA32:
|
||||
case V4L2_PIX_FMT_BGR32:
|
||||
case V4L2_PIX_FMT_BGRX32:
|
||||
case V4L2_PIX_FMT_BGRA32:
|
||||
case V4L2_PIX_FMT_XBGR32:
|
||||
case V4L2_PIX_FMT_ABGR32:
|
||||
case V4L2_PIX_FMT_NV12: /* 12 Y/CbCr 4:2:0 */
|
||||
case V4L2_PIX_FMT_NV12M:
|
||||
case V4L2_PIX_FMT_NV12MT:
|
||||
case V4L2_PIX_FMT_MM21:
|
||||
case V4L2_PIX_FMT_NV12M_8L128:
|
||||
case V4L2_PIX_FMT_NV12M_10BE_8L128:
|
||||
case V4L2_PIX_FMT_NV21: /* 12 Y/CrCb 4:2:0 */
|
||||
case V4L2_PIX_FMT_NV21M:
|
||||
case V4L2_PIX_FMT_NV16: /* 16 Y/CbCr 4:2:2 */
|
||||
case V4L2_PIX_FMT_NV16M:
|
||||
case V4L2_PIX_FMT_NV61: /* 16 Y/CrCb 4:2:2 */
|
||||
case V4L2_PIX_FMT_NV61M:
|
||||
case V4L2_PIX_FMT_NV24: /* 24 Y/CrCb 4:4:4 */
|
||||
case V4L2_PIX_FMT_YVU410:
|
||||
case V4L2_PIX_FMT_YUV410:
|
||||
case V4L2_PIX_FMT_YUV420: /* I420/IYUV */
|
||||
case V4L2_PIX_FMT_YUV420M:
|
||||
case V4L2_PIX_FMT_YUYV:
|
||||
case V4L2_PIX_FMT_YVU420:
|
||||
case V4L2_PIX_FMT_YVU420M:
|
||||
case V4L2_PIX_FMT_UYVY:
|
||||
case V4L2_PIX_FMT_YUV422P:
|
||||
case V4L2_PIX_FMT_YUV422M:
|
||||
case V4L2_PIX_FMT_YVYU:
|
||||
case V4L2_PIX_FMT_YUV411P:{
|
||||
GstVideoFormat format;
|
||||
format = gst_v4l2_object_v4l2fourcc_to_video_format (fourcc);
|
||||
if (format != GST_VIDEO_FORMAT_UNKNOWN)
|
||||
structure = gst_structure_new ("video/x-raw",
|
||||
"format", G_TYPE_STRING, gst_video_format_to_string (format), NULL);
|
||||
break;
|
||||
}
|
||||
case V4L2_PIX_FMT_DV:
|
||||
structure =
|
||||
gst_structure_new ("video/x-dv", "systemstream", G_TYPE_BOOLEAN, TRUE,
|
||||
|
@ -1735,29 +1583,7 @@ gst_v4l2_object_v4l2fourcc_to_bare_struct (guint32 fourcc)
|
|||
case V4L2_PIX_FMT_PWC2:
|
||||
structure = gst_structure_new_empty ("video/x-pwc2");
|
||||
break;
|
||||
case V4L2_PIX_FMT_RGB332:
|
||||
case V4L2_PIX_FMT_BGR666:
|
||||
case V4L2_PIX_FMT_ARGB555X:
|
||||
case V4L2_PIX_FMT_RGB565X:
|
||||
case V4L2_PIX_FMT_RGB444:
|
||||
case V4L2_PIX_FMT_YYUV: /* 16 YUV 4:2:2 */
|
||||
case V4L2_PIX_FMT_HI240: /* 8 8-bit color */
|
||||
case V4L2_PIX_FMT_Y4:
|
||||
case V4L2_PIX_FMT_Y6:
|
||||
case V4L2_PIX_FMT_Y10:
|
||||
case V4L2_PIX_FMT_Y12:
|
||||
case V4L2_PIX_FMT_Y10BPACK:
|
||||
case V4L2_PIX_FMT_YUV444:
|
||||
case V4L2_PIX_FMT_YUV555:
|
||||
case V4L2_PIX_FMT_YUV565:
|
||||
case V4L2_PIX_FMT_Y41P:
|
||||
case V4L2_PIX_FMT_YUV32:
|
||||
case V4L2_PIX_FMT_NV12MT_16X16:
|
||||
case V4L2_PIX_FMT_NV42:
|
||||
case V4L2_PIX_FMT_H264_MVC:
|
||||
default:
|
||||
GST_DEBUG ("Unsupported fourcc 0x%08x %" GST_FOURCC_FORMAT,
|
||||
fourcc, GST_FOURCC_ARGS (fourcc));
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1765,6 +1591,18 @@ gst_v4l2_object_v4l2fourcc_to_bare_struct (guint32 fourcc)
|
|||
structure = gst_structure_new ("video/x-bayer", "format", G_TYPE_STRING,
|
||||
bayer_format, NULL);
|
||||
|
||||
if (!structure) {
|
||||
GstVideoFormat format;
|
||||
format = gst_v4l2_object_v4l2fourcc_to_video_format (fourcc);
|
||||
|
||||
if (format <= GST_VIDEO_FORMAT_ENCODED)
|
||||
GST_DEBUG ("Unsupported V4L2 fourcc 0x%08x %" GST_FOURCC_FORMAT,
|
||||
fourcc, GST_FOURCC_ARGS (fourcc));
|
||||
else
|
||||
structure = gst_structure_new ("video/x-raw",
|
||||
"format", G_TYPE_STRING, gst_video_format_to_string (format), NULL);
|
||||
}
|
||||
|
||||
return structure;
|
||||
}
|
||||
|
||||
|
@ -1780,7 +1618,7 @@ gst_v4l2_object_v4l2fourcc_to_structure (guint32 fourcc)
|
|||
goto done;
|
||||
|
||||
for (i = 0; i < GST_V4L2_FORMAT_COUNT; i++) {
|
||||
if (gst_v4l2_formats[i].format != fourcc)
|
||||
if (gst_v4l2_formats[i].v4l2_format != fourcc)
|
||||
continue;
|
||||
|
||||
if (gst_v4l2_formats[i].flags & GST_V4L2_RESOLUTION_AND_RATE) {
|
||||
|
@ -1805,7 +1643,7 @@ gst_v4l2_object_is_raw (GstV4l2Object * v4l2object)
|
|||
return TRUE;
|
||||
|
||||
for (i = 0; i < GST_V4L2_FORMAT_COUNT; i++) {
|
||||
if (gst_v4l2_formats[i].format == GST_V4L2_PIXELFORMAT (v4l2object)) {
|
||||
if (gst_v4l2_formats[i].v4l2_format == GST_V4L2_PIXELFORMAT (v4l2object)) {
|
||||
return !!(gst_v4l2_formats[i].flags & GST_V4L2_RAW);
|
||||
}
|
||||
}
|
||||
|
@ -1867,12 +1705,12 @@ gst_v4l2_object_get_caps_helper (GstV4L2FormatFlags flags)
|
|||
caps = gst_caps_new_empty ();
|
||||
caps_interlaced = gst_caps_new_empty ();
|
||||
for (i = 0; i < GST_V4L2_FORMAT_COUNT; i++) {
|
||||
guint32 fourcc = gst_v4l2_formats[i].v4l2_format;
|
||||
|
||||
if ((gst_v4l2_formats[i].flags & flags) == 0)
|
||||
continue;
|
||||
|
||||
structure =
|
||||
gst_v4l2_object_v4l2fourcc_to_bare_struct (gst_v4l2_formats[i].format);
|
||||
structure = gst_v4l2_object_v4l2fourcc_to_bare_struct (fourcc);
|
||||
|
||||
if (structure) {
|
||||
GstStructure *alt_s = NULL;
|
||||
|
@ -1884,7 +1722,7 @@ gst_v4l2_object_get_caps_helper (GstV4L2FormatFlags flags)
|
|||
"framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
|
||||
}
|
||||
|
||||
switch (gst_v4l2_formats[i].format) {
|
||||
switch (fourcc) {
|
||||
case V4L2_PIX_FMT_RGB32:
|
||||
alt_s = gst_structure_copy (structure);
|
||||
gst_structure_set (alt_s, "format", G_TYPE_STRING, "ARGB", NULL);
|
||||
|
@ -1979,119 +1817,13 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
|
|||
goto invalid_format;
|
||||
|
||||
if (g_str_equal (mimetype, "video/x-raw")) {
|
||||
switch (GST_VIDEO_INFO_FORMAT (info)) {
|
||||
case GST_VIDEO_FORMAT_I420:
|
||||
fourcc = V4L2_PIX_FMT_YUV420;
|
||||
fourcc_nc = V4L2_PIX_FMT_YUV420M;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_YUY2:
|
||||
fourcc = V4L2_PIX_FMT_YUYV;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_UYVY:
|
||||
fourcc = V4L2_PIX_FMT_UYVY;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_YV12:
|
||||
fourcc = V4L2_PIX_FMT_YVU420;
|
||||
fourcc_nc = V4L2_PIX_FMT_YVU420M;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_Y41B:
|
||||
fourcc = V4L2_PIX_FMT_YUV411P;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_Y42B:
|
||||
fourcc = V4L2_PIX_FMT_YUV422P;
|
||||
fourcc_nc = V4L2_PIX_FMT_YUV422M;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_NV12:
|
||||
fourcc = V4L2_PIX_FMT_NV12;
|
||||
fourcc_nc = V4L2_PIX_FMT_NV12M;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_NV12_64Z32:
|
||||
fourcc_nc = V4L2_PIX_FMT_NV12MT;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_NV12_16L32S:
|
||||
fourcc_nc = V4L2_PIX_FMT_MM21;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_NV12_8L128:
|
||||
fourcc_nc = V4L2_PIX_FMT_NV12M_8L128;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_NV12_10BE_8L128:
|
||||
fourcc_nc = V4L2_PIX_FMT_NV12M_10BE_8L128;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_NV21:
|
||||
fourcc = V4L2_PIX_FMT_NV21;
|
||||
fourcc_nc = V4L2_PIX_FMT_NV21M;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_NV16:
|
||||
fourcc = V4L2_PIX_FMT_NV16;
|
||||
fourcc_nc = V4L2_PIX_FMT_NV16M;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_NV61:
|
||||
fourcc = V4L2_PIX_FMT_NV61;
|
||||
fourcc_nc = V4L2_PIX_FMT_NV61M;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_NV24:
|
||||
fourcc = V4L2_PIX_FMT_NV24;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_YVYU:
|
||||
fourcc = V4L2_PIX_FMT_YVYU;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_RGB15:
|
||||
fourcc = V4L2_PIX_FMT_RGB555;
|
||||
fourcc_nc = V4L2_PIX_FMT_XRGB555;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_RGB16:
|
||||
fourcc = V4L2_PIX_FMT_RGB565;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_RGB:
|
||||
fourcc = V4L2_PIX_FMT_RGB24;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_BGR:
|
||||
fourcc = V4L2_PIX_FMT_BGR24;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_xRGB:
|
||||
fourcc = V4L2_PIX_FMT_RGB32;
|
||||
fourcc_nc = V4L2_PIX_FMT_XRGB32;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_RGBx:
|
||||
fourcc = V4L2_PIX_FMT_RGBX32;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_ARGB:
|
||||
fourcc = V4L2_PIX_FMT_RGB32;
|
||||
fourcc_nc = V4L2_PIX_FMT_ARGB32;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_RGBA:
|
||||
fourcc = V4L2_PIX_FMT_RGBA32;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_BGRx:
|
||||
fourcc = V4L2_PIX_FMT_BGR32;
|
||||
fourcc_nc = V4L2_PIX_FMT_XBGR32;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_xBGR:
|
||||
fourcc = V4L2_PIX_FMT_BGRX32;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_BGRA:
|
||||
fourcc = V4L2_PIX_FMT_BGR32;
|
||||
fourcc_nc = V4L2_PIX_FMT_ABGR32;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_ABGR:
|
||||
fourcc = V4L2_PIX_FMT_BGRA32;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_GRAY8:
|
||||
fourcc = V4L2_PIX_FMT_GREY;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_GRAY16_LE:
|
||||
fourcc = V4L2_PIX_FMT_Y16;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_GRAY16_BE:
|
||||
fourcc = V4L2_PIX_FMT_Y16_BE;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_BGR15:
|
||||
fourcc = V4L2_PIX_FMT_RGB555X;
|
||||
fourcc_nc = V4L2_PIX_FMT_XRGB555X;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
const GstV4L2FormatDesc *desc, *fallback_desc;
|
||||
GstVideoFormat format = GST_VIDEO_INFO_FORMAT (info);
|
||||
desc = gst_v4l2_object_get_desc_from_video_format (format, &fallback_desc);
|
||||
if (desc)
|
||||
fourcc_nc = desc->v4l2_format;
|
||||
if (fallback_desc)
|
||||
fourcc = fallback_desc->v4l2_format;
|
||||
} else {
|
||||
if (g_str_equal (mimetype, "video/mpegts")) {
|
||||
fourcc = V4L2_PIX_FMT_MPEG;
|
||||
|
@ -2187,7 +1919,6 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/* Prefer the non-contiguous if supported */
|
||||
v4l2object->prefered_non_contiguous = TRUE;
|
||||
|
||||
|
@ -2211,17 +1942,20 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
|
|||
/* ERRORS */
|
||||
invalid_format:
|
||||
{
|
||||
GST_DEBUG_OBJECT (v4l2object->dbg_obj, "invalid format");
|
||||
GST_DEBUG_OBJECT (v4l2object->dbg_obj,
|
||||
"Invalid format %" GST_PTR_FORMAT, caps);
|
||||
return FALSE;
|
||||
}
|
||||
unhandled_format:
|
||||
{
|
||||
GST_DEBUG_OBJECT (v4l2object->dbg_obj, "unhandled format");
|
||||
GST_DEBUG_OBJECT (v4l2object->dbg_obj,
|
||||
"Unhandled format %" GST_PTR_FORMAT, caps);
|
||||
return FALSE;
|
||||
}
|
||||
unsupported_format:
|
||||
{
|
||||
GST_DEBUG_OBJECT (v4l2object->dbg_obj, "unsupported format");
|
||||
GST_DEBUG_OBJECT (v4l2object->dbg_obj,
|
||||
"Unsupported format: %" GST_PTR_FORMAT, caps);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
@ -2997,7 +2731,7 @@ gst_v4l2_object_update_and_append (GstV4l2Object * v4l2object,
|
|||
gint i = 0;
|
||||
|
||||
for (; i < GST_V4L2_FORMAT_COUNT; i++) {
|
||||
if (format == gst_v4l2_formats[i].format &&
|
||||
if (format == gst_v4l2_formats[i].v4l2_format &&
|
||||
gst_v4l2_formats[i].flags & GST_V4L2_CODEC &&
|
||||
!(gst_v4l2_formats[i].flags & GST_V4L2_NO_PARSE)) {
|
||||
gst_structure_set (s, "parsed", G_TYPE_BOOLEAN, TRUE, NULL);
|
||||
|
|
Loading…
Reference in a new issue