Hi Ross,

attached please find patch which enables logging levels. It is diff against 
live.2010.06.22. It is tested.

Please let me know whether you accept this patch or if it should be improved 
or if you deny it (I'd like to know why in this case).

Motivation:

There are many calls in form envir() << something; or similar. These messages 
are either emitted or could be completely disabled by subclassing 
[Basic]UsageEnvironment. There is nothing in between, however some are just 
debug ones and others are warnings or even errors.
I think there should be more fine grained control. It also should be possible 
(but not required) to log messages using 3rd party logging frameworks (for 
example rLog or glog).

Overview:

Actual patch (part 1) is compatible with old code and makes minimum changes. 
Old code will continue to work.
Next patch (if this one will be accepted) will remove operator<< form 
UsageEnvironment and will modify envir() << something; to envir().log(level) 
<< something;

Implementation (in the attached patch):

UsageEnvironment.hh , UsageEnvironment.cpp:
Class Logger accepts usual log levels. It defines operator<< the same way as 
UsageEnvironment does. It however is not abstract class, it does just no 
output.
Class UsageEnvironment adds new member (field) fLogger and new method 
log(LogLevel) which returns either current logger (fLogger) or null logger 
(Logger::nullLogger()) based on level.

BasicUsageEnvironment.hh , BasicUsageEnvironment.cpp:
Class BasicLogger defines its operator<< to print values to stderr (as 
BasicUsageEnvironment did) and sets its default log level to print all 
messages.
Class BasicUsageEnvironment redirects processing from its operator<< to its 
method log(...).

Best Regards
David Stegbauer


This e-mail and any attachment is for authorised use by the intended 
recipient(s) only. It may contain proprietary material, confidential 
information and/or be subject to legal privilege. It should not be copied, 
disclosed to, retained or used by, any other party. If you are not an intended 
recipient then please promptly delete this e-mail and any attachment and all 
copies and inform the sender. Thank you.

diff --git a/BasicUsageEnvironment/BasicUsageEnvironment.cpp b/BasicUsageEnvironment/BasicUsageEnvironment.cpp
index a201012..7b39dd2 100644
--- a/BasicUsageEnvironment/BasicUsageEnvironment.cpp
+++ b/BasicUsageEnvironment/BasicUsageEnvironment.cpp
@@ -26,8 +26,8 @@ along with this library; if not, write to the Free Software Foundation, Inc.,
 extern "C" int initializeWinsockIfNecessary();
 #endif
 
-BasicUsageEnvironment::BasicUsageEnvironment(TaskScheduler& taskScheduler)
-: BasicUsageEnvironment0(taskScheduler) {
+BasicUsageEnvironment::BasicUsageEnvironment(TaskScheduler& taskScheduler, Logger* logger)
+: BasicUsageEnvironment0(taskScheduler,logger) {
 #if defined(__WIN32__) || defined(_WIN32)
   if (!initializeWinsockIfNecessary()) {
     setResultErrMsg("Failed to initialize 'winsock': ");
@@ -41,8 +41,8 @@ BasicUsageEnvironment::~BasicUsageEnvironment() {
 }
 
 BasicUsageEnvironment*
-BasicUsageEnvironment::createNew(TaskScheduler& taskScheduler) {
-  return new BasicUsageEnvironment(taskScheduler);
+BasicUsageEnvironment::createNew(TaskScheduler& taskScheduler, Logger* logger) {
+  return new BasicUsageEnvironment(taskScheduler, logger);
 }
 
 int BasicUsageEnvironment::getErrno() const {
@@ -54,27 +54,53 @@ int BasicUsageEnvironment::getErrno() const {
 }
 
 UsageEnvironment& BasicUsageEnvironment::operator<<(char const* str) {
+    log(logDEBUG) << str;
+  return *this;
+}
+UsageEnvironment& BasicUsageEnvironment::operator<<(int i) {
+    log(logDEBUG) << i;
+  return *this;
+}
+UsageEnvironment& BasicUsageEnvironment::operator<<(unsigned u) {
+    log(logDEBUG) << u;
+  return *this;
+}
+UsageEnvironment& BasicUsageEnvironment::operator<<(double d) {
+    log(logDEBUG) << d;
+  return *this;
+}
+UsageEnvironment& BasicUsageEnvironment::operator<<(void* p) {
+    log(logDEBUG) << p;
+  return *this;
+}
+
+BasicLogger::BasicLogger(LogLevel initialLevel) :
+    Logger() {
+        m_level = initialLevel;
+}
+
+Logger& BasicLogger::operator<<(char const* str) {
   if (str == NULL) str = "(NULL)"; // sanity check
   fprintf(stderr, "%s", str);
   return *this;
 }
 
-UsageEnvironment& BasicUsageEnvironment::operator<<(int i) {
+Logger& BasicLogger::operator<<(int i) {
   fprintf(stderr, "%d", i);
   return *this;
 }
 
-UsageEnvironment& BasicUsageEnvironment::operator<<(unsigned u) {
+Logger& BasicLogger::operator<<(unsigned u) {
   fprintf(stderr, "%u", u);
   return *this;
 }
 
-UsageEnvironment& BasicUsageEnvironment::operator<<(double d) {
+Logger& BasicLogger::operator<<(double d) {
   fprintf(stderr, "%f", d);
   return *this;
 }
 
-UsageEnvironment& BasicUsageEnvironment::operator<<(void* p) {
+Logger& BasicLogger::operator<<(void* p) {
   fprintf(stderr, "%p", p);
   return *this;
 }
diff --git a/BasicUsageEnvironment/BasicUsageEnvironment0.cpp b/BasicUsageEnvironment/BasicUsageEnvironment0.cpp
index 64b29a4..ee3ab8b 100644
--- a/BasicUsageEnvironment/BasicUsageEnvironment0.cpp
+++ b/BasicUsageEnvironment/BasicUsageEnvironment0.cpp
@@ -22,8 +22,8 @@ along with this library; if not, write to the Free Software Foundation, Inc.,
 
 ////////// BasicUsageEnvironment //////////
 
-BasicUsageEnvironment0::BasicUsageEnvironment0(TaskScheduler& taskScheduler)
-  : UsageEnvironment(taskScheduler),
+BasicUsageEnvironment0::BasicUsageEnvironment0(TaskScheduler& taskScheduler, Logger* logger)
+  : UsageEnvironment(taskScheduler, logger),
     fBufferMaxSize(RESULT_MSG_BUFFER_MAX) {
   reset();
 }
diff --git a/BasicUsageEnvironment/include/BasicUsageEnvironment.hh b/BasicUsageEnvironment/include/BasicUsageEnvironment.hh
index 8681753..d7b08cc 100644
--- a/BasicUsageEnvironment/include/BasicUsageEnvironment.hh
+++ b/BasicUsageEnvironment/include/BasicUsageEnvironment.hh
@@ -26,7 +26,7 @@ along with this library; if not, write to the Free Software Foundation, Inc.,
 
 class BasicUsageEnvironment: public BasicUsageEnvironment0 {
 public:
-  static BasicUsageEnvironment* createNew(TaskScheduler& taskScheduler);
+  static BasicUsageEnvironment* createNew(TaskScheduler& taskScheduler, Logger* logger=NULL);
 
   // redefined virtual functions:
   virtual int getErrno() const;
@@ -38,7 +38,7 @@ public:
   virtual UsageEnvironment& operator<<(void* p);
 
 protected:
-  BasicUsageEnvironment(TaskScheduler& taskScheduler);
+  BasicUsageEnvironment(TaskScheduler& taskScheduler, Logger* logger=NULL);
       // called only by "createNew()" (or subclass constructors)
   virtual ~BasicUsageEnvironment();
 };
@@ -68,4 +68,18 @@ protected:
   fd_set fExceptionSet;
 };
 
+class BasicLogger : public Logger {
+public:
+    BasicLogger(LogLevel initialLevel=logDEBUG);
+public:
+    virtual Logger& operator<<(char const* str);
+    virtual Logger& operator<<(int i);
+    virtual Logger& operator<<(unsigned u);
+    virtual Logger& operator<<(double d);
+    virtual Logger& operator<<(void* p);
+private:
+    BasicLogger(const BasicLogger&) {}; //avoid copying
+    BasicLogger& operator=(const BasicLogger&) {}; //avoid asigning
+};
+
 #endif
diff --git a/BasicUsageEnvironment/include/BasicUsageEnvironment0.hh b/BasicUsageEnvironment/include/BasicUsageEnvironment0.hh
index 37713cb..b680155 100644
--- a/BasicUsageEnvironment/include/BasicUsageEnvironment0.hh
+++ b/BasicUsageEnvironment/include/BasicUsageEnvironment0.hh
@@ -54,7 +54,7 @@ public:
   virtual void reportBackgroundError();
 
 protected:
-  BasicUsageEnvironment0(TaskScheduler& taskScheduler);
+  BasicUsageEnvironment0(TaskScheduler& taskScheduler, Logger* logger=NULL);
   virtual ~BasicUsageEnvironment0();
 
 private:
diff --git a/UsageEnvironment/UsageEnvironment.cpp b/UsageEnvironment/UsageEnvironment.cpp
index 0677f0a..c66e37c 100644
--- a/UsageEnvironment/UsageEnvironment.cpp
+++ b/UsageEnvironment/UsageEnvironment.cpp
@@ -24,8 +24,29 @@ void UsageEnvironment::reclaim() {
   if (liveMediaPriv == NULL && groupsockPriv == NULL) delete this;
 }
 
-UsageEnvironment::UsageEnvironment(TaskScheduler& scheduler)
-  : liveMediaPriv(NULL), groupsockPriv(NULL), fScheduler(scheduler) {
+UsageEnvironment::UsageEnvironment(TaskScheduler& scheduler, Logger* logger)
+  : liveMediaPriv(NULL), groupsockPriv(NULL), fScheduler(scheduler), fLogger(logger) {
+}
+
+Logger& UsageEnvironment::log(LogLevel logLevel) {
+    if (! fLogger)
+        return Logger::nullLog();
+    if (logLevel > fLogger->level())
+        return Logger::nullLog();
+    return *fLogger;
+}
+
+Logger Logger::m_nullLogger = Logger();
+
+Logger::Logger() : m_level(logFATAL) {
+}
+Logger::~Logger() {
+}
+void Logger::setLevel(LogLevel level) {
+    m_level = level;
+}
+LogLevel Logger::level(void) {
+    return m_level;
 }
 
 UsageEnvironment::~UsageEnvironment() {
diff --git a/UsageEnvironment/include/UsageEnvironment.hh b/UsageEnvironment/include/UsageEnvironment.hh
index 1ea9fbc..8159b54 100644
--- a/UsageEnvironment/include/UsageEnvironment.hh
+++ b/UsageEnvironment/include/UsageEnvironment.hh
@@ -43,6 +43,8 @@ along with this library; if not, write to the Free Software Foundation, Inc.,
 #endif
 
 class TaskScheduler; // forward
+class Logger;
+enum LogLevel {logNONE, logFATAL, logERROR, logWARN, logINFO, logDEBUG};
 
 // An abstract base class, subclassed for each use of the library
 
@@ -52,7 +54,8 @@ public:
 
   // task scheduler:
   TaskScheduler& taskScheduler() const {return fScheduler;}
-
+  Logger& log(LogLevel);
+  
   // result message handling:
   typedef char const* MsgString;
   virtual MsgString getResultMsg() const = 0;
@@ -84,11 +87,12 @@ public:
   void* groupsockPriv;
 
 protected:
-  UsageEnvironment(TaskScheduler& scheduler); // abstract base class
+  UsageEnvironment(TaskScheduler& scheduler, Logger* logger=NULL); // abstract base class
   virtual ~UsageEnvironment(); // we are deleted only by reclaim()
 
 private:
   TaskScheduler& fScheduler;
+  Logger* fLogger;
 };
 
 
@@ -146,4 +150,26 @@ protected:
   TaskScheduler(); // abstract base class
 };
 
+class Logger
+{
+public:
+    void setLevel(LogLevel level);
+    LogLevel level(void);
+    static Logger& nullLog(void) {return m_nullLogger;};
+    // empty operations (for nullLogger
+    virtual Logger& operator<<(char const* str) {};
+    virtual Logger& operator<<(int i) {};
+    virtual Logger& operator<<(unsigned u) {};
+    virtual Logger& operator<<(double d) {};
+    virtual Logger& operator<<(void* p) {};
+    virtual ~Logger();
+protected:
+    Logger(void);
+    LogLevel m_level;
+    static Logger m_nullLogger;
+private:
+    Logger(const Logger&) {}; //avoid copying
+    Logger& operator=(const Logger&) {}; //avoid asigning
+};
+
 #endif
diff --git a/mediaServer/live555MediaServer.cpp b/mediaServer/live555MediaServer.cpp
index 09bbffe..919fa93 100644
--- a/mediaServer/live555MediaServer.cpp
+++ b/mediaServer/live555MediaServer.cpp
@@ -25,7 +25,8 @@ along with this library; if not, write to the Free Software Foundation, Inc.,
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  UsageEnvironment* env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  UsageEnvironment* env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   UserAuthenticationDatabase* authDB = NULL;
 #ifdef ACCESS_CONTROL
diff --git a/testProgs/MPEG2TransportStreamIndexer.cpp b/testProgs/MPEG2TransportStreamIndexer.cpp
index 8d6d4b5..83afebe 100644
--- a/testProgs/MPEG2TransportStreamIndexer.cpp
+++ b/testProgs/MPEG2TransportStreamIndexer.cpp
@@ -37,7 +37,8 @@ void usage() {
 int main(int argc, char const** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Parse the command line:
   programName = argv[0];
diff --git a/testProgs/playCommon.cpp b/testProgs/playCommon.cpp
index 7098300..696ff0b 100644
--- a/testProgs/playCommon.cpp
+++ b/testProgs/playCommon.cpp
@@ -113,7 +113,8 @@ void usage() {
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   progName = argv[0];
 
diff --git a/testProgs/sapWatch.cpp b/testProgs/sapWatch.cpp
index e69252e..73cc099 100644
--- a/testProgs/sapWatch.cpp
+++ b/testProgs/sapWatch.cpp
@@ -28,7 +28,8 @@ static unsigned char packet[maxPacketSize+1];
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  UsageEnvironment* env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  UsageEnvironment* env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
 
   // Create a 'groupsock' for the input multicast group,port:
diff --git a/testProgs/testAMRAudioStreamer.cpp b/testProgs/testAMRAudioStreamer.cpp
index 20a661b..0198cce 100644
--- a/testProgs/testAMRAudioStreamer.cpp
+++ b/testProgs/testAMRAudioStreamer.cpp
@@ -32,7 +32,8 @@ void play(); // forward
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Create 'groupsocks' for RTP and RTCP:
   struct in_addr destinationAddress;
diff --git a/testProgs/testDVVideoStreamer.cpp b/testProgs/testDVVideoStreamer.cpp
index fa0980c..7c677a6 100644
--- a/testProgs/testDVVideoStreamer.cpp
+++ b/testProgs/testDVVideoStreamer.cpp
@@ -32,7 +32,8 @@ void play(); // forward
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Create 'groupsocks' for RTP and RTCP:
   struct in_addr destinationAddress;
diff --git a/testProgs/testGSMStreamer.cpp b/testProgs/testGSMStreamer.cpp
index 8613a6b..24927c1 100644
--- a/testProgs/testGSMStreamer.cpp
+++ b/testProgs/testGSMStreamer.cpp
@@ -62,7 +62,8 @@ void play(); // forward
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Create 'groupsocks' for RTP and RTCP:
   char* destinationAddressStr
diff --git a/testProgs/testMP3Receiver.cpp b/testProgs/testMP3Receiver.cpp
index 5fbe085..464acc5 100644
--- a/testProgs/testMP3Receiver.cpp
+++ b/testProgs/testMP3Receiver.cpp
@@ -46,7 +46,8 @@ UsageEnvironment* env;
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Create the data sink for 'stdout':
   sessionState.sink = FileSink::createNew(*env, "stdout");
diff --git a/testProgs/testMP3Streamer.cpp b/testProgs/testMP3Streamer.cpp
index f1cd2f5..ea353f6 100644
--- a/testProgs/testMP3Streamer.cpp
+++ b/testProgs/testMP3Streamer.cpp
@@ -64,7 +64,8 @@ void play(); // forward
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Create 'groupsocks' for RTP and RTCP:
   char const* destinationAddressStr
diff --git a/testProgs/testMPEG1or2AudioVideoStreamer.cpp b/testProgs/testMPEG1or2AudioVideoStreamer.cpp
index d391e05..6c3ad9e 100644
--- a/testProgs/testMPEG1or2AudioVideoStreamer.cpp
+++ b/testProgs/testMPEG1or2AudioVideoStreamer.cpp
@@ -52,7 +52,8 @@ Boolean iFramesOnly = False;
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Create 'groupsocks' for RTP and RTCP:
   char const* destinationAddressStr
diff --git a/testProgs/testMPEG1or2AudioVideoToDarwin.cpp b/testProgs/testMPEG1or2AudioVideoToDarwin.cpp
index 480f6ee..0006ba3 100644
--- a/testProgs/testMPEG1or2AudioVideoToDarwin.cpp
+++ b/testProgs/testMPEG1or2AudioVideoToDarwin.cpp
@@ -57,7 +57,8 @@ void play(); // forward
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Parse command-line arguments:
   programName = argv[0];
diff --git a/testProgs/testMPEG1or2ProgramToTransportStream.cpp b/testProgs/testMPEG1or2ProgramToTransportStream.cpp
index 7c0d0e8..2431042 100644
--- a/testProgs/testMPEG1or2ProgramToTransportStream.cpp
+++ b/testProgs/testMPEG1or2ProgramToTransportStream.cpp
@@ -31,7 +31,8 @@ UsageEnvironment* env;
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Open the input file as a 'byte-stream file source':
   FramedSource* inputSource = ByteStreamFileSource::createNew(*env, inputFileName);
diff --git a/testProgs/testMPEG1or2Splitter.cpp b/testProgs/testMPEG1or2Splitter.cpp
index 8674d23..fe8026b 100644
--- a/testProgs/testMPEG1or2Splitter.cpp
+++ b/testProgs/testMPEG1or2Splitter.cpp
@@ -43,7 +43,8 @@ UsageEnvironment* env;
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Open the input file as a 'byte-stream file source':
   ByteStreamFileSource* inputSource
diff --git a/testProgs/testMPEG1or2VideoReceiver.cpp b/testProgs/testMPEG1or2VideoReceiver.cpp
index cca1891..f849c1e 100644
--- a/testProgs/testMPEG1or2VideoReceiver.cpp
+++ b/testProgs/testMPEG1or2VideoReceiver.cpp
@@ -41,7 +41,8 @@ UsageEnvironment* env;
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Create the data sink for 'stdout':
   sessionState.sink = FileSink::createNew(*env, "stdout");
diff --git a/testProgs/testMPEG1or2VideoStreamer.cpp b/testProgs/testMPEG1or2VideoStreamer.cpp
index 16a42b2..ba0baa3 100644
--- a/testProgs/testMPEG1or2VideoStreamer.cpp
+++ b/testProgs/testMPEG1or2VideoStreamer.cpp
@@ -55,7 +55,8 @@ void play(); // forward
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Create 'groupsocks' for RTP and RTCP:
   char const* destinationAddressStr
diff --git a/testProgs/testMPEG2TransportStreamTrickPlay.cpp b/testProgs/testMPEG2TransportStreamTrickPlay.cpp
index fa9fade..e4d1113 100644
--- a/testProgs/testMPEG2TransportStreamTrickPlay.cpp
+++ b/testProgs/testMPEG2TransportStreamTrickPlay.cpp
@@ -45,7 +45,8 @@ void usage() {
 int main(int argc, char const** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Parse the command line:
   programName = argv[0];
diff --git a/testProgs/testMPEG2TransportStreamer.cpp b/testProgs/testMPEG2TransportStreamer.cpp
index 6601ea7..07e194d 100644
--- a/testProgs/testMPEG2TransportStreamer.cpp
+++ b/testProgs/testMPEG2TransportStreamer.cpp
@@ -48,7 +48,8 @@ void play(); // forward
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Create 'groupsocks' for RTP and RTCP:
   char const* destinationAddressStr
diff --git a/testProgs/testMPEG4VideoStreamer.cpp b/testProgs/testMPEG4VideoStreamer.cpp
index 78bd853..f150e47 100644
--- a/testProgs/testMPEG4VideoStreamer.cpp
+++ b/testProgs/testMPEG4VideoStreamer.cpp
@@ -32,7 +32,8 @@ void play(); // forward
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Create 'groupsocks' for RTP and RTCP:
   struct in_addr destinationAddress;
diff --git a/testProgs/testMPEG4VideoToDarwin.cpp b/testProgs/testMPEG4VideoToDarwin.cpp
index a75e9cb..8db941f 100644
--- a/testProgs/testMPEG4VideoToDarwin.cpp
+++ b/testProgs/testMPEG4VideoToDarwin.cpp
@@ -50,7 +50,8 @@ void play(); // forward
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Parse command-line arguments:
   programName = argv[0];
diff --git a/testProgs/testOnDemandRTSPServer.cpp b/testProgs/testOnDemandRTSPServer.cpp
index 9c477c9..8c65173 100644
--- a/testProgs/testOnDemandRTSPServer.cpp
+++ b/testProgs/testOnDemandRTSPServer.cpp
@@ -39,7 +39,8 @@ static void announceStream(RTSPServer* rtspServer, ServerMediaSession* sms,
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   UserAuthenticationDatabase* authDB = NULL;
 #ifdef ACCESS_CONTROL
diff --git a/testProgs/testRelay.cpp b/testProgs/testRelay.cpp
index cd782c4..f99dd79 100644
--- a/testProgs/testRelay.cpp
+++ b/testProgs/testRelay.cpp
@@ -30,7 +30,8 @@ UsageEnvironment* env;
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Create a 'groupsock' for the input multicast group,port:
   char const* inputAddressStr
diff --git a/testProgs/testWAVAudioStreamer.cpp b/testProgs/testWAVAudioStreamer.cpp
index 212ffd9..754cd8b 100644
--- a/testProgs/testWAVAudioStreamer.cpp
+++ b/testProgs/testWAVAudioStreamer.cpp
@@ -33,7 +33,8 @@ void play(); // forward
 int main(int argc, char** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   play();
 
diff --git a/testProgs/vobStreamer.cpp b/testProgs/vobStreamer.cpp
index 8021ff0..558c2c9 100644
--- a/testProgs/vobStreamer.cpp
+++ b/testProgs/vobStreamer.cpp
@@ -66,7 +66,8 @@ void play(); // forward
 int main(int argc, char const** argv) {
   // Begin by setting up our usage environment:
   TaskScheduler* scheduler = BasicTaskScheduler::createNew();
-  env = BasicUsageEnvironment::createNew(*scheduler);
+  Logger* logger = new BasicLogger();
+  env = BasicUsageEnvironment::createNew(*scheduler, logger);
 
   // Parse command-line options:
   // (Unfortunately we can't use getopt() here; Windoze doesn't have it)

_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to