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:
///\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.
/// - 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.
/// - 4 bytes: MSB storage of the timestamp associated with this keyframe's first packet.
char data[16];
/// - 8 bytes: MSB storage of the timestamp associated with this keyframe's first packet.
char data[25];
};
///\brief Basic class for storage of data associated with fragments.
@ -266,9 +266,9 @@ namespace DTSC {
///
/// - 4 bytes: duration (in milliseconds)
/// - 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
char data[11];
char data[13];
};
///\brief Class for storage of track data

View file

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