v4l2: object: Use libgstvideo DMA DRM mapping
Complete the mapping by pulling GST/DRM mapping from libgstvideo. This removes the duplication. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/8404>
This commit is contained in:
parent
388f86131f
commit
e953693aff
@ -26221,7 +26221,7 @@
|
||||
"long-name": "Video (video4linux2) Sink",
|
||||
"pad-templates": {
|
||||
"sink": {
|
||||
"caps": "video/x-raw(memory:DMABuf):\n format: DMA_DRM\n drm-format: { (string)RGB8, (string)AR15, (string)XR15, (string)XR1., (string)AR1., (string)RG16, (string)RG1., (string)RG24, (string)BG24, (string)AR24, (string)XR24, (string)RA24, (string)RX24, (string)AB24, (string)XB24, (string)BA24, (string)BX24, (string)\"R8\\ \\ \", (string)\"R4\\ \\ \", (string)\"R10\\ \", (string)\"R12\\ \", (string)\"R16\\ \", (string)R16., (string)GR88, (string)YUV9, (string)YVU9, (string)YUYV, (string)UYVY, (string)VYUY, (string)YU11, (string)NV12:0x0400000000000001, (string)NV24, (string)NV42, (string)P010, (string)NV61, (string)NV16, (string)NV21, (string)NV12:0x0400000000000002, (string)NV12, (string)YU16, (string)YVYU, (string)YV12, (string)YU12 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:DMABuf, format:Interlaced):\n format: DMA_DRM\n drm-format: { (string)RGB8, (string)AR15, (string)XR15, (string)XR1., (string)AR1., (string)RG16, (string)RG1., (string)RG24, (string)BG24, (string)AR24, (string)XR24, (string)RA24, (string)RX24, (string)AB24, (string)XB24, (string)BA24, (string)BX24, (string)\"R8\\ \\ \", (string)\"R4\\ \\ \", (string)\"R10\\ \", (string)\"R12\\ \", (string)\"R16\\ \", (string)R16., (string)GR88, (string)YUV9, (string)YVU9, (string)YUYV, (string)UYVY, (string)VYUY, (string)YU11, (string)NV12:0x0400000000000001, (string)NV24, (string)NV42, (string)P010, (string)NV61, (string)NV16, (string)NV21, (string)NV12:0x0400000000000002, (string)NV12, (string)YU16, (string)YVYU, (string)YV12, (string)YU12 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: alternate\nimage/jpeg:\n parsed: true\nvideo/mpeg:\n mpegversion: 4\n systemstream: false\nvideo/mpeg:\n mpegversion: { (int)1, (int)2 }\nvideo/mpegts:\n systemstream: true\nvideo/x-bayer:\n format: { bggr, gbrg, grbg, rggb, bggr10le, gbrg10le, grbg10le, rggb10le, bggr12le, gbrg12le, grbg12le, rggb12le, bggr14le, gbrg14le, grbg14le, rggb14le, bggr16le, gbrg16le, grbg16le, rggb16le }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-dv:\n systemstream: true\nvideo/x-fwht:\nvideo/x-h263:\n variant: itu\nvideo/x-h264:\n stream-format: { (string)byte-stream, (string)avc }\n alignment: au\nvideo/x-h265:\n stream-format: byte-stream\n alignment: au\nvideo/x-pwc1:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-pwc2:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGB16, BGR, RGB, ABGR, xBGR, RGBA, RGBx, BGR15, GRAY8, GRAY16_LE, GRAY16_BE, YUV9, YVU9, YUY2, YVYU, UYVY, Y41B, NV12_64Z32, NV12_8L128, NV12_10BE_8L128, NV24, NV12_16L32S, P010_10LE, NV61, NV16, NV21, NV12, Y42B, YV12, I420, ARGB, xRGB, BGRA, BGRx, RGB15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-sonix:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-vp8:\nvideo/x-vp9:\nvideo/x-wmv:\n wmvversion: 3\n format: WVC1\n\nvideo/x-raw(format:Interlaced):\n format: { RGB16, BGR, RGB, ABGR, xBGR, RGBA, RGBx, BGR15, GRAY8, GRAY16_LE, GRAY16_BE, YUV9, YVU9, YUY2, YVYU, UYVY, Y41B, NV12_64Z32, NV12_8L128, NV12_10BE_8L128, NV24, NV12_16L32S, P010_10LE, NV61, NV16, NV21, NV12, Y42B, YV12, I420, ARGB, xRGB, BGRA, BGRx, RGB15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: alternate\n",
|
||||
"caps": "video/x-raw(memory:DMABuf):\n format: DMA_DRM\n drm-format: { (string)RGB8, (string)AR15, (string)XR15_BE, (string)AR15_BE, (string)RG16, (string)RG16_BE, (string)RG24, (string)BG24, (string)AR24, (string)RA24, (string)RX24, (string)AB24, (string)XB24, (string)BA24, (string)\"R8\\ \\ \", (string)\"R4\\ \\ \", (string)\"R10\\ \", (string)\"R12\\ \", (string)\"R16\\ \", (string)\"R16\\ _BE\", (string)GR88, (string)YUV9, (string)YVU9, (string)YUYV, (string)UYVY, (string)VYUY, (string)YU11, (string)NV12:0x0400000000000001, (string)NV24, (string)NV42, (string)NV12:0x0b00000000000001, (string)P010, (string)NV61, (string)NV16, (string)NV21, (string)NV12:0x0400000000000002, (string)NV12, (string)YU16, (string)YVYU, (string)YV12, (string)YU12, (string)BX24, (string)XR24, (string)XR15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:DMABuf, format:Interlaced):\n format: DMA_DRM\n drm-format: { (string)RGB8, (string)AR15, (string)XR15_BE, (string)AR15_BE, (string)RG16, (string)RG16_BE, (string)RG24, (string)BG24, (string)AR24, (string)RA24, (string)RX24, (string)AB24, (string)XB24, (string)BA24, (string)\"R8\\ \\ \", (string)\"R4\\ \\ \", (string)\"R10\\ \", (string)\"R12\\ \", (string)\"R16\\ \", (string)\"R16\\ _BE\", (string)GR88, (string)YUV9, (string)YVU9, (string)YUYV, (string)UYVY, (string)VYUY, (string)YU11, (string)NV12:0x0400000000000001, (string)NV24, (string)NV42, (string)NV12:0x0b00000000000001, (string)P010, (string)NV61, (string)NV16, (string)NV21, (string)NV12:0x0400000000000002, (string)NV12, (string)YU16, (string)YVYU, (string)YV12, (string)YU12, (string)BX24, (string)XR24, (string)XR15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: alternate\nimage/jpeg:\n parsed: true\nvideo/mpeg:\n mpegversion: 4\n systemstream: false\nvideo/mpeg:\n mpegversion: { (int)1, (int)2 }\nvideo/mpegts:\n systemstream: true\nvideo/x-bayer:\n format: { bggr, gbrg, grbg, rggb, bggr10le, gbrg10le, grbg10le, rggb10le, bggr12le, gbrg12le, grbg12le, rggb12le, bggr14le, gbrg14le, grbg14le, rggb14le, bggr16le, gbrg16le, grbg16le, rggb16le }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-dv:\n systemstream: true\nvideo/x-fwht:\nvideo/x-h263:\n variant: itu\nvideo/x-h264:\n stream-format: { (string)byte-stream, (string)avc }\n alignment: au\nvideo/x-h265:\n stream-format: byte-stream\n alignment: au\nvideo/x-pwc1:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-pwc2:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGB16, BGR, RGB, ABGR, xBGR, RGBA, RGBx, BGR15, GRAY8, GRAY16_LE, GRAY16_BE, YUV9, YVU9, YUY2, YVYU, UYVY, Y41B, NV12_64Z32, NV12_8L128, NV12_10BE_8L128, NV24, NV12_16L32S, P010_10LE, NV61, NV16, NV21, NV12, Y42B, YV12, I420, ARGB, xRGB, BGRA, BGRx, RGB15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-sonix:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-vp8:\nvideo/x-vp9:\nvideo/x-wmv:\n wmvversion: 3\n format: WVC1\n\nvideo/x-raw(format:Interlaced):\n format: { RGB16, BGR, RGB, ABGR, xBGR, RGBA, RGBx, BGR15, GRAY8, GRAY16_LE, GRAY16_BE, YUV9, YVU9, YUY2, YVYU, UYVY, Y41B, NV12_64Z32, NV12_8L128, NV12_10BE_8L128, NV24, NV12_16L32S, P010_10LE, NV61, NV16, NV21, NV12, Y42B, YV12, I420, ARGB, xRGB, BGRA, BGRx, RGB15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: alternate\n",
|
||||
"direction": "sink",
|
||||
"presence": "always"
|
||||
}
|
||||
@ -26529,7 +26529,7 @@
|
||||
"long-name": "Video (video4linux2) Source",
|
||||
"pad-templates": {
|
||||
"src": {
|
||||
"caps": "video/x-raw(memory:DMABuf):\n format: DMA_DRM\n drm-format: { (string)RGB8, (string)AR15, (string)XR15, (string)XR1., (string)AR1., (string)RG16, (string)RG1., (string)RG24, (string)BG24, (string)AR24, (string)XR24, (string)RA24, (string)RX24, (string)AB24, (string)XB24, (string)BA24, (string)BX24, (string)\"R8\\ \\ \", (string)\"R4\\ \\ \", (string)\"R10\\ \", (string)\"R12\\ \", (string)\"R16\\ \", (string)R16., (string)GR88, (string)YUV9, (string)YVU9, (string)YUYV, (string)UYVY, (string)VYUY, (string)YU11, (string)NV12:0x0400000000000001, (string)NV24, (string)NV42, (string)P010, (string)NV61, (string)NV16, (string)NV21, (string)NV12:0x0400000000000002, (string)NV12, (string)YU16, (string)YVYU, (string)YV12, (string)YU12 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:DMABuf, format:Interlaced):\n format: DMA_DRM\n drm-format: { (string)RGB8, (string)AR15, (string)XR15, (string)XR1., (string)AR1., (string)RG16, (string)RG1., (string)RG24, (string)BG24, (string)AR24, (string)XR24, (string)RA24, (string)RX24, (string)AB24, (string)XB24, (string)BA24, (string)BX24, (string)\"R8\\ \\ \", (string)\"R4\\ \\ \", (string)\"R10\\ \", (string)\"R12\\ \", (string)\"R16\\ \", (string)R16., (string)GR88, (string)YUV9, (string)YVU9, (string)YUYV, (string)UYVY, (string)VYUY, (string)YU11, (string)NV12:0x0400000000000001, (string)NV24, (string)NV42, (string)P010, (string)NV61, (string)NV16, (string)NV21, (string)NV12:0x0400000000000002, (string)NV12, (string)YU16, (string)YVYU, (string)YV12, (string)YU12 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: alternate\nimage/jpeg:\n parsed: true\nvideo/mpeg:\n mpegversion: 4\n systemstream: false\nvideo/mpeg:\n mpegversion: { (int)1, (int)2 }\nvideo/mpegts:\n systemstream: true\nvideo/x-bayer:\n format: { bggr, gbrg, grbg, rggb, bggr10le, gbrg10le, grbg10le, rggb10le, bggr12le, gbrg12le, grbg12le, rggb12le, bggr14le, gbrg14le, grbg14le, rggb14le, bggr16le, gbrg16le, grbg16le, rggb16le }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-dv:\n systemstream: true\nvideo/x-fwht:\nvideo/x-h263:\n variant: itu\nvideo/x-h264:\n stream-format: { (string)byte-stream, (string)avc }\n alignment: au\nvideo/x-h265:\n stream-format: byte-stream\n alignment: au\nvideo/x-pwc1:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-pwc2:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGB16, BGR, RGB, ABGR, xBGR, RGBA, RGBx, BGR15, GRAY8, GRAY16_LE, GRAY16_BE, YUV9, YVU9, YUY2, YVYU, UYVY, Y41B, NV12_64Z32, NV12_8L128, NV12_10BE_8L128, NV24, NV12_16L32S, P010_10LE, NV61, NV16, NV21, NV12, Y42B, YV12, I420, ARGB, xRGB, BGRA, BGRx, RGB15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-sonix:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-vp8:\nvideo/x-vp9:\nvideo/x-wmv:\n wmvversion: 3\n format: WVC1\n\nvideo/x-raw(format:Interlaced):\n format: { RGB16, BGR, RGB, ABGR, xBGR, RGBA, RGBx, BGR15, GRAY8, GRAY16_LE, GRAY16_BE, YUV9, YVU9, YUY2, YVYU, UYVY, Y41B, NV12_64Z32, NV12_8L128, NV12_10BE_8L128, NV24, NV12_16L32S, P010_10LE, NV61, NV16, NV21, NV12, Y42B, YV12, I420, ARGB, xRGB, BGRA, BGRx, RGB15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: alternate\n",
|
||||
"caps": "video/x-raw(memory:DMABuf):\n format: DMA_DRM\n drm-format: { (string)RGB8, (string)AR15, (string)XR15_BE, (string)AR15_BE, (string)RG16, (string)RG16_BE, (string)RG24, (string)BG24, (string)AR24, (string)RA24, (string)RX24, (string)AB24, (string)XB24, (string)BA24, (string)\"R8\\ \\ \", (string)\"R4\\ \\ \", (string)\"R10\\ \", (string)\"R12\\ \", (string)\"R16\\ \", (string)\"R16\\ _BE\", (string)GR88, (string)YUV9, (string)YVU9, (string)YUYV, (string)UYVY, (string)VYUY, (string)YU11, (string)NV12:0x0400000000000001, (string)NV24, (string)NV42, (string)NV12:0x0b00000000000001, (string)P010, (string)NV61, (string)NV16, (string)NV21, (string)NV12:0x0400000000000002, (string)NV12, (string)YU16, (string)YVYU, (string)YV12, (string)YU12, (string)BX24, (string)XR24, (string)XR15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:DMABuf, format:Interlaced):\n format: DMA_DRM\n drm-format: { (string)RGB8, (string)AR15, (string)XR15_BE, (string)AR15_BE, (string)RG16, (string)RG16_BE, (string)RG24, (string)BG24, (string)AR24, (string)RA24, (string)RX24, (string)AB24, (string)XB24, (string)BA24, (string)\"R8\\ \\ \", (string)\"R4\\ \\ \", (string)\"R10\\ \", (string)\"R12\\ \", (string)\"R16\\ \", (string)\"R16\\ _BE\", (string)GR88, (string)YUV9, (string)YVU9, (string)YUYV, (string)UYVY, (string)VYUY, (string)YU11, (string)NV12:0x0400000000000001, (string)NV24, (string)NV42, (string)NV12:0x0b00000000000001, (string)P010, (string)NV61, (string)NV16, (string)NV21, (string)NV12:0x0400000000000002, (string)NV12, (string)YU16, (string)YVYU, (string)YV12, (string)YU12, (string)BX24, (string)XR24, (string)XR15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: alternate\nimage/jpeg:\n parsed: true\nvideo/mpeg:\n mpegversion: 4\n systemstream: false\nvideo/mpeg:\n mpegversion: { (int)1, (int)2 }\nvideo/mpegts:\n systemstream: true\nvideo/x-bayer:\n format: { bggr, gbrg, grbg, rggb, bggr10le, gbrg10le, grbg10le, rggb10le, bggr12le, gbrg12le, grbg12le, rggb12le, bggr14le, gbrg14le, grbg14le, rggb14le, bggr16le, gbrg16le, grbg16le, rggb16le }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-dv:\n systemstream: true\nvideo/x-fwht:\nvideo/x-h263:\n variant: itu\nvideo/x-h264:\n stream-format: { (string)byte-stream, (string)avc }\n alignment: au\nvideo/x-h265:\n stream-format: byte-stream\n alignment: au\nvideo/x-pwc1:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-pwc2:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-raw:\n format: { RGB16, BGR, RGB, ABGR, xBGR, RGBA, RGBx, BGR15, GRAY8, GRAY16_LE, GRAY16_BE, YUV9, YVU9, YUY2, YVYU, UYVY, Y41B, NV12_64Z32, NV12_8L128, NV12_10BE_8L128, NV24, NV12_16L32S, P010_10LE, NV61, NV16, NV21, NV12, Y42B, YV12, I420, ARGB, xRGB, BGRA, BGRx, RGB15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-sonix:\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\nvideo/x-vp8:\nvideo/x-vp9:\nvideo/x-wmv:\n wmvversion: 3\n format: WVC1\n\nvideo/x-raw(format:Interlaced):\n format: { RGB16, BGR, RGB, ABGR, xBGR, RGBA, RGBx, BGR15, GRAY8, GRAY16_LE, GRAY16_BE, YUV9, YVU9, YUY2, YVYU, UYVY, Y41B, NV12_64Z32, NV12_8L128, NV12_10BE_8L128, NV24, NV12_16L32S, P010_10LE, NV61, NV16, NV21, NV12, Y42B, YV12, I420, ARGB, xRGB, BGRA, BGRx, RGB15 }\n width: [ 1, 32768 ]\n height: [ 1, 32768 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: alternate\n",
|
||||
"direction": "src",
|
||||
"presence": "always"
|
||||
}
|
||||
|
@ -88,57 +88,60 @@ typedef struct
|
||||
} GstV4L2FormatDesc;
|
||||
|
||||
|
||||
#define MAP_FMT(v4l2_format, gst_fmt) \
|
||||
V4L2_PIX_FMT_##v4l2_format, GST_VIDEO_FORMAT_##gst_fmt
|
||||
#define MAP_FMT(v4l2_format, gst_format) \
|
||||
V4L2_PIX_FMT_##v4l2_format, GST_VIDEO_FORMAT_##gst_format
|
||||
|
||||
#define MAP_DRM(drm_fmt, drm_mod) \
|
||||
DRM_FORMAT_##drm_fmt, DRM_FORMAT_MOD_##drm_mod
|
||||
|
||||
#define KNOWN_DRM_MAP \
|
||||
MAP_DRM (INVALID, INVALID)
|
||||
|
||||
#define MAP_DRM_BE(drm_fmt, drm_mod) \
|
||||
DRM_FORMAT_##drm_fmt | DRM_FORMAT_BIG_ENDIAN, DRM_FORMAT_MOD_##drm_mod
|
||||
|
||||
#define MAP_ENC_FMT(v4l2_format, gst_fmt) \
|
||||
V4L2_PIX_FMT_##v4l2_format, GST_VIDEO_FORMAT_##gst_fmt, DRM_FORMAT_INVALID, DRM_FORMAT_MOD_INVALID
|
||||
#define MAP_ENC_FMT(v4l2_format, gst_format) \
|
||||
V4L2_PIX_FMT_##v4l2_format, GST_VIDEO_FORMAT_##gst_format, DRM_FORMAT_INVALID, DRM_FORMAT_MOD_INVALID
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
static const GstV4L2FormatDesc gst_v4l2_formats[] = {
|
||||
static GstV4L2FormatDesc gst_v4l2_formats[] = {
|
||||
/* RGB formats */
|
||||
{MAP_FMT (RGB332, UNKNOWN), MAP_DRM (RGB332, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (ARGB555, UNKNOWN), MAP_DRM (ARGB1555, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (XRGB555, RGB15), MAP_DRM (XRGB1555, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (XRGB555, RGB15), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (XRGB555X,UNKNOWN), MAP_DRM_BE (XRGB1555, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (ARGB555X, UNKNOWN), MAP_DRM_BE (ARGB1555, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB565, RGB16), MAP_DRM (RGB565, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB565, RGB16), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB565X,UNKNOWN), MAP_DRM_BE (RGB565, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (BGR666, UNKNOWN), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
|
||||
{MAP_FMT (BGR24, BGR), MAP_DRM (RGB888, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB24, RGB), MAP_DRM (BGR888, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (ABGR32, BGRA), MAP_DRM (ARGB8888, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (XBGR32, BGRx), MAP_DRM (XRGB8888, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (BGRA32, ABGR), MAP_DRM (RGBA8888, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (BGRX32, xBGR), MAP_DRM (RGBX8888, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGBA32, RGBA), MAP_DRM (ABGR8888, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGBX32, RGBx), MAP_DRM (XBGR8888, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (ARGB32, ARGB), MAP_DRM (BGRA8888, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (XRGB32, xRGB), MAP_DRM (BGRX8888, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (BGR24, BGR), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB24, RGB), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (ABGR32, BGRA), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (XBGR32, BGRx), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (BGRA32, ABGR), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (BGRX32, xBGR), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (RGBA32, RGBA), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (RGBX32, RGBx), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (ARGB32, ARGB), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (XRGB32, xRGB), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
|
||||
/* Deprecated Packed RGB Image Formats (alpha ambiguity) */
|
||||
{MAP_FMT (RGB444, UNKNOWN), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB555, RGB15), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB555, RGB15), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB555X, BGR15), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
|
||||
{MAP_FMT (BGR32, BGRx), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
|
||||
{MAP_FMT (BGR32, BGRA), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB32, xRGB), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB32, ARGB), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
|
||||
{MAP_FMT (BGR32, BGRx), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (BGR32, BGRA), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB32, xRGB), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (RGB32, ARGB), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
|
||||
/* Grey formats */
|
||||
{MAP_FMT (GREY, GRAY8), MAP_DRM (R8, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (GREY, GRAY8), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (Y4, UNKNOWN), MAP_DRM (R4, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (Y6, UNKNOWN), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
|
||||
{MAP_FMT (Y10, UNKNOWN), MAP_DRM (R10, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (Y12, UNKNOWN), MAP_DRM (R12, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (Y16, GRAY16_LE), MAP_DRM (R16, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (Y16_BE, GRAY16_BE), MAP_DRM_BE (R16, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (Y16, GRAY16_LE), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (Y16_BE, GRAY16_BE), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (Y10BPACK, UNKNOWN), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
|
||||
|
||||
/* Palette formats */
|
||||
@ -148,20 +151,20 @@ static const GstV4L2FormatDesc gst_v4l2_formats[] = {
|
||||
{MAP_FMT (UV8, UNKNOWN), MAP_DRM (GR88, LINEAR), GST_V4L2_RAW},
|
||||
|
||||
/* Luminance+Chrominance formats */
|
||||
{MAP_FMT (YUV410, YUV9), MAP_DRM (YUV410, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (YVU410, YVU9), MAP_DRM (YVU410, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV420M, I420), MAP_DRM (YUV420, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV420, I420), MAP_DRM (YUV420, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (YVU420M, YV12), MAP_DRM (YVU420, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (YVU420, YV12), MAP_DRM (YVU420, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUYV, YUY2), MAP_DRM (YUYV, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV410, YUV9), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (YVU410, YVU9), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV420M, I420), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV420, I420), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (YVU420M, YV12), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (YVU420, YV12), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (YUYV, YUY2), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (YYUV, UNKNOWN), MAP_DRM (YVYU, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (YVYU, YVYU), MAP_DRM (YVYU, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (UYVY, UYVY), MAP_DRM (UYVY, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (YVYU, YVYU), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (UYVY, UYVY), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (VYUY, UNKNOWN), MAP_DRM (VYUY, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV422M, Y42B), MAP_DRM (YUV422, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV422P, Y42B), MAP_DRM (YUV422, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV411P, Y41B), MAP_DRM (YUV411, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV422M, Y42B), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV422P, Y42B), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV411P, Y41B), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (Y41P, UNKNOWN), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV444, UNKNOWN), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
|
||||
{MAP_FMT (YUV555, UNKNOWN), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
|
||||
@ -171,23 +174,23 @@ static const GstV4L2FormatDesc gst_v4l2_formats[] = {
|
||||
{MAP_FMT (M420, UNKNOWN), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
|
||||
|
||||
/* two planes -- one Y, one Cr + Cb interleaved */
|
||||
{MAP_FMT (NV12M, NV12), MAP_DRM (NV12, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV12, NV12), MAP_DRM (NV12, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV12MT, NV12_64Z32), MAP_DRM (NV12, SAMSUNG_64_32_TILE), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV12M, NV12), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (NV12, NV12), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (NV12MT, NV12_64Z32), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (NV12MT_16X16, UNKNOWN), MAP_DRM (NV12, SAMSUNG_16_16_TILE), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV12_16L16, UNKNOWN), MAP_DRM (NV12, SAMSUNG_16_16_TILE), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV12M_8L128, NV12_8L128), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV12M_10BE_8L128, NV12_10BE_8L128), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV21M, NV21), MAP_DRM (NV21, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV21, NV21), MAP_DRM (NV21, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV16M, NV16), MAP_DRM (NV16, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV16, NV16), MAP_DRM (NV16, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV61M, NV61), MAP_DRM (NV61, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV61, NV61), MAP_DRM (NV61, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV24, NV24), MAP_DRM (NV24, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (NV21M, NV21), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (NV21, NV21), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (NV16M, NV16), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (NV16, NV16), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (NV61M, NV61), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (NV61, NV61), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (NV24, NV24), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (NV42, UNKNOWN), MAP_DRM (NV42, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (MM21, NV12_16L32S), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
|
||||
{MAP_FMT (P010, P010_10LE), MAP_DRM (P010, LINEAR), GST_V4L2_RAW},
|
||||
{MAP_FMT (MM21, NV12_16L32S), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
{MAP_FMT (P010, P010_10LE), KNOWN_DRM_MAP, GST_V4L2_RAW},
|
||||
|
||||
/* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
|
||||
{MAP_ENC_FMT (SBGGR8, ENCODED), GST_V4L2_BAYER},
|
||||
@ -1370,14 +1373,35 @@ gst_v4l2_object_get_format_list (GstV4l2Object * v4l2object)
|
||||
return v4l2object->formats;
|
||||
}
|
||||
|
||||
static const GstV4L2FormatDesc *
|
||||
gst_v4l2_format_desc (void)
|
||||
{
|
||||
static gsize once = 0;
|
||||
|
||||
if (g_once_init_enter (&once)) {
|
||||
for (int i = 0; i < GST_V4L2_FORMAT_COUNT; i++) {
|
||||
if (gst_v4l2_formats[i].gst_format != GST_VIDEO_FORMAT_UNKNOWN) {
|
||||
gst_v4l2_formats[i].drm_fourcc =
|
||||
gst_video_dma_drm_format_from_gst_format (gst_v4l2_formats
|
||||
[i].gst_format, &gst_v4l2_formats[i].drm_modifier);
|
||||
}
|
||||
}
|
||||
|
||||
g_once_init_leave (&once, 1);
|
||||
}
|
||||
|
||||
return gst_v4l2_formats;
|
||||
}
|
||||
|
||||
static const GstV4L2FormatDesc *
|
||||
gst_v4l2_object_get_desc_from_v4l2fourcc (guint32 fourcc)
|
||||
{
|
||||
const GstV4L2FormatDesc *formats = gst_v4l2_format_desc ();
|
||||
gint i;
|
||||
|
||||
for (i = 0; i < GST_V4L2_FORMAT_COUNT; i++) {
|
||||
if (gst_v4l2_formats[i].v4l2_format == fourcc) {
|
||||
return &gst_v4l2_formats[i];
|
||||
if (formats[i].v4l2_format == fourcc) {
|
||||
return &formats[i];
|
||||
}
|
||||
}
|
||||
|
||||
@ -1424,6 +1448,7 @@ static const GstV4L2FormatDesc *
|
||||
gst_v4l2_object_get_desc_from_video_format (GstVideoFormat format,
|
||||
const GstV4L2FormatDesc ** fallback)
|
||||
{
|
||||
const GstV4L2FormatDesc *formats = gst_v4l2_format_desc ();
|
||||
const GstV4L2FormatDesc *ret = NULL;
|
||||
gint i;
|
||||
|
||||
@ -1431,11 +1456,11 @@ gst_v4l2_object_get_desc_from_video_format (GstVideoFormat format,
|
||||
*fallback = NULL;
|
||||
|
||||
for (i = 0; i < GST_V4L2_FORMAT_COUNT; i++) {
|
||||
if (gst_v4l2_formats[i].gst_format == format) {
|
||||
if (formats[i].gst_format == format) {
|
||||
if (!ret)
|
||||
ret = &gst_v4l2_formats[i];
|
||||
ret = &formats[i];
|
||||
else if (fallback && !*fallback)
|
||||
*fallback = &gst_v4l2_formats[i];
|
||||
*fallback = &formats[i];
|
||||
else
|
||||
break;
|
||||
}
|
||||
@ -1448,6 +1473,7 @@ static const GstV4L2FormatDesc *
|
||||
gst_v4l2_object_get_desc_from_drm_fourcc (guint32 drm_fourcc,
|
||||
guint64 drm_modifier, const GstV4L2FormatDesc ** fallback)
|
||||
{
|
||||
const GstV4L2FormatDesc *formats = gst_v4l2_format_desc ();
|
||||
const GstV4L2FormatDesc *ret = NULL;
|
||||
gint i;
|
||||
|
||||
@ -1455,12 +1481,12 @@ gst_v4l2_object_get_desc_from_drm_fourcc (guint32 drm_fourcc,
|
||||
*fallback = NULL;
|
||||
|
||||
for (i = 0; i < GST_V4L2_FORMAT_COUNT; i++) {
|
||||
if (gst_v4l2_formats[i].drm_fourcc == drm_fourcc
|
||||
&& gst_v4l2_formats[i].drm_modifier == drm_modifier) {
|
||||
if (formats[i].drm_fourcc == drm_fourcc
|
||||
&& formats[i].drm_modifier == drm_modifier) {
|
||||
if (!ret)
|
||||
ret = &gst_v4l2_formats[i];
|
||||
ret = &formats[i];
|
||||
else if (fallback && !*fallback)
|
||||
*fallback = &gst_v4l2_formats[i];
|
||||
*fallback = &formats[i];
|
||||
else
|
||||
break;
|
||||
}
|
||||
@ -1666,6 +1692,7 @@ gst_v4l2_object_v4l2fourcc_to_bare_struct (guint32 fourcc,
|
||||
gboolean
|
||||
gst_v4l2_object_is_raw (GstV4l2Object * v4l2object)
|
||||
{
|
||||
const GstV4L2FormatDesc *formats = gst_v4l2_format_desc ();
|
||||
gint i;
|
||||
|
||||
if (GST_VIDEO_INFO_FORMAT (&v4l2object->info.vinfo) !=
|
||||
@ -1673,8 +1700,8 @@ gst_v4l2_object_is_raw (GstV4l2Object * v4l2object)
|
||||
return TRUE;
|
||||
|
||||
for (i = 0; i < GST_V4L2_FORMAT_COUNT; i++) {
|
||||
if (gst_v4l2_formats[i].v4l2_format == GST_V4L2_PIXELFORMAT (v4l2object)) {
|
||||
return !!(gst_v4l2_formats[i].flags & GST_V4L2_RAW);
|
||||
if (formats[i].v4l2_format == GST_V4L2_PIXELFORMAT (v4l2object)) {
|
||||
return !!(formats[i].flags & GST_V4L2_RAW);
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
@ -1820,11 +1847,12 @@ gst_v4l2_object_get_caps_helper (GstV4L2FormatFlags flags,
|
||||
GstCaps *
|
||||
gst_v4l2_object_get_all_caps (void)
|
||||
{
|
||||
const GstV4L2FormatDesc *formats = gst_v4l2_format_desc ();
|
||||
static GstCaps *caps = NULL;
|
||||
|
||||
if (g_once_init_enter (&caps)) {
|
||||
GstCaps *all_caps = gst_v4l2_object_get_caps_helper (GST_V4L2_ALL,
|
||||
gst_v4l2_formats, GST_V4L2_FORMAT_COUNT);
|
||||
formats, GST_V4L2_FORMAT_COUNT);
|
||||
GST_MINI_OBJECT_FLAG_SET (all_caps, GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED);
|
||||
g_once_init_leave (&caps, all_caps);
|
||||
}
|
||||
@ -1835,11 +1863,12 @@ gst_v4l2_object_get_all_caps (void)
|
||||
GstCaps *
|
||||
gst_v4l2_object_get_raw_caps (void)
|
||||
{
|
||||
const GstV4L2FormatDesc *formats = gst_v4l2_format_desc ();
|
||||
static GstCaps *caps = NULL;
|
||||
|
||||
if (g_once_init_enter (&caps)) {
|
||||
GstCaps *raw_caps = gst_v4l2_object_get_caps_helper (GST_V4L2_RAW,
|
||||
gst_v4l2_formats, GST_V4L2_FORMAT_COUNT);
|
||||
formats, GST_V4L2_FORMAT_COUNT);
|
||||
GST_MINI_OBJECT_FLAG_SET (raw_caps, GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED);
|
||||
g_once_init_leave (&caps, raw_caps);
|
||||
}
|
||||
@ -1850,11 +1879,12 @@ gst_v4l2_object_get_raw_caps (void)
|
||||
GstCaps *
|
||||
gst_v4l2_object_get_codec_caps (void)
|
||||
{
|
||||
const GstV4L2FormatDesc *formats = gst_v4l2_format_desc ();
|
||||
static GstCaps *caps = NULL;
|
||||
|
||||
if (g_once_init_enter (&caps)) {
|
||||
GstCaps *codec_caps = gst_v4l2_object_get_caps_helper (GST_V4L2_CODEC,
|
||||
gst_v4l2_formats, GST_V4L2_FORMAT_COUNT);
|
||||
formats, GST_V4L2_FORMAT_COUNT);
|
||||
GST_MINI_OBJECT_FLAG_SET (codec_caps, GST_MINI_OBJECT_FLAG_MAY_BE_LEAKED);
|
||||
g_once_init_leave (&caps, codec_caps);
|
||||
}
|
||||
@ -2866,15 +2896,17 @@ gst_v4l2_object_update_and_append (GstV4l2Object * v4l2object,
|
||||
guint32 format, GstCaps * caps, GstStructure * fields,
|
||||
const GstStructure * sysmem_tmpl, const GstStructure * dmabuf_tmpl)
|
||||
{
|
||||
const GstV4L2FormatDesc *formats = gst_v4l2_format_desc ();
|
||||
|
||||
/* Encoded stream on output buffer need to be parsed */
|
||||
if (v4l2object->type == V4L2_BUF_TYPE_VIDEO_OUTPUT ||
|
||||
v4l2object->type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) {
|
||||
gint i = 0;
|
||||
|
||||
for (; i < GST_V4L2_FORMAT_COUNT; i++) {
|
||||
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)) {
|
||||
if (format == formats[i].v4l2_format &&
|
||||
formats[i].flags & GST_V4L2_CODEC &&
|
||||
!(formats[i].flags & GST_V4L2_NO_PARSE)) {
|
||||
gst_structure_set (fields, "parsed", G_TYPE_BOOLEAN, TRUE, NULL);
|
||||
break;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user