static GstStateChangeReturn gst_kate_tiger_change_state (GstElement * element, GstStateChange transition) { GstKateTiger *tiger = GST_KATE_TIGER (element); GstStateChangeReturn res; switch (transition) { case GST_STATE_CHANGE_PAUSED_TO_READY: GST_DEBUG_OBJECT (tiger, "PAUSED -> READY, clearing kate state"); g_mutex_lock (tiger->mutex); if (tiger->tr) { tiger_renderer_destroy (tiger->tr); tiger->tr = NULL; } g_mutex_unlock (tiger->mutex); break; default: break; } res = gst_kate_decoder_base_change_state (&tiger->decoder, element, parent_class, transition); switch (transition) { case GST_STATE_CHANGE_READY_TO_PAUSED: GST_DEBUG_OBJECT (tiger, "READY -> PAUSED, initializing kate state"); g_mutex_lock (tiger->mutex); if (tiger->decoder.initialized) { int ret = tiger_renderer_create (&tiger->tr); if (ret < 0) { GST_WARNING_OBJECT (tiger, "failed to create tiger renderer: %d", ret); } else { ret = tiger_renderer_set_default_font_description (tiger->tr, tiger->default_font_desc); if (ret < 0) { GST_WARNING_OBJECT (tiger, "failed to set tiger default font description: %d", ret); } gst_kate_tiger_update_default_font_color (tiger); gst_kate_tiger_update_default_background_color (tiger); gst_kate_tiger_update_default_font_effect (tiger); gst_kate_tiger_update_quality (tiger); } } g_mutex_unlock (tiger->mutex); break; default: break; } return res; }
static GstStateChangeReturn gst_kate_dec_change_state (GstElement * element, GstStateChange transition) { GstStateChangeReturn ret; GstKateDec *kd = GST_KATE_DEC (element); ret = gst_kate_decoder_base_change_state (&kd->decoder, element, parent_class, transition); if (transition == GST_STATE_CHANGE_PAUSED_TO_READY) { gst_caps_replace (&kd->src_caps, NULL); } return ret; }