00001
00007 #include "iptvfeederlive.h"
00008
00009
00010 #include "mythcontext.h"
00011 #include "timeoutedtaskscheduler.h"
00012
00013 #define LOC QString("FbFeedLive:")
00014 #define LOC_ERR QString("FbFeedLive, Error:")
00015
00016
00017 IPTVFeederLive::IPTVFeederLive() :
00018 _live_env(NULL), _lock(false),
00019 _abort(0), _running(false)
00020 {
00021 }
00022
00023 IPTVFeederLive::~IPTVFeederLive()
00024 {
00025 }
00026
00027 bool IPTVFeederLive::InitEnv(void)
00028 {
00029 if (_live_env)
00030 {
00031 VERBOSE(VB_IMPORTANT, LOC_ERR + "InitEnv, live env. already exits.");
00032 return false;
00033 }
00034
00035 TaskScheduler *scheduler = new TimeoutedTaskScheduler(500);
00036 if (!scheduler)
00037 {
00038 VERBOSE(VB_IMPORTANT, LOC_ERR + "Failed to create Live Scheduler.");
00039 return false;
00040 }
00041
00042 _live_env = BasicUsageEnvironment::createNew(*scheduler);
00043 if (!_live_env)
00044 {
00045 VERBOSE(VB_IMPORTANT, LOC_ERR + "Failed to create Live Environment.");
00046 delete scheduler;
00047 return false;
00048 }
00049
00050 return true;
00051 }
00052
00053 void IPTVFeederLive::FreeEnv(void)
00054 {
00055 if (_live_env)
00056 {
00057 TaskScheduler *scheduler = &_live_env->taskScheduler();
00058 _live_env->reclaim();
00059 _live_env = NULL;
00060 if (scheduler)
00061 delete scheduler;
00062 }
00063 }
00064
00065 void IPTVFeederLive::Run(void)
00066 {
00067 VERBOSE(VB_RECORD, LOC + "Run() -- begin");
00068 _lock.lock();
00069 _running = true;
00070 _abort = 0;
00071 _lock.unlock();
00072
00073 VERBOSE(VB_RECORD, LOC + "Run() -- loop begin");
00074 if (_live_env)
00075 _live_env->taskScheduler().doEventLoop(&_abort);
00076 VERBOSE(VB_RECORD, LOC + "Run() -- loop end");
00077
00078 _lock.lock();
00079 _running = false;
00080 _cond.wakeAll();
00081 _lock.unlock();
00082 VERBOSE(VB_RECORD, LOC + "Run() -- end");
00083 }
00084
00085 void IPTVFeederLive::Stop(void)
00086 {
00087 VERBOSE(VB_RECORD, LOC + "Stop() -- begin");
00088 QMutexLocker locker(&_lock);
00089 _abort = 0xFF;
00090
00091 while (_running)
00092 _cond.wait(&_lock, 500);
00093 VERBOSE(VB_RECORD, LOC + "Stop() -- end");
00094 }