# HG changeset patch # User aurel # Date 1231279864 0 # Node ID 6a7275621c02b8ce9a24495eae04990c8b455224 # Parent e7c4a867349a5f462a48f750b8e5e887b98fae45 free all allocated metadata structures diff -r e7c4a867349a -r 6a7275621c02 avformat.h --- a/avformat.h Tue Jan 06 17:50:10 2009 +0000 +++ b/avformat.h Tue Jan 06 22:11:04 2009 +0000 @@ -93,6 +93,11 @@ */ int av_metadata_set(AVMetadata **m, AVMetadataTag tag); +/** + * Free all the memory allocated for an AVMetadata struct. + */ +void av_metadata_free(AVMetadata **m); + /* packet functions */ diff -r e7c4a867349a -r 6a7275621c02 metadata.c --- a/metadata.c Tue Jan 06 17:50:10 2009 +0000 +++ b/metadata.c Tue Jan 06 22:11:04 2009 +0000 @@ -74,6 +74,20 @@ return 0; } +void av_metadata_free(AVMetadata **pm) +{ + AVMetadata *m= *pm; + + if(m){ + while(m->count--){ + av_free(m->elems[m->count].key); + av_free(m->elems[m->count].value); + } + av_free(m->elems); + } + av_freep(pm); +} + #if LIBAVFORMAT_VERSION_MAJOR < 53 #define FILL_METADATA(s, key, value) { \ if (value && *value && \ diff -r e7c4a867349a -r 6a7275621c02 utils.c --- a/utils.c Tue Jan 06 17:50:10 2009 +0000 +++ b/utils.c Tue Jan 06 22:11:04 2009 +0000 @@ -2285,6 +2285,7 @@ if (st->parser) { av_parser_close(st->parser); } + av_metadata_free(&st->metadata); av_free(st->index_entries); av_free(st->codec->extradata); av_free(st->codec); @@ -2295,6 +2296,7 @@ for(i=s->nb_programs-1; i>=0; i--) { av_freep(&s->programs[i]->provider_name); av_freep(&s->programs[i]->name); + av_metadata_free(&s->programs[i]->metadata); av_freep(&s->programs[i]->stream_index); av_freep(&s->programs[i]); } @@ -2303,17 +2305,11 @@ av_freep(&s->priv_data); while(s->nb_chapters--) { av_free(s->chapters[s->nb_chapters]->title); + av_metadata_free(&s->chapters[s->nb_chapters]->metadata); av_free(s->chapters[s->nb_chapters]); } av_freep(&s->chapters); - if(s->metadata){ - while(s->metadata->count--){ - av_freep(&s->metadata->elems[s->metadata->count].key); - av_freep(&s->metadata->elems[s->metadata->count].value); - } - av_freep(&s->metadata->elems); - } - av_freep(&s->metadata); + av_metadata_free(&s->metadata); av_free(s); }