[evaspixmapsink] Fix bug to re-create pixmaps for new evas image object
[framework/multimedia/gst-plugins-ext0.10.git] / evaspixmapsink / evaspixmapsink.c
index 09199ec..e903eca 100644 (file)
@@ -3468,13 +3468,13 @@ gst_evaspixmapsink_set_property (GObject *object, guint prop_id, const GValue *v
                                /* delete evas object callbacks registrated on a former evas image object */
                                evas_object_event_callback_del (evaspixmapsink->eo, EVAS_CALLBACK_DEL, evas_callback_del_event);
                                evas_object_event_callback_del (evaspixmapsink->eo, EVAS_CALLBACK_RESIZE, evas_callback_resize_event);
+                               evaspixmapsink->eo = eo;
                                if (evaspixmapsink->eo) {
                                        if (!gst_evaspixmapsink_xpixmap_link(evaspixmapsink)) {
                                                GST_WARNING_OBJECT (evaspixmapsink,"link evas image object with pixmap failed...");
                                                return;
                                        }
                                }
-                               evaspixmapsink->eo = eo;
                                /* add evas object callbacks on a new evas image object */
                                evas_object_event_callback_add (evaspixmapsink->eo, EVAS_CALLBACK_DEL, evas_callback_del_event, evaspixmapsink);
                                evas_object_event_callback_add (evaspixmapsink->eo, EVAS_CALLBACK_RESIZE, evas_callback_resize_event, evaspixmapsink);
@@ -3495,23 +3495,24 @@ gst_evaspixmapsink_set_property (GObject *object, guint prop_id, const GValue *v
        {
                gboolean visible = g_value_get_boolean (value);
                if (evaspixmapsink->visible != visible) {
+                       evaspixmapsink->visible = visible;
                        if (evaspixmapsink->eo) {
-                               g_mutex_lock( evaspixmapsink->flow_lock );
                                if (!visible) {
                                        int i = 0;
+                                       g_mutex_lock( evaspixmapsink->flow_lock );
                                        for (i = 0; i < evaspixmapsink->num_of_pixmaps; i++) {
                                                if (evaspixmapsink->xpixmap[i]) {
                                                        gst_evaspixmapsink_xpixmap_clear (evaspixmapsink, evaspixmapsink->xpixmap[i]);
                                                }
                                        }
+                                       g_mutex_unlock( evaspixmapsink->flow_lock );
                                        evas_object_hide(evaspixmapsink->eo);
                                        GST_INFO_OBJECT (evaspixmapsink,"object hide..");
                                } else {
                                        evas_object_show(evaspixmapsink->eo);
                                        GST_INFO_OBJECT (evaspixmapsink,"object show..");
+                                       gst_evaspixmap_buffer_put (evaspixmapsink, evaspixmapsink->evas_pixmap_buf);
                                }
-                               evaspixmapsink->visible = visible;
-                               g_mutex_unlock( evaspixmapsink->flow_lock );
                        } else {
                                GST_WARNING_OBJECT (evaspixmapsink,"evas image object was not set");
                        }