Ticket #5061: multiple-dvb-frontends-trunk.patch
File multiple-dvb-frontends-trunk.patch, 28.8 KB (added by , 16 years ago) |
---|
-
libs/libmythtv/dvbrecorder.cpp
94 94 95 95 DVBRecorder::DVBRecorder(TVRec *rec, DVBChannel* advbchannel) 96 96 : DTVRecorder(rec), 97 // Options set in SetOption()98 _card_number_option(0),99 97 // DVB stuff 100 98 dvbchannel(advbchannel), 101 99 _stream_handler(NULL), … … 145 143 } 146 144 } 147 145 148 void DVBRecorder::SetOption(const QString &name, intvalue)146 void DVBRecorder::SetOption(const QString &name, const QString &value) 149 147 { 150 148 if (name == "cardnum") 151 149 { 152 150 _card_number_option = value; 153 videodevice = QString::number(value);151 videodevice = value; 154 152 } 155 153 else 156 154 DTVRecorder::SetOption(name, value); … … 160 158 const QString &videodev, 161 159 const QString&, const QString&) 162 160 { 163 SetOption("cardnum", videodev .toInt());161 SetOption("cardnum", videodev); 164 162 DTVRecorder::SetOption("tvformat", gContext->GetSetting("TVFormat")); 165 163 SetStrOption(profile, "recordingtype"); 166 164 } … … 318 316 return true; 319 317 } 320 318 321 if (_card_number_option < 0)319 if (_card_number_option.isEmpty()) 322 320 return false; 323 321 324 322 bzero(_stream_id, sizeof(_stream_id)); -
libs/libmythtv/cardutil.h
221 221 static bool IsDVB(uint cardid) 222 222 { return "DVB" == GetRawCardType(cardid); } 223 223 static bool IsDVBCardType(const QString card_type); 224 static QString ProbeDVBFrontendName( uintdevice);225 static QString ProbeDVBType( uintdevice);226 static bool HasDVBCRCBug( uintdevice);227 static uint GetMinSignalMonitoringDelay( uintdevice);228 static QString GetDeviceName(dvb_dev_type_t, uint cardnum);224 static QString ProbeDVBFrontendName(const QString &device); 225 static QString ProbeDVBType(const QString &device); 226 static bool HasDVBCRCBug(const QString &device); 227 static uint GetMinSignalMonitoringDelay(const QString &device); 228 static QString GetDeviceName(dvb_dev_type_t, const QString &device); 229 229 static InputNames GetConfiguredDVBInputs(uint cardid); 230 230 231 231 // V4L info -
libs/libmythtv/dvbrecorder.h
49 49 DVBRecorder(TVRec *rec, DVBChannel* dvbchannel); 50 50 ~DVBRecorder(); 51 51 52 void SetOption(const QString &name, intvalue);52 void SetOption(const QString &name, const QString &value); 53 53 54 54 void SetOptionsFromProfile(RecordingProfile *profile, 55 55 const QString &videodev, … … 108 108 109 109 private: 110 110 // Options set in SetOption() 111 int_card_number_option;111 QString _card_number_option; 112 112 113 113 // DVB stuff 114 114 DVBChannel *dvbchannel; -
libs/libmythtv/scanwizardscanner.cpp
402 402 403 403 ok = !device.isEmpty(); 404 404 if (ok) 405 sub_type = CardUtil::ProbeDVBType(device .toUInt()).upper();405 sub_type = CardUtil::ProbeDVBType(device).upper(); 406 406 } 407 407 408 408 if (ok) … … 488 488 489 489 if ("DVB" == card_type) 490 490 { 491 QString sub_type = CardUtil::ProbeDVBType(device .toUInt()).upper();491 QString sub_type = CardUtil::ProbeDVBType(device).upper(); 492 492 bool need_nit = (("QAM" == sub_type) || 493 493 ("QPSK" == sub_type) || 494 494 ("OFDM" == sub_type)); … … 508 508 509 509 #ifdef USING_DVB 510 510 if ("DVB" == card_type) 511 channel = new DVBChannel(device .toInt());511 channel = new DVBChannel(device); 512 512 #endif 513 513 514 514 #ifdef USING_V4L -
libs/libmythtv/dvbstreamhandler.h
34 34 _pid(pid), filter_fd(-1), 35 35 streamType(stream_type), pesType(pes_type) {;} 36 36 37 bool Open( uint dvb_dev_num, bool use_section_reader);38 bool Close( uint dvb_dev_num);37 bool Open(const QString &dvb_dev, bool use_section_reader); 38 bool Close(const QString &dvb_dev); 39 39 bool IsOpen(void) const { return filter_fd >= 0; } 40 40 41 41 uint _pid; … … 50 50 friend void *run_dvb_stream_handler_thunk(void *param); 51 51 52 52 public: 53 static DVBStreamHandler *Get( uint dvb_device_number);53 static DVBStreamHandler *Get(const QString &dvb_device); 54 54 static void Return(DVBStreamHandler * & ref); 55 55 56 56 void AddListener(MPEGStreamData *data, … … 71 71 virtual void ReaderPaused(int fd) { (void) fd; } 72 72 73 73 private: 74 DVBStreamHandler( uint);74 DVBStreamHandler(const QString &); 75 75 ~DVBStreamHandler(); 76 76 77 77 void Start(void); … … 94 94 bool SupportsTSMonitoring(void); 95 95 96 96 private: 97 uint _dvb_dev_num;97 QString _dvb_dev; 98 98 QString _dvr_dev_path; 99 99 bool _allow_section_reader; 100 100 bool _needs_buffering; … … 119 119 vector<MPEGStreamData*> _stream_data_list; 120 120 121 121 // for caching TS monitoring supported value. 122 static QMutex _rec_supports_ts_monitoring_lock;123 static QMap< uint,bool> _rec_supports_ts_monitoring;122 static QMutex _rec_supports_ts_monitoring_lock; 123 static QMap<QString,bool> _rec_supports_ts_monitoring; 124 124 125 125 // for implementing Get & Return 126 static QMutex _handlers_lock;127 static QMap< uint,DVBStreamHandler*> _handlers;128 static QMap< uint,uint> _handlers_refcnt;126 static QMutex _handlers_lock; 127 static QMap<QString,DVBStreamHandler*> _handlers; 128 static QMap<QString,uint> _handlers_refcnt; 129 129 }; 130 130 131 131 #endif // _DVBSTREAMHANDLER_H_ -
libs/libmythtv/dvbchannel.h
28 28 class DVBChannel : public DTVChannel 29 29 { 30 30 public: 31 DVBChannel( int cardnum, TVRec *parent = NULL);31 DVBChannel(const QString &device, TVRec *parent = NULL); 32 32 ~DVBChannel(); 33 33 34 34 bool Open(void) { return Open(this); } … … 47 47 int GetFd(void) const { return fd_frontend; } 48 48 bool IsTuningParamsProbeSupported(void) const; 49 49 50 QString GetDevice(void) const { return QString::number(GetCardNum()); }50 QString GetDevice(void) const { return device; } 51 51 /// Returns DVB device number, used to construct filenames for DVB devices 52 int GetCardNum(void) const { return cardnum; };52 QString GetCardNum(void) const { return device; }; 53 53 /// Returns frontend name as reported by driver 54 54 QString GetFrontendName(void) const; 55 55 DTVTunerType GetCardType(void) const { return card_type; } … … 139 139 140 140 // Other State 141 141 int fd_frontend; ///< File descriptor for tuning hardware 142 int cardnum; ///< DVB Card number142 QString device; ///< DVB Device 143 143 bool has_crc_bug; ///< true iff our driver munges PMT 144 144 int nextInputID; ///< Signal an input change 145 145 }; -
libs/libmythtv/dvbcam.h
17 17 class DVBCam 18 18 { 19 19 public: 20 DVBCam( int cardnum);20 DVBCam(const QString &device); 21 21 ~DVBCam(); 22 22 23 23 bool Start(); … … 34 34 35 35 void SendPMT(const ProgramMapTable &pmt, uint cplm); 36 36 37 int cardnum;37 QString device; 38 38 int numslots; 39 39 cCiHandler *ciHandler; 40 40 -
libs/libmythtv/dvbchannel.cpp
55 55 static DTVMultiplex dvbparams_to_dtvmultiplex( 56 56 DTVTunerType, const dvb_fe_params&); 57 57 58 #define LOC QString("DVBChan(%1:%2): ").arg(GetCardID()).arg( cardnum)58 #define LOC QString("DVBChan(%1:%2): ").arg(GetCardID()).arg(device) 59 59 #define LOC_WARN QString("DVBChan(%1:%2) Warning: ") \ 60 .arg(GetCardID()).arg( cardnum)61 #define LOC_ERR QString("DVBChan(%1:%2) Error: ").arg(GetCardID()).arg( cardnum)60 .arg(GetCardID()).arg(device) 61 #define LOC_ERR QString("DVBChan(%1:%2) Error: ").arg(GetCardID()).arg(device) 62 62 63 63 /** \class DVBChannel 64 64 * \brief Provides interface to the tuning hardware when using DVB drivers 65 65 * 66 66 * \bug Only supports single input cards. 67 67 */ 68 DVBChannel::DVBChannel( int aCardNum, TVRec *parent)68 DVBChannel::DVBChannel(const QString &aDevice, TVRec *parent) 69 69 : DTVChannel(parent), master(NULL), 70 70 // Helper classes 71 71 diseqc_tree(NULL), dvbcam(NULL), … … 77 77 tuning_delay(0), sigmon_delay(25), 78 78 first_tune(true), 79 79 // Misc 80 fd_frontend(-1), cardnum(aCardNum),80 fd_frontend(-1), device(aDevice), 81 81 has_crc_bug(false) 82 82 { 83 QString devname = CardUtil::GetDeviceName(DVB_DEV_FRONTEND, cardnum);83 QString devname = CardUtil::GetDeviceName(DVB_DEV_FRONTEND, device); 84 84 master = dynamic_cast<DVBChannel*>(GetMaster(devname)); 85 85 master = (master == this) ? NULL : master; 86 86 87 87 if (!master) 88 88 { 89 dvbcam = new DVBCam( cardnum);90 has_crc_bug = CardUtil::HasDVBCRCBug( aCardNum);89 dvbcam = new DVBCam(device); 90 has_crc_bug = CardUtil::HasDVBCRCBug(device); 91 91 } 92 92 else 93 93 { … … 95 95 has_crc_bug = master->has_crc_bug; 96 96 } 97 97 98 sigmon_delay = CardUtil::GetMinSignalMonitoringDelay( aCardNum);98 sigmon_delay = CardUtil::GetMinSignalMonitoringDelay(device); 99 99 } 100 100 101 101 DVBChannel::~DVBChannel() … … 187 187 return true; 188 188 } 189 189 190 QString devname = CardUtil::GetDeviceName(DVB_DEV_FRONTEND, cardnum);190 QString devname = CardUtil::GetDeviceName(DVB_DEV_FRONTEND, device); 191 191 fd_frontend = open(devname.ascii(), O_RDWR | O_NONBLOCK); 192 192 193 193 if (fd_frontend < 0) … … 262 262 symbol_rate_maximum = info.symbol_rate_max; 263 263 264 264 VERBOSE(VB_RECORD, LOC + QString("Using DVB card %1, with frontend '%2'.") 265 .arg( cardnum).arg(frontend_name));265 .arg(device).arg(frontend_name)); 266 266 267 267 // Turn on the power to the LNB 268 268 if (card_type == DTVTunerType::kTunerTypeQPSK || -
libs/libmythtv/cardutil.cpp
168 168 169 169 if (rawtype.upper() == "DVB") 170 170 { 171 QDir dir("/dev/dvb", "adapter*", QDir::Name, QDir:: All);171 QDir dir("/dev/dvb", "adapter*", QDir::Name, QDir::Dirs); 172 172 const QFileInfoList il = dir.entryInfoList(); 173 173 if (il.isEmpty()) 174 174 return devs; 175 175 176 vector<uint> list;177 QMap<uint,bool> dups;178 176 QFileInfoList::const_iterator it = il.begin(); 179 177 180 178 for (; it != il.end(); ++it) 181 179 { 182 if (it->fileName().left(7).lower() != "adapter") 180 QDir subdir(it->filePath(), "frontend*", QDir::Name, QDir::Files | QDir::System); 181 const QFileInfoList subil = subdir.entryInfoList(); 182 if (subil.isEmpty()) 183 183 continue; 184 184 185 bool ok; 186 uint num = it->fileName().mid(7).toUInt(&ok); 187 if (!ok || dups[num]) 188 continue; 189 190 list.push_back(num); 191 dups[num] = true; 185 QFileInfoList::const_iterator subit = subil.begin(); 186 for (; subit != subil.end(); ++subit) 187 devs.push_back(subit->filePath()); 192 188 } 193 194 stable_sort(list.begin(), list.end());195 196 for (uint i = 0; i < list.size(); i++)197 devs.push_back(QString::number(list[i]));198 189 } 199 190 else 200 191 { … … 205 196 return devs; 206 197 } 207 198 208 QString CardUtil::ProbeDVBType( uintdevice)199 QString CardUtil::ProbeDVBType(const QString &device) 209 200 { 210 201 QString ret = "ERROR_UNKNOWN"; 211 202 (void) device; … … 236 227 return ret; 237 228 } 238 229 239 /** \fn CardUtil::ProbeDVBFrontendName( uint)230 /** \fn CardUtil::ProbeDVBFrontendName(const QString &) 240 231 * \brief Returns the card type from the video device 241 232 */ 242 QString CardUtil::ProbeDVBFrontendName( uintdevice)233 QString CardUtil::ProbeDVBFrontendName(const QString &device) 243 234 { 244 235 QString ret = "ERROR_UNKNOWN"; 245 236 (void) device; … … 266 257 return ret; 267 258 } 268 259 269 /** \fn CardUtil::HasDVBCRCBug( uint)260 /** \fn CardUtil::HasDVBCRCBug(const QString &) 270 261 * \brief Returns true if and only if the device munges 271 262 * PAT/PMT tables, and then doesn't fix the CRC. 272 263 * … … 283 274 * \param device Open DVB frontend device file descriptor to be checked 284 275 * \return true iff the device munges tables, so that they fail a CRC check. 285 276 */ 286 bool CardUtil::HasDVBCRCBug( uintdevice)277 bool CardUtil::HasDVBCRCBug(const QString &device) 287 278 { 288 279 QString name = ProbeDVBFrontendName(device); 289 280 return ((name == "VLSI VES1x93 DVB-S") || // munges PMT 290 281 (name == "ST STV0299 DVB-S")); // munges PAT 291 282 } 292 283 293 uint CardUtil::GetMinSignalMonitoringDelay( uintdevice)284 uint CardUtil::GetMinSignalMonitoringDelay(const QString &device) 294 285 { 295 286 QString name = ProbeDVBFrontendName(device); 296 287 if (name.find("DVB-S") >= 0) … … 311 302 if (device.isEmpty()) 312 303 return "ERROR_OPEN"; 313 304 314 return ProbeDVBType(device .toUInt());305 return ProbeDVBType(device); 315 306 } 316 307 317 308 /** \fn CardUtil::IsDVBCardType(const QString) … … 1734 1725 } 1735 1726 1736 1727 1737 QString CardUtil::GetDeviceName(dvb_dev_type_t type, uint cardnum)1728 QString CardUtil::GetDeviceName(dvb_dev_type_t type, const QString &device) 1738 1729 { 1730 QString devname = QString(device); 1731 bool ok; 1732 uint devnum = devname.toUInt(&ok); 1733 if (ok) 1734 devname = QString("/dev/dvb/adapter%1/frontend0").arg(devnum); 1735 1739 1736 if (DVB_DEV_FRONTEND == type) 1740 return QString("/dev/dvb/adapter%1/frontend0").arg(cardnum);1737 return devname; 1741 1738 else if (DVB_DEV_DVR == type) 1742 return QString("/dev/dvb/adapter%1/dvr0").arg(cardnum);1739 return devname.replace(devname.find("frontend"), 8, "dvr"); 1743 1740 else if (DVB_DEV_DEMUX == type) 1744 return QString("/dev/dvb/adapter%1/demux0").arg(cardnum);1741 return devname.replace(devname.find("frontend"), 8, "demux"); 1745 1742 else if (DVB_DEV_CA == type) 1746 return QString("/dev/dvb/adapter%1/ca0").arg(cardnum);1743 return devname.replace(devname.find("frontend"), 8, "ca"); 1747 1744 else if (DVB_DEV_AUDIO == type) 1748 return QString("/dev/dvb/adapter%1/audio0").arg(cardnum);1745 return devname.replace(devname.find("frontend"), 8, "audio"); 1749 1746 else if (DVB_DEV_VIDEO == type) 1750 return QString("/dev/dvb/adapter%1/video0").arg(cardnum);1747 return devname.replace(devname.find("frontend"), 8, "video"); 1751 1748 1752 1749 return ""; 1753 1750 } -
libs/libmythtv/videosource.cpp
942 942 "should change to the name and type of your card. " 943 943 "If the card cannot be opened, an error message " 944 944 "will be displayed.")); 945 fillSelections( -1);945 fillSelections(QString()); 946 946 }; 947 947 948 948 /// \brief Adds all available cards to list 949 949 /// If current is >= 0 it will be considered available even 950 950 /// if no device exists for it in /dev/dvb/adapter* 951 void fillSelections( intcurrent)951 void fillSelections(const QString current) 952 952 { 953 953 clearSelections(); 954 954 955 955 // Get devices from filesystem 956 956 vector<QString> sdevs = CardUtil::ProbeVideoDevices("DVB"); 957 vector<uint> devs;958 for (uint i = 0; i < sdevs.size(); i++)959 devs.push_back(sdevs[i].toUInt());960 957 961 958 // Add current if needed 962 if ((current >= 0) && 963 (find(devs.begin(), devs.end(), (uint)current) == devs.end())) 959 if (!current.isEmpty() && (find(sdevs.begin(), sdevs.end(), current) == sdevs.end())) 964 960 { 965 devs.push_back(current); 966 stable_sort(devs.begin(), devs.end()); 961 stable_sort(sdevs.begin(), sdevs.end()); 967 962 } 968 963 969 964 vector<QString> db = CardUtil::GetVideoDevices("DVB"); 970 965 971 QMap< uint,bool> in_use;972 QString sel = (current >= 0) ? QString::number(current) : "";973 for (uint i = 0; i < devs.size(); i++)966 QMap<QString,bool> in_use; 967 QString sel = current; 968 for (uint i = 0; i < sdevs.size(); i++) 974 969 { 975 const QString dev = QString::number(devs[i]);976 in_use[ devs[i]] = find(db.begin(), db.end(), dev) != db.end();977 if (sel.isEmpty() && !in_use[ devs[i]])970 const QString dev = sdevs[i]; 971 in_use[sdevs[i]] = find(db.begin(), db.end(), dev) != db.end(); 972 if (sel.isEmpty() && !in_use[sdevs[i]]) 978 973 sel = dev; 979 974 } 980 975 981 if (sel.isEmpty() && devs.size())982 sel = devs[0];976 if (sel.isEmpty() && sdevs.size()) 977 sel = sdevs[0]; 983 978 984 979 QString usestr = QString(" -- "); 985 980 usestr += QObject::tr("Warning: already in use"); 986 981 987 for (uint i = 0; i < devs.size(); i++)982 for (uint i = 0; i < sdevs.size(); i++) 988 983 { 989 const QString dev = QString::number(devs[i]);990 QString desc = dev + (in_use[ devs[i]] ? usestr : "");991 desc = ( (uint)current ==devs[i]) ? dev : desc;984 const QString dev = sdevs[i]; 985 QString desc = dev + (in_use[sdevs[i]] ? usestr : ""); 986 desc = (current == sdevs[i]) ? dev : desc; 992 987 addSelection(desc, dev, dev == sel); 993 988 } 994 989 } … … 996 991 virtual void load(void) 997 992 { 998 993 clearSelections(); 999 addSelection( "-1");994 addSelection(QString()); 1000 995 1001 996 CaptureCardDBStorage::load(); 1002 997 1003 bool ok; 1004 int intval = getValue().toInt(&ok); 1005 intval = (ok) ? intval : -1; 1006 1007 fillSelections(intval); 998 QString dev = CardUtil::GetDeviceName(DVB_DEV_FRONTEND, getValue()); 999 fillSelections(dev); 1008 1000 } 1009 1001 }; 1010 1002 … … 2732 2724 (void) videodevice; 2733 2725 2734 2726 #ifdef USING_DVB 2735 uint dvbdev = videodevice.toUInt(); 2736 QString frontend_name = CardUtil::ProbeDVBFrontendName(dvbdev); 2737 QString subtype = CardUtil::ProbeDVBType(dvbdev); 2727 QString frontend_name = CardUtil::ProbeDVBFrontendName(videodevice); 2728 QString subtype = CardUtil::ProbeDVBType(videodevice); 2738 2729 2739 QString err_open = tr("Could not open card #%1").arg(dvbdev);2740 QString err_other = tr("Could not get card info for card #%1").arg(dvbdev);2730 QString err_open = tr("Could not open card %1").arg(videodevice); 2731 QString err_other = tr("Could not get card info for card %1").arg(videodevice); 2741 2732 2742 2733 switch (CardUtil::toCardType(subtype)) 2743 2734 { -
libs/libmythtv/dvbcam.cpp
58 58 #include "dvbchannel.h" 59 59 #include "dvbrecorder.h" 60 60 61 #define LOC_ERR QString("DVB#%1 CA Error: ").arg( cardnum)62 #define LOC QString("DVB#%1 CA: ").arg( cardnum)61 #define LOC_ERR QString("DVB#%1 CA Error: ").arg(device) 62 #define LOC QString("DVB#%1 CA: ").arg(device) 63 63 64 DVBCam::DVBCam( int cardNum)65 : cardnum(cardNum),numslots(0),64 DVBCam::DVBCam(const QString &aDevice) 65 : device(aDevice), numslots(0), 66 66 ciHandler(NULL), 67 67 exitCiThread(false), ciThreadRunning(false), 68 68 have_pmt(false), pmt_sent(false), 69 69 pmt_updated(false), pmt_added(false) 70 70 { 71 QString dvbdev = CardUtil::GetDeviceName(DVB_DEV_CA, cardnum);71 QString dvbdev = CardUtil::GetDeviceName(DVB_DEV_CA, device); 72 72 int cafd = open(dvbdev.ascii(), O_RDWR); 73 73 if (cafd >= 0) 74 74 { … … 95 95 pmt_updated = false; 96 96 pmt_added = false; 97 97 98 QString dvbdev = CardUtil::GetDeviceName(DVB_DEV_CA, cardnum);98 QString dvbdev = CardUtil::GetDeviceName(DVB_DEV_CA, device); 99 99 ciHandler = cCiHandler::CreateCiHandler(dvbdev.ascii()); 100 100 if (!ciHandler) 101 101 { -
libs/libmythtv/dvbstreamhandler.cpp
22 22 #include "dvbtypes.h" // for pid filtering 23 23 #include "diseqc.h" // for rotor retune 24 24 25 #define LOC QString("DVBSH(%1): ").arg(_dvb_dev _num)26 #define LOC_WARN QString("DVBSH(%1) Warning: ").arg(_dvb_dev _num)27 #define LOC_ERR QString("DVBSH(%1) Error: ").arg(_dvb_dev _num)25 #define LOC QString("DVBSH(%1): ").arg(_dvb_dev) 26 #define LOC_WARN QString("DVBSH(%1) Warning: ").arg(_dvb_dev) 27 #define LOC_ERR QString("DVBSH(%1) Error: ").arg(_dvb_dev) 28 28 29 QMap< uint,bool> DVBStreamHandler::_rec_supports_ts_monitoring;30 QMutex DVBStreamHandler::_rec_supports_ts_monitoring_lock;29 QMap<QString,bool> DVBStreamHandler::_rec_supports_ts_monitoring; 30 QMutex DVBStreamHandler::_rec_supports_ts_monitoring_lock; 31 31 32 QMap< uint,DVBStreamHandler*> DVBStreamHandler::_handlers;33 QMap< uint,uint> DVBStreamHandler::_handlers_refcnt;34 QMutex DVBStreamHandler::_handlers_lock;32 QMap<QString,DVBStreamHandler*> DVBStreamHandler::_handlers; 33 QMap<QString,uint> DVBStreamHandler::_handlers_refcnt; 34 QMutex DVBStreamHandler::_handlers_lock; 35 35 36 DVBStreamHandler *DVBStreamHandler::Get( uint dvb_device_number)36 DVBStreamHandler *DVBStreamHandler::Get(const QString &dvb_device) 37 37 { 38 38 QMutexLocker locker(&_handlers_lock); 39 39 40 QMap< uint,DVBStreamHandler*>::iterator it =41 _handlers.find(dvb_device _number);40 QMap<QString,DVBStreamHandler*>::iterator it = 41 _handlers.find(dvb_device); 42 42 43 43 if (it == _handlers.end()) 44 44 { 45 _handlers[dvb_device _number] = new DVBStreamHandler(dvb_device_number);46 _handlers_refcnt[dvb_device _number] = 1;45 _handlers[dvb_device] = new DVBStreamHandler(dvb_device); 46 _handlers_refcnt[dvb_device] = 1; 47 47 } 48 48 else 49 49 { 50 _handlers_refcnt[dvb_device _number]++;50 _handlers_refcnt[dvb_device]++; 51 51 } 52 52 53 return _handlers[dvb_device _number];53 return _handlers[dvb_device]; 54 54 } 55 55 56 56 void DVBStreamHandler::Return(DVBStreamHandler * & ref) 57 57 { 58 58 QMutexLocker locker(&_handlers_lock); 59 59 60 uint dvb_dev_num = ref->_dvb_dev_num;60 QString dvb_dev = ref->_dvb_dev; 61 61 62 QMap< uint,uint>::iterator rit = _handlers_refcnt.find(dvb_dev_num);62 QMap<QString,uint>::iterator rit = _handlers_refcnt.find(dvb_dev); 63 63 if (rit == _handlers_refcnt.end()) 64 64 return; 65 65 … … 69 69 return; 70 70 } 71 71 72 QMap< uint,DVBStreamHandler*>::iterator it = _handlers.find(dvb_dev_num);72 QMap<QString,DVBStreamHandler*>::iterator it = _handlers.find(dvb_dev); 73 73 if ((it != _handlers.end()) && (*it == ref)) 74 74 { 75 75 ref = NULL; … … 80 80 _handlers_refcnt.erase(rit); 81 81 } 82 82 83 DVBStreamHandler::DVBStreamHandler( uint dvb_device_number) :84 _dvb_dev _num(dvb_device_number),85 _dvr_dev_path(CardUtil::GetDeviceName(DVB_DEV_DVR, _dvb_dev _num)),83 DVBStreamHandler::DVBStreamHandler(const QString &dvb_device) : 84 _dvb_dev(dvb_device), 85 _dvr_dev_path(CardUtil::GetDeviceName(DVB_DEV_DVR, _dvb_dev)), 86 86 _allow_section_reader(false), 87 87 _needs_buffering(false), 88 88 _allow_retune(false), … … 259 259 bool _error = false; 260 260 if (_device_read_buffer) 261 261 { 262 bool ok = _device_read_buffer->Setup( 263 QString::number(_dvb_dev_num), dvr_fd); 262 bool ok = _device_read_buffer->Setup(_dvb_dev, dvr_fd); 264 263 265 264 if (!ok) 266 265 { … … 501 500 if (closed == priority_queue[i].end()) 502 501 break; // something is broken 503 502 504 if (_pid_info[*closed]->Open(_dvb_dev _num, _using_section_reader))503 if (_pid_info[*closed]->Open(_dvb_dev, _using_section_reader)) 505 504 { 506 505 _open_pid_filters++; 507 506 priority_open_cnt[i]++; … … 523 522 if (!info->IsOpen()) 524 523 continue; 525 524 526 if (info->Close(_dvb_dev _num))525 if (info->Close(_dvb_dev)) 527 526 freed = true; 528 527 529 528 _open_pid_filters--; … … 535 534 { 536 535 // if we can open a filter, just do it 537 536 if (_pid_info[*closed]->Open( 538 _dvb_dev _num, _using_section_reader))537 _dvb_dev, _using_section_reader)) 539 538 { 540 539 _open_pid_filters++; 541 540 priority_open_cnt[i]++; … … 552 551 break; // nothing to close.. 553 552 554 553 // close "open" 555 bool ok = _pid_info[*open]->Close(_dvb_dev _num);554 bool ok = _pid_info[*open]->Close(_dvb_dev); 556 555 _open_pid_filters--; 557 556 priority_open_cnt[i]--; 558 557 559 558 // open "closed" 560 559 if (ok && _pid_info[*closed]-> 561 Open(_dvb_dev _num, _using_section_reader))560 Open(_dvb_dev, _using_section_reader)) 562 561 { 563 562 _open_pid_filters++; 564 563 priority_open_cnt[i]++; … … 588 587 bool ok = true; 589 588 if (tmp->IsOpen()) 590 589 { 591 ok = tmp->Close(_dvb_dev _num);590 ok = tmp->Close(_dvb_dev); 592 591 _open_pid_filters--; 593 592 594 593 CycleFiltersByPriority(); … … 769 768 770 769 { 771 770 QMutexLocker locker(&_rec_supports_ts_monitoring_lock); 772 QMap< uint,bool>::const_iterator it;773 it = _rec_supports_ts_monitoring.find(_dvb_dev _num);771 QMap<QString,bool>::const_iterator it; 772 it = _rec_supports_ts_monitoring.find(_dvb_dev); 774 773 if (it != _rec_supports_ts_monitoring.end()) 775 774 return *it; 776 775 } … … 779 778 if (dvr_fd < 0) 780 779 { 781 780 QMutexLocker locker(&_rec_supports_ts_monitoring_lock); 782 _rec_supports_ts_monitoring[_dvb_dev _num] = false;781 _rec_supports_ts_monitoring[_dvb_dev] = false; 783 782 return false; 784 783 } 785 784 … … 793 792 close(dvr_fd); 794 793 795 794 QMutexLocker locker(&_rec_supports_ts_monitoring_lock); 796 _rec_supports_ts_monitoring[_dvb_dev _num] = supports_ts;795 _rec_supports_ts_monitoring[_dvb_dev] = supports_ts; 797 796 798 797 return supports_ts; 799 798 } … … 802 801 #undef LOC_WARN 803 802 #undef LOC_ERR 804 803 805 #define LOC QString("PIDInfo(%1): ").arg(dvb_dev _num)806 #define LOC_WARN QString("PIDInfo(%1) Warning: ").arg(dvb_dev _num)807 #define LOC_ERR QString("PIDInfo(%1) Error: ").arg(dvb_dev _num)804 #define LOC QString("PIDInfo(%1): ").arg(dvb_dev) 805 #define LOC_WARN QString("PIDInfo(%1) Warning: ").arg(dvb_dev) 806 #define LOC_ERR QString("PIDInfo(%1) Error: ").arg(dvb_dev) 808 807 809 bool PIDInfo::Open( uint dvb_dev_num, bool use_section_reader)808 bool PIDInfo::Open(const QString &dvb_dev, bool use_section_reader) 810 809 { 811 810 if (filter_fd >= 0) 812 811 { … … 814 813 filter_fd = -1; 815 814 } 816 815 817 QString demux_fn = CardUtil::GetDeviceName(DVB_DEV_DEMUX, dvb_dev _num);816 QString demux_fn = CardUtil::GetDeviceName(DVB_DEV_DEMUX, dvb_dev); 818 817 819 818 VERBOSE(VB_RECORD, LOC + QString("Opening filter for pid 0x%1") 820 819 .arg(_pid, 0, 16)); … … 909 908 return true; 910 909 } 911 910 912 bool PIDInfo::Close( uint dvb_dev_num)911 bool PIDInfo::Close(const QString &dvb_dev) 913 912 { 914 913 VERBOSE(VB_RECORD, LOC + 915 914 QString("Closing filter for pid 0x%1").arg(_pid, 0, 16)); -
libs/libmythtv/tv_rec.cpp
142 142 if (genOpt.cardtype == "DVB") 143 143 { 144 144 #ifdef USING_DVB 145 channel = new DVBChannel(genOpt.videodev .toInt(), this);145 channel = new DVBChannel(genOpt.videodev, this); 146 146 if (!channel->Open()) 147 147 return false; 148 148 GetDVBChannel()->SetSlowTuning(dvbOpt.dvb_tuning_delay);