GST_LOG_OBJECT (pool, "%dx%d, caps %" GST_PTR_FORMAT, info.width, info.height,
caps);
- priv->im_format =
- gst_xvimagesink_get_format_from_caps (xvpool->sink, (GstCaps *) caps);
+ priv->im_format = gst_xvimagesink_get_format_from_info (xvpool->sink, &info);
if (priv->im_format == -1)
goto unknown_format;
/* This function tries to get a format matching with a given caps in the
supported list of formats we generated in gst_xvimagesink_get_xv_support */
gint
-gst_xvimagesink_get_format_from_caps (GstXvImageSink * xvimagesink,
- GstCaps * caps)
+gst_xvimagesink_get_format_from_info (GstXvImageSink * xvimagesink,
+ GstVideoInfo * info)
{
GList *list = NULL;
while (list) {
GstXvImageFormat *format = list->data;
- if (format) {
- if (gst_caps_can_intersect (caps, format->caps)) {
- return format->format;
- }
- }
+ if (format && format->vformat == GST_VIDEO_INFO_FORMAT (info))
+ return format->format;
+
list = g_list_next (list);
}
gboolean gst_xvimagesink_check_xshm_calls (GstXvImageSink * xvimagesink,
GstXContext * xcontext);
-gint gst_xvimagesink_get_format_from_caps (GstXvImageSink * xvimagesink,
- GstCaps * caps);
+gint gst_xvimagesink_get_format_from_info (GstXvImageSink * xvimagesink,
+ GstVideoInfo * info);
G_END_DECLS
for (i = 0; i < nb_formats; i++) {
GstCaps *format_caps = NULL;
gboolean is_rgb_format = FALSE;
+ GstVideoFormat vformat;
/* We set the image format of the xcontext to an existing one. This
is just some valid image format for making our xshm calls check before
{
XvImageFormatValues *fmt = &(formats[i]);
gint endianness;
- GstVideoFormat vformat;
endianness =
(fmt->byte_order == LSBFirst ? G_LITTLE_ENDIAN : G_BIG_ENDIAN);
}
case XvYUV:
{
- GstVideoFormat vformat;
-
vformat = gst_video_format_from_fourcc (formats[i].id);
if (vformat == GST_VIDEO_FORMAT_UNKNOWN)
break;
format = g_new0 (GstXvImageFormat, 1);
if (format) {
format->format = formats[i].id;
+ format->vformat = vformat;
format->caps = gst_caps_copy (format_caps);
xcontext->formats_list = g_list_append (xcontext->formats_list, format);
}
xvimagesink->video_width = info.width;
xvimagesink->video_height = info.height;
- im_format = gst_xvimagesink_get_format_from_caps (xvimagesink, caps);
+ im_format = gst_xvimagesink_get_format_from_info (xvimagesink, &info);
if (im_format == -1)
goto invalid_format;