32 #include "io_helpers.h"
46 _flags.set(HEADER_FLAG_EXPERIMENTAL, _info->is_experimental);
47 _flags.set(HEADER_FLAG_EXTENDED, _info->is_extended);
57 if (_info->is_extended)
59 bytesUsed += _info->extended_bytes;
75 io::writeUInt28(writer, this->GetDataSize());
78 if (_flags.test(HEADER_FLAG_EXTENDED))
82 io::writeUInt28(writer, 6);
83 io::writeBENumber(writer, 1, 1);
84 io::writeBENumber(writer, 0, 1);
88 io::writeBENumber(writer, 6,
sizeof(uint32));
89 for (
size_t i = 0; i < 6; ++i)
103 io::ExitTrigger et(reader);
106 ID3D_NOTICE(
"ID3_TagHeader::Parse(): not an id3v2 header" );
118 _flags.set(static_cast<ID3_Flags::TYPE>(reader.
readChar()));
121 this->SetDataSize(io::readUInt28(reader));
123 if (_flags.test(HEADER_FLAG_EXTENDED) && this->GetSpec() ==
ID3V2_2_1)
126 _flags.set(HEADER_FLAG_EXTENDED,
false);
127 _info->extended_bytes = 0;
130 et.setExitPos(reader.
getCur());
146 uint16 tmpval = io::readBENumber(reader, 2);
155 _info->extended_bytes = 14;
158 _info->extended_bytes = 10;
170 io::readUInt28(reader);
171 const int extflagbytes = reader.
readChar();
173 for (i = 0; i < extflagbytes; ++i)
180 if (extflags[0]->test(EXT_HEADER_FLAG_BIT2))
185 const int extheaderflagdatasize = reader.
readChar();
186 extrabytes += extheaderflagdatasize;
191 if (extflags[0]->test(EXT_HEADER_FLAG_BIT3))
196 const int extheaderflagdatasize = reader.
readChar();
197 extrabytes += extheaderflagdatasize;
202 if (extflags[0]->test(EXT_HEADER_FLAG_BIT4))
207 const int extheaderflagdatasize = reader.
readChar();
208 extrabytes += extheaderflagdatasize;
213 _info->extended_bytes = 5 + extflagbytes + extrabytes;
217 _flags.set(HEADER_FLAG_EXTENDED,
false);
220 _data_size -= _info->extended_bytes;
221 _info->extended_bytes = 0;