| OLD | NEW |
| 1 /* | 1 /* |
| 2 * copyright (c) 2009 Michael Niedermayer | 2 * copyright (c) 2009 Michael Niedermayer |
| 3 * | 3 * |
| 4 * This file is part of FFmpeg. | 4 * This file is part of FFmpeg. |
| 5 * | 5 * |
| 6 * FFmpeg is free software; you can redistribute it and/or | 6 * FFmpeg is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Lesser General Public | 7 * modify it under the terms of the GNU Lesser General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2.1 of the License, or (at your option) any later version. | 9 * version 2.1 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 if(s[j] && !(flags & AV_METADATA_IGNORE_SUFFIX)) | 42 if(s[j] && !(flags & AV_METADATA_IGNORE_SUFFIX)) |
| 43 continue; | 43 continue; |
| 44 return &m->elems[i]; | 44 return &m->elems[i]; |
| 45 } | 45 } |
| 46 return NULL; | 46 return NULL; |
| 47 } | 47 } |
| 48 | 48 |
| 49 int av_metadata_set2(AVMetadata **pm, const char *key, const char *value, int fl
ags) | 49 int av_metadata_set2(AVMetadata **pm, const char *key, const char *value, int fl
ags) |
| 50 { | 50 { |
| 51 AVMetadata *m= *pm; | 51 AVMetadata *m= *pm; |
| 52 AVMetadataTag *tag= av_metadata_get(m, key, NULL, AV_METADATA_MATCH_CASE); | 52 AVMetadataTag *tag= av_metadata_get(m, key, NULL, flags); |
| 53 | 53 |
| 54 if(!m) | 54 if(!m) |
| 55 m=*pm= av_mallocz(sizeof(*m)); | 55 m=*pm= av_mallocz(sizeof(*m)); |
| 56 | 56 |
| 57 if(tag){ | 57 if(tag){ |
| 58 if (flags & AV_METADATA_DONT_OVERWRITE) | 58 if (flags & AV_METADATA_DONT_OVERWRITE) |
| 59 return 0; | 59 return 0; |
| 60 av_free(tag->value); | 60 av_free(tag->value); |
| 61 av_free(tag->key); | 61 av_free(tag->key); |
| 62 *tag= m->elems[--m->count]; | 62 *tag= m->elems[--m->count]; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 84 } | 84 } |
| 85 | 85 |
| 86 return 0; | 86 return 0; |
| 87 } | 87 } |
| 88 | 88 |
| 89 #if FF_API_OLD_METADATA | 89 #if FF_API_OLD_METADATA |
| 90 int av_metadata_set(AVMetadata **pm, const char *key, const char *value) | 90 int av_metadata_set(AVMetadata **pm, const char *key, const char *value) |
| 91 { | 91 { |
| 92 return av_metadata_set2(pm, key, value, 0); | 92 return av_metadata_set2(pm, key, value, 0); |
| 93 } | 93 } |
| 94 |
| 95 void av_metadata_conv(AVFormatContext *ctx, const AVMetadataConv *d_conv, |
| 96 const AVMetadataConv *s_conv) |
| 97 { |
| 98 return; |
| 99 } |
| 94 #endif | 100 #endif |
| 95 | 101 |
| 96 void av_metadata_free(AVMetadata **pm) | 102 void av_metadata_free(AVMetadata **pm) |
| 97 { | 103 { |
| 98 AVMetadata *m= *pm; | 104 AVMetadata *m= *pm; |
| 99 | 105 |
| 100 if(m){ | 106 if(m){ |
| 101 while(m->count--){ | 107 while(m->count--){ |
| 102 av_free(m->elems[m->count].key); | 108 av_free(m->elems[m->count].key); |
| 103 av_free(m->elems[m->count].value); | 109 av_free(m->elems[m->count].value); |
| 104 } | 110 } |
| 105 av_free(m->elems); | 111 av_free(m->elems); |
| 106 } | 112 } |
| 107 av_freep(pm); | 113 av_freep(pm); |
| 108 } | 114 } |
| 109 | 115 |
| 110 void metadata_conv(AVMetadata **pm, const AVMetadataConv *d_conv, | 116 void ff_metadata_conv(AVMetadata **pm, const AVMetadataConv *d_conv, |
| 111 const AVMetadataConv *s_conv) | 117 const AVMetadataConv *s_conv) |
| 112 { | 118 { |
| 113 /* TODO: use binary search to look up the two conversion tables | 119 /* TODO: use binary search to look up the two conversion tables |
| 114 if the tables are getting big enough that it would matter speed wise */ | 120 if the tables are getting big enough that it would matter speed wise */ |
| 115 const AVMetadataConv *sc, *dc; | 121 const AVMetadataConv *sc, *dc; |
| 116 AVMetadataTag *mtag = NULL; | 122 AVMetadataTag *mtag = NULL; |
| 117 AVMetadata *dst = NULL; | 123 AVMetadata *dst = NULL; |
| 118 const char *key; | 124 const char *key; |
| 119 | 125 |
| 120 if (d_conv == s_conv) | 126 if (d_conv == s_conv) |
| 121 return; | 127 return; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 133 if (!strcasecmp(key, dc->generic)) { | 139 if (!strcasecmp(key, dc->generic)) { |
| 134 key = dc->native; | 140 key = dc->native; |
| 135 break; | 141 break; |
| 136 } | 142 } |
| 137 av_metadata_set2(&dst, key, mtag->value, 0); | 143 av_metadata_set2(&dst, key, mtag->value, 0); |
| 138 } | 144 } |
| 139 av_metadata_free(pm); | 145 av_metadata_free(pm); |
| 140 *pm = dst; | 146 *pm = dst; |
| 141 } | 147 } |
| 142 | 148 |
| 143 void av_metadata_conv(AVFormatContext *ctx, const AVMetadataConv *d_conv, | 149 void ff_metadata_conv_ctx(AVFormatContext *ctx, const AVMetadataConv *d_conv, |
| 144 const AVMetadataConv *s_conv) | 150 const AVMetadataConv *s_conv) |
| 145 { | 151 { |
| 146 int i; | 152 int i; |
| 147 metadata_conv(&ctx->metadata, d_conv, s_conv); | 153 ff_metadata_conv(&ctx->metadata, d_conv, s_conv); |
| 148 for (i=0; i<ctx->nb_streams ; i++) | 154 for (i=0; i<ctx->nb_streams ; i++) |
| 149 metadata_conv(&ctx->streams [i]->metadata, d_conv, s_conv); | 155 ff_metadata_conv(&ctx->streams [i]->metadata, d_conv, s_conv); |
| 150 for (i=0; i<ctx->nb_chapters; i++) | 156 for (i=0; i<ctx->nb_chapters; i++) |
| 151 metadata_conv(&ctx->chapters[i]->metadata, d_conv, s_conv); | 157 ff_metadata_conv(&ctx->chapters[i]->metadata, d_conv, s_conv); |
| 152 for (i=0; i<ctx->nb_programs; i++) | 158 for (i=0; i<ctx->nb_programs; i++) |
| 153 metadata_conv(&ctx->programs[i]->metadata, d_conv, s_conv); | 159 ff_metadata_conv(&ctx->programs[i]->metadata, d_conv, s_conv); |
| 154 } | 160 } |
| OLD | NEW |