]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - mp4.c
mp4: Reduce indentation in modify_moov().
[paraslash.git] / mp4.c
diff --git a/mp4.c b/mp4.c
index 9ea65d07e7d1823b3039739102ec5a05797df3f9..bec0371035f5adf1bc1afb20429852305fe1342f 100644 (file)
--- a/mp4.c
+++ b/mp4.c
@@ -699,7 +699,7 @@ static int32_t read_mdhd(struct mp4 *f)
        return 1;
 }
 
-static int32_t parse_metadata(struct mp4 *f, int32_t size)
+static int32_t read_ilst(struct mp4 *f, int32_t size)
 {
        uint64_t sumsize = 0;
 
@@ -739,11 +739,10 @@ static int32_t read_meta(struct mp4 *f, uint64_t size)
                subsize = atom_read_header(f, &atom_type, &header_size);
                if (subsize <= header_size + 4)
                        return 1;
-               if (atom_type == ATOM_ILST) {
-                       parse_metadata(f, (uint32_t) (subsize - (header_size + 4)));
-               } else {
+               if (atom_type == ATOM_ILST)
+                       read_ilst(f, subsize - (header_size + 4));
+               else
                        set_position(f, get_position(f) + subsize - header_size);
-               }
                sumsize += subsize;
        }
 
@@ -861,21 +860,6 @@ struct mp4 *mp4_open_read(const struct mp4_callback *cb)
        return f;
 }
 
-static int32_t tag_delete(struct mp4_metadata *meta)
-{
-       uint32_t i;
-
-       for (i = 0; i < meta->count; i++) {
-               free(meta->tags[i].item);
-               free(meta->tags[i].value);
-       }
-       free(meta->tags);
-       meta->tags = NULL;
-       meta->count = 0;
-
-       return 0;
-}
-
 void mp4_close(struct mp4 *f)
 {
        int32_t i;
@@ -892,8 +876,11 @@ void mp4_close(struct mp4 *f)
                        free(f->track[i]);
                }
        }
-
-       tag_delete(&(f->meta));
+       for (i = 0; i < f->meta.count; i++) {
+               free(f->meta.tags[i].item);
+               free(f->meta.tags[i].value);
+       }
+       free(f->meta.tags);
        free(f);
 }
 
