rem: gchar *src_name;
context: bvw_bus_message_cb (GstBus * bus, GstMessage * message, gpointer data){  BaconVideoWidget *bvw = (BaconVideoWidget *) data;  GstMessageType msg_type;  gchar *src_name;  g_return_if_fail (bvw != NULL);  g_return_if_fail (BACON_IS_VIDEO_WIDGET (bvw));  msg_type = GST_MESSAGE_TYPE (message);  /* somebody else is handling the message, probably in poll_for_state_change */  if (bvw->priv->ignore_messages_mask & msg_type)    return;  src_name = gst_object_get_name (message->src);  if (msg_type != GST_MESSAGE_STATE_CHANGED) {    GST_LOG ("Handling %s message from element %s",        gst_message_type_get_name (msg_type), src_name);  }  switch (msg_type) {    case GST_MESSAGE_ERROR: {      GError *error = NULL;      gchar *debug = NULL;      gst_message_parse_error (message, &error, &debug);      GST_DEBUG ("Error message: %s [%s]", GST_STR_NULL (error->message),          GST_STR_NULL (debug));      g_signal_emit (bvw, bvw_signals[SIGNAL_ERROR], 0,		     error->message, TRUE, FALSE);      g_error_free (error);      if (bvw->priv->play)        gst_element_set_state (bvw->priv->play, GST_STATE_NULL);      g_free (debug);      break;    }    case GST_MESSAGE_WARNING: {      GError *error = NULL;      gchar *debug = NULL;      gst_message_parse_warning (message, &error, &debug);      GST_DEBUG ("Warning message: %s [%s]", GST_STR_NULL (error->message),          GST_STR_NULL (debug));      g_warning ("%s [%s]", GST_STR_NULL (error->message), GST_STR_NULL (debug));      g_error_free (error);      g_free (debug);      break;    }    case GST_MESSAGE_TAG: {      GstTagList *tag_list, *result;      GstElementFactory *f;      gst_message_parse_tag (message, &tag_list);      GST_DEBUG ("Tags: %" GST_PTR_FORMAT, tag_list);      /* all tags */      result = gst_tag_list_merge (bvw->priv->tagcache, tag_list,				   GST_TAG_MERGE_APPEND);      if (bvw->priv->tagcache)        gst_tag_list_free (bvw->priv->tagcache);      bvw->priv->tagcache = result;      /* media-type-specific tags */      if (GST_IS_ELEMENT (message->src) &&	  (f = gst_element_get_factory (GST_ELEMENT (message->src)))) {        const gchar *klass = gst_element_factory_get_klass (f);        GstTagList **cache = NULL;        if (g_strrstr (klass, "Video")) {          cache = &bvw->priv->videotags;        } else if (g_strrstr (klass, "Audio")) {          cache = &bvw->priv->audiotags;        }        if (cache) {          result = gst_tag_list_merge (*cache, tag_list, GST_TAG_MERGE_APPEND);          if (*cache)            gst_tag_list_free (*cache);          *cache = result;        }      }      /* clean up */      gst_tag_list_free (tag_list);      g_signal_emit (bvw, bvw_signals[SIGNAL_GOT_METADATA], 0);      break;    }    case GST_MESSAGE_EOS:      GST_DEBUG ("EOS message");      /* update slider one last time */      bvw_query_timeout (bvw);      g_signal_emit (bvw, bvw_signals[SIGNAL_EOS], 0, NULL);      break;    case GST_MESSAGE_BUFFERING: {      gint percent = 0;      gst_structure_get_int (message->structure, "buffer-percent", &percent);      GST_DEBUG ("Buffering message (%u%%)", percent);      g_signal_emit (bvw, bvw_signals[SIGNAL_BUFFERING], 0, percent);      break;    }    case GST_MESSAGE_APPLICATION: {      bvw_handle_application_message (bvw, message);      break;    }    case GST_MESSAGE_STATE_CHANGED: {      GstState old_state, new_state, pending_state;      gst_message_parse_state_changed (message, &old_state, &new_state,          &pending_state);      /* we only care about playbin (pipeline) state changes */      if (GST_MESSAGE_SRC (message) != GST_OBJECT (bvw->priv->play))	break;      GST_DEBUG ("%s changed state from %s to %s", src_name,          gst_element_state_get_name (old_state),          gst_element_state_get_name (new_state));      /* now do stuff */      if (new_state <= GST_STATE_READY) {        if (bvw->priv->update_id != 0) {          g_source_remove (bvw->priv->update_id);          bvw->priv->update_id = 0;        }      } else if (new_state >= GST_STATE_PAUSED) {        if (bvw->priv->update_id == 0) {          bvw->priv->update_id =            g_timeout_add (200, (GSourceFunc) bvw_query_timeout, bvw);        }      }      if (old_state <= GST_STATE_READY &&          new_state >= GST_STATE_PAUSED) {        parse_stream_info (bvw);      } else if (new_state <= GST_STATE_READY &&                 old_state >= GST_STATE_PAUSED) {        bvw->priv->media_has_video = FALSE;        bvw->priv->media_has_audio = FALSE;        /* clean metadata cache */        if (bvw->priv->tagcache) {          gst_tag_list_free (bvw->priv->tagcache);          bvw->priv->tagcache = NULL;        }        if (bvw->priv->audiotags) {          gst_tag_list_free (bvw->priv->audiotags);          bvw->priv->audiotags = NULL;        }        if (bvw->priv->videotags) {          gst_tag_list_free (bvw->priv->videotags);          bvw->priv->videotags = NULL;        }        bvw->priv->video_width = 0;        bvw->priv->video_height = 0;      }      break;    }    case GST_MESSAGE_ELEMENT:{      bvw_handle_element_message (bvw, message);      break;    }    case GST_MESSAGE_CLOCK_PROVIDE:    case GST_MESSAGE_CLOCK_LOST:    case GST_MESSAGE_NEW_CLOCK:    case GST_MESSAGE_STATE_DIRTY:      break;    default:      g_message ("Unhandled message of type '%s' (0x%x)",           gst_message_type_get_name (msg_type), msg_type);      break;  }}