From 8e3d6363819f239cb709c8d5f752d82cb238f7b8 Mon Sep 17 00:00:00 2001 From: Thulinma Date: Sun, 11 May 2014 14:37:35 +0200 Subject: [PATCH] Memory optimizations and supporting code for libmist changes. --- src/input/input.cpp | 5 ++++- src/output/output.cpp | 8 ++++---- src/output/output_hls.cpp | 2 +- src/output/output_hss.cpp | 2 +- src/output/output_progressive_mp3.cpp | 2 +- src/output/output_progressive_mp4.cpp | 2 +- src/output/output_rtmp.cpp | 2 +- src/output/output_srt.cpp | 2 +- src/output/output_ts.cpp | 2 +- 9 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/input/input.cpp b/src/input/input.cpp index 5adcc1cc..59578ad9 100644 --- a/src/input/input.cpp +++ b/src/input/input.cpp @@ -187,7 +187,6 @@ namespace Mist { std::stringstream trackSpec; for (std::map::iterator it = myMeta.tracks.begin(); it != myMeta.tracks.end(); it++) { DEBUG_MSG(DLVL_VERYHIGH, "Track %d encountered", it->first); - //selectedTracks.insert(it->first); if (trackSpec.str() != ""){ trackSpec << " "; } @@ -207,6 +206,10 @@ namespace Mist { while(lastPack){//loop through all int tid = lastPack.getTrackId(); + if (!tid){ + getNext(false); + continue; + } if (!bookKeeping.count(tid)){ bookKeeping[tid].first = 1; bookKeeping[tid].curPart = 0; diff --git a/src/output/output.cpp b/src/output/output.cpp index c7b3a96e..077c6d94 100644 --- a/src/output/output.cpp +++ b/src/output/output.cpp @@ -56,10 +56,10 @@ namespace Mist { void Output::updateMeta(){ //read metadata from page to myMeta variable if (streamIndex.mapped){ - JSON::Value jsonMeta; - unsigned int i = 0; - JSON::fromDTMI((const unsigned char*)streamIndex.mapped + 8, streamIndex.len - 8, i, jsonMeta); - myMeta = DTSC::Meta(jsonMeta); + DTSC::Packet tmpMeta(streamIndex.mapped, streamIndex.len, true); + if (tmpMeta){ + myMeta.reinit(tmpMeta); + } } } diff --git a/src/output/output_hls.cpp b/src/output/output_hls.cpp index b1f3dd22..f230c370 100644 --- a/src/output/output_hls.cpp +++ b/src/output/output_hls.cpp @@ -108,7 +108,7 @@ namespace Mist { bool IsKeyFrame = false; char * dataPointer = 0; - int dataLen = 0; + unsigned int dataLen = 0; currentPacket.getString("data", dataPointer, dataLen); if (currentPacket.getTime() >= until){ diff --git a/src/output/output_hss.cpp b/src/output/output_hss.cpp index 09138588..07174e9e 100644 --- a/src/output/output_hss.cpp +++ b/src/output/output_hss.cpp @@ -79,7 +79,7 @@ namespace Mist { return; } char * dataPointer = 0; - int len = 0; + unsigned int len = 0; currentPacket.getString("data", dataPointer, len); HTTP_S.Chunkify(dataPointer, len, myConn); } diff --git a/src/output/output_progressive_mp3.cpp b/src/output/output_progressive_mp3.cpp index 80d37abf..cd9a42d2 100644 --- a/src/output/output_progressive_mp3.cpp +++ b/src/output/output_progressive_mp3.cpp @@ -25,7 +25,7 @@ namespace Mist { void OutProgressiveMP3::sendNext(){ char * dataPointer = 0; - int len = 0; + unsigned int len = 0; currentPacket.getString("data", dataPointer, len); myConn.SendNow(dataPointer, len); } diff --git a/src/output/output_progressive_mp4.cpp b/src/output/output_progressive_mp4.cpp index 0a03d1f5..900ce264 100644 --- a/src/output/output_progressive_mp4.cpp +++ b/src/output/output_progressive_mp4.cpp @@ -435,7 +435,7 @@ namespace Mist { void OutProgressiveMP4::sendNext(){ static bool perfect = true; char * dataPointer = 0; - int len = 0; + unsigned int len = 0; currentPacket.getString("data", dataPointer, len); if (currentPacket.getTrackId() != sortSet.begin()->trackID || currentPacket.getTime() != sortSet.begin()->time){ if (perfect){ diff --git a/src/output/output_rtmp.cpp b/src/output/output_rtmp.cpp index 5a9ff1ef..96e5d683 100644 --- a/src/output/output_rtmp.cpp +++ b/src/output/output_rtmp.cpp @@ -66,7 +66,7 @@ namespace Mist { char dataheader[] = {0, 0, 0, 0, 0}; unsigned int dheader_len = 1; char * tmpData = 0;//pointer to raw media data - int data_len = 0;//length of processed media data + unsigned int data_len = 0;//length of processed media data currentPacket.getString("data", tmpData, data_len); DTSC::Track & track = myMeta.tracks[currentPacket.getTrackId()]; diff --git a/src/output/output_srt.cpp b/src/output/output_srt.cpp index c6dd23f4..ae5fb1f8 100644 --- a/src/output/output_srt.cpp +++ b/src/output/output_srt.cpp @@ -33,7 +33,7 @@ namespace Mist { void OutProgressiveSRT::sendNext(){ char * dataPointer = 0; - int len = 0; + unsigned int len = 0; currentPacket.getString("data", dataPointer, len); std::stringstream tmp; if(!webVTT) { diff --git a/src/output/output_ts.cpp b/src/output/output_ts.cpp index 8b97afd8..1c37f386 100644 --- a/src/output/output_ts.cpp +++ b/src/output/output_ts.cpp @@ -61,7 +61,7 @@ namespace Mist { bool IsKeyFrame = false; char * dataPointer = 0; - int dataLen = 0; + unsigned int dataLen = 0; currentPacket.getString("data", dataPointer, dataLen); //detect packet type, and put converted data into ToPack.