id3v2: use an enum for encodings instead of magic numbers.

Signed-off-by: Mans Rullgard <mans@mansr.com>
oldabi
Anton Khirnov 14 years ago committed by Mans Rullgard
parent c2dd0e9eba
commit d66eff3685
  1. 8
      libavformat/id3v2.c
  2. 7
      libavformat/id3v2.h

@ -74,7 +74,7 @@ static void read_ttag(AVFormatContext *s, ByteIOContext *pb, int taglen, const c
switch (get_byte(pb)) { /* encoding type */ switch (get_byte(pb)) { /* encoding type */
case 0: /* ISO-8859-1 (0 - 255 maps directly into unicode) */ case ID3v2_ENCODING_ISO8859:
q = dst; q = dst;
while (taglen-- && q - dst < dstlen - 7) { while (taglen-- && q - dst < dstlen - 7) {
uint8_t tmp; uint8_t tmp;
@ -83,7 +83,7 @@ static void read_ttag(AVFormatContext *s, ByteIOContext *pb, int taglen, const c
*q = 0; *q = 0;
break; break;
case 1: /* UTF-16 with BOM */ case ID3v2_ENCODING_UTF16BOM:
taglen -= 2; taglen -= 2;
switch (get_be16(pb)) { switch (get_be16(pb)) {
case 0xfffe: case 0xfffe:
@ -96,7 +96,7 @@ static void read_ttag(AVFormatContext *s, ByteIOContext *pb, int taglen, const c
} }
// fall-through // fall-through
case 2: /* UTF-16BE without BOM */ case ID3v2_ENCODING_UTF16BE:
q = dst; q = dst;
while (taglen > 1 && q - dst < dstlen - 7) { while (taglen > 1 && q - dst < dstlen - 7) {
uint32_t ch; uint32_t ch;
@ -108,7 +108,7 @@ static void read_ttag(AVFormatContext *s, ByteIOContext *pb, int taglen, const c
*q = 0; *q = 0;
break; break;
case 3: /* UTF-8 */ case ID3v2_ENCODING_UTF8:
len = FFMIN(taglen, dstlen); len = FFMIN(taglen, dstlen);
get_buffer(pb, dst, len); get_buffer(pb, dst, len);
dst[len] = 0; dst[len] = 0;

@ -38,6 +38,13 @@
#define ID3v2_FLAG_ENCRYPTION 0x0004 #define ID3v2_FLAG_ENCRYPTION 0x0004
#define ID3v2_FLAG_COMPRESSION 0x0008 #define ID3v2_FLAG_COMPRESSION 0x0008
enum ID3v2Encoding {
ID3v2_ENCODING_ISO8859 = 0,
ID3v2_ENCODING_UTF16BOM = 1,
ID3v2_ENCODING_UTF16BE = 2,
ID3v2_ENCODING_UTF8 = 3,
};
/** /**
* Detect ID3v2 Header. * Detect ID3v2 Header.
* @param buf must be ID3v2_HEADER_SIZE byte long * @param buf must be ID3v2_HEADER_SIZE byte long

Loading…
Cancel
Save