@@ -1421,83 +1408,72 @@ static uint32_t modify_moov(struct mp4 *f, void **out_buffer,
                *out_buffer = membuffer_detach(buf);
                membuffer_free(buf);
                return 1;
-       } else {
-               udta_offset = get_position(f);
-               udta_size = read_int32(f);
-               if (!find_atom_v2 (f, udta_offset + 8, udta_size - 8, "meta", 4, "ilst")) {
-                       struct membuffer *buf;
-                       void *new_meta_buffer;
-                       uint32_t new_meta_size;
-
-                       if (!create_meta(&f->meta, &new_meta_buffer, &new_meta_size))
-                               return 0;
-
-                       buf = membuffer_create();
-                       set_position(f, total_base);
-                       membuffer_transfer_from_file(buf, f,
-                               (uint32_t)(udta_offset - total_base));
-
-                       membuffer_write_int32(buf, udta_size + 8 + new_meta_size);
-                       membuffer_write_atom_name(buf, "udta");
-                       membuffer_transfer_from_file(buf, f, udta_size);
-
-                       membuffer_write_atom(buf, "meta", new_meta_size,
-                               new_meta_buffer);
-                       free(new_meta_buffer);
-
-                       *out_size = membuffer_get_size(buf);
-                       *out_buffer = membuffer_detach(buf);
-                       membuffer_free(buf);
-                       return 1;
-               }
-               meta_offset = get_position(f);
-               meta_size = read_int32(f);
-               if (!find_atom(f, meta_offset + 12, meta_size - 12, "ilst"))
-                       return 0;       //shouldn't happen, find_atom_v2 above takes care of it
-               ilst_offset = get_position(f);
-               ilst_size = read_int32(f);
-
-               if (!create_ilst(&f->meta, &new_ilst_buffer, &new_ilst_size))
+       }
+       udta_offset = get_position(f);
+       udta_size = read_int32(f);
+       if (!find_atom_v2 (f, udta_offset + 8, udta_size - 8, "meta", 4, "ilst")) {
+               struct membuffer *buf;
+               void *new_meta_buffer;
+               uint32_t new_meta_size;
+
+               if (!create_meta(&f->meta, &new_meta_buffer, &new_meta_size))
                        return 0;
 
-               size_delta = new_ilst_size - (ilst_size - 8);
+               buf = membuffer_create();
+               set_position(f, total_base);
+               membuffer_transfer_from_file(buf, f,
+                       (uint32_t)(udta_offset - total_base));
+
+               membuffer_write_int32(buf, udta_size + 8 + new_meta_size);
+               membuffer_write_atom_name(buf, "udta");
+               membuffer_transfer_from_file(buf, f, udta_size);
 
-               *out_size = total_size + size_delta;
-               *out_buffer = para_malloc(*out_size);
-               p_out = (uint8_t *) * out_buffer;
+               membuffer_write_atom(buf, "meta", new_meta_size,
+                       new_meta_buffer);
+               free(new_meta_buffer);
 
-               set_position(f, total_base);
-               read_data(f, p_out,
-                               (uint32_t) (udta_offset - total_base));
-               p_out += (uint32_t) (udta_offset - total_base);
-               *(uint32_t *) p_out = fix_byte_order_32(read_int32(f) + size_delta);
-               p_out += 4;
-               read_data(f, p_out, 4);
-               p_out += 4;
-               read_data(f, p_out,
-                               (uint32_t) (meta_offset - udta_offset - 8));
-               p_out += (uint32_t) (meta_offset - udta_offset - 8);
-               *(uint32_t *) p_out = fix_byte_order_32(read_int32(f) + size_delta);
-               p_out += 4;
-               read_data(f, p_out, 4);
-               p_out += 4;
-               read_data(f, p_out,
-                               (uint32_t) (ilst_offset - meta_offset - 8));
-               p_out += (uint32_t) (ilst_offset - meta_offset - 8);
-               *(uint32_t *) p_out = fix_byte_order_32(read_int32(f) + size_delta);
-               p_out += 4;
-               read_data(f, p_out, 4);
-               p_out += 4;
-
-               memcpy(p_out, new_ilst_buffer, new_ilst_size);
-               p_out += new_ilst_size;
-
-               set_position(f, ilst_offset + ilst_size);
-               read_data(f, p_out, (uint32_t) (total_size
-                       - (ilst_offset - total_base) - ilst_size));
-
-               free(new_ilst_buffer);
+               *out_size = membuffer_get_size(buf);
+               *out_buffer = membuffer_detach(buf);
+               membuffer_free(buf);
+               return 1;
        }
+       meta_offset = get_position(f);
+       meta_size = read_int32(f);
+       if (!find_atom(f, meta_offset + 12, meta_size - 12, "ilst"))
+               return 0; /* shouldn't happen, find_atom_v2 above takes care of it */
+       ilst_offset = get_position(f);
+       ilst_size = read_int32(f);
+       if (!create_ilst(&f->meta, &new_ilst_buffer, &new_ilst_size))
+               return 0;
+       size_delta = new_ilst_size - (ilst_size - 8);
+       *out_size = total_size + size_delta;
+       *out_buffer = para_malloc(*out_size);
+       p_out = (uint8_t *)*out_buffer;
+       set_position(f, total_base);
+       read_data(f, p_out, (uint32_t) (udta_offset - total_base));
+       p_out += (uint32_t) (udta_offset - total_base);
+       *(uint32_t *)p_out = fix_byte_order_32(read_int32(f) + size_delta);
+       p_out += 4;
+       read_data(f, p_out, 4);
+       p_out += 4;
+       read_data(f, p_out, (uint32_t) (meta_offset - udta_offset - 8));
+       p_out += (uint32_t) (meta_offset - udta_offset - 8);
+       *(uint32_t *)p_out = fix_byte_order_32(read_int32(f) + size_delta);
+       p_out += 4;
+       read_data(f, p_out, 4);
+       p_out += 4;
+       read_data(f, p_out, (uint32_t) (ilst_offset - meta_offset - 8));
+       p_out += (uint32_t) (ilst_offset - meta_offset - 8);
+       *(uint32_t *)p_out = fix_byte_order_32(read_int32(f) + size_delta);
+       p_out += 4;
+       read_data(f, p_out, 4);
+       p_out += 4;
+       memcpy(p_out, new_ilst_buffer, new_ilst_size);
+       p_out += new_ilst_size;
+       set_position(f, ilst_offset + ilst_size);
+       read_data(f, p_out, (uint32_t) (total_size
+               - (ilst_offset - total_base) - ilst_size));
+       free(new_ilst_buffer);
        return 1;
 }