[gnac] Fixed a memory leak
- From: BenoÃt Dupasquier <bdupasqu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnac] Fixed a memory leak
- Date: Wed, 1 Feb 2012 00:57:46 +0000 (UTC)
commit 391bba210d539a3c70ef249da45ccead55a11246
Author: BenoÃt Dupasquier <bdupasqu src gnome org>
Date: Tue Jan 31 20:39:41 2012 +0000
Fixed a memory leak
libgnac/libgnac-metadata.c | 62 ++++++++++++++++++++++++--------------------
1 files changed, 34 insertions(+), 28 deletions(-)
---
diff --git a/libgnac/libgnac-metadata.c b/libgnac/libgnac-metadata.c
index b063d4d..8e251cc 100644
--- a/libgnac/libgnac-metadata.c
+++ b/libgnac/libgnac-metadata.c
@@ -60,7 +60,6 @@ libgnac_metadata_reset(LibgnacMetadata *md)
if (md->priv->metadata) {
md->priv->metadata = NULL;
}
- md->priv->info = NULL;
}
@@ -266,7 +265,7 @@ libgnac_metadata_process_tag_image(const GstTagList *taglist,
GdkPixbuf *pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
libgnac_metadata_add_object_value(md, GST_TAG_IMAGE, G_OBJECT(pixbuf));
- g_object_unref(G_OBJECT(loader));
+ g_object_unref(loader);
}
}
}
@@ -309,7 +308,8 @@ libgnac_metadata_process_tag(const GstTagList *taglist,
g_value_take_string(newval, str);
}
- if (g_str_equal(tag_name, GST_TAG_DATE)) {
+ if (g_str_equal(tag_name, GST_TAG_DATE))
+ {
g_return_if_fail(GST_VALUE_HOLDS_DATE(newval));
const GDate *date = gst_value_get_date(newval);
if (!date) return;
@@ -318,6 +318,12 @@ libgnac_metadata_process_tag(const GstTagList *taglist,
g_value_init(newval, G_TYPE_UINT);
g_value_set_uint(newval, year);
}
+ else if (g_str_equal(tag_name, GST_TAG_DURATION))
+ {
+ guint64 duration = g_value_get_uint64(newval);
+ /* convert the duration from ns to seconds */
+ g_value_set_uint64(newval, duration / GST_SECOND);
+ }
g_hash_table_insert(md->priv->metadata, tag_name, newval);
}
@@ -356,13 +362,11 @@ libgnac_metadata_get_file_info(GFile *uri, LibgnacMetadata *md)
libgnac_metadata_add_string_value(md, GNAC_TAG_FILENAME, filename);
/* image */
- if (!libgnac_metadata_tag_exists(md->priv->metadata, GST_TAG_IMAGE)) {
- const gchar *thumbnail_path = g_file_info_get_attribute_byte_string(info,
- G_FILE_ATTRIBUTE_THUMBNAIL_PATH);
- if (thumbnail_path) {
- GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(thumbnail_path, NULL);
- libgnac_metadata_add_object_value(md, GST_TAG_IMAGE, G_OBJECT(pixbuf));
- }
+ const gchar *thumbnail_path = g_file_info_get_attribute_byte_string(info,
+ G_FILE_ATTRIBUTE_THUMBNAIL_PATH);
+ if (thumbnail_path) {
+ GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(thumbnail_path, NULL);
+ libgnac_metadata_add_object_value(md, GST_TAG_IMAGE, G_OBJECT(pixbuf));
}
g_object_unref(info);
@@ -390,8 +394,7 @@ libgnac_metadata_process_audio_info(LibgnacMetadata *md)
libgnac_metadata_add_uint_value(md, GNAC_TAG_AUDIO_DEPTH, depth);
//guint bitrate = gst_discoverer_audio_info_get_bitrate(audio);
- //if (gst_discoverer_audio_info_is_vbr(audio)) {
- //if (audio->is_vbr) { // XXX not implemented yet
+ //if (gst_discoverer_audio_info_is_vbr(audio)) { // XXX not implemented yet
// libgnac_metadata_add_uint_value(md, GNAC_TAG_VBR, bitrate);
//}
@@ -458,8 +461,8 @@ libgnac_metadata_extract(LibgnacMetadata *md,
libgnac_metadata_get_file_info(uri, md);
GError *err = NULL;
- GstDiscoverer *discoverer = gst_discoverer_new(GST_SECOND, &err);
- if (!discoverer) {
+ GstDiscoverer *discoverer = gst_discoverer_new(5 * GST_SECOND, &err);
+ if (G_UNLIKELY(!discoverer)) {
libgnac_debug("Failed to create discoverer: %s", err->message);
g_propagate_error(error, err);
return NULL;
@@ -467,19 +470,15 @@ libgnac_metadata_extract(LibgnacMetadata *md,
GstDiscovererInfo *info = gst_discoverer_discover_uri(discoverer,
string_uri, &err);
- if (!info) {
+ if (G_UNLIKELY(!info)) {
libgnac_debug("Failed to discover: %s", err->message);
g_propagate_error(error, err);
return NULL;
}
- md->priv->info = info;
+ gst_object_unref(discoverer);
- const GstTagList *taglist = gst_discoverer_info_get_tags(info);
- if (taglist) {
- gst_tag_list_foreach(taglist,
- (GstTagForeachFunc) libgnac_metadata_process_tag, md);
- }
+ md->priv->info = info;
GstClockTime duration = gst_discoverer_info_get_duration(info);
GValue *val = g_new0(GValue, 1);
@@ -488,9 +487,17 @@ libgnac_metadata_extract(LibgnacMetadata *md,
g_value_set_uint64(val, duration / GST_SECOND);
g_hash_table_insert(md->priv->metadata, GST_TAG_DURATION, val);
+ const GstTagList *taglist = gst_discoverer_info_get_tags(info);
+ if (taglist) {
+ gst_tag_list_foreach(taglist,
+ (GstTagForeachFunc) libgnac_metadata_process_tag, md);
+ }
+
libgnac_metadata_process_audio_info(md);
libgnac_metadata_process_video_info(md);
+ gst_object_unref(md->priv->info);
+
g_hash_table_insert(md->priv->tags_table, g_strdup(string_uri),
md->priv->metadata);
tags = md->priv->metadata;
@@ -550,19 +557,18 @@ libgnac_metadata_get_dummy_tags(void)
(GDestroyNotify) libgnac_metadata_tags_free);
gchar *string_tags[][2] = {
- { GST_TAG_ALBUM , "Today!" },
- { GST_TAG_ARTIST , "The Beach Boys" },
+ { GST_TAG_ALBUM , "Today!" },
+ { GST_TAG_ARTIST , "The Beach Boys" },
/* Translators: example filename used in the preview label (do not remove the extension) */
- { GST_TAG_COMMENT , _("Converted by Gnac") },
- { GNAC_TAG_FILENAME, _("filename.oga") },
- { GST_TAG_GENRE , "Rock" },
- { GST_TAG_TITLE , "Do You Wanna Dance?" },
+ { GST_TAG_COMMENT , N_("Converted by Gnac") },
+ { GNAC_TAG_FILENAME, N_("filename.oga") },
+ { GST_TAG_GENRE , "Rock" },
+ { GST_TAG_TITLE , "Do You Wanna Dance?" },
{ NULL, NULL }
};
gint i;
for (i = 0; string_tags[i][0]; i++) {
- g_print("%d\n", i);
GValue *value = g_new0(GValue, 1);
g_value_init(value, G_TYPE_STRING);
g_value_set_static_string(value, string_tags[i][1]);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]