videocrop: Add support for GBR* video formats

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/515>
This commit is contained in:
Markus Ebner 2021-04-07 21:57:11 +02:00 committed by GStreamer Marge Bot
parent e31cbce4d5
commit 7276b0f9d1
3 changed files with 79 additions and 55 deletions

View file

@ -15,7 +15,9 @@
"I420_10BE, A420_10BE, Y444_10BE, A444_10BE, I422_10BE, A422_10BE, " \ "I420_10BE, A420_10BE, Y444_10BE, A444_10BE, I422_10BE, A422_10BE, " \
"I420_10LE, A420_10LE, Y444_10LE, A444_10LE, I422_10LE, A422_10LE, " \ "I420_10LE, A420_10LE, Y444_10LE, A444_10LE, I422_10LE, A422_10LE, " \
"I420_12BE, Y444_12BE, I422_12BE, " \ "I420_12BE, Y444_12BE, I422_12BE, " \
"I420_12LE, Y444_12LE, I422_12LE" "I420_12LE, Y444_12LE, I422_12LE, " \
"GBR, GBR_10BE, GBR_10LE, GBR_12BE, GBR_12LE, " \
"GBRA, GBRA_10BE, GBRA_10LE, GBRA_12BE, GBRA_12LE"
#define VIDEO_CROP_FORMATS_SEMI_PLANAR "NV12, NV21" #define VIDEO_CROP_FORMATS_SEMI_PLANAR "NV12, NV21"
/* aspectratiocrop uses videocrop. sync caps changes between both */ /* aspectratiocrop uses videocrop. sync caps changes between both */

View file

