Some small optimizations, added reference functions to JSON lib, fixed config commandline options.

This commit is contained in:
Thulinma 2013-08-12 13:18:48 +02:00
parent 0c059f0ca3
commit ea71dd2d5c
7 changed files with 38 additions and 10 deletions

View file

@ -348,6 +348,7 @@ void Util::Config::addConnectorOptions(int port, JSON::Value & capabilities){
capabilities["optional"]["port"]["name"] = "TCP port";
capabilities["optional"]["port"]["help"] = "TCP port to listen on - default if unprovided is "+option["value"][0u].asString();
capabilities["optional"]["port"]["type"] = "uint";
capabilities["optional"]["port"]["option"] = "--port";
capabilities["optional"]["port"]["default"] = option["value"][0u];
option.null();
@ -359,6 +360,7 @@ void Util::Config::addConnectorOptions(int port, JSON::Value & capabilities){
addOption("listen_interface", option);
capabilities["optional"]["interface"]["name"] = "Interface";
capabilities["optional"]["interface"]["help"] = "Address of the interface to listen on - default if unprovided is all interfaces";
capabilities["optional"]["interface"]["option"] = "--interface";
capabilities["optional"]["interface"]["type"] = "str";
addBasicConnectorOptions(capabilities);
@ -376,6 +378,7 @@ void Util::Config::addBasicConnectorOptions(JSON::Value & capabilities){
addOption("username", option);
capabilities["optional"]["username"]["name"] = "Username";
capabilities["optional"]["username"]["help"] = "Username to drop privileges to - default if unprovided means do not drop privileges";
capabilities["optional"]["username"]["option"] = "--username";
capabilities["optional"]["username"]["type"] = "str";
option.null();

View file

@ -222,10 +222,10 @@ void DTSC::Stream::addPacket(JSON::Value & newPack){
datapointertype = INVALID;
std::string tmp = "";
if (newPack.isMember("trackid")){
tmp = getTrackById(newPack["trackid"].asInt())["type"].asString();
tmp = getTrackById(newPack["trackid"].asInt())["type"].asStringRef();
}
if (newPack.isMember("datatype")){
tmp = newPack["datatype"].asString();
tmp = newPack["datatype"].asStringRef();
}
if (tmp == "video"){
datapointertype = VIDEO;
@ -300,7 +300,7 @@ void DTSC::Stream::addPacket(JSON::Value & newPack){
}
}
if (keySize){
metadata["tracks"][newTrack]["keys"][keySize - 1]["parts"].append((long long int)newPack["data"].asString().size());
metadata["tracks"][newTrack]["keys"][keySize - 1]["parts"].append((long long int)newPack["data"].asStringRef().size());
}
metadata["live"] = 1ll;
}
@ -468,7 +468,7 @@ DTSC::livePos DTSC::Stream::msSeek(unsigned int ms, std::set<int> & allowedTrack
std::set<int> seekTracks = allowedTracks;
livePos result = buffers.begin()->first;
for (std::set<int>::iterator it = allowedTracks.begin(); it != allowedTracks.end(); it++){
if (getTrackById(*it).isMember("type") && getTrackById(*it)["type"].asString() == "video"){
if (getTrackById(*it).isMember("type") && getTrackById(*it)["type"].asStringRef() == "video"){
int trackNo = *it;
seekTracks.clear();
seekTracks.insert(trackNo);

View file

@ -355,7 +355,7 @@ bool FLV::Tag::DTSCLoader(DTSC::Stream & S){
case DTSC::VIDEO:
len = S.lastData().length() + 16;
if (track && track.isMember("codec")){
if (track["codec"].asString() == "H264"){
if (track["codec"].asStringRef() == "H264"){
len += 4;
}
}
@ -363,7 +363,7 @@ bool FLV::Tag::DTSCLoader(DTSC::Stream & S){
case DTSC::AUDIO:
len = S.lastData().length() + 16;
if (track && track.isMember("codec")){
if (track["codec"].asString() == "AAC"){
if (track["codec"].asStringRef() == "AAC"){
len += 1;
}
}
@ -407,10 +407,10 @@ bool FLV::Tag::DTSCLoader(DTSC::Stream & S){
data[15] = offset & 0xFF;
}
data[11] = 0;
if (track.isMember("codec") && track["codec"].asString() == "H264"){
if (track.isMember("codec") && track["codec"].asStringRef() == "H264"){
data[11] += 7;
}
if (track.isMember("codec") && track["codec"].asString() == "H263"){
if (track.isMember("codec") && track["codec"].asStringRef() == "H263"){
data[11] += 2;
}
if (S.getPacket().isMember("keyframe")){

View file

@ -380,6 +380,29 @@ const bool JSON::Value::asBool(){
return (bool) *this;
}
/// Explicit conversion to std::string reference.
/// Returns a direct reference for string type JSON::Value objects,
/// but a reference to a static empty string otherwise.
/// \warning Only save to use when the JSON::Value is a string type!
const std::string & JSON::Value::asStringRef(){
static std::string ugly_buffer;
if (myType == STRING){
return strVal;
}
return ugly_buffer;
}
/// Explicit conversion to c-string.
/// Returns a direct reference for string type JSON::Value objects,
/// a reference to an empty string otherwise.
/// \warning Only save to use when the JSON::Value is a string type!
const char * JSON::Value::c_str(){
if (myType == STRING){
return strVal.c_str();
}
return "";
}
/// Retrieves or sets the JSON::Value at this position in the object.
/// Converts destructively to object if not already an object.
JSON::Value & JSON::Value::operator[](const std::string i){

View file

@ -64,6 +64,8 @@ namespace JSON {
const std::string asString();
const long long int asInt();
const bool asBool();
const std::string & asStringRef();
const char * c_str();
//array operator for maps and arrays
Value & operator[](const std::string i);
Value & operator[](const char * i);

View file

@ -477,7 +477,7 @@ void Socket::Connection::Send(const char * data){
/// Will not buffer anything but always send right away. Blocks.
/// This will send the upbuffer (if non-empty) first, then the data.
/// Any data that could not be send will block until it can be send or the connection is severed.
void Socket::Connection::SendNow(std::string & data){
void Socket::Connection::SendNow(const std::string & data){
SendNow(data.c_str(), data.size());
}

View file

@ -81,7 +81,7 @@ namespace Socket {
void Send(std::string & data); ///< Appends data to the upbuffer.
void Send(const char * data); ///< Appends data to the upbuffer.
void Send(const char * data, size_t len); ///< Appends data to the upbuffer.
void SendNow(std::string & data); ///< Will not buffer anything but always send right away. Blocks.
void SendNow(const std::string & data); ///< Will not buffer anything but always send right away. Blocks.
void SendNow(const char * data); ///< Will not buffer anything but always send right away. Blocks.
void SendNow(const char * data, size_t len); ///< Will not buffer anything but always send right away. Blocks.
//stats related methods