add recipes for GStreamer release 1.6.0 core + plugins
[opendreambox.git] / meta-opendreambox / recipes-multimedia / gstreamer / gstreamer1.0-plugins-bad / videoaggregator-alphaformatcaps-reverse.patch
1 reverted:
2 --- b/gst-libs/gst/video/gstvideoaggregator.c
3 +++ a/gst-libs/gst/video/gstvideoaggregator.c
4 @@ -76,7 +76,6 @@
5    GstClockTime end_time;
6  };
7  
8 -
9  G_DEFINE_TYPE (GstVideoAggregatorPad, gst_videoaggregator_pad,
10      GST_TYPE_AGGREGATOR_PAD);
11  
12 @@ -430,44 +429,9 @@
13    gboolean live;
14  };
15  
16 +G_DEFINE_ABSTRACT_TYPE_WITH_CODE (GstVideoAggregator, gst_videoaggregator,
17 +    GST_TYPE_AGGREGATOR, G_IMPLEMENT_INTERFACE (GST_TYPE_CHILD_PROXY,
18 +        gst_videoaggregator_child_proxy_init));
19 -/* Can't use the G_DEFINE_TYPE macros because we need the
20 - * videoaggregator class in the _init to be able to set
21 - * the sink pad non-alpha caps. Using the G_DEFINE_TYPE there
22 - * seems to be no way of getting the real class being initialized */
23 -static void gst_videoaggregator_init (GstVideoAggregator * self,
24 -    GstVideoAggregatorClass * klass);
25 -static void gst_videoaggregator_class_init (GstVideoAggregatorClass * klass);
26 -static gpointer gst_videoaggregator_parent_class = NULL;
27 -static gint GstVideoAggregator_private_offset;
28 -
29 -_G_DEFINE_TYPE_EXTENDED_CLASS_INIT (GstVideoAggregator, gst_videoaggregator);
30 -
31 -G_GNUC_UNUSED static inline gpointer
32 -gst_videoaggregator_get_instance_private (const GstVideoAggregator * self)
33 -{
34 -  return (G_STRUCT_MEMBER_P (self, GstVideoAggregator_private_offset));
35 -}
36 -
37 -GType
38 -gst_videoaggregator_get_type (void)
39 -{
40 -  static volatile gsize g_define_type_id_volatile = 0;
41 -  if (g_once_init_enter (&g_define_type_id_volatile)) {
42 -    GType g_define_type_id = g_type_register_static_simple (GST_TYPE_AGGREGATOR,
43 -        g_intern_static_string ("GstVideoAggregator"),
44 -        sizeof (GstVideoAggregatorClass),
45 -        (GClassInitFunc) gst_videoaggregator_class_intern_init,
46 -        sizeof (GstVideoAggregator),
47 -        (GInstanceInitFunc) gst_videoaggregator_init,
48 -        (GTypeFlags) G_TYPE_FLAG_ABSTRACT);
49 -    {
50 -      G_IMPLEMENT_INTERFACE (GST_TYPE_CHILD_PROXY,
51 -          gst_videoaggregator_child_proxy_init);
52 -    }
53 -    g_once_init_leave (&g_define_type_id_volatile, g_define_type_id);
54 -  }
55 -  return g_define_type_id_volatile;
56 -}
57  
58  static void
59  gst_videoaggreagator_find_best_format (GstVideoAggregator * vagg,
60 @@ -869,80 +833,27 @@
61    return ret;
62  }
63  
64 -static gboolean
65 -gst_videoaggregator_caps_has_alpha (GstCaps * caps)
66 -{
67 -  guint size = gst_caps_get_size (caps);
68 -  guint i;
69 -
70 -  for (i = 0; i < size; i++) {
71 -    GstStructure *s = gst_caps_get_structure (caps, i);
72 -    const GValue *formats = gst_structure_get_value (s, "format");
73 -
74 -    if (formats) {
75 -      const GstVideoFormatInfo *info;
76 -
77 -      if (GST_VALUE_HOLDS_LIST (formats)) {
78 -        guint list_size = gst_value_list_get_size (formats);
79 -        guint index;
80 -
81 -        for (index = 0; index < list_size; index++) {
82 -          const GValue *list_item = gst_value_list_get_value (formats, index);
83 -          info =
84 -              gst_video_format_get_info (gst_video_format_from_string
85 -              (g_value_get_string (list_item)));
86 -          if (GST_VIDEO_FORMAT_INFO_HAS_ALPHA (info))
87 -            return TRUE;
88 -        }
89 -
90 -      } else if (G_VALUE_HOLDS_STRING (formats)) {
91 -        info =
92 -            gst_video_format_get_info (gst_video_format_from_string
93 -            (g_value_get_string (formats)));
94 -        if (GST_VIDEO_FORMAT_INFO_HAS_ALPHA (info))
95 -          return TRUE;
96 -
97 -      } else {
98 -        g_assert_not_reached ();
99 -        GST_WARNING ("Unexpected type for video 'format' field: %s",
100 -            G_VALUE_TYPE_NAME (formats));
101 -      }
102 -
103 -    } else {
104 -      return TRUE;
105 -    }
106 -  }
107 -  return FALSE;
108 -}
109 -
110  static GstCaps *
111  gst_videoaggregator_pad_sink_getcaps (GstPad * pad, GstVideoAggregator * vagg,
112      GstCaps * filter)
113  {
114    GstCaps *srccaps;
115 +  GstCaps *template_caps;
116 -  GstCaps *template_caps, *sink_template_caps;
117    GstCaps *returned_caps;
118    GstStructure *s;
119 +  gboolean had_current_caps = TRUE;
120    gint i, n;
121    GstAggregator *agg = GST_AGGREGATOR (vagg);
122 -  GstPad *srcpad = GST_PAD (agg->srcpad);
123 -  gboolean has_alpha;
124  
125 +  template_caps = gst_pad_get_pad_template_caps (GST_PAD (agg->srcpad));
126 -  template_caps = gst_pad_get_pad_template_caps (srcpad);
127  
128 +  srccaps = gst_pad_get_current_caps (GST_PAD (agg->srcpad));
129 -  GST_DEBUG_OBJECT (pad, "Get caps with filter: %" GST_PTR_FORMAT, filter);
130 -
131 -  srccaps = gst_pad_get_current_caps (srcpad);
132    if (srccaps == NULL) {
133 +    had_current_caps = FALSE;
134 +    srccaps = template_caps;
135 -    srccaps = gst_pad_peer_query_caps (srcpad, template_caps);
136 -    GST_DEBUG_OBJECT (pad, "No output caps, using possible formats: %"
137 -        GST_PTR_FORMAT, srccaps);
138 -  } else {
139 -    GST_DEBUG_OBJECT (pad, "Using output caps: %" GST_PTR_FORMAT, srccaps);
140    }
141  
142    srccaps = gst_caps_make_writable (srccaps);
143 -  has_alpha = gst_videoaggregator_caps_has_alpha (srccaps);
144  
145    n = gst_caps_get_size (srccaps);
146    for (i = 0; i < n; i++) {
147 @@ -962,23 +873,8 @@
148      returned_caps = srccaps;
149    }
150  
151 +  if (had_current_caps)
152 +    gst_caps_unref (template_caps);
153 -  if (has_alpha) {
154 -    sink_template_caps = gst_pad_get_pad_template_caps (pad);
155 -  } else {
156 -    GstVideoAggregatorClass *klass = GST_VIDEO_AGGREGATOR_GET_CLASS (vagg);
157 -    sink_template_caps = gst_caps_ref (klass->sink_non_alpha_caps);
158 -  }
159 -
160 -  {
161 -    GstCaps *intersect = gst_caps_intersect (returned_caps, sink_template_caps);
162 -    gst_caps_unref (returned_caps);
163 -    returned_caps = intersect;
164 -  }
165 -
166 -  gst_caps_unref (template_caps);
167 -  gst_caps_unref (sink_template_caps);
168 -
169 -  GST_DEBUG_OBJECT (pad, "Returning caps: %" GST_PTR_FORMAT, returned_caps);
170  
171    return returned_caps;
172  }
173 @@ -2078,83 +1974,9 @@
174    g_type_class_ref (GST_TYPE_VIDEO_AGGREGATOR_PAD);
175  }
176  
177 -static inline GstCaps *
178 -_get_non_alpha_caps_from_template (GstVideoAggregatorClass * klass)
179 -{
180 -  GstCaps *result;
181 -  GstCaps *templatecaps;
182 -  guint i, size;
183 -
184 -  templatecaps =
185 -      gst_pad_template_get_caps (gst_element_class_get_pad_template
186 -      (GST_ELEMENT_CLASS (klass), "sink_%u"));
187 -
188 -  size = gst_caps_get_size (templatecaps);
189 -  result = gst_caps_new_empty ();
190 -  for (i = 0; i < size; i++) {
191 -    GstStructure *s = gst_caps_get_structure (templatecaps, i);
192 -    const GValue *formats = gst_structure_get_value (s, "format");
193 -    GValue new_formats = { 0, };
194 -    gboolean has_format = FALSE;
195 -
196 -    /* FIXME what to do if formats are missing? */
197 -    if (formats) {
198 -      const GstVideoFormatInfo *info;
199 -
200 -      if (GST_VALUE_HOLDS_LIST (formats)) {
201 -        guint list_size = gst_value_list_get_size (formats);
202 -        guint index;
203 -
204 -        g_value_init (&new_formats, GST_TYPE_LIST);
205 -
206 -        for (index = 0; index < list_size; index++) {
207 -          const GValue *list_item = gst_value_list_get_value (formats, index);
208 -
209 -          info =
210 -              gst_video_format_get_info (gst_video_format_from_string
211 -              (g_value_get_string (list_item)));
212 -          if (!GST_VIDEO_FORMAT_INFO_HAS_ALPHA (info)) {
213 -            has_format = TRUE;
214 -            gst_value_list_append_value (&new_formats, list_item);
215 -          }
216 -        }
217 -
218 -      } else if (G_VALUE_HOLDS_STRING (formats)) {
219 -        info =
220 -            gst_video_format_get_info (gst_video_format_from_string
221 -            (g_value_get_string (formats)));
222 -        if (!GST_VIDEO_FORMAT_INFO_HAS_ALPHA (info)) {
223 -          has_format = TRUE;
224 -          gst_value_init_and_copy (&new_formats, formats);
225 -        }
226 -
227 -      } else {
228 -        g_assert_not_reached ();
229 -        GST_WARNING ("Unexpected type for video 'format' field: %s",
230 -            G_VALUE_TYPE_NAME (formats));
231 -      }
232 -
233 -      if (has_format) {
234 -        s = gst_structure_copy (s);
235 -        gst_structure_take_value (s, "format", &new_formats);
236 -        gst_caps_append_structure (result, s);
237 -      }
238 -
239 -    }
240 -  }
241 -
242 -  gst_caps_unref (templatecaps);
243 -
244 -  return result;
245 -}
246 -
247 -static GMutex sink_caps_mutex;
248 -
249  static void
250 +gst_videoaggregator_init (GstVideoAggregator * vagg)
251 -gst_videoaggregator_init (GstVideoAggregator * vagg,
252 -    GstVideoAggregatorClass * klass)
253  {
254 -
255    vagg->priv =
256        G_TYPE_INSTANCE_GET_PRIVATE (vagg, GST_TYPE_VIDEO_AGGREGATOR,
257        GstVideoAggregatorPrivate);
258 @@ -2162,13 +1984,6 @@
259    vagg->priv->current_caps = NULL;
260  
261    g_mutex_init (&vagg->priv->lock);
262 -
263    /* initialize variables */
264 -  g_mutex_lock (&sink_caps_mutex);
265 -  if (klass->sink_non_alpha_caps == NULL) {
266 -    klass->sink_non_alpha_caps = _get_non_alpha_caps_from_template (klass);
267 -  }
268 -  g_mutex_unlock (&sink_caps_mutex);
269 -
270    gst_videoaggregator_reset (vagg);
271  }
272 reverted:
273 --- b/gst-libs/gst/video/gstvideoaggregator.h
274 +++ a/gst-libs/gst/video/gstvideoaggregator.h
275 @@ -111,8 +111,6 @@
276  
277    gboolean           preserve_update_caps_result;
278  
279 -  GstCaps           *sink_non_alpha_caps;
280 -
281    /* < private > */
282    gpointer            _gst_reserved[GST_PADDING_LARGE];
283  };