static IplImage *
load_image (gchar * uri, gchar * dir, gchar * image_name,
    const gchar * name_variant)
{
  IplImage *aux;

  aux = cvLoadImage (uri, CV_LOAD_IMAGE_UNCHANGED);
  if (aux == NULL) {
    if (is_valid_uri (uri)) {
      gchar *file_name;

      file_name =
          g_strconcat (dir, "/", image_name, name_variant, ".png", NULL);
      load_from_url (file_name, uri);
      aux = cvLoadImage (file_name, CV_LOAD_IMAGE_UNCHANGED);
      g_remove (file_name);
      g_free (file_name);
    }
  }

  return aux;
}
예제 #2
0
static void
kms_image_overlay_load_image_to_overlay (KmsImageOverlay * imageoverlay)
{
  gchar *url = NULL;
  IplImage *costumeAux = NULL;
  gboolean fields_ok = TRUE;

  fields_ok = fields_ok
      && gst_structure_get (imageoverlay->priv->image_to_overlay,
      "offsetXPercent", G_TYPE_DOUBLE, &imageoverlay->priv->offsetXPercent,
      NULL);
  fields_ok = fields_ok
      && gst_structure_get (imageoverlay->priv->image_to_overlay,
      "offsetYPercent", G_TYPE_DOUBLE, &imageoverlay->priv->offsetYPercent,
      NULL);
  fields_ok = fields_ok
      && gst_structure_get (imageoverlay->priv->image_to_overlay,
      "widthPercent", G_TYPE_DOUBLE, &imageoverlay->priv->widthPercent, NULL);
  fields_ok = fields_ok
      && gst_structure_get (imageoverlay->priv->image_to_overlay,
      "heightPercent", G_TYPE_DOUBLE, &imageoverlay->priv->heightPercent, NULL);
  fields_ok = fields_ok
      && gst_structure_get (imageoverlay->priv->image_to_overlay, "url",
      G_TYPE_STRING, &url, NULL);

  if (!fields_ok) {
    GST_WARNING_OBJECT (imageoverlay, "Invalid image structure received");
    goto end;
  }

  if (url == NULL) {
    GST_DEBUG ("Unset the image overlay");
    goto end;
  }

  if (!imageoverlay->priv->dir_created) {
    gchar *d = g_strdup (TEMP_PATH);

    imageoverlay->priv->dir = g_mkdtemp (d);
    imageoverlay->priv->dir_created = TRUE;
  }

  costumeAux = cvLoadImage (url, CV_LOAD_IMAGE_UNCHANGED);

  if (costumeAux != NULL) {
    GST_DEBUG ("Image loaded from file");
    goto end;
  }

  if (kms_image_overlay_is_valid_uri (url)) {
    gchar *file_name =
        g_strconcat (imageoverlay->priv->dir, "/image.png", NULL);
    load_from_url (file_name, url);
    costumeAux = cvLoadImage (file_name, CV_LOAD_IMAGE_UNCHANGED);
    g_remove (file_name);
    g_free (file_name);
  }

  if (costumeAux == NULL) {
    GST_DEBUG ("Image not loaded");
  } else {
    GST_DEBUG ("Image loaded from URL");
  }

end:

  if (imageoverlay->priv->costume != NULL) {
    cvReleaseImage (&imageoverlay->priv->costume);
    imageoverlay->priv->costume = NULL;
  }

  if (costumeAux != NULL) {
    imageoverlay->priv->costume = costumeAux;
  }

  g_free (url);
}