Commit d99e270f authored by Wim Taymans's avatar Wim Taymans

xvimagesink: configure colorimetry

Use the XV_ITURBT_709 attribute to configure the 601 or 709 matrix
depending on the color matrix of the input video frame.
parent 7cf890ff
......@@ -884,6 +884,32 @@ gst_xvcontext_get_format_from_info (GstXvContext * context, GstVideoInfo * info)
return -1;
}
void
gst_xvcontext_set_colorimetry (GstXvContext * context,
GstVideoColorimetry * colorimetry)
{
Atom prop_atom;
int xv_value;
switch (colorimetry->matrix) {
case GST_VIDEO_COLOR_MATRIX_SMPTE240M:
case GST_VIDEO_COLOR_MATRIX_BT709:
xv_value = 1;
break;
default:
xv_value = 0;
break;
}
g_mutex_lock (&context->lock);
prop_atom = XInternAtom (context->disp, "XV_ITURBT_709", True);
if (prop_atom != None) {
XvSetPortAttribute (context->disp,
context->xv_port_id, prop_atom, xv_value);
}
g_mutex_unlock (&context->lock);
}
GstXWindow *
gst_xvcontext_create_xwindow (GstXvContext * context, gint width, gint height)
{
......
......@@ -198,6 +198,8 @@ void gst_xvcontext_set_synchronous (GstXvContext * xvcontex
gboolean synchronous);
void gst_xvcontext_update_colorbalance (GstXvContext * xvcontext,
GstXvContextConfig * config);
void gst_xvcontext_set_colorimetry (GstXvContext * xvcontext,
GstVideoColorimetry *colorimetry);
typedef struct _GstXWindow GstXWindow;
......
......@@ -693,6 +693,8 @@ gst_xvimagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
if (im_format == -1)
goto invalid_format;
gst_xvcontext_set_colorimetry (context, &info.colorimetry);
size = info.size;
/* get aspect ratio from caps if it's present, and
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment