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.
This commit is contained in:
Wim Taymans 2013-03-14 15:46:59 +01:00
parent 7cf890ffa0
commit d99e270fc8
3 changed files with 30 additions and 0 deletions

View file

@ -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)
{

View file

@ -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;

View file

@ -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