DTSC Header rewrite

# Conflicts:
#	lib/dtsc.h
#	lib/dtscmeta.cpp
This commit is contained in:
Thulinma 2015-04-20 12:26:50 +02:00
parent 0913d2607e
commit 8a6dadf279
2 changed files with 38 additions and 42 deletions

View file

@ -240,12 +240,12 @@ namespace DTSC {
private: private:
///\brief Data storage for this Key. ///\brief Data storage for this Key.
/// ///
/// - 5 bytes: MSB storage of the position of the first packet of this keyframe within the file. /// - 8 bytes: MSB storage of the position of the first packet of this keyframe within the file.
/// - 3 bytes: MSB storage of the duration of this keyframe. /// - 3 bytes: MSB storage of the duration of this keyframe.
/// - 2 bytes: MSB storage of the number of this keyframe. /// - 4 bytes: MSB storage of the number of this keyframe.
/// - 2 bytes: MSB storage of the amount of parts in this keyframe. /// - 2 bytes: MSB storage of the amount of parts in this keyframe.
/// - 4 bytes: MSB storage of the timestamp associated with this keyframe's first packet. /// - 8 bytes: MSB storage of the timestamp associated with this keyframe's first packet.
char data[16]; char data[25];
}; };
///\brief Basic class for storage of data associated with fragments. ///\brief Basic class for storage of data associated with fragments.
@ -266,9 +266,9 @@ namespace DTSC {
/// ///
/// - 4 bytes: duration (in milliseconds) /// - 4 bytes: duration (in milliseconds)
/// - 1 byte: length (amount of keyframes) /// - 1 byte: length (amount of keyframes)
/// - 2 bytes: number of first keyframe in fragment /// - 4 bytes: number of first keyframe in fragment
/// - 4 bytes: size of fragment in bytes /// - 4 bytes: size of fragment in bytes
char data[11]; char data[13];
}; };
///\brief Class for storage of track data ///\brief Class for storage of track data

View file

