]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - aac_afh.c
mp4: Introduce mp4_get_meta().
[paraslash.git] / aac_afh.c
index d6ff4e936443a228a82950f5211b7f0c984f8105..1522b5f0f7e1c8502439fd31b7884f246ef9079c 100644 (file)
--- a/aac_afh.c
+++ b/aac_afh.c
@@ -221,8 +221,7 @@ static int aac_afh_rewrite_tags(const char *map, size_t mapsize,
                struct taginfo *tags, int fd, __a_unused const char *filename)
 {
        int ret, i;
-       int32_t rv;
-       struct mp4_metadata metadata;
+       struct mp4_metadata *metadata;
        struct mp4 *mp4;
        struct mp4_callback cb = {
                .read = aac_afh_meta_read_cb,
@@ -242,22 +241,12 @@ static int aac_afh_rewrite_tags(const char *map, size_t mapsize,
        mp4 = mp4_open_meta(&cb);
        if (!mp4)
                return -E_MP4_OPEN;
-
-       ret = -E_MP4_META_READ;
-       rv = mp4_meta_get_num_items(mp4);
-       if (rv < 0)
-               goto close;
-       metadata.count = rv;
-       PARA_NOTICE_LOG("%d metadata item(s) found\n", rv);
-
-       metadata.tags = para_malloc((metadata.count + 5) * sizeof(struct mp4_tag));
-       for (i = 0; i < metadata.count; i++) {
-               struct mp4_tag *tag = metadata.tags + i;
-
-               ret = -E_MP4_META_READ;
-               if (!mp4_meta_get_by_index(mp4, i, &tag->item, &tag->value))
-                       goto free_tags;
-               PARA_INFO_LOG("found: %s: %s\n", tag->item, tag->value);
+       metadata = mp4_get_meta(mp4);
+       PARA_NOTICE_LOG("%u metadata item(s) found\n", metadata->count);
+       metadata->tags = para_realloc(metadata->tags,
+               (metadata->count + 5) * sizeof(struct mp4_tag));
+       for (i = 0; i < metadata->count; i++) {
+               struct mp4_tag *tag = metadata->tags + i;
                if (!strcmp(tag->item, "artist"))
                        replace_tag(tag, tags->artist, &found_artist);
                else if (!strcmp(tag->item, "title"))
@@ -270,25 +259,19 @@ static int aac_afh_rewrite_tags(const char *map, size_t mapsize,
                        replace_tag(tag, tags->comment, &found_comment);
        }
        if (!found_artist)
-               add_tag(&metadata, "artist", tags->artist);
+               add_tag(metadata, "artist", tags->artist);
        if (!found_title)
-               add_tag(&metadata, "title", tags->title);
+               add_tag(metadata, "title", tags->title);
        if (!found_album)
-               add_tag(&metadata, "album", tags->album);
+               add_tag(metadata, "album", tags->album);
        if (!found_year)
-               add_tag(&metadata, "date", tags->year);
+               add_tag(metadata, "date", tags->year);
        if (!found_comment)
-               add_tag(&metadata, "comment", tags->comment);
+               add_tag(metadata, "comment", tags->comment);
        ret = -E_MP4_META_WRITE;
-       if (!mp4_meta_update(&cb, &metadata))
-               goto free_tags;
+       if (!mp4_meta_update(mp4, metadata))
+               goto close;
        ret = 1;
-free_tags:
-       for (; i > 0; i--) {
-               free(metadata.tags[i - 1].item);
-               free(metadata.tags[i - 1].value);
-       }
-       free(metadata.tags);
 close:
        mp4_close(mp4);
        return ret;