diff options
| author | Yuqing Zhu <carol.zhu@nxp.com> | 2016-10-13 09:59:52 +0800 |
|---|---|---|
| committer | Otavio Salvador <otavio@ossystems.com.br> | 2016-10-27 10:36:28 -0200 |
| commit | ffe5d3c435a7f2056a1a594d195d624c20e40e0a (patch) | |
| tree | 7891605591e46fd390937b1c7136865065403ba7 | |
| parent | 7d3e10c59af9aef7e672b906fa29203672772c1f (diff) | |
| download | meta-freescale-ffe5d3c435a7f2056a1a594d195d624c20e40e0a.tar.gz | |
gstreamer1.0-plugins-bad: convert YUV to RGB using directviv
Add a property "disable_passthrough" in glcolorconvert for enable/disable passthrough.
When need convert YUV to RGB with directviv, set it to be TRUE.
Signed-off-by: Yuqing Zhu <carol.zhu@nxp.com>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
2 files changed, 171 insertions, 0 deletions
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-glcolorconvert-convert-YUV-to-RGB-use-directviv.patch b/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-glcolorconvert-convert-YUV-to-RGB-use-directviv.patch new file mode 100644 index 000000000..aac204d13 --- /dev/null +++ b/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-glcolorconvert-convert-YUV-to-RGB-use-directviv.patch | |||
| @@ -0,0 +1,170 @@ | |||
| 1 | From 67d11594e693b60797c2bae1bcfa4e8bafcf4c9a Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Haihua Hu <b55597@freescale.com> | ||
| 3 | Date: Thu, 25 Feb 2016 13:53:20 +0800 | ||
| 4 | Subject: [PATCH 17/18] glcolorconvert: convert YUV to RGB use directviv | ||
| 5 | |||
| 6 | Add a property "disable_passthrough" in glcolorconvert for enable/disable passthrough. | ||
| 7 | When need convert YUV to RGB with directviv, set it to be TRUE. | ||
| 8 | |||
| 9 | Upstream-Status: Inappropriate [i.MX specific] | ||
| 10 | |||
| 11 | Signed-off-by: Haihua Hu <b55597@freescale.com> | ||
| 12 | |||
| 13 | Conflicts: | ||
| 14 | gst-libs/gst/gl/gstglcolorconvert.c | ||
| 15 | |||
| 16 | Signed-off-by: Lyon Wang <lyon.wang@freescale.com> | ||
| 17 | --- | ||
| 18 | ext/gl/gstglcolorconvertelement.c | 70 +++++++++++++++++++++++++++++++++++++ | ||
| 19 | ext/gl/gstglcolorconvertelement.h | 1 + | ||
| 20 | gst-libs/gst/gl/gstglcolorconvert.c | 6 +++- | ||
| 21 | 3 files changed, 76 insertions(+), 1 deletion(-) | ||
| 22 | |||
| 23 | diff --git a/ext/gl/gstglcolorconvertelement.c b/ext/gl/gstglcolorconvertelement.c | ||
| 24 | index bd4fbeb..9108b0a 100644 | ||
| 25 | --- a/ext/gl/gstglcolorconvertelement.c | ||
| 26 | +++ b/ext/gl/gstglcolorconvertelement.c | ||
| 27 | @@ -35,6 +35,14 @@ G_DEFINE_TYPE_WITH_CODE (GstGLColorConvertElement, gst_gl_color_convert_element, | ||
| 28 | "glconvertelement", 0, "convert"); | ||
| 29 | ); | ||
| 30 | |||
| 31 | +enum | ||
| 32 | +{ | ||
| 33 | + GL_COLOR_CONVERT_PROP_0, | ||
| 34 | + GL_COLOR_CONVERT_PROP_DISABLE_PASSTHROUGH | ||
| 35 | +}; | ||
| 36 | + | ||
| 37 | +#define DISABLE_PASSTHROUGH_DAFAULT FALSE | ||
| 38 | + | ||
| 39 | static gboolean gst_gl_color_convert_element_set_caps (GstBaseTransform * bt, | ||
| 40 | GstCaps * in_caps, GstCaps * out_caps); | ||
| 41 | static GstCaps *gst_gl_color_convert_element_transform_caps (GstBaseTransform * | ||
| 42 | @@ -54,6 +62,15 @@ static GstFlowReturn gst_gl_color_convert_element_transform (GstBaseTransform * | ||
| 43 | static GstCaps *gst_gl_color_convert_element_fixate_caps (GstBaseTransform * | ||
| 44 | bt, GstPadDirection direction, GstCaps * caps, GstCaps * othercaps); | ||
| 45 | |||
| 46 | +static void gst_gl_color_convert_set_property (GObject *object, | ||
| 47 | + guint prop_id, | ||
| 48 | + const GValue *value, | ||
| 49 | + GParamSpec *pspec); | ||
| 50 | +static void gst_gl_color_convert_get_property (GObject *object, | ||
| 51 | + guint prop_id, | ||
| 52 | + GValue *value, | ||
| 53 | + GParamSpec *pspec); | ||
| 54 | + | ||
| 55 | static GstStaticPadTemplate gst_gl_color_convert_element_src_pad_template = | ||
| 56 | GST_STATIC_PAD_TEMPLATE ("src", | ||
| 57 | GST_PAD_SRC, | ||
| 58 | @@ -89,6 +106,10 @@ gst_gl_color_convert_element_class_init (GstGLColorConvertElementClass * klass) | ||
| 59 | { | ||
| 60 | GstBaseTransformClass *bt_class = GST_BASE_TRANSFORM_CLASS (klass); | ||
| 61 | GstElementClass *element_class = GST_ELEMENT_CLASS (klass); | ||
| 62 | + GObjectClass *object_class = G_OBJECT_CLASS (klass); | ||
| 63 | + | ||
| 64 | + object_class->set_property = gst_gl_color_convert_set_property; | ||
| 65 | + object_class->get_property = gst_gl_color_convert_get_property; | ||
| 66 | |||
| 67 | bt_class->transform_caps = gst_gl_color_convert_element_transform_caps; | ||
| 68 | bt_class->set_caps = gst_gl_color_convert_element_set_caps; | ||
| 69 | @@ -110,6 +131,13 @@ gst_gl_color_convert_element_class_init (GstGLColorConvertElementClass * klass) | ||
| 70 | gst_static_pad_template_get | ||
| 71 | (&gst_gl_color_convert_element_sink_pad_template)); | ||
| 72 | |||
| 73 | + g_object_class_install_property (object_class, GL_COLOR_CONVERT_PROP_DISABLE_PASSTHROUGH, | ||
| 74 | + g_param_spec_boolean ("disable_passthrough", | ||
| 75 | + "Disable passthrough", | ||
| 76 | + "Disable passthrough mode", | ||
| 77 | + DISABLE_PASSTHROUGH_DAFAULT, | ||
| 78 | + G_PARAM_READWRITE)); | ||
| 79 | + | ||
| 80 | gst_element_class_set_metadata (element_class, | ||
| 81 | "OpenGL color converter", "Filter/Converter/Video", | ||
| 82 | "Converts between color spaces using OpenGL shaders", | ||
| 83 | @@ -121,6 +149,41 @@ gst_gl_color_convert_element_init (GstGLColorConvertElement * convert) | ||
| 84 | { | ||
| 85 | gst_base_transform_set_prefer_passthrough (GST_BASE_TRANSFORM (convert), | ||
| 86 | TRUE); | ||
| 87 | + convert->disable_passthrough = FALSE; | ||
| 88 | +} | ||
| 89 | + | ||
| 90 | +static void | ||
| 91 | +gst_gl_color_convert_set_property (GObject *object, | ||
| 92 | + guint prop_id, | ||
| 93 | + const GValue *value, | ||
| 94 | + GParamSpec *pspec) | ||
| 95 | +{ | ||
| 96 | + GstGLColorConvertElement *convert = GST_GL_COLOR_CONVERT_ELEMENT (object); | ||
| 97 | + switch (prop_id) { | ||
| 98 | + case GL_COLOR_CONVERT_PROP_DISABLE_PASSTHROUGH: | ||
| 99 | + convert->disable_passthrough = g_value_get_boolean (value); | ||
| 100 | + break; | ||
| 101 | + default: | ||
| 102 | + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||
| 103 | + break; | ||
| 104 | + } | ||
| 105 | +} | ||
| 106 | + | ||
| 107 | +static void | ||
| 108 | +gst_gl_color_convert_get_property (GObject *object, | ||
| 109 | + guint prop_id, | ||
| 110 | + GValue *value, | ||
| 111 | + GParamSpec *pspec) | ||
| 112 | +{ | ||
| 113 | + GstGLColorConvertElement *convert = GST_GL_COLOR_CONVERT_ELEMENT (object); | ||
| 114 | + switch (prop_id) { | ||
| 115 | + case GL_COLOR_CONVERT_PROP_DISABLE_PASSTHROUGH: | ||
| 116 | + g_value_set_boolean (value, convert->disable_passthrough); | ||
| 117 | + break; | ||
| 118 | + default: | ||
| 119 | + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); | ||
| 120 | + break; | ||
| 121 | + } | ||
| 122 | } | ||
| 123 | |||
| 124 | static gboolean | ||
| 125 | @@ -135,6 +198,13 @@ gst_gl_color_convert_element_set_caps (GstBaseTransform * bt, | ||
| 126 | if (convert->convert) | ||
| 127 | gst_gl_color_convert_set_caps (convert->convert, in_caps, out_caps); | ||
| 128 | |||
| 129 | + if(gst_base_transform_is_passthrough (bt) && convert->disable_passthrough){ | ||
| 130 | + /* if in passthrough mode and disable_passthrough is set to true, | ||
| 131 | + * set passthrough to FALSE*/ | ||
| 132 | + GST_DEBUG_OBJECT(convert, "Disable passthrough mode"); | ||
| 133 | + gst_base_transform_set_passthrough(bt, FALSE); | ||
| 134 | + } | ||
| 135 | + | ||
| 136 | return TRUE; | ||
| 137 | } | ||
| 138 | |||
| 139 | diff --git a/ext/gl/gstglcolorconvertelement.h b/ext/gl/gstglcolorconvertelement.h | ||
| 140 | index 2a0dd1d..5cdbd3a 100644 | ||
| 141 | --- a/ext/gl/gstglcolorconvertelement.h | ||
| 142 | +++ b/ext/gl/gstglcolorconvertelement.h | ||
| 143 | @@ -47,6 +47,7 @@ struct _GstGLColorConvertElement | ||
| 144 | GstGLColorConvert *convert; | ||
| 145 | GstCaps *in_caps; | ||
| 146 | GstCaps *out_caps; | ||
| 147 | + gboolean disable_passthrough; | ||
| 148 | }; | ||
| 149 | |||
| 150 | struct _GstGLColorConvertElementClass | ||
| 151 | diff --git a/gst-libs/gst/gl/gstglcolorconvert.c b/gst-libs/gst/gl/gstglcolorconvert.c | ||
| 152 | index eb3b4a8..4ed947e 100644 | ||
| 153 | --- a/gst-libs/gst/gl/gstglcolorconvert.c | ||
| 154 | +++ b/gst-libs/gst/gl/gstglcolorconvert.c | ||
| 155 | @@ -700,7 +700,11 @@ _gst_gl_color_convert_set_caps_unlocked (GstGLColorConvert * convert, | ||
| 156 | convert->priv->to_texture_target = to_target; | ||
| 157 | convert->initted = FALSE; | ||
| 158 | |||
| 159 | - convert->passthrough = passthrough; | ||
| 160 | + /* We may disable passthrough via an external property | ||
| 161 | + * By the way, when glconvertelement is in passthrough mode, | ||
| 162 | + * the plugin will not call gst_gl_color_convert_perform().*/ | ||
| 163 | + | ||
| 164 | + //convert->passthrough = passthrough; | ||
| 165 | #ifndef GST_DISABLE_GST_DEBUG | ||
| 166 | if (G_UNLIKELY (convert->passthrough)) | ||
| 167 | GST_DEBUG_OBJECT (convert, | ||
| 168 | -- | ||
| 169 | 1.9.1 | ||
| 170 | |||
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend b/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend index be23ff777..08eec1e49 100644 --- a/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend +++ b/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend | |||
| @@ -14,6 +14,7 @@ SRC_URI_append = " file://0001-glplugin-Change-wayland-default-res-to-1024x768.p | |||
| 14 | file://0002-Add-directviv-to-glimagesink-to-improve-playback-per.patch \ | 14 | file://0002-Add-directviv-to-glimagesink-to-improve-playback-per.patch \ |
| 15 | file://0003-MMFMWK-6930-glplugin-Accelerate-gldownload-with-dire.patch \ | 15 | file://0003-MMFMWK-6930-glplugin-Accelerate-gldownload-with-dire.patch \ |
| 16 | file://0004-Fix-dependence-issue-between-gst-plugin-.patch \ | 16 | file://0004-Fix-dependence-issue-between-gst-plugin-.patch \ |
| 17 | file://0005-glcolorconvert-convert-YUV-to-RGB-use-directviv.patch \ | ||
| 17 | " | 18 | " |
| 18 | 19 | ||
| 19 | 20 | ||
