bool FirewireChannel::Open(void) { LOG(VB_CHANNEL, LOG_INFO, LOC + "Open()"); if (!device) return false; if (isopen) return true; if (!InitializeInputs()) return false; if (m_inputs.find(m_currentInputID) == m_inputs.end()) return false; InputMap::const_iterator it = m_inputs.find(m_currentInputID); if (!FirewireDevice::IsSTBSupported(fw_opts.model) && (*it)->externalChanger.isEmpty()) { LOG(VB_GENERAL, LOG_ERR, LOC + QString("Model: '%1' is not supported.").arg(fw_opts.model)); return false; } if (!device->OpenPort()) return false; isopen = true; return true; }
bool CetonChannel::Open(void) { LOG(VB_CHANNEL, LOG_INFO, LOC + "Opening Ceton channel"); if (IsOpen()) return true; _stream_handler = CetonStreamHandler::Get(_device_id); tunerType = DTVTunerType::kTunerTypeATSC; _tuner_types.push_back(tunerType); if (!InitializeInputs()) { Close(); return false; } return _stream_handler->IsConnected(); }
bool IPTVChannel::Open(void) { LOG(VB_CHANNEL, LOG_INFO, LOC + "Open()"); if (IsOpen()) return true; QMutexLocker locker(&m_tune_lock); if (!InitializeInputs()) { Close(); return false; } if (m_stream_data) SetStreamData(m_stream_data); return true; }
bool ASIChannel::Open(void) { LOG(VB_CHANNEL, LOG_INFO, LOC + "Open()"); if (m_device.isEmpty()) return false; if (m_isopen) return true; if (!InitializeInputs()) return false; if (!m_input.inputid) return false; m_isopen = true; return true; }
bool IPTVChannel::Open(void) { LOG(VB_CHANNEL, LOG_INFO, LOC + "Open()"); if (IsOpen()) return true; m_lock.lock(); if (!InitializeInputs()) { m_lock.unlock(); Close(); return false; } if (m_stream_data) SetStreamData(m_stream_data); m_lock.unlock(); return true; }
bool IPTVChannel::Open(void) { LOG(VB_CHANNEL, LOG_INFO, LOC + "Open() -- begin"); QMutexLocker locker(&m_lock); LOG(VB_CHANNEL, LOG_INFO, LOC + "Open() -- locked"); if (!InitializeInputs()) { LOG(VB_GENERAL, LOG_ERR, LOC + "InitializeInputs() failed"); return false; } if (m_freeboxchannels.empty()) { QString content = IPTVChannelFetcher::DownloadPlaylist( m_videodev, true); m_freeboxchannels = IPTVChannelFetcher::ParsePlaylist(content); LOG(VB_GENERAL, LOG_NOTICE, LOC + QString("Loaded %1 channels from %2") .arg(m_freeboxchannels.size()) .arg(m_videodev)); } LOG(VB_CHANNEL, LOG_INFO, LOC + "Open() -- end"); return !m_freeboxchannels.empty(); }
bool DVBChannel::Open(DVBChannel *who) { LOG(VB_CHANNEL, LOG_INFO, LOC + "Opening DVB channel"); QMutexLocker locker(&hw_lock); if (fd_frontend >= 0) { is_open[who] = true; return true; } DVBChannel *master = GetMasterLock(); if (master != this) { if (!master->Open(who)) { ReturnMasterLock(master); return false; } fd_frontend = master->fd_frontend; frontend_name = master->frontend_name; tunerType = master->tunerType; capabilities = master->capabilities; ext_modulations = master->ext_modulations; frequency_minimum = master->frequency_minimum; frequency_maximum = master->frequency_maximum; symbol_rate_minimum = master->symbol_rate_minimum; symbol_rate_maximum = master->symbol_rate_maximum; is_open[who] = true; if (!InitializeInputs()) { Close(); ReturnMasterLock(master); return false; } ReturnMasterLock(master); return true; } ReturnMasterLock(master); // if we're the master we don't need this lock.. QString devname = CardUtil::GetDeviceName(DVB_DEV_FRONTEND, device); QByteArray devn = devname.toAscii(); for (int tries = 1; ; ++tries) { fd_frontend = open(devn.constData(), O_RDWR | O_NONBLOCK); if (fd_frontend >= 0) break; LOG(VB_GENERAL, LOG_WARNING, LOC + "Opening DVB frontend device failed." + ENO); if (tries >= 20 || (errno != EBUSY && errno != EAGAIN)) { LOG(VB_GENERAL, LOG_ERR, LOC + QString("Failed to open DVB frontend device due to " "fatal error or too many attempts.")); return false; } usleep(50000); } dvb_frontend_info info; memset(&info, 0, sizeof(info)); if (ioctl(fd_frontend, FE_GET_INFO, &info) < 0) { LOG(VB_GENERAL, LOG_ERR, LOC + "Failed to get frontend information." + ENO); close(fd_frontend); fd_frontend = -1; return false; } frontend_name = info.name; tunerType = info.type; #if HAVE_FE_CAN_2G_MODULATION if (tunerType == DTVTunerType::kTunerTypeDVBS1 && (info.caps & FE_CAN_2G_MODULATION)) tunerType = DTVTunerType::kTunerTypeDVBS2; #endif // HAVE_FE_CAN_2G_MODULATION capabilities = info.caps; frequency_minimum = info.frequency_min; frequency_maximum = info.frequency_max; symbol_rate_minimum = info.symbol_rate_min; symbol_rate_maximum = info.symbol_rate_max; LOG(VB_RECORD, LOG_INFO, LOC + QString("Using DVB card %1, with frontend '%2'.") .arg(device).arg(frontend_name)); // Turn on the power to the LNB if (tunerType.IsDiSEqCSupported()) { diseqc_tree = diseqc_dev.FindTree(GetCardID()); if (diseqc_tree) diseqc_tree->Open(fd_frontend); } dvbcam->Start(); first_tune = true; if (!InitializeInputs()) { Close(); return false; } if (fd_frontend >= 0) is_open[who] = true; return (fd_frontend >= 0); }