Such style. (Code style unification)
This commit is contained in:
parent
57bcd8f25c
commit
8c01ec8897
57 changed files with 6548 additions and 6437 deletions
|
@ -20,7 +20,8 @@ namespace Secure {
|
||||||
0xe5, 0x16, 0x01, 0xf1, 0x98, 0xc9, 0x0b, 0xd6, 0xdf, 0x8a, 0x64, 0x47, 0xc4, 0x44, 0xcc, 0x92, 0x69, 0x28, 0xee, 0x7d, 0xac, 0xdc, 0x30, 0x56,
|
0xe5, 0x16, 0x01, 0xf1, 0x98, 0xc9, 0x0b, 0xd6, 0xdf, 0x8a, 0x64, 0x47, 0xc4, 0x44, 0xcc, 0x92, 0x69, 0x28, 0xee, 0x7d, 0xac, 0xdc, 0x30, 0x56,
|
||||||
0x3a, 0xe7, 0xbc, 0xba, 0x45, 0x16, 0x2c, 0x4c, 0x46, 0x6b, 0x2b, 0x20, 0xfb, 0x3d, 0x20, 0x35, 0xbb, 0x48, 0x49, 0x13, 0x65, 0xc9, 0x9a, 0x38,
|
0x3a, 0xe7, 0xbc, 0xba, 0x45, 0x16, 0x2c, 0x4c, 0x46, 0x6b, 0x2b, 0x20, 0xfb, 0x3d, 0x20, 0x35, 0xbb, 0x48, 0x49, 0x13, 0x65, 0xc9, 0x9a, 0x38,
|
||||||
0x10, 0x84, 0x1a, 0x8c, 0xc9, 0xd7, 0xde, 0x07, 0x10, 0x5a, 0xfb, 0xb4, 0x95, 0xae, 0x18, 0xf2, 0xe3, 0x15, 0xe8, 0xad, 0x7e, 0xe5, 0x3c, 0xa8,
|
0x10, 0x84, 0x1a, 0x8c, 0xc9, 0xd7, 0xde, 0x07, 0x10, 0x5a, 0xfb, 0xb4, 0x95, 0xae, 0x18, 0xf2, 0xe3, 0x15, 0xe8, 0xad, 0x7e, 0xe5, 0x3c, 0xa8,
|
||||||
0x47, 0x85, 0xd6, 0x1f, 0x54, 0xb5, 0xa3, 0x79, 0x02, 0x03, 0x01, 0x00, 0x01}; ///< The GBv2 public key file.
|
0x47, 0x85, 0xd6, 0x1f, 0x54, 0xb5, 0xa3, 0x79, 0x02, 0x03, 0x01, 0x00, 0x01
|
||||||
|
}; ///< The GBv2 public key file.
|
||||||
static unsigned int __gbv2keypub_der_len = 294; ///< Length of GBv2 public key data
|
static unsigned int __gbv2keypub_der_len = 294; ///< Length of GBv2 public key data
|
||||||
|
|
||||||
/// Attempts to load the GBv2 public key.
|
/// Attempts to load the GBv2 public key.
|
||||||
|
|
|
@ -592,7 +592,9 @@ void Util::getMyExec(std::deque<std::string> & execs){
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
DIR * d = opendir(path.c_str());
|
DIR * d = opendir(path.c_str());
|
||||||
if (!d){return;}
|
if (!d) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
struct dirent * dp;
|
struct dirent * dp;
|
||||||
do {
|
do {
|
||||||
errno = 0;
|
errno = 0;
|
||||||
|
|
|
@ -31,7 +31,9 @@ namespace Converter {
|
||||||
cmd.push_back(NULL);
|
cmd.push_back(NULL);
|
||||||
int outFD = -1;
|
int outFD = -1;
|
||||||
Util::Procs::StartPiped("FFMpegInfo", &cmd[0], 0, &outFD, 0);
|
Util::Procs::StartPiped("FFMpegInfo", &cmd[0], 0, &outFD, 0);
|
||||||
while( Util::Procs::isActive("FFMpegInfo")){ Util::sleep(100); }
|
while (Util::Procs::isActive("FFMpegInfo")) {
|
||||||
|
Util::sleep(100);
|
||||||
|
}
|
||||||
FILE * outFile = fdopen(outFD, "r");
|
FILE * outFile = fdopen(outFD, "r");
|
||||||
char * fileBuf = 0;
|
char * fileBuf = 0;
|
||||||
size_t fileBufLen = 0;
|
size_t fileBufLen = 0;
|
||||||
|
|
32
lib/dtsc.cpp
32
lib/dtsc.cpp
|
@ -169,7 +169,9 @@ bool DTSC::Stream::parsePacket(Socket::Buffer & buffer){
|
||||||
|
|
||||||
/// Adds a keyframe packet to all tracks, so the stream can be fully played.
|
/// Adds a keyframe packet to all tracks, so the stream can be fully played.
|
||||||
void DTSC::Stream::endStream() {
|
void DTSC::Stream::endStream() {
|
||||||
if (!metadata.tracks.size()){return;}
|
if (!metadata.tracks.size()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
for (std::map<int, Track>::iterator it = metadata.tracks.begin(); it != metadata.tracks.end(); it++) {
|
for (std::map<int, Track>::iterator it = metadata.tracks.begin(); it != metadata.tracks.end(); it++) {
|
||||||
JSON::Value newPack;
|
JSON::Value newPack;
|
||||||
newPack["time"] = (long long)it->second.lastms;
|
newPack["time"] = (long long)it->second.lastms;
|
||||||
|
@ -271,7 +273,9 @@ void DTSC::Stream::addPacket(JSON::Value & newPack){
|
||||||
livePos newPos;
|
livePos newPos;
|
||||||
newPos.trackID = newPack["trackid"].asInt();
|
newPos.trackID = newPack["trackid"].asInt();
|
||||||
newPos.seekTime = newPack["time"].asInt();
|
newPos.seekTime = newPack["time"].asInt();
|
||||||
if (!metadata.tracks.count(newPos.trackID) && (!newPack.isMember("mark") || newPack["mark"].asStringRef() != "pause")){return;}
|
if (!metadata.tracks.count(newPos.trackID) && (!newPack.isMember("mark") || newPack["mark"].asStringRef() != "pause")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (buffercount > 1 && metadata.tracks[newPos.trackID].keys.size() > 1 && newPos.seekTime < (long long unsigned int)metadata.tracks[newPos.trackID].keys.rbegin()->getTime()) {
|
if (buffercount > 1 && metadata.tracks[newPos.trackID].keys.size() > 1 && newPos.seekTime < (long long unsigned int)metadata.tracks[newPos.trackID].keys.rbegin()->getTime()) {
|
||||||
resetStream();
|
resetStream();
|
||||||
}
|
}
|
||||||
|
@ -325,7 +329,9 @@ void DTSC::Stream::addPacket(JSON::Value & newPack){
|
||||||
/// Deletes a the first part of the buffer, updating the keyframes list and metadata as required.
|
/// Deletes a the first part of the buffer, updating the keyframes list and metadata as required.
|
||||||
/// Will print a warning if a track has less than 2 keyframes left because of this.
|
/// Will print a warning if a track has less than 2 keyframes left because of this.
|
||||||
void DTSC::Stream::cutOneBuffer() {
|
void DTSC::Stream::cutOneBuffer() {
|
||||||
if ( !buffers.size()){return;}
|
if (!buffers.size()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
int trid = buffers.begin()->first.trackID;
|
int trid = buffers.begin()->first.trackID;
|
||||||
long long unsigned int delTime = buffers.begin()->first.seekTime;
|
long long unsigned int delTime = buffers.begin()->first.seekTime;
|
||||||
if (buffercount > 1) {
|
if (buffercount > 1) {
|
||||||
|
@ -469,11 +475,15 @@ int DTSC::Stream::canSeekms(unsigned int ms){
|
||||||
if (it->second.keys[0].getTime() <= ms && it->second.keys[it->second.keys.size() - 1].getTime() >= ms) {
|
if (it->second.keys[0].getTime() <= ms && it->second.keys[it->second.keys.size() - 1].getTime() >= ms) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (it->second.keys[0].getTime() > ms){too_late = true;}
|
if (it->second.keys[0].getTime() > ms) {
|
||||||
|
too_late = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//did we spot a track already past this point? return too late.
|
//did we spot a track already past this point? return too late.
|
||||||
if (too_late){return -1;}
|
if (too_late) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
//otherwise, assume not available yet
|
//otherwise, assume not available yet
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -512,7 +522,9 @@ bool DTSC::Stream::isNewest(DTSC::livePos & pos, std::set<int> & allowedTracks){
|
||||||
DTSC::livePos DTSC::Stream::getNext(DTSC::livePos & pos, std::set<int> & allowedTracks) {
|
DTSC::livePos DTSC::Stream::getNext(DTSC::livePos & pos, std::set<int> & allowedTracks) {
|
||||||
std::map<livePos, JSON::Value>::iterator iter = buffers.upper_bound(pos);
|
std::map<livePos, JSON::Value>::iterator iter = buffers.upper_bound(pos);
|
||||||
while (iter != buffers.end()) {
|
while (iter != buffers.end()) {
|
||||||
if (allowedTracks.count(iter->first.trackID)){return iter->first;}
|
if (allowedTracks.count(iter->first.trackID)) {
|
||||||
|
return iter->first;
|
||||||
|
}
|
||||||
iter++;
|
iter++;
|
||||||
}
|
}
|
||||||
return pos;
|
return pos;
|
||||||
|
@ -1078,8 +1090,12 @@ DTSC::File::~File(){
|
||||||
|
|
||||||
|
|
||||||
bool DTSC::isFixed(JSON::Value & metadata) {
|
bool DTSC::isFixed(JSON::Value & metadata) {
|
||||||
if (metadata.isMember("is_fixed")){return true;}
|
if (metadata.isMember("is_fixed")) {
|
||||||
if ( !metadata.isMember("tracks")){return false;}
|
return true;
|
||||||
|
}
|
||||||
|
if (!metadata.isMember("tracks")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
for (JSON::ObjIter it = metadata["tracks"].ObjBegin(); it != metadata["tracks"].ObjEnd(); it++) {
|
for (JSON::ObjIter it = metadata["tracks"].ObjBegin(); it != metadata["tracks"].ObjEnd(); it++) {
|
||||||
if (it->second["type"].asString() == "meta") {
|
if (it->second["type"].asString() == "meta") {
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -288,7 +288,9 @@ namespace DTSC {
|
||||||
///\return The timestamp of this packet.
|
///\return The timestamp of this packet.
|
||||||
long long unsigned int Packet::getTime() const {
|
long long unsigned int Packet::getTime() const {
|
||||||
if (version != DTSC_V2) {
|
if (version != DTSC_V2) {
|
||||||
if (!data){return 0;}
|
if (!data) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return getInt("time");
|
return getInt("time");
|
||||||
}
|
}
|
||||||
return ((long long int)ntohl(((int *)(data + 12))[0]) << 32) | ntohl(((int *)(data + 12))[1]);
|
return ((long long int)ntohl(((int *)(data + 12))[0]) << 32) | ntohl(((int *)(data + 12))[1]);
|
||||||
|
@ -443,7 +445,9 @@ namespace DTSC {
|
||||||
|
|
||||||
/// Returns the first byte of this DTSC value, or 0 on error.
|
/// Returns the first byte of this DTSC value, or 0 on error.
|
||||||
char Scan::getType() {
|
char Scan::getType() {
|
||||||
if (!p){return 0;}
|
if (!p) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return p[0];
|
return p[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -478,7 +482,9 @@ namespace DTSC {
|
||||||
char * str;
|
char * str;
|
||||||
unsigned int strlen;
|
unsigned int strlen;
|
||||||
getString(str, strlen);
|
getString(str, strlen);
|
||||||
if (!strlen){return 0;}
|
if (!strlen) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return strtoll(str, 0, 0);
|
return strtoll(str, 0, 0);
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -513,8 +519,12 @@ namespace DTSC {
|
||||||
|
|
||||||
/// \todo Move this function to some generic area. Duplicate from json.cpp
|
/// \todo Move this function to some generic area. Duplicate from json.cpp
|
||||||
static inline char hex2c(char c) {
|
static inline char hex2c(char c) {
|
||||||
if (c < 10){return '0' + c;}
|
if (c < 10) {
|
||||||
if (c < 16){return 'A' + (c - 10);}
|
return '0' + c;
|
||||||
|
}
|
||||||
|
if (c < 16) {
|
||||||
|
return 'A' + (c - 10);
|
||||||
|
}
|
||||||
return '0';
|
return '0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -455,9 +455,15 @@ bool FLV::Tag::DTSCLoader(DTSC::Packet & packData, DTSC::Track & track){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
setLen();
|
setLen();
|
||||||
if (track.type == "video"){data[0] = 0x09;}
|
if (track.type == "video") {
|
||||||
if (track.type == "audio"){data[0] = 0x08;}
|
data[0] = 0x09;
|
||||||
if (track.type == "meta"){data[0] = 0x12;}
|
}
|
||||||
|
if (track.type == "audio") {
|
||||||
|
data[0] = 0x08;
|
||||||
|
}
|
||||||
|
if (track.type == "meta") {
|
||||||
|
data[0] = 0x12;
|
||||||
|
}
|
||||||
data[1] = ((len - 15) >> 16) & 0xFF;
|
data[1] = ((len - 15) >> 16) & 0xFF;
|
||||||
data[2] = ((len - 15) >> 8) & 0xFF;
|
data[2] = ((len - 15) >> 8) & 0xFF;
|
||||||
data[3] = (len - 15) & 0xFF;
|
data[3] = (len - 15) & 0xFF;
|
||||||
|
@ -910,7 +916,9 @@ bool FLV::Tag::FileLoader(FILE * f){
|
||||||
int postflags = preflags | O_NONBLOCK;
|
int postflags = preflags | O_NONBLOCK;
|
||||||
fcntl(fileno(f), F_SETFL, postflags);
|
fcntl(fileno(f), F_SETFL, postflags);
|
||||||
|
|
||||||
if (len < 15){len = 15;}
|
if (len < 15) {
|
||||||
|
len = 15;
|
||||||
|
}
|
||||||
if (!checkBufferSize()) {
|
if (!checkBufferSize()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
12
lib/json.cpp
12
lib/json.cpp
|
@ -17,8 +17,12 @@ static inline char c2hex(char c){
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline char hex2c(char c) {
|
static inline char hex2c(char c) {
|
||||||
if (c < 10){return '0' + c;}
|
if (c < 10) {
|
||||||
if (c < 16){return 'A' + (c - 10);}
|
return '0' + c;
|
||||||
|
}
|
||||||
|
if (c < 16) {
|
||||||
|
return 'A' + (c - 10);
|
||||||
|
}
|
||||||
return '0';
|
return '0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1130,7 +1134,9 @@ JSON::Value JSON::fromDTMI2(std::string & data){
|
||||||
}
|
}
|
||||||
|
|
||||||
void JSON::fromDTMI2(const unsigned char * data, unsigned int len, unsigned int & i, JSON::Value & ret) {
|
void JSON::fromDTMI2(const unsigned char * data, unsigned int len, unsigned int & i, JSON::Value & ret) {
|
||||||
if (len < 13){return;}
|
if (len < 13) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
long long int tmpTrackID = ntohl(((int *)(data + i))[0]);
|
long long int tmpTrackID = ntohl(((int *)(data + i))[0]);
|
||||||
long long int tmpTime = ntohl(((int *)(data + i))[1]);
|
long long int tmpTime = ntohl(((int *)(data + i))[1]);
|
||||||
tmpTime <<= 32;
|
tmpTime <<= 32;
|
||||||
|
|
|
@ -1075,8 +1075,12 @@ namespace MP4{
|
||||||
}
|
}
|
||||||
memset(data + payloadOffset, 0, 24); //set all bytes (32 - 8) to zeroes
|
memset(data + payloadOffset, 0, 24); //set all bytes (32 - 8) to zeroes
|
||||||
|
|
||||||
if (type == "video"){setHandlerType("vide");}
|
if (type == "video") {
|
||||||
if (type == "audio"){setHandlerType("soun");}
|
setHandlerType("vide");
|
||||||
|
}
|
||||||
|
if (type == "audio") {
|
||||||
|
setHandlerType("soun");
|
||||||
|
}
|
||||||
setName(name);
|
setName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
0
lib/nal.cpp
Executable file → Normal file
0
lib/nal.cpp
Executable file → Normal file
0
lib/nal.h
Executable file → Normal file
0
lib/nal.h
Executable file → Normal file
|
@ -412,8 +412,7 @@ namespace OGG{
|
||||||
0xBCB4666DU, 0xB8757BDAU, 0xB5365D03U, 0xB1F740B4U,
|
0xBCB4666DU, 0xB8757BDAU, 0xB5365D03U, 0xB1F740B4U,
|
||||||
};
|
};
|
||||||
|
|
||||||
while (len > 0)
|
while (len > 0) {
|
||||||
{
|
|
||||||
crc = table[*data ^ ((crc >> 24) & 0xff)] ^ (crc << 8);
|
crc = table[*data ^ ((crc >> 24) & 0xff)] ^ (crc << 8);
|
||||||
data++;
|
data++;
|
||||||
len--;
|
len--;
|
||||||
|
|
|
@ -27,11 +27,15 @@ bool Util::Procs::handler_set = false;
|
||||||
|
|
||||||
static bool childRunning(pid_t p) {
|
static bool childRunning(pid_t p) {
|
||||||
pid_t ret = waitpid(p, 0, WNOHANG);
|
pid_t ret = waitpid(p, 0, WNOHANG);
|
||||||
if (ret == p){return false;}
|
if (ret == p) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (ret < 0 && errno == EINTR) {
|
if (ret < 0 && errno == EINTR) {
|
||||||
return childRunning(p);
|
return childRunning(p);
|
||||||
}
|
}
|
||||||
if (kill(p, 0) == 0){return true;}
|
if (kill(p, 0) == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +47,9 @@ void Util::Procs::exit_handler(){
|
||||||
int waiting = 0;
|
int waiting = 0;
|
||||||
std::map<pid_t, std::string> listcopy = plist;
|
std::map<pid_t, std::string> listcopy = plist;
|
||||||
std::map<pid_t, std::string>::iterator it;
|
std::map<pid_t, std::string>::iterator it;
|
||||||
if (listcopy.empty()){return;}
|
if (listcopy.empty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//wait up to 0.5 second for applications to shut down
|
//wait up to 0.5 second for applications to shut down
|
||||||
while (!listcopy.empty() && waiting <= 25) {
|
while (!listcopy.empty() && waiting <= 25) {
|
||||||
|
@ -58,7 +64,9 @@ void Util::Procs::exit_handler(){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (listcopy.empty()){return;}
|
if (listcopy.empty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
DEBUG_MSG(DLVL_DEVEL, "Sending SIGINT to remaining %d children", (int)listcopy.size());
|
DEBUG_MSG(DLVL_DEVEL, "Sending SIGINT to remaining %d children", (int)listcopy.size());
|
||||||
//send sigint to all remaining
|
//send sigint to all remaining
|
||||||
|
@ -84,7 +92,9 @@ void Util::Procs::exit_handler(){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (listcopy.empty()){return;}
|
if (listcopy.empty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
DEBUG_MSG(DLVL_DEVEL, "Sending SIGKILL to remaining %d children", (int)listcopy.size());
|
DEBUG_MSG(DLVL_DEVEL, "Sending SIGKILL to remaining %d children", (int)listcopy.size());
|
||||||
//send sigkill to all remaining
|
//send sigkill to all remaining
|
||||||
|
@ -110,7 +120,9 @@ void Util::Procs::exit_handler(){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (listcopy.empty()){return;}
|
if (listcopy.empty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
DEBUG_MSG(DLVL_DEVEL, "Giving up with %d children left.", (int)listcopy.size());
|
DEBUG_MSG(DLVL_DEVEL, "Giving up with %d children left.", (int)listcopy.size());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -183,7 +195,9 @@ std::string Util::Procs::getOutputOf(char* const* argv){
|
||||||
std::string ret;
|
std::string ret;
|
||||||
int fin = 0, fout = -1, ferr = 0;
|
int fin = 0, fout = -1, ferr = 0;
|
||||||
StartPiped("output_getter", argv, &fin, &fout, &ferr);
|
StartPiped("output_getter", argv, &fin, &fout, &ferr);
|
||||||
while (isActive("output_getter")){Util::sleep(100);}
|
while (isActive("output_getter")) {
|
||||||
|
Util::sleep(100);
|
||||||
|
}
|
||||||
FILE * outFile = fdopen(fout, "r");
|
FILE * outFile = fdopen(fout, "r");
|
||||||
char * fileBuf = 0;
|
char * fileBuf = 0;
|
||||||
size_t fileBufLen = 0;
|
size_t fileBufLen = 0;
|
||||||
|
@ -200,7 +214,9 @@ std::string Util::Procs::getOutputOf(std::string cmd){
|
||||||
std::string ret;
|
std::string ret;
|
||||||
int fin = 0, fout = -1, ferr = 0;
|
int fin = 0, fout = -1, ferr = 0;
|
||||||
StartPiped("output_getter", cmd, &fin, &fout, &ferr);
|
StartPiped("output_getter", cmd, &fin, &fout, &ferr);
|
||||||
while (isActive("output_getter")){Util::sleep(100);}
|
while (isActive("output_getter")) {
|
||||||
|
Util::sleep(100);
|
||||||
|
}
|
||||||
FILE * outFile = fdopen(fout, "r");
|
FILE * outFile = fdopen(fout, "r");
|
||||||
char * fileBuf = 0;
|
char * fileBuf = 0;
|
||||||
size_t fileBufLen = 0;
|
size_t fileBufLen = 0;
|
||||||
|
|
|
@ -47,13 +47,15 @@ uint8_t genuineFMSKey[] = {0x47, 0x65, 0x6e, 0x75, 0x69, 0x6e, 0x65, 0x20, 0x41,
|
||||||
0x4d, 0x65, 0x64, 0x69, 0x61, 0x20, 0x53, 0x65, 0x72,
|
0x4d, 0x65, 0x64, 0x69, 0x61, 0x20, 0x53, 0x65, 0x72,
|
||||||
0x76, // Genuine Adobe Flash Media Server 001
|
0x76, // Genuine Adobe Flash Media Server 001
|
||||||
0x65, 0x72, 0x20, 0x30, 0x30, 0x31, 0xf0, 0xee, 0xc2, 0x4a, 0x80, 0x68, 0xbe, 0xe8, 0x2e, 0x00, 0xd0, 0xd1, 0x02, 0x9e, 0x7e, 0x57, 0x6e, 0xec,
|
0x65, 0x72, 0x20, 0x30, 0x30, 0x31, 0xf0, 0xee, 0xc2, 0x4a, 0x80, 0x68, 0xbe, 0xe8, 0x2e, 0x00, 0xd0, 0xd1, 0x02, 0x9e, 0x7e, 0x57, 0x6e, 0xec,
|
||||||
0x5d, 0x2d, 0x29, 0x80, 0x6f, 0xab, 0x93, 0xb8, 0xe6, 0x36, 0xcf, 0xeb, 0x31, 0xae}; // 68
|
0x5d, 0x2d, 0x29, 0x80, 0x6f, 0xab, 0x93, 0xb8, 0xe6, 0x36, 0xcf, 0xeb, 0x31, 0xae
|
||||||
|
}; // 68
|
||||||
|
|
||||||
uint8_t genuineFPKey[] = {0x47, 0x65, 0x6e, 0x75, 0x69, 0x6e, 0x65, 0x20, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x46, 0x6c, 0x61, 0x73, 0x68, 0x20,
|
uint8_t genuineFPKey[] = {0x47, 0x65, 0x6e, 0x75, 0x69, 0x6e, 0x65, 0x20, 0x41, 0x64, 0x6f, 0x62, 0x65, 0x20, 0x46, 0x6c, 0x61, 0x73, 0x68, 0x20,
|
||||||
0x50, 0x6c, 0x61,
|
0x50, 0x6c, 0x61,
|
||||||
0x79, // Genuine Adobe Flash Player 001
|
0x79, // Genuine Adobe Flash Player 001
|
||||||
0x65, 0x72, 0x20, 0x30, 0x30, 0x31, 0xf0, 0xee, 0xc2, 0x4a, 0x80, 0x68, 0xbe, 0xe8, 0x2e, 0x00, 0xd0, 0xd1, 0x02, 0x9e, 0x7e, 0x57, 0x6e, 0xec,
|
0x65, 0x72, 0x20, 0x30, 0x30, 0x31, 0xf0, 0xee, 0xc2, 0x4a, 0x80, 0x68, 0xbe, 0xe8, 0x2e, 0x00, 0xd0, 0xd1, 0x02, 0x9e, 0x7e, 0x57, 0x6e, 0xec,
|
||||||
0x5d, 0x2d, 0x29, 0x80, 0x6f, 0xab, 0x93, 0xb8, 0xe6, 0x36, 0xcf, 0xeb, 0x31, 0xae}; // 62
|
0x5d, 0x2d, 0x29, 0x80, 0x6f, 0xab, 0x93, 0xb8, 0xe6, 0x36, 0xcf, 0xeb, 0x31, 0xae
|
||||||
|
}; // 62
|
||||||
|
|
||||||
inline uint32_t GetDigestOffset(uint8_t * pBuffer, uint8_t scheme) {
|
inline uint32_t GetDigestOffset(uint8_t * pBuffer, uint8_t scheme) {
|
||||||
if (scheme == 0) {
|
if (scheme == 0) {
|
||||||
|
|
|
@ -438,11 +438,15 @@ bool Socket::Connection::peek(){
|
||||||
/// Returns true if new data was received, false otherwise.
|
/// Returns true if new data was received, false otherwise.
|
||||||
bool Socket::Connection::flush() {
|
bool Socket::Connection::flush() {
|
||||||
bool bing = isBlocking();
|
bool bing = isBlocking();
|
||||||
if (!bing){setBlocking(true);}
|
if (!bing) {
|
||||||
|
setBlocking(true);
|
||||||
|
}
|
||||||
while (upbuffer.size() > 0 && connected()) {
|
while (upbuffer.size() > 0 && connected()) {
|
||||||
iwrite(upbuffer.get());
|
iwrite(upbuffer.get());
|
||||||
}
|
}
|
||||||
if (!bing){setBlocking(false);}
|
if (!bing) {
|
||||||
|
setBlocking(false);
|
||||||
|
}
|
||||||
/// \todo Provide better mechanism to prevent overbuffering.
|
/// \todo Provide better mechanism to prevent overbuffering.
|
||||||
if (downbuffer.size() > 1000) {
|
if (downbuffer.size() > 1000) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -461,7 +465,9 @@ Socket::Buffer & Socket::Connection::Received(){
|
||||||
/// Any data that could not be send will block until it can be send or the connection is severed.
|
/// Any data that could not be send will block until it can be send or the connection is severed.
|
||||||
void Socket::Connection::SendNow(const char * data, size_t len) {
|
void Socket::Connection::SendNow(const char * data, size_t len) {
|
||||||
bool bing = isBlocking();
|
bool bing = isBlocking();
|
||||||
if (!bing){setBlocking(true);}
|
if (!bing) {
|
||||||
|
setBlocking(true);
|
||||||
|
}
|
||||||
while (upbuffer.size() > 0 && connected()) {
|
while (upbuffer.size() > 0 && connected()) {
|
||||||
iwrite(upbuffer.get());
|
iwrite(upbuffer.get());
|
||||||
}
|
}
|
||||||
|
@ -469,7 +475,9 @@ void Socket::Connection::SendNow(const char * data, size_t len){
|
||||||
while (i < len && connected()) {
|
while (i < len && connected()) {
|
||||||
i += iwrite(data + i, std::min((long unsigned int)(len - i), 51200ul));
|
i += iwrite(data + i, std::min((long unsigned int)(len - i), 51200ul));
|
||||||
}
|
}
|
||||||
if (!bing){setBlocking(false);}
|
if (!bing) {
|
||||||
|
setBlocking(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Appends data to the upbuffer.
|
/// Appends data to the upbuffer.
|
||||||
|
@ -1111,7 +1119,9 @@ void Socket::UDPConnection::SendNow(const char* sdata){
|
||||||
/// Does not do anything if len < 1.
|
/// Does not do anything if len < 1.
|
||||||
/// Prints an DLVL_FAIL level debug message if sending failed.
|
/// Prints an DLVL_FAIL level debug message if sending failed.
|
||||||
void Socket::UDPConnection::SendNow(const char * sdata, size_t len) {
|
void Socket::UDPConnection::SendNow(const char * sdata, size_t len) {
|
||||||
if (len < 1){return;}
|
if (len < 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
int r = sendto(sock, sdata, len, 0, (sockaddr *)destAddr, destAddr_size);
|
int r = sendto(sock, sdata, len, 0, (sockaddr *)destAddr, destAddr_size);
|
||||||
if (r > 0) {
|
if (r > 0) {
|
||||||
up += r;
|
up += r;
|
||||||
|
@ -1130,16 +1140,24 @@ int Socket::UDPConnection::bind(int port){
|
||||||
struct sockaddr_in6 s6;
|
struct sockaddr_in6 s6;
|
||||||
s6.sin6_family = AF_INET6;
|
s6.sin6_family = AF_INET6;
|
||||||
s6.sin6_addr = in6addr_any;
|
s6.sin6_addr = in6addr_any;
|
||||||
if (port){s6.sin6_port = htons(port);}
|
if (port) {
|
||||||
|
s6.sin6_port = htons(port);
|
||||||
|
}
|
||||||
int r = ::bind(sock, (sockaddr *)&s6, sizeof(s6));
|
int r = ::bind(sock, (sockaddr *)&s6, sizeof(s6));
|
||||||
if (r == 0){return ntohs(s6.sin6_port);}
|
if (r == 0) {
|
||||||
|
return ntohs(s6.sin6_port);
|
||||||
|
}
|
||||||
|
|
||||||
struct sockaddr_in s4;
|
struct sockaddr_in s4;
|
||||||
s4.sin_family = AF_INET;
|
s4.sin_family = AF_INET;
|
||||||
s4.sin_addr.s_addr = INADDR_ANY;
|
s4.sin_addr.s_addr = INADDR_ANY;
|
||||||
if (port){s4.sin_port = htons(port);}
|
if (port) {
|
||||||
|
s4.sin_port = htons(port);
|
||||||
|
}
|
||||||
r = ::bind(sock, (sockaddr *)&s4, sizeof(s4));
|
r = ::bind(sock, (sockaddr *)&s4, sizeof(s4));
|
||||||
if (r == 0){return ntohs(s4.sin_port);}
|
if (r == 0) {
|
||||||
|
return ntohs(s4.sin_port);
|
||||||
|
}
|
||||||
|
|
||||||
DEBUG_MSG(DLVL_FAIL, "Could not bind UDP socket to port %d", port);
|
DEBUG_MSG(DLVL_FAIL, "Could not bind UDP socket to port %d", port);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
144
lib/theora.cpp
144
lib/theora.cpp
|
@ -60,18 +60,42 @@ namespace theora{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool header::validateIdentificationHeader() {
|
bool header::validateIdentificationHeader() {
|
||||||
if (datasize != 42){return false;}
|
if (datasize != 42) {
|
||||||
if (getHeaderType() != 0){return false;}
|
return false;
|
||||||
if (getVMAJ() != 3){return false;}
|
}
|
||||||
if (getVMIN() != 2){return false;}
|
if (getHeaderType() != 0) {
|
||||||
if (getFMBW() == 0){return false;}
|
return false;
|
||||||
if (getFMBH() == 0){return false;}
|
}
|
||||||
if ((short)getPICW() > getFMBW() * 16){return false;}
|
if (getVMAJ() != 3) {
|
||||||
if ((short)getPICH() > getFMBH() * 16){return false;}
|
return false;
|
||||||
if ((short)getPICX() > (getFMBW() * 16) - (short)getPICW()){return false;}
|
}
|
||||||
if ((short)getPICY() > (getFMBH() * 16) - (short)getPICH()){return false;}
|
if (getVMIN() != 2) {
|
||||||
if (getFRN() == 0){return false;}
|
return false;
|
||||||
if (getFRD() == 0){return false;}
|
}
|
||||||
|
if (getFMBW() == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (getFMBH() == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ((short)getPICW() > getFMBW() * 16) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ((short)getPICH() > getFMBH() * 16) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ((short)getPICX() > (getFMBW() * 16) - (short)getPICW()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ((short)getPICY() > (getFMBH() * 16) - (short)getPICH()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (getFRN() == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (getFRD() == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,115 +133,161 @@ namespace theora{
|
||||||
}
|
}
|
||||||
|
|
||||||
char header::getVMAJ() {
|
char header::getVMAJ() {
|
||||||
if (getHeaderType() == 0){return data[7];}
|
if (getHeaderType() == 0) {
|
||||||
|
return data[7];
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char header::getVMIN() {
|
char header::getVMIN() {
|
||||||
if (getHeaderType() == 0){return data[8];}
|
if (getHeaderType() == 0) {
|
||||||
|
return data[8];
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char header::getVREV() {
|
char header::getVREV() {
|
||||||
if (getHeaderType() == 0){return data[9];}
|
if (getHeaderType() == 0) {
|
||||||
|
return data[9];
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
short header::getFMBW() {
|
short header::getFMBW() {
|
||||||
if (getHeaderType() == 0){return getInt16(10);}
|
if (getHeaderType() == 0) {
|
||||||
|
return getInt16(10);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
short header::getFMBH() {
|
short header::getFMBH() {
|
||||||
if (getHeaderType() == 0){return getInt16(12);}
|
if (getHeaderType() == 0) {
|
||||||
|
return getInt16(12);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char header::getPICX() {
|
char header::getPICX() {
|
||||||
if (getHeaderType() == 0){return data[20];}
|
if (getHeaderType() == 0) {
|
||||||
|
return data[20];
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char header::getPICY() {
|
char header::getPICY() {
|
||||||
if (getHeaderType() == 0){return data[21];}
|
if (getHeaderType() == 0) {
|
||||||
|
return data[21];
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char header::getKFGShift() {
|
char header::getKFGShift() {
|
||||||
if (getHeaderType() == 0){return (getInt16(40) >> 5) & 0x1F;}
|
if (getHeaderType() == 0) {
|
||||||
|
return (getInt16(40) >> 5) & 0x1F;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
long unsigned int header::getFRN() {
|
long unsigned int header::getFRN() {
|
||||||
if (getHeaderType() == 0){return getInt32(22);}
|
if (getHeaderType() == 0) {
|
||||||
|
return getInt32(22);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
long unsigned int header::getPICH() {
|
long unsigned int header::getPICH() {
|
||||||
if (getHeaderType() == 0){return getInt24(17);}
|
if (getHeaderType() == 0) {
|
||||||
|
return getInt24(17);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
long unsigned int header::getPICW() {
|
long unsigned int header::getPICW() {
|
||||||
if (getHeaderType() == 0){return getInt24(14);}
|
if (getHeaderType() == 0) {
|
||||||
|
return getInt24(14);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
long unsigned int header::getFRD() {
|
long unsigned int header::getFRD() {
|
||||||
if (getHeaderType() == 0){return getInt32(26);}
|
if (getHeaderType() == 0) {
|
||||||
|
return getInt32(26);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
long unsigned int header::getPARN() {
|
long unsigned int header::getPARN() {
|
||||||
if (getHeaderType() == 0){return getInt24(30);}
|
if (getHeaderType() == 0) {
|
||||||
|
return getInt24(30);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
long unsigned int header::getPARD() {
|
long unsigned int header::getPARD() {
|
||||||
if (getHeaderType() == 0){return getInt24(33);}
|
if (getHeaderType() == 0) {
|
||||||
|
return getInt24(33);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char header::getCS() {
|
char header::getCS() {
|
||||||
if (getHeaderType() == 0){return data[36];}
|
if (getHeaderType() == 0) {
|
||||||
|
return data[36];
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
long unsigned int header::getNOMBR() {
|
long unsigned int header::getNOMBR() {
|
||||||
if (getHeaderType() == 0){return getInt24(37);}
|
if (getHeaderType() == 0) {
|
||||||
|
return getInt24(37);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char header::getQUAL() {
|
char header::getQUAL() {
|
||||||
if (getHeaderType() == 0){return (data[40] >> 3) & 0x1F;}
|
if (getHeaderType() == 0) {
|
||||||
|
return (data[40] >> 3) & 0x1F;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
char header::getPF() {
|
char header::getPF() {
|
||||||
if (getHeaderType() == 0){return (data[41] >> 3) & 0x03;}
|
if (getHeaderType() == 0) {
|
||||||
|
return (data[41] >> 3) & 0x03;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string header::getVendor() {
|
std::string header::getVendor() {
|
||||||
if (getHeaderType() != 1){return "";}
|
if (getHeaderType() != 1) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
return std::string(data + 11, commentLen(7));
|
return std::string(data + 11, commentLen(7));
|
||||||
}
|
}
|
||||||
|
|
||||||
long unsigned int header::getNComments() {
|
long unsigned int header::getNComments() {
|
||||||
if (getHeaderType() != 1){return 0;}
|
if (getHeaderType() != 1) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
int offset = 11 + commentLen(7);
|
int offset = 11 + commentLen(7);
|
||||||
return commentLen(offset);
|
return commentLen(offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
char header::getLFLIMS(size_t index) {
|
char header::getLFLIMS(size_t index) {
|
||||||
if (getHeaderType() != 2){return 0;}
|
if (getHeaderType() != 2) {
|
||||||
if (index >= 64){return 0;}
|
return 0;
|
||||||
|
}
|
||||||
|
if (index >= 64) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
char NBITS = (data[0] >> 5) & 0x07;
|
char NBITS = (data[0] >> 5) & 0x07;
|
||||||
return NBITS;
|
return NBITS;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string header::getUserComment(size_t index) {
|
std::string header::getUserComment(size_t index) {
|
||||||
if (index >= getNComments()){return "";}
|
if (index >= getNComments()) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
int offset = 11 + commentLen(7) + 4;
|
int offset = 11 + commentLen(7) + 4;
|
||||||
for (size_t i = 0; i < index; i++) {
|
for (size_t i = 0; i < index; i++) {
|
||||||
offset += 4 + commentLen(offset);
|
offset += 4 + commentLen(offset);
|
||||||
|
@ -306,7 +376,9 @@ namespace theora{
|
||||||
}
|
}
|
||||||
|
|
||||||
char frame::getQIS(size_t index) {
|
char frame::getQIS(size_t index) {
|
||||||
if (index >= 3){return 0;}
|
if (index >= 3) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,8 +54,7 @@ namespace tthread {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
condition_variable::condition_variable() : mWaitersCount(0)
|
condition_variable::condition_variable() : mWaitersCount(0) {
|
||||||
{
|
|
||||||
mEvents[_CONDITION_EVENT_ONE] = CreateEvent(NULL, FALSE, FALSE, NULL);
|
mEvents[_CONDITION_EVENT_ONE] = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||||
mEvents[_CONDITION_EVENT_ALL] = CreateEvent(NULL, TRUE, FALSE, NULL);
|
mEvents[_CONDITION_EVENT_ALL] = CreateEvent(NULL, TRUE, FALSE, NULL);
|
||||||
InitializeCriticalSection(&mWaitersCountLock);
|
InitializeCriticalSection(&mWaitersCountLock);
|
||||||
|
@ -63,8 +62,7 @@ condition_variable::condition_variable() : mWaitersCount(0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
condition_variable::~condition_variable()
|
condition_variable::~condition_variable() {
|
||||||
{
|
|
||||||
CloseHandle(mEvents[_CONDITION_EVENT_ONE]);
|
CloseHandle(mEvents[_CONDITION_EVENT_ONE]);
|
||||||
CloseHandle(mEvents[_CONDITION_EVENT_ALL]);
|
CloseHandle(mEvents[_CONDITION_EVENT_ALL]);
|
||||||
DeleteCriticalSection(&mWaitersCountLock);
|
DeleteCriticalSection(&mWaitersCountLock);
|
||||||
|
@ -72,8 +70,7 @@ condition_variable::~condition_variable()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
void condition_variable::_wait()
|
void condition_variable::_wait() {
|
||||||
{
|
|
||||||
// Wait for either event to become signaled due to notify_one() or
|
// Wait for either event to become signaled due to notify_one() or
|
||||||
// notify_all() being called
|
// notify_all() being called
|
||||||
int result = WaitForMultipleObjects(2, mEvents, FALSE, INFINITE);
|
int result = WaitForMultipleObjects(2, mEvents, FALSE, INFINITE);
|
||||||
|
@ -92,8 +89,7 @@ void condition_variable::_wait()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
void condition_variable::notify_one()
|
void condition_variable::notify_one() {
|
||||||
{
|
|
||||||
// Are there any waiters?
|
// Are there any waiters?
|
||||||
EnterCriticalSection(&mWaitersCountLock);
|
EnterCriticalSection(&mWaitersCountLock);
|
||||||
bool haveWaiters = (mWaitersCount > 0);
|
bool haveWaiters = (mWaitersCount > 0);
|
||||||
|
@ -106,8 +102,7 @@ void condition_variable::notify_one()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
void condition_variable::notify_all()
|
void condition_variable::notify_all() {
|
||||||
{
|
|
||||||
// Are there any waiters?
|
// Are there any waiters?
|
||||||
EnterCriticalSection(&mWaitersCountLock);
|
EnterCriticalSection(&mWaitersCountLock);
|
||||||
bool haveWaiters = (mWaitersCount > 0);
|
bool haveWaiters = (mWaitersCount > 0);
|
||||||
|
@ -128,8 +123,7 @@ void condition_variable::notify_all()
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
#if defined(_TTHREAD_POSIX_)
|
#if defined(_TTHREAD_POSIX_)
|
||||||
static thread::id _pthread_t_to_ID(const pthread_t &aHandle)
|
static thread::id _pthread_t_to_ID(const pthread_t & aHandle) {
|
||||||
{
|
|
||||||
static mutex idMapLock;
|
static mutex idMapLock;
|
||||||
static std::map<pthread_t, unsigned long int> idMap;
|
static std::map<pthread_t, unsigned long int> idMap;
|
||||||
static unsigned long int idCount(1);
|
static unsigned long int idCount(1);
|
||||||
|
@ -163,13 +157,10 @@ void * thread::wrapper_function(void * aArg)
|
||||||
// Get thread startup information
|
// Get thread startup information
|
||||||
_thread_start_info * ti = (_thread_start_info *) aArg;
|
_thread_start_info * ti = (_thread_start_info *) aArg;
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
// Call the actual client thread function
|
// Call the actual client thread function
|
||||||
ti->mFunction(ti->mArg);
|
ti->mFunction(ti->mArg);
|
||||||
}
|
} catch (...) {
|
||||||
catch(...)
|
|
||||||
{
|
|
||||||
// Uncaught exceptions will terminate the application (default behavior
|
// Uncaught exceptions will terminate the application (default behavior
|
||||||
// according to C++11)
|
// according to C++11)
|
||||||
std::terminate();
|
std::terminate();
|
||||||
|
@ -188,8 +179,7 @@ void * thread::wrapper_function(void * aArg)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
thread::thread(void (*aFunction)(void *), void * aArg)
|
thread::thread(void (*aFunction)(void *), void * aArg) {
|
||||||
{
|
|
||||||
// Serialize access to this thread structure
|
// Serialize access to this thread structure
|
||||||
lock_guard<mutex> guard(mDataMutex);
|
lock_guard<mutex> guard(mDataMutex);
|
||||||
|
|
||||||
|
@ -213,16 +203,14 @@ thread::thread(void (*aFunction)(void *), void * aArg)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Did we fail to create the thread?
|
// Did we fail to create the thread?
|
||||||
if(!mHandle)
|
if (!mHandle) {
|
||||||
{
|
|
||||||
mNotAThread = true;
|
mNotAThread = true;
|
||||||
ti_copy = 0;
|
ti_copy = 0;
|
||||||
delete ti;
|
delete ti;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
thread::~thread()
|
thread::~thread() {
|
||||||
{
|
|
||||||
if (ti_copy) {
|
if (ti_copy) {
|
||||||
((_thread_start_info *)ti_copy)->mThread = 0;
|
((_thread_start_info *)ti_copy)->mThread = 0;
|
||||||
}
|
}
|
||||||
|
@ -230,10 +218,8 @@ thread::~thread()
|
||||||
std::terminate();
|
std::terminate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void thread::join()
|
void thread::join() {
|
||||||
{
|
if (joinable()) {
|
||||||
if(joinable())
|
|
||||||
{
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
WaitForSingleObject(mHandle, INFINITE);
|
WaitForSingleObject(mHandle, INFINITE);
|
||||||
CloseHandle(mHandle);
|
CloseHandle(mHandle);
|
||||||
|
@ -243,19 +229,16 @@ void thread::join()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool thread::joinable() const
|
bool thread::joinable() const {
|
||||||
{
|
|
||||||
mDataMutex.lock();
|
mDataMutex.lock();
|
||||||
bool result = !mNotAThread;
|
bool result = !mNotAThread;
|
||||||
mDataMutex.unlock();
|
mDataMutex.unlock();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void thread::detach()
|
void thread::detach() {
|
||||||
{
|
|
||||||
mDataMutex.lock();
|
mDataMutex.lock();
|
||||||
if(!mNotAThread)
|
if (!mNotAThread) {
|
||||||
{
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
CloseHandle(mHandle);
|
CloseHandle(mHandle);
|
||||||
#elif defined(_TTHREAD_POSIX_)
|
#elif defined(_TTHREAD_POSIX_)
|
||||||
|
@ -266,8 +249,7 @@ void thread::detach()
|
||||||
mDataMutex.unlock();
|
mDataMutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
thread::id thread::get_id() const
|
thread::id thread::get_id() const {
|
||||||
{
|
|
||||||
if (!joinable())
|
if (!joinable())
|
||||||
return id();
|
return id();
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
|
@ -277,8 +259,7 @@ thread::id thread::get_id() const
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned thread::hardware_concurrency()
|
unsigned thread::hardware_concurrency() {
|
||||||
{
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
SYSTEM_INFO si;
|
SYSTEM_INFO si;
|
||||||
GetSystemInfo(&si);
|
GetSystemInfo(&si);
|
||||||
|
@ -299,8 +280,7 @@ unsigned thread::hardware_concurrency()
|
||||||
// this_thread
|
// this_thread
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
thread::id this_thread::get_id()
|
thread::id this_thread::get_id() {
|
||||||
{
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
return thread::id((unsigned long int) GetCurrentThreadId());
|
return thread::id((unsigned long int) GetCurrentThreadId());
|
||||||
#elif defined(_TTHREAD_POSIX_)
|
#elif defined(_TTHREAD_POSIX_)
|
||||||
|
|
|
@ -172,8 +172,7 @@ class mutex {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Destructor.
|
/// Destructor.
|
||||||
~mutex()
|
~mutex() {
|
||||||
{
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
DeleteCriticalSection(&mHandle);
|
DeleteCriticalSection(&mHandle);
|
||||||
#else
|
#else
|
||||||
|
@ -185,8 +184,7 @@ class mutex {
|
||||||
/// The method will block the calling thread until a lock on the mutex can
|
/// The method will block the calling thread until a lock on the mutex can
|
||||||
/// be obtained. The mutex remains locked until @c unlock() is called.
|
/// be obtained. The mutex remains locked until @c unlock() is called.
|
||||||
/// @see lock_guard
|
/// @see lock_guard
|
||||||
inline void lock()
|
inline void lock() {
|
||||||
{
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
EnterCriticalSection(&mHandle);
|
EnterCriticalSection(&mHandle);
|
||||||
while (mAlreadyLocked) Sleep(1000); // Simulate deadlock...
|
while (mAlreadyLocked) Sleep(1000); // Simulate deadlock...
|
||||||
|
@ -201,12 +199,10 @@ class mutex {
|
||||||
/// return immediately (non-blocking).
|
/// return immediately (non-blocking).
|
||||||
/// @return @c true if the lock was acquired, or @c false if the lock could
|
/// @return @c true if the lock was acquired, or @c false if the lock could
|
||||||
/// not be acquired.
|
/// not be acquired.
|
||||||
inline bool try_lock()
|
inline bool try_lock() {
|
||||||
{
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
bool ret = (TryEnterCriticalSection(&mHandle) ? true : false);
|
bool ret = (TryEnterCriticalSection(&mHandle) ? true : false);
|
||||||
if(ret && mAlreadyLocked)
|
if (ret && mAlreadyLocked) {
|
||||||
{
|
|
||||||
LeaveCriticalSection(&mHandle);
|
LeaveCriticalSection(&mHandle);
|
||||||
ret = false;
|
ret = false;
|
||||||
}
|
}
|
||||||
|
@ -219,8 +215,7 @@ class mutex {
|
||||||
/// Unlock the mutex.
|
/// Unlock the mutex.
|
||||||
/// If any threads are waiting for the lock on this mutex, one of them will
|
/// If any threads are waiting for the lock on this mutex, one of them will
|
||||||
/// be unblocked.
|
/// be unblocked.
|
||||||
inline void unlock()
|
inline void unlock() {
|
||||||
{
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
mAlreadyLocked = false;
|
mAlreadyLocked = false;
|
||||||
LeaveCriticalSection(&mHandle);
|
LeaveCriticalSection(&mHandle);
|
||||||
|
@ -251,8 +246,7 @@ class mutex {
|
||||||
class recursive_mutex {
|
class recursive_mutex {
|
||||||
public:
|
public:
|
||||||
/// Constructor.
|
/// Constructor.
|
||||||
recursive_mutex()
|
recursive_mutex() {
|
||||||
{
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
InitializeCriticalSection(&mHandle);
|
InitializeCriticalSection(&mHandle);
|
||||||
#else
|
#else
|
||||||
|
@ -264,8 +258,7 @@ class recursive_mutex {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Destructor.
|
/// Destructor.
|
||||||
~recursive_mutex()
|
~recursive_mutex() {
|
||||||
{
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
DeleteCriticalSection(&mHandle);
|
DeleteCriticalSection(&mHandle);
|
||||||
#else
|
#else
|
||||||
|
@ -277,8 +270,7 @@ class recursive_mutex {
|
||||||
/// The method will block the calling thread until a lock on the mutex can
|
/// The method will block the calling thread until a lock on the mutex can
|
||||||
/// be obtained. The mutex remains locked until @c unlock() is called.
|
/// be obtained. The mutex remains locked until @c unlock() is called.
|
||||||
/// @see lock_guard
|
/// @see lock_guard
|
||||||
inline void lock()
|
inline void lock() {
|
||||||
{
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
EnterCriticalSection(&mHandle);
|
EnterCriticalSection(&mHandle);
|
||||||
#else
|
#else
|
||||||
|
@ -291,8 +283,7 @@ class recursive_mutex {
|
||||||
/// return immediately (non-blocking).
|
/// return immediately (non-blocking).
|
||||||
/// @return @c true if the lock was acquired, or @c false if the lock could
|
/// @return @c true if the lock was acquired, or @c false if the lock could
|
||||||
/// not be acquired.
|
/// not be acquired.
|
||||||
inline bool try_lock()
|
inline bool try_lock() {
|
||||||
{
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
return TryEnterCriticalSection(&mHandle) ? true : false;
|
return TryEnterCriticalSection(&mHandle) ? true : false;
|
||||||
#else
|
#else
|
||||||
|
@ -303,8 +294,7 @@ class recursive_mutex {
|
||||||
/// Unlock the mutex.
|
/// Unlock the mutex.
|
||||||
/// If any threads are waiting for the lock on this mutex, one of them will
|
/// If any threads are waiting for the lock on this mutex, one of them will
|
||||||
/// be unblocked.
|
/// be unblocked.
|
||||||
inline void unlock()
|
inline void unlock() {
|
||||||
{
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
LeaveCriticalSection(&mHandle);
|
LeaveCriticalSection(&mHandle);
|
||||||
#else
|
#else
|
||||||
|
@ -347,15 +337,13 @@ class lock_guard {
|
||||||
lock_guard() : mMutex(0) {}
|
lock_guard() : mMutex(0) {}
|
||||||
|
|
||||||
/// The constructor locks the mutex.
|
/// The constructor locks the mutex.
|
||||||
explicit lock_guard(mutex_type &aMutex)
|
explicit lock_guard(mutex_type & aMutex) {
|
||||||
{
|
|
||||||
mMutex = &aMutex;
|
mMutex = &aMutex;
|
||||||
mMutex->lock();
|
mMutex->lock();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The destructor unlocks the mutex.
|
/// The destructor unlocks the mutex.
|
||||||
~lock_guard()
|
~lock_guard() {
|
||||||
{
|
|
||||||
if (mMutex)
|
if (mMutex)
|
||||||
mMutex->unlock();
|
mMutex->unlock();
|
||||||
}
|
}
|
||||||
|
@ -395,8 +383,7 @@ class condition_variable {
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
condition_variable();
|
condition_variable();
|
||||||
#else
|
#else
|
||||||
condition_variable()
|
condition_variable() {
|
||||||
{
|
|
||||||
pthread_cond_init(&mHandle, NULL);
|
pthread_cond_init(&mHandle, NULL);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -405,8 +392,7 @@ class condition_variable {
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
~condition_variable();
|
~condition_variable();
|
||||||
#else
|
#else
|
||||||
~condition_variable()
|
~condition_variable() {
|
||||||
{
|
|
||||||
pthread_cond_destroy(&mHandle);
|
pthread_cond_destroy(&mHandle);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -417,8 +403,7 @@ class condition_variable {
|
||||||
/// @param[in] aMutex A mutex that will be unlocked when the wait operation
|
/// @param[in] aMutex A mutex that will be unlocked when the wait operation
|
||||||
/// starts, an locked again as soon as the wait operation is finished.
|
/// starts, an locked again as soon as the wait operation is finished.
|
||||||
template <class _mutexT>
|
template <class _mutexT>
|
||||||
inline void wait(_mutexT &aMutex)
|
inline void wait(_mutexT & aMutex) {
|
||||||
{
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
// Increment number of waiters
|
// Increment number of waiters
|
||||||
EnterCriticalSection(&mWaitersCountLock);
|
EnterCriticalSection(&mWaitersCountLock);
|
||||||
|
@ -443,8 +428,7 @@ class condition_variable {
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
void notify_one();
|
void notify_one();
|
||||||
#else
|
#else
|
||||||
inline void notify_one()
|
inline void notify_one() {
|
||||||
{
|
|
||||||
pthread_cond_signal(&mHandle);
|
pthread_cond_signal(&mHandle);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -457,8 +441,7 @@ class condition_variable {
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
void notify_all();
|
void notify_all();
|
||||||
#else
|
#else
|
||||||
inline void notify_all()
|
inline void notify_all() {
|
||||||
{
|
|
||||||
pthread_cond_broadcast(&mHandle);
|
pthread_cond_broadcast(&mHandle);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -536,8 +519,7 @@ class thread {
|
||||||
/// Get the native handle for this thread.
|
/// Get the native handle for this thread.
|
||||||
/// @note Under Windows, this is a @c HANDLE, and under POSIX systems, this
|
/// @note Under Windows, this is a @c HANDLE, and under POSIX systems, this
|
||||||
/// is a @c pthread_t.
|
/// is a @c pthread_t.
|
||||||
inline native_handle_type native_handle()
|
inline native_handle_type native_handle() {
|
||||||
{
|
|
||||||
return mHandle;
|
return mHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -581,44 +563,36 @@ class thread::id {
|
||||||
|
|
||||||
id(const id & aId) : mId(aId.mId) {};
|
id(const id & aId) : mId(aId.mId) {};
|
||||||
|
|
||||||
inline id & operator=(const id &aId)
|
inline id & operator=(const id & aId) {
|
||||||
{
|
|
||||||
mId = aId.mId;
|
mId = aId.mId;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline friend bool operator==(const id &aId1, const id &aId2)
|
inline friend bool operator==(const id & aId1, const id & aId2) {
|
||||||
{
|
|
||||||
return (aId1.mId == aId2.mId);
|
return (aId1.mId == aId2.mId);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline friend bool operator!=(const id &aId1, const id &aId2)
|
inline friend bool operator!=(const id & aId1, const id & aId2) {
|
||||||
{
|
|
||||||
return (aId1.mId != aId2.mId);
|
return (aId1.mId != aId2.mId);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline friend bool operator<=(const id &aId1, const id &aId2)
|
inline friend bool operator<=(const id & aId1, const id & aId2) {
|
||||||
{
|
|
||||||
return (aId1.mId <= aId2.mId);
|
return (aId1.mId <= aId2.mId);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline friend bool operator<(const id &aId1, const id &aId2)
|
inline friend bool operator<(const id & aId1, const id & aId2) {
|
||||||
{
|
|
||||||
return (aId1.mId < aId2.mId);
|
return (aId1.mId < aId2.mId);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline friend bool operator>=(const id &aId1, const id &aId2)
|
inline friend bool operator>=(const id & aId1, const id & aId2) {
|
||||||
{
|
|
||||||
return (aId1.mId >= aId2.mId);
|
return (aId1.mId >= aId2.mId);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline friend bool operator>(const id &aId1, const id &aId2)
|
inline friend bool operator>(const id & aId1, const id & aId2) {
|
||||||
{
|
|
||||||
return (aId1.mId > aId2.mId);
|
return (aId1.mId > aId2.mId);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline friend std::ostream& operator <<(std::ostream &os, const id &obj)
|
inline friend std::ostream & operator <<(std::ostream & os, const id & obj) {
|
||||||
{
|
|
||||||
os << obj.mId;
|
os << obj.mId;
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
|
@ -635,7 +609,9 @@ typedef long long __intmax_t;
|
||||||
/// functionality to implement some basic @c chrono classes.
|
/// functionality to implement some basic @c chrono classes.
|
||||||
template <__intmax_t N, __intmax_t D = 1> class ratio {
|
template <__intmax_t N, __intmax_t D = 1> class ratio {
|
||||||
public:
|
public:
|
||||||
static double _as_double() { return double(N) / double(D); }
|
static double _as_double() {
|
||||||
|
return double(N) / double(D);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Minimal implementation of the @c chrono namespace.
|
/// Minimal implementation of the @c chrono namespace.
|
||||||
|
@ -655,8 +631,7 @@ namespace chrono {
|
||||||
explicit duration(const _Rep2 & r) : rep_(r) {};
|
explicit duration(const _Rep2 & r) : rep_(r) {};
|
||||||
|
|
||||||
/// Return the value of the duration object.
|
/// Return the value of the duration object.
|
||||||
rep count() const
|
rep count() const {
|
||||||
{
|
|
||||||
return rep_;
|
return rep_;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -679,8 +654,7 @@ namespace this_thread {
|
||||||
/// Yield execution to another thread.
|
/// Yield execution to another thread.
|
||||||
/// Offers the operating system the opportunity to schedule another thread
|
/// Offers the operating system the opportunity to schedule another thread
|
||||||
/// that is ready to run on the current processor.
|
/// that is ready to run on the current processor.
|
||||||
inline void yield()
|
inline void yield() {
|
||||||
{
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
Sleep(0);
|
Sleep(0);
|
||||||
#else
|
#else
|
||||||
|
@ -697,8 +671,7 @@ namespace this_thread {
|
||||||
/// @endcode
|
/// @endcode
|
||||||
/// @note Supported duration types are: nanoseconds, microseconds,
|
/// @note Supported duration types are: nanoseconds, microseconds,
|
||||||
/// milliseconds, seconds, minutes and hours.
|
/// milliseconds, seconds, minutes and hours.
|
||||||
template <class _Rep, class _Period> void sleep_for(const chrono::duration<_Rep, _Period>& aTime)
|
template <class _Rep, class _Period> void sleep_for(const chrono::duration<_Rep, _Period> & aTime) {
|
||||||
{
|
|
||||||
#if defined(_TTHREAD_WIN32_)
|
#if defined(_TTHREAD_WIN32_)
|
||||||
Sleep(int(double(aTime.count()) * (1000.0 * _Period::_as_double()) + 0.5));
|
Sleep(int(double(aTime.count()) * (1000.0 * _Period::_as_double()) + 0.5));
|
||||||
#else
|
#else
|
||||||
|
|
0
lib/ts_packet.cpp
Executable file → Normal file
0
lib/ts_packet.cpp
Executable file → Normal file
6
lib/ts_packet.h
Executable file → Normal file
6
lib/ts_packet.h
Executable file → Normal file
|
@ -168,7 +168,8 @@ namespace TS {
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
|
||||||
|
};
|
||||||
|
|
||||||
/// A standard Program Mapping Table, as generated by FFMPEG.
|
/// A standard Program Mapping Table, as generated by FFMPEG.
|
||||||
/// Contains both Audio and Video mappings, works also on video- or audio-only streams.
|
/// Contains both Audio and Video mappings, works also on video- or audio-only streams.
|
||||||
|
@ -198,7 +199,8 @@ namespace TS {
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
|
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
|
||||||
|
};
|
||||||
|
|
||||||
} //TS namespace
|
} //TS namespace
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue