3737
3838using namespace TagLib ;
3939
40- EBML::Element* EBML::Element::factory (File &file)
40+ EBML::Element * EBML::Element::factory (File &file)
4141{
4242 // Get the element ID
4343 offset_t offset = file.tell ();
@@ -48,61 +48,59 @@ EBML::Element* EBML::Element::factory(File &file)
4848 }
4949
5050 // Get the size length and data length
51- const auto & [sizeLength, dataSize] = readVINT<offset_t >(file);
51+ const auto & [sizeLength, dataSize] = readVINT<offset_t >(file);
5252 if (!sizeLength)
5353 return nullptr ;
5454
5555 // Return the subclass
5656 switch (id) {
57- case ElementIDs::EBMLHeader:
58- return new Element (id, sizeLength, dataSize);
59-
60- case ElementIDs::MkSegment:
61- return new MkSegment (sizeLength, dataSize, offset);
62-
63- case ElementIDs::MkTags:
64- return new MkTags (sizeLength, dataSize, offset);
65-
66- case ElementIDs::MkAttachments:
67- return new MkAttachments (sizeLength, dataSize, offset);
68-
69- case ElementIDs::MkTag:
70- case ElementIDs::MkTagTargets:
71- case ElementIDs::MkSimpleTag:
72- case ElementIDs::MkAttachedFile:
73- case ElementIDs::MkSeek:
74- return new MasterElement (id, sizeLength, dataSize, offset);
75-
76- case ElementIDs::MkTagName:
77- case ElementIDs::MkTagString:
78- case ElementIDs::MkAttachedFileName:
79- case ElementIDs::MkAttachedFileDescription:
80- return new UTF8StringElement (id, sizeLength, dataSize);
81-
82- case ElementIDs::MkTagLanguage:
83- case ElementIDs::MkAttachedFileMediaType:
84- return new Latin1StringElement (id, sizeLength, dataSize);
85-
86- case ElementIDs::MkTagTargetTypeValue:
87- case ElementIDs::MkAttachedFileUID:
88- case ElementIDs::MkSeekPosition:
89- return new UIntElement (id, sizeLength, dataSize);
90-
91- case ElementIDs::MkAttachedFileData:
92- case ElementIDs::MkSeekID:
93- return new BinaryElement (id, sizeLength, dataSize);
94-
95- case ElementIDs::MkSeekHead:
96- return new MkSeekHead (sizeLength, dataSize, offset);
97-
98- case ElementIDs::VoidElement:
99- return new VoidElement (sizeLength, dataSize);
100-
101- default :
102- return new Element (id, sizeLength, dataSize);
103- }
57+ case ElementIDs::EBMLHeader:
58+ return new Element (id, sizeLength, dataSize);
59+
60+ case ElementIDs::MkSegment:
61+ return new MkSegment (sizeLength, dataSize, offset);
62+
63+ case ElementIDs::MkTags:
64+ return new MkTags (sizeLength, dataSize, offset);
65+
66+ case ElementIDs::MkAttachments:
67+ return new MkAttachments (sizeLength, dataSize, offset);
68+
69+ case ElementIDs::MkTag:
70+ case ElementIDs::MkTagTargets:
71+ case ElementIDs::MkSimpleTag:
72+ case ElementIDs::MkAttachedFile:
73+ case ElementIDs::MkSeek:
74+ return new MasterElement (id, sizeLength, dataSize, offset);
75+
76+ case ElementIDs::MkTagName:
77+ case ElementIDs::MkTagString:
78+ case ElementIDs::MkAttachedFileName:
79+ case ElementIDs::MkAttachedFileDescription:
80+ return new UTF8StringElement (id, sizeLength, dataSize);
81+
82+ case ElementIDs::MkTagLanguage:
83+ case ElementIDs::MkAttachedFileMediaType:
84+ return new Latin1StringElement (id, sizeLength, dataSize);
10485
105- return nullptr ;
86+ case ElementIDs::MkTagTargetTypeValue:
87+ case ElementIDs::MkAttachedFileUID:
88+ case ElementIDs::MkSeekPosition:
89+ return new UIntElement (id, sizeLength, dataSize);
90+
91+ case ElementIDs::MkAttachedFileData:
92+ case ElementIDs::MkSeekID:
93+ return new BinaryElement (id, sizeLength, dataSize);
94+
95+ case ElementIDs::MkSeekHead:
96+ return new MkSeekHead (sizeLength, dataSize, offset);
97+
98+ case ElementIDs::VoidElement:
99+ return new VoidElement (sizeLength, dataSize);
100+
101+ default :
102+ return new Element (id, sizeLength, dataSize);
103+ }
106104}
107105
108106EBML::Element::Id EBML::Element::readId (File &file)
@@ -124,14 +122,14 @@ EBML::Element::Id EBML::Element::readId(File &file)
124122 return buffer.toUInt (true );
125123}
126124
127- void EBML::Element::skipData (File &file)
125+ void EBML::Element::skipData (File &file)
128126{
129127 file.seek (dataSize, File::Position::Current);
130128}
131129
132130offset_t EBML::Element::headSize () const
133- {
134- return EBML:: idSize (id) + sizeLength;
131+ {
132+ return idSize (id) + sizeLength;
135133}
136134
137135ByteVector EBML::Element::render ()
@@ -141,9 +139,10 @@ ByteVector EBML::Element::render()
141139 return buffer;
142140}
143141
144- ByteVector EBML::Element::renderId ()
142+ ByteVector EBML::Element::renderId () const
145143{
146144 int numBytes = idSize (id);
147- id = Utils::byteSwap (id);
148- return ByteVector ((char *) &id + (4 - numBytes), numBytes);
145+ static const auto byteOrder = Utils::systemByteOrder ();
146+ uint32_t data = byteOrder == Utils::LittleEndian ? Utils::byteSwap (id) : id;
147+ return ByteVector (reinterpret_cast <char *>(&data) + (4 - numBytes), numBytes);
149148}
0 commit comments