libavformat/metadata.c
Go to the documentation of this file.
1 /*
2  * copyright (c) 2009 Michael Niedermayer
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #include "avformat.h"
22 #include "metadata.h"
23 #include "libavutil/dict.h"
24 #include "libavutil/avstring.h"
25 
26 void ff_metadata_conv(AVDictionary **pm, const AVMetadataConv *d_conv,
27  const AVMetadataConv *s_conv)
28 {
29  /* TODO: use binary search to look up the two conversion tables
30  if the tables are getting big enough that it would matter speed wise */
31  const AVMetadataConv *sc, *dc;
32  AVDictionaryEntry *mtag = NULL;
34  const char *key;
35 
36  if (d_conv == s_conv)
37  return;
38 
39  while ((mtag = av_dict_get(*pm, "", mtag, AV_DICT_IGNORE_SUFFIX))) {
40  key = mtag->key;
41  if (s_conv)
42  for (sc=s_conv; sc->native; sc++)
43  if (!av_strcasecmp(key, sc->native)) {
44  key = sc->generic;
45  break;
46  }
47  if (d_conv)
48  for (dc=d_conv; dc->native; dc++)
49  if (!av_strcasecmp(key, dc->generic)) {
50  key = dc->native;
51  break;
52  }
53  av_dict_set(&dst, key, mtag->value, 0);
54  }
55  av_dict_free(pm);
56  *pm = dst;
57 }
58 
60  const AVMetadataConv *s_conv)
61 {
62  int i;
63  ff_metadata_conv(&ctx->metadata, d_conv, s_conv);
64  for (i=0; i<ctx->nb_streams ; i++)
65  ff_metadata_conv(&ctx->streams [i]->metadata, d_conv, s_conv);
66  for (i=0; i<ctx->nb_chapters; i++)
67  ff_metadata_conv(&ctx->chapters[i]->metadata, d_conv, s_conv);
68  for (i=0; i<ctx->nb_programs; i++)
69  ff_metadata_conv(&ctx->programs[i]->metadata, d_conv, s_conv);
70 }
unsigned int nb_chapters
Definition: avformat.h:1089
void ff_metadata_conv_ctx(AVFormatContext *ctx, const AVMetadataConv *d_conv, const AVMetadataConv *s_conv)
const char * generic
Definition: metadata.h:36
AVDictionary * metadata
Definition: avformat.h:922
AVDictionaryEntry * av_dict_get(AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
Definition: dict.c:39
Format I/O context.
Definition: avformat.h:944
internal metadata API header see avformat.h or the public API!
Public dictionary API.
AVStream ** streams
Definition: avformat.h:992
AVDictionary * metadata
Definition: avformat.h:1092
unsigned int nb_programs
Definition: avformat.h:1050
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
Definition: dict.c:162
AVChapter ** chapters
Definition: avformat.h:1090
unsigned int nb_streams
A list of all streams in the file.
Definition: avformat.h:991
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
Definition: avstring.c:212
AVDictionary * metadata
Definition: avformat.h:711
NULL
Definition: eval.c:55
const char * native
Definition: metadata.h:35
FIXME Range Coding of cr are mx and my are Motion Vector top and top right vectors is used as motion vector prediction the used motion vector is the sum of the predictor and(mvx_diff, mvy_diff)*mv_scale Intra DC Predicton block[y][x] dc[1]
Definition: snow.txt:392
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
Definition: dict.c:62
synthesis window for stochastic i
AVDictionary * metadata
Definition: avformat.h:894
Main libavformat public API header.
char * key
Definition: dict.h:81
void ff_metadata_conv(AVDictionary **pm, const AVMetadataConv *d_conv, const AVMetadataConv *s_conv)
char * value
Definition: dict.h:82
else dst[i][x+y *dst_stride[i]]
Definition: vf_mcdeint.c:160
#define AV_DICT_IGNORE_SUFFIX
Definition: dict.h:68
AVProgram ** programs
Definition: avformat.h:1051