diff --git a/libmediation/CMakeLists.txt b/libmediation/CMakeLists.txt index 67bdc58..838a194 100644 --- a/libmediation/CMakeLists.txt +++ b/libmediation/CMakeLists.txt @@ -10,19 +10,15 @@ FILE(GLOB mediation_sources RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "fs/logstream.h" "fs/systemlog.h" "fs/textfile.h" - "system/condvar.h" - "system/mutex.h" "system/terminatablethread.h" - "time/time.cpp" - "time/time.h" "types/types.cpp" "types/types.h" ) IF(MSVC OR MINGW) - LIST(APPEND mediation_sources "fs/osdep/file_win32.cpp" "system/osdep/common_win32.cpp" "system/osdep/condvar_win32.cpp" "system/osdep/mutex_win32.cpp" "system/osdep/terminatablethread_win32.cpp") + LIST(APPEND mediation_sources "fs/osdep/file_win32.cpp" "system/osdep/common_win32.cpp" "system/osdep/terminatablethread_win32.cpp") ELSE() - LIST(APPEND mediation_sources "fs/osdep/file_unix.cpp" "system/osdep/condvar_linux.cpp" "system/osdep/mutex_linux.cpp" "system/osdep/terminatablethread_linux.cpp") + LIST(APPEND mediation_sources "fs/osdep/file_unix.cpp" "system/osdep/terminatablethread_linux.cpp") ENDIF() add_library (mediation ${mediation_sources}) diff --git a/libmediation/containers/safequeue.h b/libmediation/containers/safequeue.h index 0859357..1b692e8 100644 --- a/libmediation/containers/safequeue.h +++ b/libmediation/containers/safequeue.h @@ -1,12 +1,10 @@ -#ifndef _SAFE_QUEUE_H -#define _SAFE_QUEUE_H +#ifndef SAFE_QUEUE_H +#define SAFE_QUEUE_H #include - -#include -#include - +#include +#include template< typename T > class SafeQueue @@ -18,29 +16,29 @@ public: : m_maxSize( maxSize ) { - }; + } virtual ~SafeQueue() { - }; + } bool empty() const { - Mutex::ScopedLock lk(&m_mtx); + std::lock_guard lk(m_mtx); return m_queue.empty(); - }; + } size_type size() const { - Mutex::ScopedLock lk(&m_mtx); + std::lock_guard lk(m_mtx); return m_queue.size(); - }; + } bool push(const T& val) { - Mutex::ScopedLock lk(&m_mtx); + std::lock_guard lk(m_mtx); if ( m_queue.size()>=m_maxSize ) return false; @@ -51,7 +49,7 @@ public: T pop() { - Mutex::ScopedLock lk(&m_mtx); + std::lock_guard lk(m_mtx); T val = m_queue.front(); m_queue.pop(); @@ -60,7 +58,7 @@ public: } private: - mutable Mutex m_mtx; + mutable std::mutex m_mtx; std::queue m_queue; const size_type m_maxSize; @@ -76,30 +74,30 @@ class SafeQueueWithNotification : public SafeQueue public: SafeQueueWithNotification( const uint32_t maxSize, - Mutex* const mtx, - ConditionVariable* const cond ) + std::mutex& mtx, + std::condition_variable& cond ) : SafeQueue( maxSize ), m_mtx( mtx ), m_cond( cond ) { - }; + } bool push( const T& val ) { - Mutex::ScopedLock lk( m_mtx ); + std::lock_guard lk( m_mtx ); if( !SafeQueue::push( val ) ) return false; - m_cond->notify_one(); + m_cond.notify_one(); return true; } private: - Mutex* const m_mtx; - ConditionVariable* const m_cond; + std::mutex& m_mtx; + std::condition_variable& m_cond; SafeQueueWithNotification( const SafeQueueWithNotification& ); SafeQueueWithNotification& operator= ( const SafeQueueWithNotification& ); @@ -114,20 +112,20 @@ public: : SafeQueueWithNotification( maxSize, - &m_mtx, - &m_cond ) + m_mtx, + m_cond ) { - }; + } - virtual ~WaitableSafeQueue() {}; + virtual ~WaitableSafeQueue() {} T pop() { - Mutex::ScopedLock lk( &m_mtx ); + std::unique_lock lk( m_mtx ); while( SafeQueue::empty() ) { - m_cond.wait(&lk); + m_cond.wait(lk); } T val = SafeQueue::pop(); @@ -136,8 +134,8 @@ public: } private: - Mutex m_mtx; - ConditionVariable m_cond; + std::mutex m_mtx; + std::condition_variable m_cond; WaitableSafeQueue( const WaitableSafeQueue& ); WaitableSafeQueue& operator= ( const WaitableSafeQueue& ); diff --git a/libmediation/system/condvar.h b/libmediation/system/condvar.h deleted file mode 100644 index 5fde197..0000000 --- a/libmediation/system/condvar.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef IPSOFT_COND_VAR_H -#define IPSOFT_COND_VAR_H - -#include "system/mutex.h" -#include "time/time.h" - - -class ConditionVariable -{ -public: - ConditionVariable(); - ~ConditionVariable(); - - void notify_one(); - void notify_all(); - - void wait( Mutex::ScopedLock* const lock ); -private: - void* const m_impl; - - ConditionVariable( const ConditionVariable& ); - ConditionVariable& operator=( const ConditionVariable& ); - -}; - -#endif// IPSOFT_COND_VAR_H diff --git a/libmediation/system/mutex.h b/libmediation/system/mutex.h deleted file mode 100644 index f290856..0000000 --- a/libmediation/system/mutex.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef IPSOFT_MUTEX_H -#define IPSOFT_MUTEX_H - -class Mutex -{ - friend class ScopedLock; -public: - //! This class should be used only in one stream. - class ScopedLock - { - friend class ConditionVariable; - public: - ScopedLock( Mutex* const ); - ~ScopedLock(); - - private: - friend class ConditionVariableImpl; - - ScopedLock( const ScopedLock& ); - ScopedLock& operator=( const ScopedLock& ); - - Mutex* const m_mtx; - }; - - Mutex(); - ~Mutex(); - - void lock(); - void unlock(); - -private: - friend class ConditionVariableImpl; - - Mutex( const Mutex& ); - Mutex& operator=( const Mutex& ); - - void* m_mtxImpl; -}; - -#endif// IPSOFT_MUTEX_H diff --git a/libmediation/system/osdep/condvar_linux.cpp b/libmediation/system/osdep/condvar_linux.cpp deleted file mode 100644 index fcf6e7e..0000000 --- a/libmediation/system/osdep/condvar_linux.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/*********************************************************************** -* File: system/condvar_linux.cpp -* Author: Andrey Kolesnikov -* Date: 28 dec 2005 -***********************************************************************/ - -/* -$Log: condvar_linux.cpp,v $ -Revision 1.4 2007/03/07 10:07:36 andreyk - -Fixed GCC compile errors - -Revision 1.3 2007/03/07 09:16:30 andreyk -Добавлена функция timed_wait для ожидания с точностью до миллисекунд - -Revision 1.2 2007/02/02 16:39:23 andreyk -*** empty log message *** - -Revision 1.1 2006/04/19 17:00:03 mike -*** empty log message *** - -Revision 1.4 2006/03/03 17:19:34 andreyk -В область видимости private классов добавлены конструктор копирования и оператор присваивания, не имеющие реализации. - -Revision 1.3 2006/02/15 12:11:47 andreyk -Исправления в коде, вызывавшем warning при компиляции - -Revision 1.2 2006/02/06 08:40:28 andreyk -В файле теперь используются юниксовые окончания строк. - -Revision 1.1 2005/12/28 14:34:34 andreyk - -Building project under Linux - -*/ - -#include "../condvar.h" - -#include -#include - - -class ConditionVariableImpl -{ - -public: - ConditionVariableImpl() - { - pthread_cond_init( &m_cond, NULL ); - } - - ~ConditionVariableImpl() - { - pthread_cond_destroy( &m_cond ); - } - - void notify_one() - { - pthread_cond_signal( &m_cond ); - } - - void notify_all() - { - pthread_cond_broadcast( &m_cond ); - } - - void wait( Mutex::ScopedLock* const lock ) - { - pthread_cond_wait( - &m_cond, - reinterpret_cast( lock->m_mtx->m_mtxImpl ) ); - } - - -private: - pthread_cond_t m_cond; - -}; - - -ConditionVariable::ConditionVariable() -: - m_impl( new ConditionVariableImpl() ) -{ -} - -ConditionVariable::~ConditionVariable() -{ - delete reinterpret_cast(m_impl); -} - -void ConditionVariable::notify_one() -{ - reinterpret_cast(m_impl)->notify_one(); -} - -void ConditionVariable::notify_all() -{ - reinterpret_cast(m_impl)->notify_all(); -} - -void ConditionVariable::wait( Mutex::ScopedLock* const lock ) -{ - reinterpret_cast(m_impl)->wait( lock ); -} - diff --git a/libmediation/system/osdep/condvar_win32.cpp b/libmediation/system/osdep/condvar_win32.cpp deleted file mode 100644 index fc4fcf8..0000000 --- a/libmediation/system/osdep/condvar_win32.cpp +++ /dev/null @@ -1,109 +0,0 @@ -#include "system/condvar.h" - -#include - - -enum -{ - SIGNAL = 0, - BROADCAST = 1, - MAX_EVENTS = 2 -}; - -class ConditionVariableImpl -{ -public: - ConditionVariableImpl() - : - m_waitersCount( 0 ) - { - m_events[SIGNAL] = CreateEvent( - NULL, // no security - FALSE, // auto-reset event - FALSE, // non-signaled initially - NULL ); // unnamed - - m_events[BROADCAST] = CreateEvent( - NULL, // no security - TRUE, // manual-reset - FALSE, // non-signaled initially - NULL ); // unnamed - } - - ~ConditionVariableImpl() - { - CloseHandle( m_events[SIGNAL] ); - CloseHandle( m_events[BROADCAST] ); - } - - void notify_one() - { - Mutex::ScopedLock sl( &m_waitersCountLock ); - - if( m_waitersCount > 0 ) - SetEvent( m_events[SIGNAL] ); - } - - void notify_all() - { - Mutex::ScopedLock sl( &m_waitersCountLock ); - - if( m_waitersCount > 0 ) - SetEvent( m_events[BROADCAST] ); - } - - void do_wait( Mutex* const mtx ) - { - { - Mutex::ScopedLock sl( &m_waitersCountLock ); - m_waitersCount++; - } - - mtx->unlock(); - - int result = WaitForMultipleObjects( 2, m_events, FALSE, INFINITE ); - - { - Mutex::ScopedLock sl( &m_waitersCountLock ); - - m_waitersCount--; - if( (result == WAIT_OBJECT_0 + BROADCAST) && (m_waitersCount == 0) ) - ResetEvent( m_events[BROADCAST] ); - } - - mtx->lock(); - } - - -private: - HANDLE m_events[MAX_EVENTS]; - unsigned int m_waitersCount; - Mutex m_waitersCountLock; -}; - -ConditionVariable::ConditionVariable() -: - m_impl( new ConditionVariableImpl() ) -{ -} - -ConditionVariable::~ConditionVariable() -{ - delete ((ConditionVariableImpl*)m_impl); -} - -void ConditionVariable::notify_all() -{ - ((ConditionVariableImpl*)m_impl)->notify_all(); -} - -void ConditionVariable::notify_one() -{ - ((ConditionVariableImpl*)m_impl)->notify_one(); -} - -void ConditionVariable::wait( Mutex::ScopedLock* const lock ) -{ - ((ConditionVariableImpl*)m_impl)->do_wait( lock->m_mtx ); -} - diff --git a/libmediation/system/osdep/mutex_linux.cpp b/libmediation/system/osdep/mutex_linux.cpp deleted file mode 100644 index 641cfe9..0000000 --- a/libmediation/system/osdep/mutex_linux.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/*********************************************************************** -* File: system/mutex_linux.cpp -* Author: Andrey Kolesnikov -* Date: 28 dec 2005 -***********************************************************************/ - -/* -$Log: mutex_linux.cpp,v $ -Revision 1.4 2007/06/22 14:20:19 andreyk -*** empty log message *** - -Revision 1.3 2007/02/25 13:35:27 andreyk -Внесены небольшие изменения в интерфейс общих классов. - -Revision 1.2 2006/09/21 10:56:10 andreyk -Исправлена ошибка в классе Mutex::ScopedLock: Если мютекс отпущен функцией unlock, то функция ScopedLock::~ScopedLock всё равно пыталась его отпустить, что приводило к исключению. - -Revision 1.1 2006/04/19 17:00:03 mike -*** empty log message *** - -Revision 1.3 2006/02/06 08:38:39 andreyk -В реализацию класса Mutex добавлена проверка на существавание системного объекта перед каждым его использованием. - -Revision 1.2 2006/02/02 11:22:11 andreyk - -Building mediation under linux - -Revision 1.1 2005/12/28 14:34:34 andreyk - -Building project under Linux - -*/ - -#include "../mutex.h" - -#include - - -Mutex::ScopedLock::ScopedLock( Mutex* mtx ) -: - m_mtx( mtx ) -{ - m_mtx->lock(); -} - -Mutex::ScopedLock::~ScopedLock() -{ - m_mtx->unlock(); -} - - -Mutex::Mutex() -: - m_mtxImpl( new pthread_mutex_t ) -{ - pthread_mutex_init( reinterpret_cast(m_mtxImpl), NULL ); -} - -Mutex::~Mutex() -{ - pthread_mutex_destroy( reinterpret_cast(m_mtxImpl) ); - delete reinterpret_cast(m_mtxImpl); - m_mtxImpl = 0; -} - -void Mutex::lock() -{ - if( m_mtxImpl ) - pthread_mutex_lock( reinterpret_cast(m_mtxImpl) ); -} - - -void Mutex::unlock() -{ - if( m_mtxImpl ) - pthread_mutex_unlock( reinterpret_cast(m_mtxImpl) ); -} - diff --git a/libmediation/system/osdep/mutex_win32.cpp b/libmediation/system/osdep/mutex_win32.cpp deleted file mode 100644 index 05ecb81..0000000 --- a/libmediation/system/osdep/mutex_win32.cpp +++ /dev/null @@ -1,50 +0,0 @@ - -#include "../mutex.h" - -#ifndef _WIN32_WINNT -# define _WIN32_WINNT 0x400 -#endif - -#include - -Mutex::Mutex() -: - m_mtxImpl( new CRITICAL_SECTION() ) -{ - InitializeCriticalSection( (CRITICAL_SECTION*)m_mtxImpl ); -} - -Mutex::~Mutex() -{ - DeleteCriticalSection( (CRITICAL_SECTION*)m_mtxImpl ); - delete (LPCRITICAL_SECTION)m_mtxImpl; - m_mtxImpl = 0; -} - -void Mutex::lock() -{ - if( !m_mtxImpl ) - return; - EnterCriticalSection( (CRITICAL_SECTION*)m_mtxImpl ); -} - -void Mutex::unlock() -{ - if( !m_mtxImpl ) - return; - LeaveCriticalSection( (CRITICAL_SECTION*)m_mtxImpl ); -} - -//#endif - -Mutex::ScopedLock::ScopedLock( Mutex* const mtx ) -: - m_mtx( mtx ) -{ - m_mtx->lock(); -} - -Mutex::ScopedLock::~ScopedLock() -{ - m_mtx->unlock(); -} diff --git a/libmediation/time/time.cpp b/libmediation/time/time.cpp deleted file mode 100644 index a1fd8f1..0000000 --- a/libmediation/time/time.cpp +++ /dev/null @@ -1,83 +0,0 @@ -#include "time.h" - -#include -#include - - -#ifdef WIN32 -#include -#include -#include -#endif - -#ifdef LINUX -#include -#include - -#endif - -#ifdef SOLARIS -//extern time_t timezone; -#include -#endif - -#ifdef MAC -//extern time_t timezone; -#include -#endif - -#include "../system/mutex.h" - - -namespace mtime -{ - -uint32_t clockGetTime() -{ -#ifdef WIN32 - return (uint32_t)GetTickCount(); -#else - // POSIX - struct timeval tv; - gettimeofday(&tv, 0); - return (uint32_t) (tv.tv_sec * 1000ull + tv.tv_usec/1000); -#endif -} - -uint64_t clockGetTimeEx() -{ -#ifdef WIN32 - - static uint32_t prevTics = 0; - static uint64_t cycleCount = 0; - static Mutex timeMutex; - Mutex::ScopedLock lock(&timeMutex); - uint32_t tics = (uint32_t) timeGetTime(); - if (tics < prevTics) - cycleCount+= 0x100000000ull; - prevTics = tics; - return ((uint64_t) tics + cycleCount) * 1000ull; - - - /* - static uint64_t freq = 0; - if( freq == 0 ) - { - LARGE_INTEGER timerFrequency; - QueryPerformanceFrequency( &timerFrequency ); - freq = timerFrequency.QuadPart / 1000000ull; - } - - LARGE_INTEGER t; - QueryPerformanceCounter( &t ); - return (t.QuadPart+500000l) / freq; - */ -#else - // POSIX - struct timeval tv; - gettimeofday(&tv, 0); - return tv.tv_sec * 1000000ull + tv.tv_usec; -#endif -} - -} diff --git a/libmediation/time/time.h b/libmediation/time/time.h deleted file mode 100644 index 54a9357..0000000 --- a/libmediation/time/time.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef __T_MTime_H -#define __T_MTime_H - -#include - -#include "types/types.h" - - -namespace mtime -{ - class TimeInterval; - class DayTimeInterval; -}; - -namespace mtime -{ - - // returns the number of milliseconds which have passed since the system started (under Windows) or - // since an unspecified point in time under Linux. - uint32_t clockGetTime(); - - // returns the number of microseconds which have passed since an unspecified point in time. - uint64_t clockGetTimeEx(); - -}; - -#endif //__T_MTime_H diff --git a/libmediation/types/types.cpp b/libmediation/types/types.cpp index f1cbe16..bdba27c 100644 --- a/libmediation/types/types.cpp +++ b/libmediation/types/types.cpp @@ -15,7 +15,7 @@ #include "fs/directory.h" #include - +#include using namespace std; @@ -514,5 +514,7 @@ uint16_t my_ntohs( const uint16_t val ) uint32_t random32() { - return ((uint32_t) rand() << 16) + rand(); + static std::random_device dev; + static std::minstd_rand raand(dev()); + return static_cast(raand()); } diff --git a/tsMuxer/src/BufferedReader.h b/tsMuxer/src/BufferedReader.h index 67234b5..52ebbf8 100644 --- a/tsMuxer/src/BufferedReader.h +++ b/tsMuxer/src/BufferedReader.h @@ -5,7 +5,6 @@ #include #include #include -#include #include #include "abstractreader.h" #include "abstractDemuxer.h" @@ -99,16 +98,16 @@ protected: bool m_terminated; WaitableSafeQueue m_readQueue; ReaderData* getReader(uint32_t readerID); - ConditionVariable m_readCond; - Mutex m_readMtx; + std::condition_variable m_readCond; + std::mutex m_readMtx; private: int m_id; - Mutex m_readersMtx; + std::mutex m_readersMtx; std::map m_readers; static uint32_t m_newReaderID; static uint32_t createNewReaderID(); - static Mutex m_genReaderMtx; + static std::mutex m_genReaderMtx; }; #endif diff --git a/tsMuxer/src/bufferedReader.cpp b/tsMuxer/src/bufferedReader.cpp index e469d27..d445e54 100644 --- a/tsMuxer/src/bufferedReader.cpp +++ b/tsMuxer/src/bufferedReader.cpp @@ -11,7 +11,7 @@ using namespace std; uint32_t BufferedReader::m_newReaderID = 0; -Mutex BufferedReader::m_genReaderMtx; +std::mutex BufferedReader::m_genReaderMtx; const unsigned QUEUE_MAX_SIZE = 4096; BufferedReader::BufferedReader (uint32_t blockSize, uint32_t allocSize, uint32_t prereadThreshold): @@ -30,14 +30,14 @@ BufferedReader::BufferedReader (uint32_t blockSize, uint32_t allocSize, uint32_t ReaderData* BufferedReader::getReader(uint32_t readerID) { - Mutex::ScopedLock lock(&m_readersMtx); + std::lock_guard lock(m_readersMtx); map::iterator itr = m_readers.find(readerID); return itr != m_readers.end() ? itr->second : 0; } bool BufferedReader::incSeek(uint32_t readerID, int64_t offset) { - Mutex::ScopedLock lock(&m_readersMtx); + std::lock_guard lock(m_readersMtx); map::iterator itr = m_readers.find(readerID); if (itr != m_readers.end()) { ReaderData* data = itr->second; @@ -87,7 +87,7 @@ uint32_t BufferedReader::createReader(int readBuffOffset) data->m_lastBlock = false; size_t rSize; { - Mutex::ScopedLock lock(&m_readersMtx); + std::lock_guard lock(m_readersMtx); newReaderID = createNewReaderID(); m_readers.insert(make_pair(newReaderID, data)); rSize = m_readers.size(); @@ -105,7 +105,7 @@ void BufferedReader::deleteReader(uint32_t readerID) { size_t rSize; { - Mutex::ScopedLock lock(&m_readersMtx); + std::lock_guard lock(m_readersMtx); std::map::iterator iterator = m_readers.find(readerID); if (iterator == m_readers.end()) return; @@ -125,7 +125,7 @@ uint8_t* BufferedReader::readBlock(uint32_t readerID, uint32_t& readCnt, int& re { ReaderData* data = 0; { - Mutex::ScopedLock lock(&m_readersMtx); + std::lock_guard lock(m_readersMtx); map::iterator itr = m_readers.find(readerID); if (itr != m_readers.end()) { data = itr->second; @@ -144,9 +144,9 @@ uint8_t* BufferedReader::readBlock(uint32_t readerID, uint32_t& readCnt, int& re if (!data->m_nextBlockSize) { - Mutex::ScopedLock lk(&m_readMtx); + std::unique_lock lk(m_readMtx); while(data->m_nextBlockSize == 0 && !data->m_eof) - m_readCond.wait(&lk); + m_readCond.wait(lk); } readCnt = data->m_nextBlockSize >= 0 ? data->m_nextBlockSize : 0; rez = data->m_eof ? DATA_EOF : NO_ERROR; @@ -171,7 +171,7 @@ void BufferedReader::notify(uint32_t readerID, uint32_t dataReaded) if (data == 0) return; if (dataReaded >= m_prereadThreshold && !data->m_notified) { - Mutex::ScopedLock lock(&m_readersMtx); + std::lock_guard lock(m_readersMtx); data->m_notified = true; data->m_atQueue++; m_readQueue.push(readerID); @@ -180,7 +180,7 @@ void BufferedReader::notify(uint32_t readerID, uint32_t dataReaded) uint32_t BufferedReader::getReaderCount() { - Mutex::ScopedLock lock(&m_readersMtx); + std::lock_guard lock(m_readersMtx); return (uint32_t) m_readers.size(); } @@ -250,14 +250,14 @@ void BufferedReader::thread_main() } { - Mutex::ScopedLock lk(&m_readMtx); + std::lock_guard lk(m_readMtx); data->m_nextBlockSize = bytesReaded; m_readCond.notify_one(); } } { - Mutex::ScopedLock lock(&m_readersMtx); + std::lock_guard lock(m_readersMtx); data->m_atQueue--; if (data->m_deleted && data->m_atQueue == 0) { delete data; @@ -277,7 +277,7 @@ void BufferedReader::thread_main() void BufferedReader::setFileIterator(FileNameIterator* itr, int readerID) { assert(readerID != -1); - Mutex::ScopedLock lock(&m_readersMtx); + std::lock_guard lock(m_readersMtx); std::map::iterator reader = m_readers.find(readerID); if (reader != m_readers.end()) reader->second->itr = itr; diff --git a/tsMuxer/src/iso_writer.cpp b/tsMuxer/src/iso_writer.cpp index df9d589..3487934 100644 --- a/tsMuxer/src/iso_writer.cpp +++ b/tsMuxer/src/iso_writer.cpp @@ -1,7 +1,5 @@ #include "iso_writer.h" #include -#include "time/time.h" -#include #include "vod_common.h" #include #include @@ -557,7 +555,6 @@ int64_t ISOFile::size() const IsoWriter::IsoWriter() { - srand(mtime::clockGetTime()); m_volumeId = random32(); m_appId = std::string("*tsMuxeR ") + std::string(APP_VERSION); m_impId = std::string("*tsMuxeR ") + int32ToHex(random32()); diff --git a/tsMuxer/src/main.cpp b/tsMuxer/src/main.cpp index 8d899d7..9a1c711 100644 --- a/tsMuxer/src/main.cpp +++ b/tsMuxer/src/main.cpp @@ -3,7 +3,6 @@ #include "metaDemuxer.h" #include "tsMuxer.h" #include "singleFileMuxer.h" -#include