@ -806,59 +806,79 @@ gst_video_crop_set_info (GstVideoFilter * vfilter, GstCaps * in,
if (!crop->raw_caps) if (!crop->raw_caps)
goto beach; goto beach;
if (GST_VIDEO_INFO_IS_RGB (in_info) switch (GST_VIDEO_INFO_FORMAT (in_info)) {
|| GST_VIDEO_INFO_IS_GRAY (in_info)) { case GST_VIDEO_FORMAT_RGB:
crop->packing = VIDEO_CROP_PIXEL_FORMAT_PACKED_SIMPLE; case GST_VIDEO_FORMAT_BGR:
} else { case GST_VIDEO_FORMAT_RGB16:
switch (GST_VIDEO_INFO_FORMAT (in_info)) { case GST_VIDEO_FORMAT_RGB15:
case GST_VIDEO_FORMAT_AYUV: case GST_VIDEO_FORMAT_RGBx:
crop->packing = VIDEO_CROP_PIXEL_FORMAT_PACKED_SIMPLE; case GST_VIDEO_FORMAT_xRGB:
break; case GST_VIDEO_FORMAT_BGRx:
case GST_VIDEO_FORMAT_YVYU: case GST_VIDEO_FORMAT_xBGR:
case GST_VIDEO_FORMAT_YUY2: case GST_VIDEO_FORMAT_RGBA:
case GST_VIDEO_FORMAT_UYVY: case GST_VIDEO_FORMAT_ARGB:
crop->packing = VIDEO_CROP_PIXEL_FORMAT_PACKED_COMPLEX; case GST_VIDEO_FORMAT_BGRA:
if (GST_VIDEO_INFO_FORMAT (in_info) == GST_VIDEO_FORMAT_UYVY) { case GST_VIDEO_FORMAT_ABGR:
/* UYVY = 4:2:2 - [U0 Y0 V0 Y1] [U2 Y2 V2 Y3] [U4 Y4 V4 Y5] */ case GST_VIDEO_FORMAT_GRAY8:
crop->macro_y_off = 1; case GST_VIDEO_FORMAT_GRAY16_LE:
} else { case GST_VIDEO_FORMAT_GRAY16_BE:
/* YUYV = 4:2:2 - [Y0 U0 Y1 V0] [Y2 U2 Y3 V2] [Y4 U4 Y5 V4] = YUY2 */ case GST_VIDEO_FORMAT_AYUV:
crop->macro_y_off = 0; crop->packing = VIDEO_CROP_PIXEL_FORMAT_PACKED_SIMPLE;
} break;
break; case GST_VIDEO_FORMAT_YVYU:
case GST_VIDEO_FORMAT_I420: case GST_VIDEO_FORMAT_YUY2:
case GST_VIDEO_FORMAT_I420_10BE: case GST_VIDEO_FORMAT_UYVY:
case GST_VIDEO_FORMAT_I420_10LE: crop->packing = VIDEO_CROP_PIXEL_FORMAT_PACKED_COMPLEX;
case GST_VIDEO_FORMAT_I420_12BE: if (GST_VIDEO_INFO_FORMAT (in_info) == GST_VIDEO_FORMAT_UYVY) {
case GST_VIDEO_FORMAT_I420_12LE: /* UYVY = 4:2:2 - [U0 Y0 V0 Y1] [U2 Y2 V2 Y3] [U4 Y4 V4 Y5] */
case GST_VIDEO_FORMAT_A420: crop->macro_y_off = 1;
case GST_VIDEO_FORMAT_A420_10BE: } else {
case GST_VIDEO_FORMAT_A420_10LE: /* YUYV = 4:2:2 - [Y0 U0 Y1 V0] [Y2 U2 Y3 V2] [Y4 U4 Y5 V4] = YUY2 */
case GST_VIDEO_FORMAT_YV12: crop->macro_y_off = 0;
case GST_VIDEO_FORMAT_Y444: }
case GST_VIDEO_FORMAT_Y444_10BE: break;
case GST_VIDEO_FORMAT_Y444_10LE: case GST_VIDEO_FORMAT_I420:
case GST_VIDEO_FORMAT_Y444_12BE: case GST_VIDEO_FORMAT_I420_10BE:
case GST_VIDEO_FORMAT_Y444_12LE: case GST_VIDEO_FORMAT_I420_10LE:
case GST_VIDEO_FORMAT_A444_10BE: case GST_VIDEO_FORMAT_I420_12BE:
case GST_VIDEO_FORMAT_A444_10LE: case GST_VIDEO_FORMAT_I420_12LE:
case GST_VIDEO_FORMAT_Y42B: case GST_VIDEO_FORMAT_A420:
case GST_VIDEO_FORMAT_I422_10BE: case GST_VIDEO_FORMAT_A420_10BE:
case GST_VIDEO_FORMAT_I422_10LE: case GST_VIDEO_FORMAT_A420_10LE:
case GST_VIDEO_FORMAT_A422_10BE: case GST_VIDEO_FORMAT_YV12:
case GST_VIDEO_FORMAT_A422_10LE: case GST_VIDEO_FORMAT_Y444:
case GST_VIDEO_FORMAT_I422_12BE: case GST_VIDEO_FORMAT_Y444_10BE:
case GST_VIDEO_FORMAT_I422_12LE: case GST_VIDEO_FORMAT_Y444_10LE:
case GST_VIDEO_FORMAT_Y41B: case GST_VIDEO_FORMAT_Y444_12BE:
crop->packing = VIDEO_CROP_PIXEL_FORMAT_PLANAR; case GST_VIDEO_FORMAT_Y444_12LE:
break; case GST_VIDEO_FORMAT_A444_10BE:
case GST_VIDEO_FORMAT_NV12: case GST_VIDEO_FORMAT_A444_10LE:
case GST_VIDEO_FORMAT_NV21: case GST_VIDEO_FORMAT_Y42B:
crop->packing = VIDEO_CROP_PIXEL_FORMAT_SEMI_PLANAR; case GST_VIDEO_FORMAT_I422_10BE:
break; case GST_VIDEO_FORMAT_I422_10LE:
default: case GST_VIDEO_FORMAT_A422_10BE:
goto unknown_format; case GST_VIDEO_FORMAT_A422_10LE:
} case GST_VIDEO_FORMAT_I422_12BE:
case GST_VIDEO_FORMAT_I422_12LE:
case GST_VIDEO_FORMAT_GBR:
case GST_VIDEO_FORMAT_GBR_10BE:
case GST_VIDEO_FORMAT_GBR_10LE:
case GST_VIDEO_FORMAT_GBR_12BE:
case GST_VIDEO_FORMAT_GBR_12LE:
case GST_VIDEO_FORMAT_GBRA:
case GST_VIDEO_FORMAT_GBRA_10BE:
case GST_VIDEO_FORMAT_GBRA_10LE:
case GST_VIDEO_FORMAT_GBRA_12BE:
case GST_VIDEO_FORMAT_GBRA_12LE:
case GST_VIDEO_FORMAT_Y41B:
crop->packing = VIDEO_CROP_PIXEL_FORMAT_PLANAR;
break;
case GST_VIDEO_FORMAT_NV12:
case GST_VIDEO_FORMAT_NV21:
crop->packing = VIDEO_CROP_PIXEL_FORMAT_SEMI_PLANAR;
break;
default:
goto unknown_format;
} }
beach: beach:

View file

@ -43,7 +43,9 @@ G_BEGIN_DECLS
* I420_10BE, A420_10BE, Y444_10BE, A444_10BE, I422_10BE, A422_10BE, * I420_10BE, A420_10BE, Y444_10BE, A444_10BE, I422_10BE, A422_10BE,
* I420_10LE, A420_10LE, Y444_10LE, A444_10LE, I422_10LE, A422_10LE, * I420_10LE, A420_10LE, Y444_10LE, A444_10LE, I422_10LE, A422_10LE,
* I420_12BE, Y444_12BE, I422_12BE, * I420_12BE, Y444_12BE, I422_12BE,
* I420_12LE, Y444_12LE, I422_12LE */ * I420_12LE, Y444_12LE, I422_12LE,
* GBR, GBR_10BE, GBR_10LE, GBR_12BE, GBR_12LE,
* GBRA, GBRA_10BE, GBRA_10LE, GBRA_12BE, GBRA_12LE */
VIDEO_CROP_PIXEL_FORMAT_PLANAR, VIDEO_CROP_PIXEL_FORMAT_PLANAR,
/* NV12, NV21 */ /* NV12, NV21 */
VIDEO_CROP_PIXEL_FORMAT_SEMI_PLANAR VIDEO_CROP_PIXEL_FORMAT_SEMI_PLANAR