mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 03:31:05 +00:00
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:
parent
110ec5d4b2
commit
d0efb05f52
1 changed files with 31 additions and 34 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue