videotestsrc: Move video/x-bayer caps parsing in one place

Move all the video/x-bayer caps parsing into one place,
gst_video_test_src_parse_caps(), no functional change.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4686>
This commit is contained in:
Marek Vasut 2023-05-19 20:38:39 +02:00
parent 110ec5d4b2
commit d0efb05f52

View file

@ -827,46 +827,57 @@ gst_video_test_src_get_property (GObject * object, guint prop_id,
} }
static gboolean static gboolean
gst_video_test_src_parse_caps (const GstCaps * caps, gst_video_test_src_parse_caps (const GstCaps * caps, GstVideoInfo * info,
gint * width, gint * height, gint * fps_n, gint * fps_d, GstVideoTestSrc * videotestsrc)
GstVideoColorimetry * colorimetry, gint * x_inv, gint * y_inv)
{ {
const GstStructure *structure; const GstStructure *structure;
GstPadLinkReturn ret; gboolean ret;
const GValue *framerate; const GValue *framerate;
const gchar *str; const gchar *str;
gint x_inv = 0, y_inv = 0;
GST_DEBUG ("parsing caps"); GST_DEBUG ("parsing caps");
gst_video_info_init (info);
structure = gst_caps_get_structure (caps, 0); structure = gst_caps_get_structure (caps, 0);
ret = gst_structure_get_int (structure, "width", width); ret = gst_structure_get_int (structure, "width", &info->width);
ret &= gst_structure_get_int (structure, "height", height); ret &= gst_structure_get_int (structure, "height", &info->height);
framerate = gst_structure_get_value (structure, "framerate"); framerate = gst_structure_get_value (structure, "framerate");
if (framerate) { if (framerate) {
*fps_n = gst_value_get_fraction_numerator (framerate); info->fps_n = gst_value_get_fraction_numerator (framerate);
*fps_d = gst_value_get_fraction_denominator (framerate); info->fps_d = gst_value_get_fraction_denominator (framerate);
} else } else
goto no_framerate; goto no_framerate;
if ((str = gst_structure_get_string (structure, "colorimetry"))) if ((str = gst_structure_get_string (structure, "colorimetry")))
gst_video_colorimetry_from_string (colorimetry, str); gst_video_colorimetry_from_string (&info->colorimetry, str);
if ((str = gst_structure_get_string (structure, "format"))) { if ((str = gst_structure_get_string (structure, "format"))) {
if (g_str_equal (str, "bggr")) { if (g_str_has_prefix (str, "bggr")) {
*x_inv = *y_inv = 0; x_inv = y_inv = 0;
} else if (g_str_equal (str, "rggb")) { } else if (g_str_has_prefix (str, "rggb")) {
*x_inv = *y_inv = 1; x_inv = y_inv = 1;
} else if (g_str_equal (str, "grbg")) { } else if (g_str_has_prefix (str, "grbg")) {
*x_inv = 0; x_inv = 0;
*y_inv = 1; y_inv = 1;
} else if (g_str_equal (str, "gbrg")) { } else if (g_str_has_prefix (str, "gbrg")) {
*x_inv = 1; x_inv = 1;
*y_inv = 0; y_inv = 0;
} else } else
goto invalid_format; goto invalid_format;
} }
videotestsrc->bayer = TRUE;
videotestsrc->x_invert = x_inv;
videotestsrc->y_invert = y_inv;
info->finfo = gst_video_format_get_info (GST_VIDEO_FORMAT_GRAY8);
info->stride[0] = GST_ROUND_UP_4 (info->width);
info->size = info->stride[0] * info->height;
return ret; return ret;
/* ERRORS */ /* ERRORS */
@ -960,22 +971,8 @@ gst_video_test_src_setcaps (GstBaseSrc * bsrc, GstCaps * caps)
goto parse_failed; goto parse_failed;
} else if (gst_structure_has_name (structure, "video/x-bayer")) { } else if (gst_structure_has_name (structure, "video/x-bayer")) {
gint x_inv = 0, y_inv = 0; if (!gst_video_test_src_parse_caps (caps, &info, &videotestsrc))
gst_video_info_init (&info);
info.finfo = gst_video_format_get_info (GST_VIDEO_FORMAT_GRAY8);
if (!gst_video_test_src_parse_caps (caps, &info.width, &info.height,
&info.fps_n, &info.fps_d, &info.colorimetry, &x_inv, &y_inv))
goto parse_failed; goto parse_failed;
info.size = GST_ROUND_UP_4 (info.width) * info.height;
info.stride[0] = GST_ROUND_UP_4 (info.width);
videotestsrc->bayer = TRUE;
videotestsrc->x_invert = x_inv;
videotestsrc->y_invert = y_inv;
} else { } else {
goto unsupported_caps; goto unsupported_caps;
} }