CTranscoder::m_Stream is a std::list<std::shared_ptr<CCodecStream>>

pull/1/head
Tom Early 5 years ago
parent 78b3489904
commit 62e0b18c82

@ -66,11 +66,11 @@ protected:
bool m_bOpen;
uint16 m_uiStreamId;
uint32 m_uiPacketCntr;
std::shared_ptr<CClient> m_OwnerClient;
CTimePoint m_LastPacketTime;
CDvHeaderPacket m_DvHeader;
std::shared_ptr<CClient> m_OwnerClient;
#ifdef TRANSCODER_IP
CCodecStream *m_CodecStream;
std::shared_ptr<CCodecStream> m_CodecStream;
#endif
};

@ -121,14 +121,7 @@ void CTranscoder::Close(void)
// close all streams
m_Mutex.lock();
{
for ( auto it=m_Streams.begin(); it!=m_Streams.end(); it++ )
{
delete *it;
}
m_Streams.clear();
}
m_Mutex.unlock();
// kill threads
@ -202,12 +195,10 @@ void CTranscoder::Task(void)
////////////////////////////////////////////////////////////////////////////////////////
// manage streams
CCodecStream *CTranscoder::GetStream(CPacketStream *PacketStream, uint8 uiCodecIn)
std::shared_ptr<CCodecStream> CTranscoder::GetStream(CPacketStream *PacketStream, uint8 uiCodecIn)
{
CBuffer Buffer;
CCodecStream *stream = nullptr;
// do we need transcoding
if ( uiCodecIn != CODEC_NONE )
{
@ -226,29 +217,31 @@ CCodecStream *CTranscoder::GetStream(CPacketStream *PacketStream, uint8 uiCodecI
std::cout << "ambed openstream ok" << std::endl;
// create stream object
stream = new CCodecStream(PacketStream, m_StreamidOpenStream, uiCodecIn, (uiCodecIn == CODEC_AMBEPLUS) ? CODEC_AMBE2PLUS : CODEC_AMBEPLUS);
auto stream = std::make_shared<CCodecStream>(PacketStream, m_StreamidOpenStream, uiCodecIn, (uiCodecIn == CODEC_AMBEPLUS) ? CODEC_AMBE2PLUS : CODEC_AMBEPLUS);
// init it
if ( stream ) {
if ( stream->Init(m_PortOpenStream) )
{
// and append to list
Lock();
m_Streams.push_back(stream);
Unlock();
return stream;
}
else
{
// send close packet
EncodeClosestreamPacket(&Buffer, stream->GetStreamId());
m_Socket.Send(Buffer, m_Ip, TRANSCODER_PORT);
// and delete
delete stream;
stream = nullptr;
stream.reset();
}
}
else
std::cerr << "ERROR: Unable to make a new CCodecStream" << std::endl;
}
else
{
std::cout << "ambed openstream failed (no suitable channel available)" << std::endl;
std::cerr << "ERROR: Ambed openstream failed (no suitable channel available)" << std::endl;
}
}
else
@ -258,14 +251,14 @@ CCodecStream *CTranscoder::GetStream(CPacketStream *PacketStream, uint8 uiCodecI
}
}
return stream;
return nullptr;
}
void CTranscoder::ReleaseStream(CCodecStream *stream)
void CTranscoder::ReleaseStream(std::shared_ptr<CCodecStream> stream)
{
CBuffer Buffer;
if ( stream != nullptr )
if ( stream )
{
// look for the stream
bool found = false;
@ -301,7 +294,6 @@ void CTranscoder::ReleaseStream(CCodecStream *stream)
// and close it
(*it)->Close();
delete (*it);
m_Streams.erase(it);
break;
}

@ -60,8 +60,8 @@ public:
bool IsConnected(void) const { return m_bConnected; }
// manage streams
CCodecStream *GetStream(CPacketStream *, uint8);
void ReleaseStream(CCodecStream *);
std::shared_ptr<CCodecStream> GetStream(CPacketStream *, uint8);
void ReleaseStream(std::shared_ptr<CCodecStream>);
// task
void Thread(void);
@ -84,7 +84,7 @@ protected:
protected:
// streams
std::mutex m_Mutex;
std::list<CCodecStream *> m_Streams;
std::list<std::shared_ptr<CCodecStream>> m_Streams;
// sync objects for Openstream
CSemaphore m_SemaphoreOpenStream;

Loading…
Cancel
Save

Powered by TurnKey Linux.