libavformat/id3v2.c File Reference

ID3v2 header parser. More...

#include "config.h"
#include "id3v2.h"
#include "id3v1.h"
#include "libavutil/avstring.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/dict.h"
#include "avio_internal.h"
#include "internal.h"

Go to the source code of this file.

Data Structures

struct  ID3v2EMFunc

Functions

int ff_id3v2_match (const uint8_t *buf, const char *magic)
 Detect ID3v2 Header.
int ff_id3v2_tag_len (const uint8_t *buf)
 Get the length of an ID3v2 tag.
static unsigned int get_size (AVIOContext *s, int len)
static void free_geobtag (void *obj)
 Free GEOB type extra metadata.
static int decode_str (AVFormatContext *s, AVIOContext *pb, int encoding, uint8_t **dst, int *maxread)
 Decode characters to UTF-8 according to encoding type.
static void read_ttag (AVFormatContext *s, AVIOContext *pb, int taglen, const char *key)
 Parse a text tag.
static void read_geobtag (AVFormatContext *s, AVIOContext *pb, int taglen, char *tag, ID3v2ExtraMeta **extra_meta)
 Parse GEOB tag into a ID3v2ExtraMetaGEOB struct.
static int is_number (const char *str)
static AVDictionaryEntryget_date_tag (AVDictionary *m, const char *tag)
static void merge_date (AVDictionary **m)
static void free_apic (void *obj)
static void read_apic (AVFormatContext *s, AVIOContext *pb, int taglen, char *tag, ID3v2ExtraMeta **extra_meta)
static const ID3v2EMFuncget_extra_meta_func (const char *tag, int isv34)
 Get the corresponding ID3v2EMFunc struct for a tag.
static void ff_id3v2_parse (AVFormatContext *s, int len, uint8_t version, uint8_t flags, ID3v2ExtraMeta **extra_meta)
void ff_id3v2_read (AVFormatContext *s, const char *magic, ID3v2ExtraMeta **extra_meta)
 Read an ID3v2 tag, including supported extra metadata.
void ff_id3v2_free_extra_meta (ID3v2ExtraMeta **extra_meta)
 Free memory allocated parsing special (non-text) metadata.
int ff_id3v2_parse_apic (AVFormatContext *s, ID3v2ExtraMeta **extra_meta)
 Create a stream for each APIC (attached picture) extracted from the ID3v2 header.

Variables

const AVMetadataConv ff_id3v2_34_metadata_conv []
const AVMetadataConv ff_id3v2_4_metadata_conv []
static const AVMetadataConv id3v2_2_metadata_conv []
const char ff_id3v2_tags [][4]
 A list of text information frames allowed in both ID3 v2.3 and v2.4 http://www.id3.org/id3v2.4.0-frames http://www.id3.org/id3v2.4.0-changes.
const char ff_id3v2_4_tags [][4]
 ID3v2.4-only text information frames.
const char ff_id3v2_3_tags [][4]
 ID3v2.3-only text information frames.
const char * ff_id3v2_picture_types [21]
const CodecMime ff_id3v2_mime_tags []
static const ID3v2EMFunc id3v2_extra_meta_funcs []


Detailed Description

ID3v2 header parser.

Specifications available at: http://id3.org/Developer_Information

Definition in file id3v2.c.


Function Documentation

static int decode_str ( AVFormatContext s,
AVIOContext pb,
int  encoding,
uint8_t **  dst,
int maxread 
) [static]

Decode characters to UTF-8 according to encoding type.

The decoded buffer is always null terminated. Stop reading when either *maxread bytes are read from pb or U+0000 character is found.

Parameters:
dst Pointer where the address of the buffer with the decoded bytes is stored. Buffer must be freed by caller.
maxread Pointer to maximum number of characters to read from the AVIOContext. After execution the value is decremented by the number of bytes actually read.
Returns:
0 if no error occurred, dst is uninitialized on error

Definition at line 197 of file id3v2.c.

Referenced by read_apic(), read_geobtag(), and read_ttag().

void ff_id3v2_free_extra_meta ( ID3v2ExtraMeta **  extra_meta  ) 

Free memory allocated parsing special (non-text) metadata.

Parameters:
extra_meta Pointer to a pointer to the head of a ID3v2ExtraMeta list, *extra_meta is set to NULL.

Definition at line 769 of file id3v2.c.

Referenced by aiff_read_header(), avformat_open_input(), and oma_read_header().

