+#ifdef HANDLE_OUTBUF_UNREF
+static void gst_xv_image_out_buffer_class_init(gpointer g_class, gpointer class_data)
+{
+ GstMiniObjectClass *mini_object_class = GST_MINI_OBJECT_CLASS(g_class);
+ gst_xv_image_out_buffer_parent_class = g_type_class_peek_parent(g_class);
+ mini_object_class->finalize = (GstMiniObjectFinalizeFunction)gst_xv_image_out_buffer_finalize;
+}
+
+static GType gst_xv_image_out_buffer_get_type(void)
+{
+ static GType _gst_gst_xv_image_out_buffer_type;
+
+ if (G_UNLIKELY(_gst_gst_xv_image_out_buffer_type == 0)) {
+ static const GTypeInfo gst_xv_image_out_buffer_info = {
+ sizeof (GstBufferClass),
+ NULL,
+ NULL,
+ gst_xv_image_out_buffer_class_init,
+ NULL,
+ NULL,
+ sizeof (GstXvImageOutBuffer),
+ 0,
+ NULL,
+ NULL
+ };
+ _gst_gst_xv_image_out_buffer_type = g_type_register_static(GST_TYPE_BUFFER,
+ "GstOmxOutBuffer",
+ &gst_xv_image_out_buffer_info, 0);
+ }
+ return _gst_gst_xv_image_out_buffer_type;
+}
+#ifdef DEBUG_BUFFER
+ int value[5] ={0};
+ static int value_count =0;
+#endif
+static void gst_xv_image_out_buffer_finalize(GstXvImageOutBuffer *buffer)
+{
+ Atom atom_retbuf = 0;
+ g_mutex_lock (buffer->xvimagesrc->dpy_lock);
+ atom_retbuf = XInternAtom (buffer->xvimagesrc->dpy, "_USER_WM_PORT_ATTRIBUTE_RETURN_BUFFER", False);
+ XvSetPortAttribute (buffer->xvimagesrc->dpy, buffer->xvimagesrc->p, atom_retbuf, buffer->YBuf); //data->YBuf is gemname, refer to drm_convert_gem_to_fd
+ g_mutex_unlock (buffer->xvimagesrc->dpy_lock);
+ g_cond_signal(buffer->xvimagesrc->buffer_cond);
+ GST_ERROR("############## xvimagesrc = %p, gem_name =%d, fd_name =%d", buffer->xvimagesrc, buffer->YBuf, buffer->fd_name);
+#ifdef DEBUG_BUFFER
+ int i = 0;
+ for(i=0 ; i<5; i++){
+ if (value[i] == buffer->YBuf) {
+ value[i]=0;
+ GST_ERROR("value[%d]=%d", i, value[i]);
+ }
+ }
+#endif
+ return;
+}
+
+
+static GstXvImageOutBuffer *gst_xv_image_out_buffer_new(GstXVImageSrc *src)
+{
+ GstXvImageOutBuffer *newbuf = NULL;
+ GST_LOG("gst_omx_out_buffer_new");
+
+ newbuf = (GstXvImageOutBuffer *)gst_mini_object_new(GST_TYPE_GST_XV_IMAGE_OUT_BUFFER);
+ if(!newbuf)
+ {
+ GST_ERROR("gst_omx_out_buffer_new out of memory");
+ return NULL;
+ }
+ GST_LOG("creating buffer : %p", newbuf);
+ newbuf->xvimagesrc = gst_object_ref(GST_OBJECT(src));
+ newbuf->fd_name = 0;
+ newbuf->YBuf =0;
+ return newbuf;
+}
+#endif
+