mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
v4l2: fix gray format, use filter in getcaps
This commit is contained in:
parent
7a296af37f
commit
3b4afcb8df
2 changed files with 34 additions and 30 deletions
|
@ -1149,10 +1149,6 @@ gst_v4l2_object_v4l2fourcc_to_structure (guint32 fourcc)
|
|||
case V4L2_PIX_FMT_JPEG: /* JFIF JPEG */
|
||||
structure = gst_structure_new ("image/jpeg", NULL);
|
||||
break;
|
||||
case V4L2_PIX_FMT_GREY: /* 8 Greyscale */
|
||||
structure = gst_structure_new ("video/x-raw-gray",
|
||||
"bpp", G_TYPE_INT, 8, NULL);
|
||||
break;
|
||||
case V4L2_PIX_FMT_YYUV: /* 16 YUV 4:2:2 */
|
||||
case V4L2_PIX_FMT_HI240: /* 8 8-bit color */
|
||||
/* FIXME: get correct fourccs here */
|
||||
|
@ -1162,6 +1158,7 @@ gst_v4l2_object_v4l2fourcc_to_structure (guint32 fourcc)
|
|||
case V4L2_PIX_FMT_RGB565X:
|
||||
/* FIXME: get correct fourccs here */
|
||||
break;
|
||||
case V4L2_PIX_FMT_GREY: /* 8 Greyscale */
|
||||
case V4L2_PIX_FMT_RGB555:
|
||||
case V4L2_PIX_FMT_RGB565:
|
||||
case V4L2_PIX_FMT_RGB24:
|
||||
|
@ -1187,6 +1184,9 @@ gst_v4l2_object_v4l2fourcc_to_structure (guint32 fourcc)
|
|||
GstVideoFormat format;
|
||||
|
||||
switch (fourcc) {
|
||||
case V4L2_PIX_FMT_GREY: /* 8 Greyscale */
|
||||
format = GST_VIDEO_FORMAT_GRAY8;
|
||||
break;
|
||||
case V4L2_PIX_FMT_RGB555:
|
||||
format = GST_VIDEO_FORMAT_RGB15;
|
||||
break;
|
||||
|
@ -1450,6 +1450,8 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
|
|||
case GST_VIDEO_FORMAT_BGRA:
|
||||
fourcc = V4L2_PIX_FMT_BGR32;
|
||||
break;
|
||||
case GST_VIDEO_FORMAT_GRAY8:
|
||||
fourcc = V4L2_PIX_FMT_GREY;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -1472,10 +1474,8 @@ gst_v4l2_object_get_caps_info (GstV4l2Object * v4l2object, GstCaps * caps,
|
|||
#ifdef V4L2_PIX_FMT_PWC2
|
||||
} else if (strcmp (mimetype, "video/x-pwc2") == 0) {
|
||||
fourcc = V4L2_PIX_FMT_PWC2;
|
||||
#endif
|
||||
} else if (strcmp (mimetype, "video/x-raw-gray") == 0) {
|
||||
fourcc = V4L2_PIX_FMT_GREY;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (fourcc == 0)
|
||||
goto unhandled_format;
|
||||
|
|
|
@ -568,40 +568,44 @@ gst_v4l2sink_get_caps (GstBaseSink * bsink, GstCaps * filter)
|
|||
(v4l2sink)));
|
||||
}
|
||||
|
||||
if (v4l2sink->probed_caps) {
|
||||
LOG_CAPS (v4l2sink, v4l2sink->probed_caps);
|
||||
return gst_caps_ref (v4l2sink->probed_caps);
|
||||
}
|
||||
if (v4l2sink->probed_caps == NULL) {
|
||||
formats = gst_v4l2_object_get_format_list (v4l2sink->v4l2object);
|
||||
|
||||
formats = gst_v4l2_object_get_format_list (v4l2sink->v4l2object);
|
||||
ret = gst_caps_new_empty ();
|
||||
|
||||
ret = gst_caps_new_empty ();
|
||||
for (walk = formats; walk; walk = walk->next) {
|
||||
struct v4l2_fmtdesc *format;
|
||||
|
||||
for (walk = formats; walk; walk = walk->next) {
|
||||
struct v4l2_fmtdesc *format;
|
||||
GstStructure *template;
|
||||
|
||||
GstStructure *template;
|
||||
format = (struct v4l2_fmtdesc *) walk->data;
|
||||
|
||||
format = (struct v4l2_fmtdesc *) walk->data;
|
||||
template = gst_v4l2_object_v4l2fourcc_to_structure (format->pixelformat);
|
||||
|
||||
template = gst_v4l2_object_v4l2fourcc_to_structure (format->pixelformat);
|
||||
if (template) {
|
||||
GstCaps *tmp;
|
||||
|
||||
if (template) {
|
||||
GstCaps *tmp;
|
||||
tmp =
|
||||
gst_v4l2_object_probe_caps_for_format (v4l2sink->v4l2object,
|
||||
format->pixelformat, template);
|
||||
if (tmp)
|
||||
gst_caps_append (ret, tmp);
|
||||
|
||||
tmp =
|
||||
gst_v4l2_object_probe_caps_for_format (v4l2sink->v4l2object,
|
||||
format->pixelformat, template);
|
||||
if (tmp)
|
||||
gst_caps_append (ret, tmp);
|
||||
|
||||
gst_structure_free (template);
|
||||
} else {
|
||||
GST_DEBUG_OBJECT (v4l2sink, "unknown format %u", format->pixelformat);
|
||||
gst_structure_free (template);
|
||||
} else {
|
||||
GST_DEBUG_OBJECT (v4l2sink, "unknown format %u", format->pixelformat);
|
||||
}
|
||||
}
|
||||
v4l2sink->probed_caps = ret;
|
||||
}
|
||||
|
||||
v4l2sink->probed_caps = gst_caps_ref (ret);
|
||||
if (filter) {
|
||||
ret =
|
||||
gst_caps_intersect_full (filter, v4l2sink->probed_caps,
|
||||
GST_CAPS_INTERSECT_FIRST);
|
||||
} else {
|
||||
ret = gst_caps_ref (v4l2sink->probed_caps);
|
||||
}
|
||||
|
||||
GST_INFO_OBJECT (v4l2sink, "probed caps: %p", ret);
|
||||
LOG_CAPS (v4l2sink, ret);
|
||||
|
|
Loading…
Reference in a new issue