int ff_id3v2_match ( const uint8_t buf,
const char *  magic 
)

Detect ID3v2 Header.

Parameters:
buf must be ID3v2_HEADER_SIZE byte long
magic magic bytes to identify the header. If in doubt, use ID3v2_DEFAULT_MAGIC.

Definition at line 139 of file id3v2.c.

Referenced by av_probe_input_format3(), ff_id3v2_read(), mp3_read_probe(), and oma_read_probe().

static void ff_id3v2_parse ( AVFormatContext s,
int  len,
uint8_t  version,
uint8_t  flags,
ID3v2ExtraMeta **  extra_meta 
) [static]

Definition at line 543 of file id3v2.c.

Referenced by ff_id3v2_read().

int ff_id3v2_parse_apic ( AVFormatContext s,
ID3v2ExtraMeta **  extra_meta 
)

Create a stream for each APIC (attached picture) extracted from the ID3v2 header.

Definition at line 783 of file id3v2.c.

Referenced by avformat_open_input().

void ff_id3v2_read ( AVFormatContext s,
const char *  magic,
ID3v2ExtraMeta **  extra_meta 
)

Read an ID3v2 tag, including supported extra metadata.

Parameters:
extra_meta If not NULL, extra metadata is parsed into a list of ID3v2ExtraMeta structs and *extra_meta points to the head of the list

Definition at line 738 of file id3v2.c.

Referenced by aiff_read_header(), avformat_open_input(), and oma_read_header().

int ff_id3v2_tag_len ( const uint8_t buf  ) 

Get the length of an ID3v2 tag.

Parameters:
buf must be ID3v2_HEADER_SIZE bytes long and point to the start of an already detected ID3v2 tag

Definition at line 152 of file id3v2.c.

Referenced by av_probe_input_format3(), mp3_read_probe(), and oma_read_probe().

static void free_apic ( void *  obj  )  [static]

Definition at line 433 of file id3v2.c.

Referenced by read_apic().

static void free_geobtag ( void *  obj  )  [static]

Free GEOB type extra metadata.

Definition at line 175 of file id3v2.c.

Referenced by read_geobtag().

static AVDictionaryEntry* get_date_tag ( AVDictionary m,
const char *  tag 
) [static]

Definition at line 393 of file id3v2.c.

Referenced by merge_date().

static const ID3v2EMFunc* get_extra_meta_func ( const char *  tag,
int  isv34 
) [static]

Get the corresponding ID3v2EMFunc struct for a tag.

Parameters:
isv34 Determines if v2.2 or v2.3/4 strings are used
Returns:
A pointer to the ID3v2EMFunc struct if found, NULL otherwise.

Definition at line 529 of file id3v2.c.

Referenced by ff_id3v2_free_extra_meta(), and ff_id3v2_parse().

static unsigned int get_size ( AVIOContext s,
int  len 
) [static]

Definition at line 164 of file id3v2.c.

Referenced by ff_id3v2_parse().

static int is_number ( const char *  str  )  [static]

Definition at line 387 of file id3v2.c.

Referenced by get_date_tag().

static void merge_date ( AVDictionary **  m  )  [static]

Definition at line 402 of file id3v2.c.

Referenced by ff_id3v2_read().

static void read_apic ( AVFormatContext s,
AVIOContext pb,
int  taglen,
char *  tag,
ID3v2ExtraMeta **  extra_meta 
) [static]

Definition at line 441 of file id3v2.c.

static void read_geobtag ( AVFormatContext s,
AVIOContext pb,
int  taglen,
char *  tag,
ID3v2ExtraMeta **  extra_meta 
) [static]

Parse GEOB tag into a ID3v2ExtraMetaGEOB struct.

Definition at line 316 of file id3v2.c.

static void read_ttag ( AVFormatContext s,
AVIOContext pb,
int  taglen,
const char *  key 
) [static]

Parse a text tag.

Definition at line 275 of file id3v2.c.

Referenced by ff_id3v2_parse().


Variable Documentation

Initial value:

 {
    { "TALB", "album"},
    { "TCOM", "composer"},
    { "TCON", "genre"},
    { "TCOP", "copyright"},
    { "TENC", "encoded_by"},
    { "TIT2", "title"},
    { "TLAN", "language"},
    { "TPE1", "artist"},
    { "TPE2", "album_artist"},
    { "TPE3", "performer"},
    { "TPOS", "disc"},
    { "TPUB", "publisher"},
    { "TRCK", "track"},
    { "TSSE", "encoder"},
    { 0 }
}

