BOOL CVisWarpedVideoComposite<TPixel>::Open( const char* strmname, int seqidx = -1 ) { CVisStreamHandler* pStream = OpenStreamHandler( strmname, OF_READWRITE ); if( pStream->FrameCount() > m_uFrameCount ) { m_uFrameCount = pStream->FrameCount(); } if( seqidx == -1 || seqidx >= Length() ) { T_FRAME frm; frm.SetStreamHandler( pStream, m_uCur ); PushBack( frm ); } else { T_FRAME& frm = At(seqidx); // deallocate image currently in this slot then // set the new stream handler frm.Deallocate(); frm.SetStreamHandler( pStream, m_uCur ); } }
void IPTVChannel::SetStreamData(MPEGStreamData *sd) { LOG(VB_CHANNEL, LOG_INFO, LOC + QString("SetStreamData(0x%1) StreamHandler(0x%2)") .arg((intptr_t)sd,0,16).arg((intptr_t)m_stream_handler,0,16)); QMutexLocker locker(&m_lock); if (m_stream_data == sd) return; if (m_stream_handler) { if (sd) m_stream_handler->AddListener(sd); if (m_stream_data) m_stream_handler->RemoveListener(m_stream_data); } else if (sd) { OpenStreamHandler(); m_stream_handler->AddListener(sd); } m_stream_data = sd; }
bool IPTVChannel::Tune(const IPTVTuningData &tuning, bool scanning) { QMutexLocker locker(&m_tune_lock); LOG(VB_CHANNEL, LOG_INFO, LOC + QString("Tune(%1)") .arg(tuning.GetDeviceName())); if (tuning.GetDataURL().scheme().toUpper() == "RTSP") { // TODO get RTP info using RTSP } if (!tuning.IsValid()) { LOG(VB_CHANNEL, LOG_ERR, LOC + QString("Invalid tuning info %1") .arg(tuning.GetDeviceName())); return false; } if (m_last_tuning == tuning) { LOG(VB_CHANNEL, LOG_DEBUG, LOC + QString("Already tuned to %1") .arg(tuning.GetDeviceName())); return true; } m_last_tuning = tuning; if (!m_firsttune || scanning) // for historical reason, an initial tune is requested at // startup so don't open the stream handler just yet it will // be opened after the next Tune or SetStreamData) { MPEGStreamData *tmp = m_stream_data; CloseStreamHandler(); if (tmp) SetStreamData(tmp); else OpenStreamHandler(); } m_firsttune = false; LOG(VB_CHANNEL, LOG_INFO, LOC + QString("Tuned to (%1)") .arg(tuning.GetDeviceName())); return true; }