move fec codec factory registry to NormSessionMgr
parent
fe495011fa
commit
c7d943aea8
|
|
@ -75,6 +75,9 @@ class NormController
|
|||
const NormFecLayout* fec_layouts[256];
|
||||
}; // end class NormController
|
||||
|
||||
typedef class NormEncoder* (*NormEncoderFactory)();
|
||||
typedef class NormDecoder* (*NormDecoderFactory)();
|
||||
|
||||
class NormSessionMgr
|
||||
{
|
||||
friend class NormSession;
|
||||
|
|
@ -117,6 +120,12 @@ class NormSessionMgr
|
|||
NormDataObject::DataFreeFunctionHandle GetDataFreeFunction() const
|
||||
{return data_free_func;}
|
||||
|
||||
// FEC codec factory registry (shared by all sessions this manager owns)
|
||||
void RegisterFecCoder(UINT8 fecId, NormEncoderFactory encoderFactory, NormDecoderFactory decoderFactory, bool isRateless);
|
||||
NormEncoderFactory GetEncoderFactory(UINT8 fecId) const {return encoder_factories[fecId];}
|
||||
NormDecoderFactory GetDecoderFactory(UINT8 fecId) const {return decoder_factories[fecId];}
|
||||
bool IsRatelessFec(UINT8 fecId) const {return is_rateless_codec[fecId];}
|
||||
|
||||
private:
|
||||
ProtoTimerMgr& timer_mgr;
|
||||
ProtoSocket::Notifier& socket_notifier;
|
||||
|
|
@ -126,10 +135,11 @@ class NormSessionMgr
|
|||
|
||||
class NormSession* top_session; // top of NormSession list
|
||||
|
||||
}; // end class NormSessionMgr
|
||||
NormEncoderFactory encoder_factories[256];
|
||||
NormDecoderFactory decoder_factories[256];
|
||||
bool is_rateless_codec[256];
|
||||
|
||||
typedef class NormEncoder* (*NormEncoderFactory)();
|
||||
typedef class NormDecoder* (*NormDecoderFactory)();
|
||||
}; // end class NormSessionMgr
|
||||
|
||||
class NormSession : public NormTelemetryContext
|
||||
{
|
||||
|
|
@ -473,10 +483,11 @@ class NormSession : public NormTelemetryContext
|
|||
void SenderSetExtraParity(UINT16 extraParity)
|
||||
{extra_parity = extraParity;}
|
||||
|
||||
void RegisterFecCoder(UINT8 fecId, NormEncoderFactory encoderFactory, NormDecoderFactory decoderFactory, bool isRateless);
|
||||
NormEncoderFactory GetEncoderFactory(UINT8 fecId) const;
|
||||
NormDecoderFactory GetDecoderFactory(UINT8 fecId) const;
|
||||
bool IsRatelessFec(UINT8 fecId) const { return is_rateless_codec[fecId]; }
|
||||
// FEC codec factories are registered/owned by the NormSessionMgr so a
|
||||
// single registry is shared across all sessions of a NORM API instance.
|
||||
NormEncoderFactory GetEncoderFactory(UINT8 fecId) const {return session_mgr.GetEncoderFactory(fecId);}
|
||||
NormDecoderFactory GetDecoderFactory(UINT8 fecId) const {return session_mgr.GetDecoderFactory(fecId);}
|
||||
bool IsRatelessFec(UINT8 fecId) const {return session_mgr.IsRatelessFec(fecId);}
|
||||
|
||||
NormEncoder* GetEncoder() const { return encoder; }
|
||||
|
||||
|
|
@ -817,9 +828,6 @@ class NormSession : public NormTelemetryContext
|
|||
NormBlockPool block_pool;
|
||||
NormSegmentPool segment_pool;
|
||||
NormEncoder* encoder;
|
||||
NormEncoderFactory encoder_factories[256];
|
||||
NormDecoderFactory decoder_factories[256];
|
||||
bool is_rateless_codec[256];
|
||||
UINT8 fec_id;
|
||||
UINT8 fec_m;
|
||||
INT32 fec_block_mask;
|
||||
|
|
|
|||
|
|
@ -1689,7 +1689,7 @@ bool NormRegisterFecCoder(NormSessionHandle sessionHandle,
|
|||
NormSession* session = (NormSession*)sessionHandle;
|
||||
if (session)
|
||||
{
|
||||
session->RegisterFecCoder(fecId, encoderFactory, decoderFactory, isRateless);
|
||||
session->GetSessionMgr().RegisterFecCoder(fecId, encoderFactory, decoderFactory, isRateless);
|
||||
instance->dispatcher.ResumeThread();
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -133,11 +133,6 @@ NormSession::NormSession(NormSessionMgr &sessionMgr, NormNodeId localNodeId)
|
|||
user_timer.SetListener(this, &NormSession::OnUserTimeout);
|
||||
user_timer.SetInterval(0.0);
|
||||
user_timer.SetRepeat(0);
|
||||
|
||||
memset(encoder_factories, 0, sizeof(encoder_factories));
|
||||
memset(decoder_factories, 0, sizeof(decoder_factories));
|
||||
memset(is_rateless_codec, 0, sizeof(is_rateless_codec));
|
||||
is_rateless_codec[NormPayloadId::RL] = true; // Built-in RL codec
|
||||
}
|
||||
|
||||
NormSession::~NormSession()
|
||||
|
|
@ -152,23 +147,6 @@ NormSession::~NormSession()
|
|||
Close();
|
||||
}
|
||||
|
||||
void NormSession::RegisterFecCoder(UINT8 fecId, NormEncoderFactory encoderFactory, NormDecoderFactory decoderFactory, bool isRateless)
|
||||
{
|
||||
encoder_factories[fecId] = encoderFactory;
|
||||
decoder_factories[fecId] = decoderFactory;
|
||||
is_rateless_codec[fecId] = isRateless;
|
||||
}
|
||||
|
||||
NormEncoderFactory NormSession::GetEncoderFactory(UINT8 fecId) const
|
||||
{
|
||||
return encoder_factories[fecId];
|
||||
}
|
||||
|
||||
NormDecoderFactory NormSession::GetDecoderFactory(UINT8 fecId) const
|
||||
{
|
||||
return decoder_factories[fecId];
|
||||
}
|
||||
|
||||
bool NormSession::Open()
|
||||
{
|
||||
ASSERT(address.IsValid());
|
||||
|
|
@ -5841,8 +5819,19 @@ NormSessionMgr::NormSessionMgr(ProtoTimerMgr &timerMgr,
|
|||
: timer_mgr(timerMgr), socket_notifier(socketNotifier), channel_notifier(channelNotifier),
|
||||
controller(NULL), data_free_func(NULL), top_session(NULL)
|
||||
{
|
||||
memset(encoder_factories, 0, sizeof(encoder_factories));
|
||||
memset(decoder_factories, 0, sizeof(decoder_factories));
|
||||
memset(is_rateless_codec, 0, sizeof(is_rateless_codec));
|
||||
is_rateless_codec[NormPayloadId::RL] = true; // Built-in RL codec
|
||||
}
|
||||
|
||||
void NormSessionMgr::RegisterFecCoder(UINT8 fecId, NormEncoderFactory encoderFactory, NormDecoderFactory decoderFactory, bool isRateless)
|
||||
{
|
||||
encoder_factories[fecId] = encoderFactory;
|
||||
decoder_factories[fecId] = decoderFactory;
|
||||
is_rateless_codec[fecId] = isRateless;
|
||||
} // end NormSessionMgr::RegisterFecCoder()
|
||||
|
||||
NormSessionMgr::~NormSessionMgr()
|
||||
{
|
||||
Destroy();
|
||||
|
|
|
|||
Loading…
Reference in New Issue