From 8d4639c8c6fd958e4775456f1962990867b0b204 Mon Sep 17 00:00:00 2001
From: Thulinma <jaron@vietors.com>
Date: Mon, 24 Nov 2014 15:55:50 +0100
Subject: [PATCH] Better method for setting bufferTime.

---
 src/input/input_buffer.cpp | 33 +++++++++++++++++++++++----------
 1 file changed, 23 insertions(+), 10 deletions(-)

diff --git a/src/input/input_buffer.cpp b/src/input/input_buffer.cpp
index 7353fb0e..97164672 100644
--- a/src/input/input_buffer.cpp
+++ b/src/input/input_buffer.cpp
@@ -319,24 +319,37 @@ namespace Mist {
   }
 
   bool inputBuffer::setup() {
-    if (!bufferTime){
-      bufferTime = config->getInteger("bufferTime");
-    }
-    
+    std::string strName = config->getString("streamname");
+    Util::sanitizeName(strName);
+    strName = strName.substr(0,(strName.find('+')));
     IPC::sharedPage serverCfg("!mistConfig", 4*1024*1024); ///< Contains server configuration and capabilities
     IPC::semaphore configLock("!mistConfLock", O_CREAT | O_RDWR, ACCESSPERMS, 1);
     configLock.wait();
-    DTSC::Scan streamCfg = DTSC::Scan(serverCfg.mapped, serverCfg.len).getMember("streams").getMember(config->getString("streamname"));
+    DTSC::Scan streamCfg = DTSC::Scan(serverCfg.mapped, serverCfg.len).getMember("streams").getMember(strName);
+    long long tmpNum;
+    
+    //if stream is configured and setting is present, use it, always
     if (streamCfg && streamCfg.getMember("DVR")){
-      long long bufTime = streamCfg.getMember("DVR").asInt();
-      if (bufferTime != bufTime){
-        DEBUG_MSG(DLVL_DEVEL, "Setting bufferTime from %u to new value of %lli", bufferTime, bufTime);
-        bufferTime = bufTime;
+      tmpNum = streamCfg.getMember("DVR").asInt();
+    }else{
+      if (streamCfg){
+        //otherwise, if stream is configured use the default
+        tmpNum = config->getOption("bufferTime", true)[0u].asInt();
+      }else{
+        //if not, use the commandline argument
+        tmpNum = config->getOption("bufferTime").asInt();
+      }
+    }
+    //if the new value is different, print a message and apply it
+    if (bufferTime != tmpNum){
+      DEBUG_MSG(DLVL_DEVEL, "Setting bufferTime from %u to new value of %lli", bufferTime, tmpNum);
+      bufferTime = tmpNum;
+    }
+    
       }
     }
     configLock.post();
     configLock.close();
-    
     return true;
   }