Ticket #2874: encryption_sigmon_v2.diff
File encryption_sigmon_v2.diff, 24.1 KB (added by , 17 years ago) |
---|
-
mythtv/libs/libmythtv/dtvsignalmonitor.cpp
diff --git a/mythtv/libs/libmythtv/dtvsignalmonitor.cpp b/mythtv/libs/libmythtv/dtvsignalmonitor.cpp index 52ddf2f..665eebd 100644
a b 1 1 #include <unistd.h> 2 2 3 3 #include "dtvchannel.h" 4 #include "dvbchannel.h" 4 5 #include "dtvsignalmonitor.h" 5 6 #include "scanstreamdata.h" 6 7 #include "mpegtables.h" … … DTVSignalMonitor::DTVSignalMonitor(int db_cardnum, 30 31 seenVCT(tr("Seen")+" VCT", "seen_vct", 1, true, 0, 1, 0), 31 32 seenNIT(tr("Seen")+" NIT", "seen_nit", 1, true, 0, 1, 0), 32 33 seenSDT(tr("Seen")+" SDT", "seen_sdt", 1, true, 0, 1, 0), 34 seenCrypt(tr("Seen")+" Crypt", "seen_crypt", 1, true, 0, 1, 0), 33 35 matchingPAT(tr("Matching")+" PAT", "matching_pat", 1, true, 0, 1, 0), 34 36 matchingPMT(tr("Matching")+" PMT", "matching_pmt", 1, true, 0, 1, 0), 35 37 matchingMGT(tr("Matching")+" MGT", "matching_mgt", 1, true, 0, 1, 0), 36 38 matchingVCT(tr("Matching")+" VCT", "matching_vct", 1, true, 0, 1, 0), 37 39 matchingNIT(tr("Matching")+" NIT", "matching_nit", 1, true, 0, 1, 0), 38 40 matchingSDT(tr("Matching")+" SDT", "matching_sdt", 1, true, 0, 1, 0), 41 matchingCrypt(tr("Matching")+" Crypt", "matching_crypt", 42 1, true, 0, 1, 0), 39 43 majorChannel(-1), minorChannel(-1), 40 44 networkID(0), transportID(0), 41 45 detectedNetworkID(0), detectedTransportID(0), … … QStringList DTVSignalMonitor::GetStatusList(bool kick) 112 116 list<<seenSDT.GetName()<<seenSDT.GetStatus(); 113 117 list<<matchingSDT.GetName()<<matchingSDT.GetStatus(); 114 118 } 119 if (flags & kDTVSigMon_WaitForCrypt) 120 { 121 list<<seenCrypt.GetName()<<seenCrypt.GetStatus(); 122 list<<matchingCrypt.GetName()<<matchingCrypt.GetStatus(); 123 } 115 124 if (error != "") 116 125 { 117 126 list<<"error"<<error; … … void DTVSignalMonitor::UpdateMonitorValues(void) 140 149 seenVCT.SetValue( (flags & kDTVSigMon_VCTSeen) ? 1 : 0); 141 150 seenNIT.SetValue( (flags & kDTVSigMon_NITSeen) ? 1 : 0); 142 151 seenSDT.SetValue( (flags & kDTVSigMon_SDTSeen) ? 1 : 0); 152 seenCrypt.SetValue( (flags & kDTVSigMon_CryptSeen)? 1 : 0); 143 153 matchingPAT.SetValue((flags & kDTVSigMon_PATMatch) ? 1 : 0); 144 154 matchingPMT.SetValue((flags & kDTVSigMon_PMTMatch) ? 1 : 0); 145 155 matchingMGT.SetValue((flags & kDTVSigMon_MGTMatch) ? 1 : 0); 146 156 matchingVCT.SetValue((flags & kDTVSigMon_VCTMatch) ? 1 : 0); 147 157 matchingNIT.SetValue((flags & kDTVSigMon_NITMatch) ? 1 : 0); 148 158 matchingSDT.SetValue((flags & kDTVSigMon_SDTMatch) ? 1 : 0); 159 matchingCrypt.SetValue((flags & kDTVSigMon_CryptMatch) ? 1 : 0); 149 160 } 150 161 151 162 void DTVSignalMonitor::UpdateListeningForEIT(void) … … void DTVSignalMonitor::SetChannel(int major, int minor) 177 188 DBG_SM(QString("SetChannel(%1, %2)").arg(major).arg(minor), ""); 178 189 if (GetATSCStreamData() && (majorChannel != major || minorChannel != minor)) 179 190 { 180 RemoveFlags(kDTVSigMon_PATSeen | kDTVSigMon_PATMatch | 181 kDTVSigMon_PMTSeen | kDTVSigMon_PMTMatch | 182 kDTVSigMon_VCTSeen | kDTVSigMon_VCTMatch); 191 RemoveFlags(kDTVSigMon_PATSeen | kDTVSigMon_PATMatch | 192 kDTVSigMon_PMTSeen | kDTVSigMon_PMTMatch | 193 kDTVSigMon_VCTSeen | kDTVSigMon_VCTMatch | 194 kDTVSigMon_CryptSeen | kDTVSigMon_CryptMatch); 183 195 majorChannel = major; 184 196 minorChannel = minor; 185 197 GetATSCStreamData()->SetDesiredChannel(major, minor); … … void DTVSignalMonitor::SetProgramNumber(int progNum) 192 204 DBG_SM(QString("SetProgramNumber(%1)").arg(progNum), ""); 193 205 if (programNumber != progNum) 194 206 { 195 RemoveFlags(kDTVSigMon_PMTSeen | kDTVSigMon_PMTMatch); 207 RemoveFlags(kDTVSigMon_PMTSeen | kDTVSigMon_PMTMatch | 208 kDTVSigMon_CryptSeen | kDTVSigMon_CryptMatch); 196 209 programNumber = progNum; 197 210 if (GetStreamData()) 198 211 GetStreamData()->SetDesiredProgram(programNumber); … … void DTVSignalMonitor::SetDVBService(uint netid, uint tsid, int serviceid) 211 224 return; 212 225 } 213 226 214 RemoveFlags(kDTVSigMon_PMTSeen | kDTVSigMon_PMTMatch | 215 kDTVSigMon_SDTSeen | kDTVSigMon_SDTMatch); 227 RemoveFlags(kDTVSigMon_PMTSeen | kDTVSigMon_PMTMatch | 228 kDTVSigMon_SDTSeen | kDTVSigMon_SDTMatch | 229 kDTVSigMon_CryptSeen | kDTVSigMon_CryptMatch); 216 230 217 231 transportID = tsid; 218 232 networkID = netid; … … void DTVSignalMonitor::HandlePMT(uint, const ProgramMapTable *pmt) 328 342 if ((hasVideo >= GetStreamData()->GetVideoStreamsRequired()) && 329 343 (hasAudio >= GetStreamData()->GetAudioStreamsRequired())) 330 344 { 345 if (pmt->IsEncrypted()) 346 { 347 #ifdef USING_DVB 348 DVBChannel* dvbchan = dynamic_cast<DVBChannel*>(GetDTVChannel()); 349 if (dvbchan) 350 dvbchan->SetPMT(pmt); 351 #endif 352 AddFlags(kDTVSigMon_WaitForCrypt); 353 GetStreamData()->TestDecryption(pmt); 354 } 331 355 AddFlags(kDTVSigMon_PMTMatch); 332 356 } 333 357 else … … void DTVSignalMonitor::HandleSDT(uint, const ServiceDescriptionTable *sdt) 432 456 } 433 457 } 434 458 459 void DTVSignalMonitor::HandleEncryptionStatus(uint, bool enc_status) 460 { 461 AddFlags(kDTVSigMon_CryptSeen); 462 if (!enc_status) 463 AddFlags(kDTVSigMon_CryptMatch); 464 } 465 435 466 ATSCStreamData *DTVSignalMonitor::GetATSCStreamData() 436 467 { 437 468 return dynamic_cast<ATSCStreamData*>(stream_data); … … bool DTVSignalMonitor::IsAllGood(void) const 479 510 return false; 480 511 if ((flags & kDTVSigMon_WaitForSDT) && !matchingSDT.IsGood()) 481 512 return false; 513 if ((flags & kDTVSigMon_WaitForCrypt) && !matchingCrypt.IsGood()) 514 return false; 482 515 483 516 return true; 484 517 } -
mythtv/libs/libmythtv/dtvsignalmonitor.h
diff --git a/mythtv/libs/libmythtv/dtvsignalmonitor.h b/mythtv/libs/libmythtv/dtvsignalmonitor.h index 4547b22..d52225e 100644
a b class DTVSignalMonitor : public SignalMonitor, 86 86 void HandlePAT(const ProgramAssociationTable*); 87 87 void HandleCAT(const ConditionalAccessTable*) {} 88 88 void HandlePMT(uint, const ProgramMapTable*); 89 void HandleEncryptionStatus(uint, bool enc_status); 89 90 90 91 // ATSC Main 91 92 void HandleSTT(const SystemTimeTable*) {} … … class DTVSignalMonitor : public SignalMonitor, 118 119 SignalMonitorValue seenVCT; 119 120 SignalMonitorValue seenNIT; 120 121 SignalMonitorValue seenSDT; 122 SignalMonitorValue seenCrypt; 121 123 SignalMonitorValue matchingPAT; 122 124 SignalMonitorValue matchingPMT; 123 125 SignalMonitorValue matchingMGT; 124 126 SignalMonitorValue matchingVCT; 125 127 SignalMonitorValue matchingNIT; 126 128 SignalMonitorValue matchingSDT; 129 SignalMonitorValue matchingCrypt; 127 130 128 131 // ATSC tuning info 129 132 int majorChannel; -
mythtv/libs/libmythtv/dvbrecorder.h
diff --git a/mythtv/libs/libmythtv/dvbrecorder.h b/mythtv/libs/libmythtv/dvbrecorder.h index 69fba97..7104af2 100644
a b class DVBRecorder : public DTVRecorder, 81 81 void HandlePAT(const ProgramAssociationTable*); 82 82 void HandleCAT(const ConditionalAccessTable*) {} 83 83 void HandlePMT(uint pid, const ProgramMapTable*); 84 void HandleEncryptionStatus(uint, bool) { } 84 85 85 86 void SetStreamData(MPEGStreamData*); 86 87 MPEGStreamData* GetStreamData(void) { return _stream_data; } -
mythtv/libs/libmythtv/hdhrrecorder.h
diff --git a/mythtv/libs/libmythtv/hdhrrecorder.h b/mythtv/libs/libmythtv/hdhrrecorder.h index e541710..128390e 100644
a b class HDHRRecorder : public DTVRecorder, 46 46 void HandlePAT(const ProgramAssociationTable*); 47 47 void HandleCAT(const ConditionalAccessTable*) {} 48 48 void HandlePMT(uint pid, const ProgramMapTable*); 49 void HandleEncryptionStatus(uint, bool) {} 49 50 50 51 // MPEG Single Program Stream Listener 51 52 void HandleSingleProgramPAT(ProgramAssociationTable *pat); -
mythtv/libs/libmythtv/mpeg/mpegstreamdata.cpp
diff --git a/mythtv/libs/libmythtv/mpeg/mpegstreamdata.cpp b/mythtv/libs/libmythtv/mpeg/mpegstreamdata.cpp index 246ef84..3549929 100644
a b int MPEGStreamData::ProcessData(unsigned char *buffer, int len) 727 727 bool MPEGStreamData::ProcessTSPacket(const TSPacket& tspacket) 728 728 { 729 729 bool ok = !tspacket.TransportError(); 730 if (ok && !tspacket.ScramplingControl() && tspacket.HasPayload() && 731 IsListeningPID(tspacket.PID())) 730 731 if (IsEncryptionTestPID(tspacket.PID())) 732 { 733 ProcessEncryptedPacket(tspacket); 734 } 735 else if (ok && !tspacket.ScramplingControl() && tspacket.HasPayload() && 736 IsListeningPID(tspacket.PID())) 732 737 { 733 738 HandleTSTables(&tspacket); 734 739 } 740 735 741 return ok; 736 742 } 737 743 … … bool MPEGStreamData::IsAudioPID(uint pid) const 778 784 return it != _pids_audio.end(); 779 785 } 780 786 787 bool MPEGStreamData::IsEncryptionTestPID(uint pid) const 788 { 789 QMap<uint, bool>::const_iterator it = _pids_encryption.find(pid); 790 return it != _pids_encryption.end(); 791 } 792 781 793 void MPEGStreamData::SavePartialPES(uint pid, PESPacket* packet) 782 794 { 783 795 pid_pes_map_t::iterator it = _partial_pes_packet_cache.find(pid); … … void MPEGStreamData::RemoveMPEGSPListener(MPEGSingleProgramStreamListener *val) 1189 1201 } 1190 1202 } 1191 1203 } 1204 1205 void MPEGStreamData::AddEncryptionTestPID(uint pid) 1206 { 1207 AddListeningPID(pid); 1208 _pids_encryption[pid] = false; 1209 _pids_encrypted_packets[pid] = 0; 1210 _pids_decrypted_packets[pid] = 0; 1211 } 1212 1213 void MPEGStreamData::RemoveEncryptionTestPID(uint pid) 1214 { 1215 RemoveListeningPID(pid); 1216 _pids_encryption.erase(pid); 1217 _pids_encrypted_packets.erase(pid); 1218 _pids_decrypted_packets.erase(pid); 1219 } 1220 1221 void MPEGStreamData::TestDecryption(const ProgramMapTable* pmt) 1222 { 1223 VERBOSE(VB_RECORD, 1224 QString("Setting decryption Signal Monitoring " 1225 "for program id %1 up.").arg(pmt->ProgramNumber())); 1226 1227 bool encrypted = pmt->IsProgramEncrypted(); 1228 for (uint i = 0; i < pmt->StreamCount(); i++) 1229 if ((encrypted || pmt->IsStreamEncrypted(i)) && 1230 (pmt->IsVideo(i, _sistandard) || pmt->IsAudio(i, _sistandard))) 1231 AddEncryptionTestPID(pmt->StreamPID(i)); 1232 } 1233 1234 #define SAFE_DECRYPTED_PACKETS 8 1235 #define SAFE_ENCRYPTED_PACKETS 10000 1236 1237 /** \fn MPEGStreamData::ProcessEncryptedPacket(const TSPacket& tspacket) 1238 * \brief counts en/decrypted packets to decide if a stream is en/decrypted 1239 */ 1240 void MPEGStreamData::ProcessEncryptedPacket(const TSPacket& tspacket) 1241 { 1242 uint pid = tspacket.PID(); 1243 1244 if (tspacket.ScramplingControl()) 1245 { 1246 _pids_decrypted_packets[pid] = 0; 1247 1248 // if a fair amount of encrypted packets is passed assume that 1249 // the stream is not decryptable now 1250 if (++_pids_encrypted_packets[pid] > SAFE_ENCRYPTED_PACKETS && 1251 !_pids_encryption[pid]) 1252 { 1253 _pids_encryption[pid] = true; 1254 VERBOSE(VB_IMPORTANT, 1255 QString("Couldn't decrypt stream on PID %1.").arg(pid)); 1256 1257 _listener_lock.lock(); 1258 for (uint i = 0; i < _mpeg_listeners.size(); i++) 1259 _mpeg_listeners[i]->HandleEncryptionStatus(0, true); 1260 _listener_lock.unlock(); 1261 } 1262 } 1263 else 1264 { 1265 _pids_encrypted_packets[pid] = 0; 1266 if (++_pids_decrypted_packets[pid] > SAFE_DECRYPTED_PACKETS) 1267 { 1268 RemoveEncryptionTestPID(pid); 1269 VERBOSE(VB_RECORD, 1270 QString("Stream on PID %1 is now unencrypted").arg(pid)); 1271 } 1272 } 1273 1274 // report only success if all stream com unencrypted 1275 if (_pids_encryption.size() < 1) 1276 { 1277 _listener_lock.lock(); 1278 for (uint i = 0; i < _mpeg_listeners.size(); i++) 1279 _mpeg_listeners[i]->HandleEncryptionStatus(0, false); 1280 _listener_lock.unlock(); 1281 } 1282 } -
mythtv/libs/libmythtv/mpeg/mpegstreamdata.h
diff --git a/mythtv/libs/libmythtv/mpeg/mpegstreamdata.h b/mythtv/libs/libmythtv/mpeg/mpegstreamdata.h index fd053a2..6b9cbae 100644
a b class MPEGStreamData : public EITSource 68 68 virtual bool ProcessTSPacket(const TSPacket& tspacket); 69 69 virtual int ProcessData(unsigned char *buffer, int len); 70 70 inline void HandleAdaptationFieldControl(const TSPacket* tspacket); 71 virtual void TestDecryption(const ProgramMapTable* pmt); 71 72 72 73 // Listening 73 74 virtual void AddListeningPID(uint pid) { _pids_listening[pid] = true; } 74 75 virtual void AddNotListeningPID(uint pid){_pids_notlistening[pid] = true;} 75 76 virtual void AddWritingPID(uint pid) { _pids_writing[pid] = true; } 76 77 virtual void AddAudioPID(uint pid) { _pids_audio[pid] = true; } 78 virtual void AddEncryptionTestPID(uint pid); 77 79 78 80 virtual void RemoveListeningPID(uint pid) { _pids_listening.erase(pid); } 79 81 virtual void RemoveNotListeningPID(uint pid) 80 82 { _pids_notlistening.erase(pid); } 81 83 virtual void RemoveWritingPID(uint pid) { _pids_writing.erase(pid); } 82 84 virtual void RemoveAudioPID(uint pid) { _pids_audio.erase(pid); } 85 virtual void RemoveEncryptionTestPID(uint pid); 83 86 84 87 virtual bool IsListeningPID(uint pid) const; 85 88 virtual bool IsNotListeningPID(uint pid) const; 86 89 virtual bool IsWritingPID(uint pid) const; 87 90 virtual bool IsAudioPID(uint pid) const; 91 virtual bool IsEncryptionTestPID(uint pid) const; 88 92 89 93 virtual QMap<uint, bool> ListeningPIDs(void) const 90 94 { return _pids_listening; } 91 95 96 virtual QMap<uint, bool> EncryptionTestPID(void) const 97 { return _pids_encryption; } 98 99 92 100 // Table versions 93 101 void SetVersionPAT(uint tsid, int version, uint last_section) 94 102 { … … class MPEGStreamData : public EITSource 214 222 void DeletePartialPES(uint pid); 215 223 void ProcessPAT(const ProgramAssociationTable *pat); 216 224 void ProcessPMT(const ProgramMapTable *pmt); 225 void ProcessEncryptedPacket(const TSPacket&); 217 226 218 227 static int ResyncStream(unsigned char *buffer, int curr_pos, int len); 219 228 … … class MPEGStreamData : public EITSource 237 246 QMap<uint, bool> _pids_notlistening; 238 247 QMap<uint, bool> _pids_writing; 239 248 QMap<uint, bool> _pids_audio; 249 QMap<uint, bool> _pids_encryption; 250 QMap<uint, uint> _pids_encrypted_packets; 251 QMap<uint, uint> _pids_decrypted_packets; 240 252 241 253 // Signals 242 254 mutable QMutex _listener_lock; -
mythtv/libs/libmythtv/mpeg/mpegtables.cpp
diff --git a/mythtv/libs/libmythtv/mpeg/mpegtables.cpp b/mythtv/libs/libmythtv/mpeg/mpegtables.cpp index 91fe025..00b1fc9 100644
a b bool ProgramMapTable::IsAudio(uint i, QString sistandard) const 281 281 */ 282 282 bool ProgramMapTable::IsEncrypted(void) const 283 283 { 284 bool encrypted = IsProgramEncrypted(); 285 286 for (uint i = 0; !encrypted && i < StreamCount(); i++) 287 encrypted |= IsStreamEncrypted(i); 288 289 return encrypted; 290 } 291 292 /** \fn ProgramMapTable::IsProgramEncrypted(void) const 293 * \brief Returns true iff PMT's ProgramInfo contains CA descriptor. 294 */ 295 bool ProgramMapTable::IsProgramEncrypted(void) const 296 { 284 297 desc_list_t descs = MPEGDescriptor::ParseOnlyInclude( 285 298 ProgramInfo(), ProgramInfoLength(), DescriptorID::conditional_access); 286 299 … … bool ProgramMapTable::IsEncrypted(void) const 295 308 //VERBOSE(VB_IMPORTANT, "DTVsm: "<<cad.toString()); 296 309 } 297 310 298 for (uint i = 0; i < StreamCount(); i++) 299 { 300 desc_list_t descs = MPEGDescriptor::ParseOnlyInclude( 301 StreamInfo(i), StreamInfoLength(i), 302 DescriptorID::conditional_access); 311 return encrypted; 312 } 303 313 304 for (uint j = 0; j < descs.size(); j++) 305 { 306 ConditionalAccessDescriptor cad(descs[j]); 307 encryption_system[cad.PID()] = cad.SystemID(); 308 encrypted |= cad.SystemID(); 314 /** \fn ProgramMapTable::IsStreamEncrypted(uint i) const 315 * \brief Returns true iff PMT contains CA descriptor. 316 * 317 * \param i index of stream 318 */ 319 bool ProgramMapTable::IsStreamEncrypted(uint i) const 320 { 321 desc_list_t descs = MPEGDescriptor::ParseOnlyInclude( 322 StreamInfo(i), StreamInfoLength(i), DescriptorID::conditional_access); 309 323 310 //VERBOSE(VB_IMPORTANT, "DTVsm: "<<cad.toString()); 311 } 324 bool encrypted = false; 325 QMap<uint,uint> encryption_system; 326 for (uint j = 0; j < descs.size(); j++) 327 { 328 ConditionalAccessDescriptor cad(descs[j]); 329 encryption_system[cad.PID()] = cad.SystemID(); 330 encrypted |= cad.SystemID(); 331 332 //VERBOSE(VB_IMPORTANT, "DTVsm: "<<cad.toString()); 312 333 } 313 334 314 335 return encrypted; -
mythtv/libs/libmythtv/mpeg/mpegtables.h
diff --git a/mythtv/libs/libmythtv/mpeg/mpegtables.h b/mythtv/libs/libmythtv/mpeg/mpegtables.h index 3ac796f..5416bac 100644
a b class ProgramMapTable : public PSIPTable 461 461 Parse(); 462 462 } 463 463 464 ProgramMapTable(const PSIPTable& table) : PSIPTable(table)464 ProgramMapTable(const PSIPTable& table) : PSIPTable(table) 465 465 { 466 466 assert(TableID::PMT == TableID()); 467 467 Parse(); … … class ProgramMapTable : public PSIPTable 528 528 bool IsVideo(uint i, QString sistandard) const; 529 529 bool IsAudio(uint i, QString sistandard) const; 530 530 bool IsEncrypted(void) const; 531 bool IsProgramEncrypted(void) const; 532 bool IsStreamEncrypted(uint) const; 531 533 /// Returns true iff PMT contains a still-picture video stream 532 534 bool IsStillPicture(QString sistandard) const; 533 535 /// Returns a string representation of type at stream index i -
mythtv/libs/libmythtv/mpeg/streamlisteners.h
diff --git a/mythtv/libs/libmythtv/mpeg/streamlisteners.h b/mythtv/libs/libmythtv/mpeg/streamlisteners.h index 7a719ec..684bebd 100644
a b 1 // -*- Mode: c++ -*- 1 2 #ifndef _STREAMLISTENERS_H_ 2 3 #define _STREAMLISTENERS_H_ 3 4 … … class MPEGStreamListener 41 42 virtual void HandlePAT(const ProgramAssociationTable*) = 0; 42 43 virtual void HandleCAT(const ConditionalAccessTable*) = 0; 43 44 virtual void HandlePMT(uint program_num, const ProgramMapTable*) = 0; 45 virtual void HandleEncryptionStatus(uint program_number, bool) = 0; 44 46 }; 45 47 46 48 class MPEGSingleProgramStreamListener -
mythtv/libs/libmythtv/signalmonitor.h
diff --git a/mythtv/libs/libmythtv/signalmonitor.h b/mythtv/libs/libmythtv/signalmonitor.h index 0ecb13a..c551dbf 100644
a b class SignalMonitor : public QObject 148 148 static const uint64_t kDTVSigMon_SDTSeen = 0x0000000080ULL; 149 149 /// We've seen the FireWire STB power state 150 150 static const uint64_t kFWSigMon_PowerSeen = 0x0000000100ULL; 151 /// We can encrypt the stream 152 static const uint64_t kDTVSigMon_CryptSeen = 0x0000000200ULL; 151 153 152 154 /// We've seen a PAT matching our requirements 153 155 static const uint64_t kDTVSigMon_PATMatch = 0x0000001000ULL; … … class SignalMonitor : public QObject 167 169 static const uint64_t kDTVSigMon_SDTMatch = 0x0000080000ULL; 168 170 /// We've seen a FireWire STB power state matching our requirements 169 171 static const uint64_t kFWSigMon_PowerMatch = 0x0000100000ULL; 172 /// We can encrypt the stream 173 static const uint64_t kDTVSigMon_CryptMatch = 0x0000200000ULL; 170 174 171 175 static const uint64_t kDTVSigMon_WaitForPAT = 0x0001000000ULL; 172 176 static const uint64_t kDTVSigMon_WaitForPMT = 0x0002000000ULL; … … class SignalMonitor : public QObject 176 180 static const uint64_t kDTVSigMon_WaitForSDT = 0x0020000000ULL; 177 181 static const uint64_t kDTVSigMon_WaitForSig = 0x0040000000ULL; 178 182 static const uint64_t kFWSigMon_WaitForPower= 0x0080000000ULL; 183 static const uint64_t kDTVSigMon_WaitForCrypt=0x0100000000ULL; 179 184 180 static const uint64_t kDTVSigMon_WaitForAll = 0x0 0FF000000ULL;185 static const uint64_t kDTVSigMon_WaitForAll = 0x01FF000000ULL; 181 186 182 187 /// Wait for the Signal to Noise Ratio to rise above a threshhold 183 static const uint64_t kDVBSigMon_WaitForSNR = 0x 0100000000ULL;188 static const uint64_t kDVBSigMon_WaitForSNR = 0x1000000000ULL; 184 189 /// Wait for the Bit Error Rate to fall below a threshhold 185 static const uint64_t kDVBSigMon_WaitForBER = 0x 0200000000ULL;190 static const uint64_t kDVBSigMon_WaitForBER = 0x2000000000ULL; 186 191 /// Wait for uncorrected FEC blocks to fall below a threshhold 187 static const uint64_t kDVBSigMon_WaitForUB = 0x 0400000000ULL;192 static const uint64_t kDVBSigMon_WaitForUB = 0x4000000000ULL; 188 193 /// Wait for rotor to complete turning the antenna 189 static const uint64_t kDVBSigMon_WaitForPos = 0x 0800000000ULL;194 static const uint64_t kDVBSigMon_WaitForPos = 0x8000000000ULL; 190 195 191 196 protected: 192 197 pthread_t monitor_thread; … … inline QString sm_flags_to_string(uint64_t flags) 228 233 str += "SDT,"; 229 234 if (SignalMonitor::kFWSigMon_PowerSeen & flags) 230 235 str += "STB,"; 236 if (SignalMonitor::kDTVSigMon_CryptSeen & flags) 237 str += "Crypt,"; 231 238 232 239 str += ") Match("; 233 240 if (SignalMonitor::kDTVSigMon_PATMatch & flags) … … inline QString sm_flags_to_string(uint64_t flags) 248 255 str += "SDT,"; 249 256 if (SignalMonitor::kFWSigMon_PowerMatch & flags) 250 257 str += "STB,"; 258 if (SignalMonitor::kDTVSigMon_CryptMatch & flags) 259 str += "Crypt,"; 251 260 252 261 str += ") Wait("; 253 262 if (SignalMonitor::kDTVSigMon_WaitForPAT & flags) … … inline QString sm_flags_to_string(uint64_t flags) 266 275 str += "Sig,"; 267 276 if (SignalMonitor::kFWSigMon_WaitForPower& flags) 268 277 str += "STB,"; 278 if (SignalMonitor::kDTVSigMon_WaitForCrypt & flags) 279 str += "Crypt,"; 269 280 270 281 if (SignalMonitor::kDVBSigMon_WaitForSNR & flags) 271 282 str += "SNR,"; -
mythtv/libs/libmythtv/signalmonitorvalue.h
diff --git a/mythtv/libs/libmythtv/signalmonitorvalue.h b/mythtv/libs/libmythtv/signalmonitorvalue.h index 67d1d52..ef0e296 100644
a b 1 // -*- Mode: c++ -*- 1 2 #ifndef SIGNALMONITORVALUES_H 2 3 #define SIGNALMONITORVALUES_H 3 4 -
mythtv/libs/libmythtv/siscan.h
diff --git a/mythtv/libs/libmythtv/siscan.h b/mythtv/libs/libmythtv/siscan.h index 9af8abc..044eb96 100644
a b class SIScan : public QObject, 85 85 void HandlePAT(const ProgramAssociationTable*); 86 86 void HandleCAT(const ConditionalAccessTable*) { } 87 87 void HandlePMT(uint, const ProgramMapTable*) { } 88 void HandleEncryptionStatus(uint, bool) { } 88 89 89 90 // ATSC Main 90 91 void HandleSTT(const SystemTimeTable*) {} -
mythtv/libs/libmythtv/tv_play.cpp
diff --git a/mythtv/libs/libmythtv/tv_play.cpp b/mythtv/libs/libmythtv/tv_play.cpp index 34ff5eb..2959ecf 100644
a b void TV::UpdateOSDSignal(const QStringList& strlist) 4686 4686 float snr = 0.0f; 4687 4687 uint ber = 0xffffffff; 4688 4688 int pos = -1; 4689 QString pat(""), pmt(""), mgt(""), vct(""), nit(""), sdt("") ;4689 QString pat(""), pmt(""), mgt(""), vct(""), nit(""), sdt(""), crypt(""); 4690 4690 QString err = QString::null, msg = QString::null; 4691 4691 for (it = slist.begin(); it != slist.end(); ++it) 4692 4692 { … … void TV::UpdateOSDSignal(const QStringList& strlist) 4736 4736 sdt = it->IsGood() ? "s" : "_"; 4737 4737 else if ("matching_sdt" == it->GetShortName()) 4738 4738 sdt = it->IsGood() ? "S" : sdt; 4739 else if ("seen_crypt" == it->GetShortName()) 4740 crypt = it->IsGood() ? "c" : "_"; 4741 else if ("matching_crypt" == it->GetShortName()) 4742 crypt = it->IsGood() ? "C" : crypt; 4739 4743 } 4740 4744 if (sig) 4741 4745 infoMap["signal"] = QString::number(sig); // use normalized value … … void TV::UpdateOSDSignal(const QStringList& strlist) 4753 4757 if ((pos >= 0) && (pos < 100)) 4754 4758 sigDesc += " | " + tr("Rotor %1\%").arg(pos,2); 4755 4759 4756 sigDesc = sigDesc + QString(" | (%1%2%3%4%5%6%7 ) %8")4760 sigDesc = sigDesc + QString(" | (%1%2%3%4%5%6%7%8) %9") 4757 4761 .arg(slock).arg(pat).arg(pmt).arg(mgt).arg(vct) 4758 .arg(nit).arg(sdt).arg( sigMsg);4762 .arg(nit).arg(sdt).arg(crypt).arg(sigMsg); 4759 4763 4760 4764 if (!err.isEmpty()) 4761 4765 sigDesc = err;