Definition at line 43 of file id3v2.c.

Referenced by ff_id3v2_write_metadata().

const char ff_id3v2_3_tags[][4]

Initial value:

 {
   "TDAT", "TIME", "TORY", "TRDA", "TSIZ", "TYER",
   { 0 },
}
ID3v2.3-only text information frames.

Definition at line 98 of file id3v2.c.

Referenced by ff_id3v2_write_metadata().

Initial value:

 {
    { "TDRL", "date"},
    { "TDRC", "date"},
    { "TDEN", "creation_time"},
    { "TSOA", "album-sort"},
    { "TSOP", "artist-sort"},
    { "TSOT", "title-sort"},
    { 0 }
}

Definition at line 61 of file id3v2.c.

Referenced by ff_id3v2_write_metadata().

const char ff_id3v2_4_tags[][4]

Initial value:

 {
   "TDEN", "TDOR", "TDRC", "TDRL", "TDTG", "TIPL", "TMCL", "TMOO",
   "TPRO", "TSOA", "TSOP", "TSOT", "TSST",
   { 0 },
}
ID3v2.4-only text information frames.

Definition at line 92 of file id3v2.c.

Referenced by ff_id3v2_write_metadata().

Initial value:

 {
    {"image/gif" , AV_CODEC_ID_GIF},
    {"image/jpeg", AV_CODEC_ID_MJPEG},
    {"image/jpg",  AV_CODEC_ID_MJPEG},
    {"image/png" , AV_CODEC_ID_PNG},
    {"image/tiff", AV_CODEC_ID_TIFF},
    {"image/bmp",  AV_CODEC_ID_BMP},
    {"JPG",        AV_CODEC_ID_MJPEG}, 
    {"PNG" ,       AV_CODEC_ID_PNG},   
    {"",           AV_CODEC_ID_NONE},
}

Definition at line 127 of file id3v2.c.

Referenced by asf_read_picture(), ff_id3v2_write_apic(), parse_picture(), and query_codec().

const char* ff_id3v2_picture_types[21]

Initial value:

 {
    "Other",
    "32x32 pixels 'file icon'",
    "Other file icon",
    "Cover (front)",
    "Cover (back)",
    "Leaflet page",
    "Media (e.g. label side of CD)",
    "Lead artist/lead performer/soloist",
    "Artist/performer",
    "Conductor",
    "Band/Orchestra",
    "Composer",
    "Lyricist/text writer",
    "Recording Location",
    "During recording",
    "During performance",
    "Movie/video screen capture",
    "A bright coloured fish",
    "Illustration",
    "Band/artist logotype",
    "Publisher/Studio logotype",
}

Definition at line 103 of file id3v2.c.

Referenced by asf_read_picture(), ff_id3v2_write_apic(), parse_picture(), and read_apic().

const char ff_id3v2_tags[][4]

Initial value:

 {
   "TALB", "TBPM", "TCOM", "TCON", "TCOP", "TDLY", "TENC", "TEXT",
   "TFLT", "TIT1", "TIT2", "TIT3", "TKEY", "TLAN", "TLEN", "TMED",
   "TOAL", "TOFN", "TOLY", "TOPE", "TOWN", "TPE1", "TPE2", "TPE3",
   "TPE4", "TPOS", "TPUB", "TRCK", "TRSN", "TRSO", "TSRC", "TSSE",
   { 0 },
}
A list of text information frames allowed in both ID3 v2.3 and v2.4 http://www.id3.org/id3v2.4.0-frames http://www.id3.org/id3v2.4.0-changes.

Definition at line 84 of file id3v2.c.

Referenced by ff_id3v2_write_metadata().

Initial value:

 {
    { "TAL",  "album"},
    { "TCO",  "genre"},
    { "TT2",  "title"},
    { "TEN",  "encoded_by"},
    { "TP1",  "artist"},
    { "TP2",  "album_artist"},
    { "TP3",  "performer"},
    { "TRK",  "track"},
    { 0 }
}

Definition at line 71 of file id3v2.c.

Initial value:

 {
    { "GEO", "GEOB", read_geobtag, free_geobtag },
    { "PIC", "APIC", read_apic,    free_apic },
    { NULL }
}

Definition at line 518 of file id3v2.c.


Generated on Fri Oct 26 02:50:10 2012 for FFmpeg by  doxygen 1.5.8