@ -866,53 +866,49 @@ namespace DTSC {
///\brief Returns the byteposition of a keyframe ///\brief Returns the byteposition of a keyframe
unsigned long long Key::getBpos() { unsigned long long Key::getBpos() {
return (((unsigned long long)data[0] << 32) | (data[1] << 24) | (data[2] << 16) | (data[3] << 8) | data[4]); return Bit::btohll(data);
} }
void Key::setBpos(unsigned long long newBpos) { void Key::setBpos(unsigned long long newBpos) {
data[4] = newBpos & 0xFF; Bit::htobll(data, newBpos);
data[3] = (newBpos >> 8) & 0xFF;
data[2] = (newBpos >> 16) & 0xFF;
data[1] = (newBpos >> 24) & 0xFF;
data[0] = (newBpos >> 32) & 0xFF;
} }
unsigned long Key::getLength() { unsigned long Key::getLength() {
return Bit::btoh24(data+5); return Bit::btoh24(data+8);
} }
void Key::setLength(unsigned long newLength) { void Key::setLength(unsigned long newLength) {
Bit::htob24(data+5, newLength); Bit::htob24(data+8, newLength);
} }
///\brief Returns the number of a keyframe ///\brief Returns the number of a keyframe
unsigned long Key::getNumber() { unsigned long Key::getNumber() {
return Bit::btohs(data + 8); return Bit::btohl(data + 11);
} }
///\brief Sets the number of a keyframe ///\brief Sets the number of a keyframe
void Key::setNumber(unsigned long newNumber) { void Key::setNumber(unsigned long newNumber) {
Bit::htobs(data + 8, newNumber); Bit::htobl(data + 11, newNumber);
} }
///\brief Returns the number of parts of a keyframe ///\brief Returns the number of parts of a keyframe
unsigned short Key::getParts() { unsigned short Key::getParts() {
return Bit::btohs(data + 10); return Bit::btohs(data + 15);
} }
///\brief Sets the number of parts of a keyframe ///\brief Sets the number of parts of a keyframe
void Key::setParts(unsigned short newParts) { void Key::setParts(unsigned short newParts) {
Bit::htobs(data + 10, newParts); Bit::htobs(data + 15, newParts);
} }
///\brief Returns the timestamp of a keyframe ///\brief Returns the timestamp of a keyframe
unsigned long long Key::getTime() { unsigned long long Key::getTime() {
return Bit::btohl(data + 12); return Bit::btohll(data + 17);
} }
///\brief Sets the timestamp of a keyframe ///\brief Sets the timestamp of a keyframe
void Key::setTime(unsigned long long newTime) { void Key::setTime(unsigned long long newTime) {
Bit::htobl(data + 12, newTime); Bit::htobll(data + 17, newTime);
} }
///\brief Returns the data of this keyframe struct ///\brief Returns the data of this keyframe struct
@ -949,22 +945,22 @@ namespace DTSC {
///\brief Returns the number of the first keyframe in this fragment ///\brief Returns the number of the first keyframe in this fragment
unsigned long Fragment::getNumber() { unsigned long Fragment::getNumber() {
return Bit::btohs(data + 5); return Bit::btohl(data + 5);
} }
///\brief Sets the number of the first keyframe in this fragment ///\brief Sets the number of the first keyframe in this fragment
void Fragment::setNumber(unsigned long newNumber) { void Fragment::setNumber(unsigned long newNumber) {
Bit::htobs(data + 5, newNumber); Bit::htobl(data + 5, newNumber);
} }
///\brief Returns the size of a fragment ///\brief Returns the size of a fragment
unsigned long Fragment::getSize() { unsigned long Fragment::getSize() {
return Bit::btohl(data + 7); return Bit::btohl(data + 9);
} }
///\brief Sets the size of a fragement ///\brief Sets the size of a fragement
void Fragment::setSize(unsigned long newSize) { void Fragment::setSize(unsigned long newSize) {
Bit::htobl(data + 7, newSize); Bit::htobl(data + 9, newSize);
} }
///\brief Returns thte data of this fragment structure ///\brief Returns thte data of this fragment structure
@ -998,11 +994,11 @@ namespace DTSC {
Track::Track(JSON::Value & trackRef) { Track::Track(JSON::Value & trackRef) {
if (trackRef.isMember("fragments") && trackRef["fragments"].isString()) { if (trackRef.isMember("fragments") && trackRef["fragments"].isString()) {
Fragment * tmp = (Fragment *)trackRef["fragments"].asStringRef().data(); Fragment * tmp = (Fragment *)trackRef["fragments"].asStringRef().data();
fragments = std::deque<Fragment>(tmp, tmp + (trackRef["fragments"].asStringRef().size() / 11)); fragments = std::deque<Fragment>(tmp, tmp + (trackRef["fragments"].asStringRef().size() / 13));
} }
if (trackRef.isMember("keys") && trackRef["keys"].isString()) { if (trackRef.isMember("keys") && trackRef["keys"].isString()) {
Key * tmp = (Key *)trackRef["keys"].asStringRef().data(); Key * tmp = (Key *)trackRef["keys"].asStringRef().data();
keys = std::deque<Key>(tmp, tmp + (trackRef["keys"].asStringRef().size() / 16)); keys = std::deque<Key>(tmp, tmp + (trackRef["keys"].asStringRef().size() / 25));
} }
if (trackRef.isMember("parts") && trackRef["parts"].isString()) { if (trackRef.isMember("parts") && trackRef["parts"].isString()) {
Part * tmp = (Part *)trackRef["parts"].asStringRef().data(); Part * tmp = (Part *)trackRef["parts"].asStringRef().data();
@ -1046,13 +1042,13 @@ namespace DTSC {
char * tmp = 0; char * tmp = 0;
unsigned int tmplen = 0; unsigned int tmplen = 0;
trackRef.getMember("fragments").getString(tmp, tmplen); trackRef.getMember("fragments").getString(tmp, tmplen);
fragments = std::deque<Fragment>((Fragment *)tmp, ((Fragment *)tmp) + (tmplen / 11)); fragments = std::deque<Fragment>((Fragment *)tmp, ((Fragment *)tmp) + (tmplen / 13));
} }
if (trackRef.getMember("keys").getType() == DTSC_STR) { if (trackRef.getMember("keys").getType() == DTSC_STR) {
char * tmp = 0; char * tmp = 0;
unsigned int tmplen = 0; unsigned int tmplen = 0;
trackRef.getMember("keys").getString(tmp, tmplen); trackRef.getMember("keys").getString(tmp, tmplen);
keys = std::deque<Key>((Key *)tmp, ((Key *)tmp) + (tmplen / 16)); keys = std::deque<Key>((Key *)tmp, ((Key *)tmp) + (tmplen / 25));
} }
if (trackRef.getMember("parts").getType() == DTSC_STR) { if (trackRef.getMember("parts").getType() == DTSC_STR) {
char * tmp = 0; char * tmp = 0;
@ -1439,8 +1435,8 @@ namespace DTSC {
///\brief Determines the "packed" size of a track ///\brief Determines the "packed" size of a track
int Track::getSendLen() { int Track::getSendLen() {
int result = 146 + init.size() + codec.size() + type.size() + getWritableIdentifier().size(); int result = 146 + init.size() + codec.size() + type.size() + getWritableIdentifier().size();
result += fragments.size() * 11; result += fragments.size() * 13;
result += keys.size() * 16; result += keys.size() * 25;
if (keySizes.size()){ if (keySizes.size()){
result += 11 + (keySizes.size() * 4) + 4; result += 11 + (keySizes.size() * 4) + 4;
} }
@ -1478,14 +1474,14 @@ namespace DTSC {
writePointer(p, getWritableIdentifier()); writePointer(p, getWritableIdentifier());
writePointer(p, "\340", 1);//Begin track object writePointer(p, "\340", 1);//Begin track object
writePointer(p, "\000\011fragments\002", 12); writePointer(p, "\000\011fragments\002", 12);
writePointer(p, convertInt(fragments.size() * 11), 4); writePointer(p, convertInt(fragments.size() * 13), 4);
for (std::deque<Fragment>::iterator it = fragments.begin(); it != fragments.end(); it++) { for (std::deque<Fragment>::iterator it = fragments.begin(); it != fragments.end(); it++) {
writePointer(p, it->getData(), 11); writePointer(p, it->getData(), 13);
} }
writePointer(p, "\000\004keys\002", 7); writePointer(p, "\000\004keys\002", 7);
writePointer(p, convertInt(keys.size() * 16), 4); writePointer(p, convertInt(keys.size() * 25), 4);
for (std::deque<Key>::iterator it = keys.begin(); it != keys.end(); it++) { for (std::deque<Key>::iterator it = keys.begin(); it != keys.end(); it++) {
writePointer(p, it->getData(), 16); writePointer(p, it->getData(), 25);
} }
writePointer(p, "\000\010keysizes\002,", 11); writePointer(p, "\000\010keysizes\002,", 11);
writePointer(p, convertInt(keySizes.size() * 4), 4); writePointer(p, convertInt(keySizes.size() * 4), 4);
@ -1555,14 +1551,14 @@ namespace DTSC {
conn.SendNow(getWritableIdentifier()); conn.SendNow(getWritableIdentifier());
conn.SendNow("\340", 1);//Begin track object conn.SendNow("\340", 1);//Begin track object
conn.SendNow("\000\011fragments\002", 12); conn.SendNow("\000\011fragments\002", 12);
conn.SendNow(convertInt(fragments.size() * 11), 4); conn.SendNow(convertInt(fragments.size() * 13), 4);
for (std::deque<Fragment>::iterator it = fragments.begin(); it != fragments.end(); it++) { for (std::deque<Fragment>::iterator it = fragments.begin(); it != fragments.end(); it++) {
conn.SendNow(it->getData(), 11); conn.SendNow(it->getData(), 13);
} }
conn.SendNow("\000\004keys\002", 7); conn.SendNow("\000\004keys\002", 7);
conn.SendNow(convertInt(keys.size() * 16), 4); conn.SendNow(convertInt(keys.size() * 25), 4);
for (std::deque<Key>::iterator it = keys.begin(); it != keys.end(); it++) { for (std::deque<Key>::iterator it = keys.begin(); it != keys.end(); it++) {
conn.SendNow(it->getData(), 16); conn.SendNow(it->getData(), 25);
} }
conn.SendNow("\000\010keysizes\002,", 11); conn.SendNow("\000\010keysizes\002,", 11);
conn.SendNow(convertInt(keySizes.size() * 4), 4); conn.SendNow(convertInt(keySizes.size() * 4), 4);
@ -1701,15 +1697,15 @@ namespace DTSC {
JSON::Value Track::toJSON() { JSON::Value Track::toJSON() {
JSON::Value result; JSON::Value result;
std::string tmp; std::string tmp;
tmp.reserve(fragments.size() * 11); tmp.reserve(fragments.size() * 13);
for (std::deque<Fragment>::iterator it = fragments.begin(); it != fragments.end(); it++) { for (std::deque<Fragment>::iterator it = fragments.begin(); it != fragments.end(); it++) {
tmp.append(it->getData(), 11); tmp.append(it->getData(), 13);
} }
result["fragments"] = tmp; result["fragments"] = tmp;
tmp = ""; tmp = "";
tmp.reserve(keys.size() * 16); tmp.reserve(keys.size() * 25);
for (std::deque<Key>::iterator it = keys.begin(); it != keys.end(); it++) { for (std::deque<Key>::iterator it = keys.begin(); it != keys.end(); it++) {
tmp.append(it->getData(), 16); tmp.append(it->getData(), 25);
} }
result["keys"] = tmp; result["keys"] = tmp;
tmp = ""; tmp = "";