winamp/Src/id3v2/id3_header.cpp
2024-09-24 14:54:57 +02:00

99 lines
2 KiB
C++

// The authors have released ID3Lib as Public Domain (PD) and claim no copyright,
// patent or other intellectual property protection in this work. This means that
// it may be modified, redistributed and used in commercial and non-commercial
// software and hardware without restrictions. ID3Lib is distributed on an "AS IS"
// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
//
// The ID3Lib authors encourage improvements and optimisations to be sent to the
// ID3Lib coordinator, currently Dirk Mahoney (dirk@id3.org). Approved
// submissions may be altered, and will be included and released under these terms.
//
// Mon Nov 23 18:34:01 1998
#include <string.h>
#include <memory.h>
#include "id3_header.h"
#include "id3_error.h"
static ID3_HeaderInfo ID3_VersionInfo[4][3] =
{
// SIZEOF SIZEOF SIZEOF EXT EXT EXPERIM
// VER REV FRID FRSZ FRFL HEADER SIZE BIT
{
{ 2, 0, 3, 3, 0, false, 0, false },
{ 2, 1, 3, 3, 0, true, 8, true },
{0,},
},
{
{ 3, 0, 4, 4, 2, false, 10, false },
{0,},
},
{
{ 4, 0, 4, 4, 2, false, 10, false },
{0,},
},
{ 0 }
};
ID3_HeaderInfo *ID3_LookupHeaderInfo(uchar ver, uchar rev)
{
ID3_HeaderInfo *info = NULL;
size_t v=0,r=0;
while (ID3_VersionInfo[v][0].version != 0)
{
r=0;
if (ID3_VersionInfo[v][0].version == ver)
{
while (ID3_VersionInfo[v][r].version != 0)
{
if (ID3_VersionInfo[v][r].revision == rev)
{
goto found;
}
else
r++;
}
// later revision. still backwards compat so we'll stick with it.
r--;
goto found;
}
else
v++;
}
found:
if (ID3_VersionInfo[v][r].version != 0)
info = &ID3_VersionInfo[v][r];
return info;
}
ID3_Header::ID3_Header(void)
{
SetVersion(ID3_TAGVERSION, ID3_TAGREVISION);
dataSize = 0;
flags = 0;
}
void ID3_Header::SetVersion(uchar ver, uchar rev)
{
version = ver;
revision = rev;
info = ID3_LookupHeaderInfo(version, revision);
}
void ID3_Header::SetDataSize(luint newSize)
{
dataSize = newSize;
}
void ID3_Header::SetFlags(luint newFlags)
{
flags = newFlags;
}