mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-10 17:35:59 +00:00
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:
parent
7cf890ffa0
commit
d99e270fc8
3 changed files with 30 additions and 0 deletions
|
@ -884,6 +884,32 @@ gst_xvcontext_get_format_from_info (GstXvContext * context, GstVideoInfo * info)
|
||||||
return -1;
|
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 *
|
GstXWindow *
|
||||||
gst_xvcontext_create_xwindow (GstXvContext * context, gint width, gint height)
|
gst_xvcontext_create_xwindow (GstXvContext * context, gint width, gint height)
|
||||||
{
|
{
|
||||||
|
|
|
@ -198,6 +198,8 @@ void gst_xvcontext_set_synchronous (GstXvContext * xvcontex
|
||||||
gboolean synchronous);
|
gboolean synchronous);
|
||||||
void gst_xvcontext_update_colorbalance (GstXvContext * xvcontext,
|
void gst_xvcontext_update_colorbalance (GstXvContext * xvcontext,
|
||||||
GstXvContextConfig * config);
|
GstXvContextConfig * config);
|
||||||
|
void gst_xvcontext_set_colorimetry (GstXvContext * xvcontext,
|
||||||
|
GstVideoColorimetry *colorimetry);
|
||||||
|
|
||||||
|
|
||||||
typedef struct _GstXWindow GstXWindow;
|
typedef struct _GstXWindow GstXWindow;
|
||||||
|
|
|
@ -693,6 +693,8 @@ gst_xvimagesink_setcaps (GstBaseSink * bsink, GstCaps * caps)
|
||||||
if (im_format == -1)
|
if (im_format == -1)
|
||||||
goto invalid_format;
|
goto invalid_format;
|
||||||
|
|
||||||
|
gst_xvcontext_set_colorimetry (context, &info.colorimetry);
|
||||||
|
|
||||||
size = info.size;
|
size = info.size;
|
||||||
|
|
||||||
/* get aspect ratio from caps if it's present, and
|
/* get aspect ratio from caps if it's present, and
|
||||||
|
|
Loading…
Reference in a new issue