Ticket #2703: 2703-v1.patch
File 2703-v1.patch, 26.9 KB (added by , 17 years ago) |
---|
-
libs/libmythtv/dvbrecorder.cpp
58 58 #include "programinfo.h" 59 59 #include "mpegtables.h" 60 60 #include "iso639.h" 61 #include "dvbstreamdata.h" 61 62 #include "atscstreamdata.h" 62 63 #include "atsctables.h" 63 64 #include "cardutil.h" … … 243 244 } 244 245 } 245 246 247 void DVBRecorder::HandleSTT(const SystemTimeTable*) 248 { 249 dvbchannel->SetTimeOffset(GetStreamData()->TimeOffset()); 250 } 251 252 void DVBRecorder::HandleTDT(const TimeDateTable*) 253 { 254 dvbchannel->SetTimeOffset(GetStreamData()->TimeOffset()); 255 } 256 246 257 bool DVBRecorder::Open(void) 247 258 { 248 259 if (IsOpen()) … … 301 312 { 302 313 data->AddMPEGListener(this); 303 314 315 DVBStreamData *dvb = dynamic_cast<DVBStreamData*>(data); 316 if (dvb) 317 dvb->AddDVBMainListener(this); 318 304 319 ATSCStreamData *atsc = dynamic_cast<ATSCStreamData*>(data); 305 320 306 321 if (atsc && atsc->DesiredMinorChannel()) … … 512 527 add_stream_type.push_back(StreamID::PrivSec); 513 528 _stream_data->AddListeningPID(MPEG_PAT_PID); 514 529 530 add_pid.push_back(DVB_TDT_PID); 531 add_stream_type.push_back(StreamID::PrivSec); 532 _stream_data->AddListeningPID(DVB_TDT_PID); 533 515 534 // Record the streams in the PMT... 516 535 bool need_pcr_pid = true; 517 536 for (uint i = 0; i < _input_pmt->StreamCount(); i++) -
libs/libmythtv/dvbsignalmonitor.h
27 27 28 28 virtual void SetRotorTarget(float target); 29 29 30 // MPEG 31 virtual void HandlePMT(uint, const ProgramMapTable*); 32 33 // ATSC Main 34 virtual void HandleSTT(const SystemTimeTable*); 35 36 // DVB Main 37 virtual void HandleTDT(const TimeDateTable*); 38 30 39 public slots: 31 40 void deleteLater(void); 32 41 … … 52 61 bool RemovePIDFilter(uint pid); 53 62 54 63 int GetDVBCardNum(void) const; 64 DVBChannel *GetDVBChannel(void); 55 65 56 66 bool SupportsTSMonitoring(void); 57 67 protected: -
libs/libmythtv/dvbdev/dvbci.cpp
1017 1017 private: 1018 1018 int interval; 1019 1019 time_t lastTime; 1020 int timeOffset; 1020 1021 bool SendDateTime(void); 1021 1022 public: 1022 1023 cCiDateTime(int SessionId, cCiTransportConnection *Tc); 1023 1024 virtual bool Process(int Length = 0, const uint8_t *Data = NULL); 1025 void SetTimeOffset(double offset); 1024 1026 }; 1025 1027 1026 1028 cCiDateTime::cCiDateTime(int SessionId, cCiTransportConnection *Tc) … … 1028 1030 { 1029 1031 interval = 0; 1030 1032 lastTime = 0; 1033 timeOffset = 0; 1031 1034 dbgprotocol("New Date Time (session id %d)\n", SessionId); 1032 1035 } 1033 1036 1037 void cCiDateTime::SetTimeOffset(double offset) 1038 { 1039 timeOffset = (int) offset; 1040 dbgprotocol("New Time Offset: %i secs\n", timeOffset); 1041 } 1042 1034 1043 bool cCiDateTime::SendDateTime(void) 1035 1044 { 1036 1045 time_t t = time(NULL); 1037 1046 struct tm tm_gmt; 1038 1047 struct tm tm_loc; 1048 1049 // Avoid using signed time_t types 1050 if (timeOffset < 0) 1051 t -= (time_t)(-timeOffset); 1052 else 1053 t += (time_t)(timeOffset); 1054 1039 1055 if (gmtime_r(&t, &tm_gmt) && localtime_r(&t, &tm_loc)) { 1040 1056 int Y = tm_gmt.tm_year; 1041 1057 int M = tm_gmt.tm_mon + 1; … … 1734 1750 return cas && cas->SendPMT(CaPmt); 1735 1751 } 1736 1752 1753 void cLlCiHandler::SetTimeOffset(double offset_in_seconds) 1754 { 1755 cMutexLock MutexLock(&mutex); 1756 cCiDateTime *dt = NULL; 1757 1758 for (uint i = 0; i < (uint) NumSlots(); i++) 1759 { 1760 dt = (cCiDateTime*) GetSessionByResourceId(RI_DATE_TIME, i); 1761 if (dt) 1762 dt->SetTimeOffset(offset_in_seconds); 1763 } 1764 } 1765 1737 1766 bool cLlCiHandler::Reset(int Slot) 1738 1767 { 1739 1768 cMutexLock MutexLock(&mutex); -
libs/libmythtv/dvbdev/dvbci.h
153 153 virtual cCiEnquiry *GetEnquiry(void) = 0; 154 154 virtual const unsigned short *GetCaSystemIds(int Slot) = 0; 155 155 virtual bool SetCaPmt(cCiCaPmt &CaPmt, int Slot) = 0; 156 virtual void SetTimeOffset(double /*offset_in_seconds*/) { } 156 157 }; 157 158 158 159 class cLlCiHandler : public cCiHandler { … … 188 189 bool SetCaPmt(cCiCaPmt &CaPmt); 189 190 const unsigned short *GetCaSystemIds(int Slot); 190 191 bool SetCaPmt(cCiCaPmt &CaPmt, int Slot); 192 void SetTimeOffset(double offset_in_seconds); 191 193 bool Reset(int Slot); 192 194 bool connected() const; 193 195 }; -
libs/libmythtv/dvbrecorder.h
55 55 * 56 56 * \sa DTVRecorder, HDTVRecorder 57 57 */ 58 class DVBRecorder : public DTVRecorder, 59 private ReaderPausedCB, 60 public MPEGStreamListener 58 class DVBRecorder : 59 public DTVRecorder, 60 public MPEGStreamListener, 61 public DVBMainStreamListener, 62 public ATSCMainStreamListener, 63 private ReaderPausedCB 61 64 { 62 65 public: 63 66 DVBRecorder(TVRec *rec, DVBChannel* dvbchannel); … … 82 85 void HandleCAT(const ConditionalAccessTable*) {} 83 86 void HandlePMT(uint pid, const ProgramMapTable*); 84 87 88 // ATSC Main 89 void HandleSTT(const SystemTimeTable*); 90 void HandleVCT(uint /*tsid*/, const VirtualChannelTable*) {} 91 void HandleMGT(const MasterGuideTable*) {} 92 93 // DVBMainStreamListener 94 void HandleTDT(const TimeDateTable*); 95 void HandleNIT(const NetworkInformationTable*) {} 96 void HandleSDT(uint /*tsid*/, const ServiceDescriptionTable*) {} 97 85 98 void SetStreamData(MPEGStreamData*); 86 99 MPEGStreamData* GetStreamData(void) { return _stream_data; } 87 100 -
libs/libmythtv/eithelper.cpp
635 635 static int calc_eit_utc_offset(void) 636 636 { 637 637 QString config_offset = gContext->GetSetting("EITTimeOffset", "Auto"); 638 638 639 if (config_offset == "Auto") 639 { 640 QDateTime loc = QDateTime::currentDateTime(Qt::LocalTime); 641 QDateTime utc = QDateTime::currentDateTime(Qt::UTC); 640 return calc_utc_offset(); 642 641 643 int utc_offset = MythSecsTo(utc, loc);644 645 // clamp to nearest minute if within 10 seconds646 int off = utc_offset % 60;647 if (abs(off) < 10)648 utc_offset -= off;649 if (off < -50 && off > -60)650 utc_offset -= 60 + off;651 if (off > +50 && off < +60)652 utc_offset += 60 - off;653 654 return utc_offset;655 }656 642 if (config_offset == "None") 657 643 return 0; 658 644 -
libs/libmythtv/dvbchannel.h
32 32 33 33 // Sets 34 34 void SetPMT(const ProgramMapTable*); 35 void SetTimeOffset(double offset); 35 36 void SetSlowTuning(uint how_slow_in_ms) 36 37 { tuning_delay = how_slow_in_ms; } 37 38 -
libs/libmythtv/dvbcam.h
23 23 bool Stop(); 24 24 bool IsRunning() const { return ciThreadRunning; } 25 25 void SetPMT(const ProgramMapTable *pmt); 26 void SetTimeOffset(double offset_in_seconds); 26 27 27 28 private: 28 29 static void *CiHandlerThreadHelper(void*); -
libs/libmythtv/mpeg/mpegstreamdata.cpp
1 1 // -*- Mode: c++ -*- 2 2 // Copyright (c) 2003-2004, Daniel Thor Kristjansson 3 4 // POSIX headers 5 #include <sys/time.h> // for gettimeofday 6 3 7 #include "mpegstreamdata.h" 4 8 #include "mpegtables.h" 5 9 #include "RingBuffer.h" … … 46 50 */ 47 51 MPEGStreamData::MPEGStreamData(int desiredProgram, bool cacheTables) 48 52 : _sistandard("mpeg"), 49 _have_CRC_bug(false), _eit_helper(NULL), _eit_rate(0.0f), 53 _have_CRC_bug(false), 54 _local_utc_offset(0), _si_time_offset_cnt(0), 55 _si_time_offset_indx(0), 56 _eit_helper(NULL), _eit_rate(0.0f), 50 57 _listener_lock(true), 51 58 _cache_tables(cacheTables), _cache_lock(true), 52 59 // Single program stuff … … 58 65 _pat_single_program(NULL), _pmt_single_program(NULL), 59 66 _invalid_pat_seen(false), _invalid_pat_warning(false) 60 67 { 68 _local_utc_offset = calc_utc_offset(); 69 bzero(_si_time_offsets, sizeof(_si_time_offsets)); 70 61 71 AddListeningPID(MPEG_PAT_PID); 62 72 } 63 73 … … 627 637 } 628 638 } 629 639 640 double MPEGStreamData::TimeOffset(void) const 641 { 642 QMutex locker(&_si_time_lock); 643 if (!_si_time_offset_cnt) 644 return 0.0; 645 646 double avg_offset = 0.0; 647 double mult = 1.0 / _si_time_offset_cnt; 648 for (uint i = 0; i < _si_time_offset_cnt; i++) 649 avg_offset += _si_time_offsets[i] * mult; 650 651 return avg_offset; 652 } 653 654 void MPEGStreamData::UpdateTimeOffset(uint64_t _si_utc_time) 655 { 656 struct timeval tm; 657 if (gettimeofday(&tm, NULL) != 0) 658 return; 659 660 double utc_time = tm.tv_sec + (tm.tv_usec * 0.000001); 661 double si_time = _si_utc_time; 662 663 QMutex locker(&_si_time_lock); 664 _si_time_offsets[_si_time_offset_indx] = si_time - utc_time; 665 666 if (_si_time_offset_indx + 1 > _si_time_offset_cnt) 667 _si_time_offset_cnt = _si_time_offset_indx + 1; 668 669 _si_time_offset_indx = (_si_time_offset_indx + 1) & 0xf; 670 671 } 672 630 673 #define DONE_WITH_PES_PACKET() { if (psip) delete psip; \ 631 674 if (morePSIPPackets) goto HAS_ANOTHER_PES; else return; } 632 675 … … 642 685 if (!psip) 643 686 return; 644 687 688 // Don't do the usual checks on TDT - it has no CRC, etc... 689 if (TableID::TDT == psip->TableID()) 690 { 691 HandleTables(tspacket->PID(), *psip); 692 DONE_WITH_PES_PACKET(); 693 } 694 645 695 // drop stuffing packets 646 696 if ((TableID::ST == psip->TableID()) || 647 697 (TableID::STUFFING == psip->TableID())) -
libs/libmythtv/mpeg/atscstreamdata.cpp
308 308 { 309 309 SystemTimeTable stt(psip); 310 310 311 UpdateTimeOffset(stt.UTCUnix()); 312 311 313 // only update internal offset if it changes 312 314 if (stt.GPSOffset() != _GPS_UTC_offset) 313 315 _GPS_UTC_offset = stt.GPSOffset(); 314 316 317 _listener_lock.lock(); 315 318 for (uint i = 0; i < _atsc_main_listeners.size(); i++) 316 319 _atsc_main_listeners[i]->HandleSTT(&stt); 320 _listener_lock.unlock(); 317 321 318 322 if (_eit_helper && GPSOffset() != _eit_helper->GetGPSOffset()) 319 323 _eit_helper->SetGPSOffset(GPSOffset()); -
libs/libmythtv/mpeg/dvbtables.cpp
169 169 return is_eit; 170 170 } 171 171 172 uint DVBEventInformationTable::StartTimeUnixUTC(uint i) const173 {174 const unsigned char *buf = StartTime(i);175 176 // Modified Julian date as number of days since 17th November 1858.177 // The unix epoch, 1st Jan 1970, was day 40587.178 uint mjd = (buf[0] << 8) | buf[1];179 if (mjd < 40587)180 return 0; // we don't handle pre-unix dates..181 182 uint secsSince1970 = (mjd - 40587) * 86400;183 secsSince1970 += byteBCD2int(buf[2]) * 3600;184 secsSince1970 += byteBCD2int(buf[3]) * 60;185 secsSince1970 += byteBCD2int(buf[4]);186 return secsSince1970;187 }188 189 172 /** \fn dvbdate2qt(const unsigned char*) 190 * \return UTC time 173 * \return UTC time as QDateTime 191 174 */ 192 175 QDateTime dvbdate2qt(const unsigned char *buf) 193 176 { … … 228 211 return QDateTime(date, time); 229 212 } 230 213 231 uint dvbdate2key(const unsigned char *buf) 214 /** \fn dvbdate2unix(const unsigned char*) 215 * \return UTC time as time_t 216 */ 217 time_t dvbdate2unix(const unsigned char *buf) 232 218 { 219 // Modified Julian date as number of days since 17th November 1858. 220 // The unix epoch, 1st Jan 1970, was day 40587. 221 uint mjd = (buf[0] << 8) | buf[1]; 222 if (mjd < 40587) 223 return 0; // we don't handle pre-unix dates.. 224 225 uint secsSince1970 = (mjd - 40587) * 86400; 226 secsSince1970 += byteBCD2int(buf[2]) * 3600; 227 secsSince1970 += byteBCD2int(buf[3]) * 60; 228 secsSince1970 += byteBCD2int(buf[4]); 229 return secsSince1970; 230 } 231 232 /** \fn dvbdate2key(const unsigned char*) 233 * \return UTC time as 32 bit key 234 */ 235 uint32_t dvbdate2key(const unsigned char *buf) 236 { 233 237 uint dt = (((uint)buf[0]) << 24) | (((uint)buf[1]) << 16); // 16 bits 234 238 uint tm = ((byteBCD2int(buf[2]) * 3600) + 235 239 (byteBCD2int(buf[3]) * 60) + -
libs/libmythtv/mpeg/dvbstreamdata.cpp
19 19 SetVersionNITo(-1,0); 20 20 AddListeningPID(DVB_NIT_PID); 21 21 AddListeningPID(DVB_SDT_PID); 22 AddListeningPID(DVB_TDT_PID); 22 23 } 23 24 24 25 DVBStreamData::~DVBStreamData() … … 89 90 return SDTSectionSeen(psip.TableIDExtension(), psip.Section()); 90 91 } 91 92 93 if (TableID::TDT == table_id) 94 return false; 95 92 96 bool is_eit = false; 93 97 if (DVB_EIT_PID == pid) 94 98 { … … 183 187 } 184 188 AddListeningPID(DVB_NIT_PID); 185 189 AddListeningPID(DVB_SDT_PID); 190 AddListeningPID(DVB_TDT_PID); 186 191 } 187 192 188 193 /** \fn DVBStreamData::HandleTables(uint pid, const PSIPTable&) … … 244 249 245 250 return true; 246 251 } 252 case TableID::TDT: 253 { 254 TimeDateTable tdt(psip); 255 256 UpdateTimeOffset(tdt.UTCUnix()); 257 258 QMutexLocker locker(&_listener_lock); 259 for (uint i = 0; i < _dvb_main_listeners.size(); i++) 260 _dvb_main_listeners[i]->HandleTDT(&tdt); 261 262 return true; 263 } 247 264 case TableID::NITo: 248 265 { 249 266 SetVersionNITo(psip.Version(), psip.LastSection()); -
libs/libmythtv/mpeg/mpegtables.h
182 182 DVB_SDT_PID = 0x0011, 183 183 DVB_EIT_PID = 0x0012, 184 184 DVB_RST_PID = 0x0013, 185 DVB_T OT_PID = 0x0013,185 DVB_TDT_PID = 0x0014, 186 186 187 187 // Dishnet longterm EIT is on pid 0x300 188 188 DVB_DNLONG_EIT_PID = 0x0300, -
libs/libmythtv/mpeg/streamlisteners.h
31 31 32 32 class NetworkInformationTable; 33 33 class ServiceDescriptionTable; 34 class TimeDateTable; 34 35 class DVBEventInformationTable; 35 36 36 37 class MPEGStreamListener … … 89 90 protected: 90 91 virtual ~DVBMainStreamListener() {} 91 92 public: 93 virtual void HandleTDT(const TimeDateTable*) = 0; 92 94 virtual void HandleNIT(const NetworkInformationTable*) = 0; 93 95 virtual void HandleSDT(uint tsid, const ServiceDescriptionTable*) = 0; 94 96 }; -
libs/libmythtv/mpeg/atsctables.h
651 651 // protocol_version 8 8.0 0x00 for now 652 652 653 653 // system_time 32 9.0 654 QDateTime SystemTimeGPS() const654 uint32_t GPSRaw(void) const 655 655 { 656 uint t = ((pesdata()[9]<<24) | (pesdata()[10]<<16) | 657 (pesdata()[11]<< 8) | pesdata()[12]); 656 return ((pesdata()[9] <<24) | (pesdata()[10]<<16) | 657 (pesdata()[11]<< 8) | pesdata()[12]); 658 } 659 QDateTime SystemTimeGPS(void) const 660 { 658 661 QDateTime dt; 659 dt.setTime_t(secs_Between_1Jan1970_6Jan1980 + t);662 dt.setTime_t(secs_Between_1Jan1970_6Jan1980 + GPSRaw()); 660 663 return dt; 661 664 } 665 time_t GPSUnix(void) const 666 { return secs_Between_1Jan1970_6Jan1980 + GPSRaw(); } 667 time_t UTCUnix(void) const 668 { return GPSUnix() - GPSOffset(); } 669 662 670 // GPS_UTC_offset 8 13.0 663 671 uint GPSOffset() const { return pesdata()[13]; } 664 672 // daylight_savings 16 14.0 -
libs/libmythtv/mpeg/mpegstreamdata.h
50 50 void SetCaching(bool cacheTables) { _cache_tables = cacheTables; } 51 51 virtual void Reset(int desiredProgram); 52 52 53 /// \brief Current Offset from computer time to DVB time in seconds 54 double TimeOffset(void) const; 55 53 56 // EIT Source 54 57 virtual void SetEITHelper(EITHelper *eit_helper); 55 58 virtual void SetEITRate(float rate); … … 217 220 218 221 static int ResyncStream(unsigned char *buffer, int curr_pos, int len); 219 222 223 void UpdateTimeOffset(uint64_t si_utc_time); 224 220 225 // Caching 221 226 void IncrementRefCnt(const PSIPTable *psip) const; 222 227 virtual void DeleteCachedTable(PSIPTable *psip) const; … … 228 233 229 234 bool _have_CRC_bug; 230 235 236 int _local_utc_offset; 237 238 mutable QMutex _si_time_lock; 239 uint _si_time_offset_cnt; 240 uint _si_time_offset_indx; 241 double _si_time_offsets[16]; 242 231 243 // Generic EIT stuff used for ATSC and DVB 232 244 EITHelper *_eit_helper; 233 245 float _eit_rate; -
libs/libmythtv/mpeg/dvbtables.h
8 8 #include "dvbdescriptors.h" 9 9 10 10 QDateTime dvbdate2qt(const unsigned char*); 11 uint dvbdate2key(const unsigned char *); 11 time_t dvbdate2unix(const unsigned char*); 12 uint32_t dvbdate2key(const unsigned char*); 12 13 13 14 /** \class NetworkInformationTable 14 15 * \brief This table tells the decoder on which PIDs to find other tables. … … 249 250 { return _ptrs[i]+2; } 250 251 QDateTime StartTimeUTC(uint i) const 251 252 { return dvbdate2qt(StartTime(i)); } 252 uint StartTimeUnixUTC(uint i) const; 253 uint EndTimeUnixUTC(uint i) const 253 time_t StartTimeUnixUTC(uint i) const 254 { return dvbdate2unix(StartTime(i)); } 255 time_t EndTimeUnixUTC(uint i) const 254 256 { return StartTimeUnixUTC(i) + DurationInSeconds(i); } 255 /// Returns 32 bit key representing time 256 uint StartTimeKey(uint i) const 257 uint32_t StartTimeKey(uint i) const 257 258 { return dvbdate2key(StartTime(i)); } 258 259 // duration 24 7.0+x 259 260 const unsigned char *Duration(uint i) const … … 286 287 mutable vector<const unsigned char*> _ptrs; // used to parse 287 288 }; 288 289 290 /** \class TimeDateTable 291 * \brief This table gives the current DVB stream time 292 */ 293 class TimeDateTable : public PSIPTable 294 { 295 public: 296 TimeDateTable(const PSIPTable& table) 297 : PSIPTable(table) 298 { 299 assert(TableID::TDT == TableID()); 300 } 301 ~TimeDateTable() { ; } 289 302 303 // table_id 8 0.0 0x70 304 // section_syntax_indicator 1 1.0 0 305 // reserved_future_use 1 1.1 1 306 // reserved 2 1.2 3 307 // section_length 12 1.4 40 308 // UTC_time 40 3.0 0 309 const unsigned char *UTCdata(void) const 310 { return pesdata() + 3; } 311 312 QDateTime UTC(void) const { return dvbdate2qt(UTCdata()); } 313 time_t UTCUnix(void) const { return dvbdate2unix(UTCdata()); } 314 }; 315 290 316 #endif // _DVB_TABLES_H_ -
libs/libmythtv/dvbtypes.h
14 14 #include <stdint.h> 15 15 #include <unistd.h> 16 16 17 // C++ headers18 #include <vector>19 using namespace std;20 21 17 // DVB headers 22 18 #include <linux/dvb/version.h> 19 #include <linux/dvb/frontend.h> 20 #include <linux/dvb/dmx.h> 21 23 22 #if (DVB_API_VERSION != 3) 24 # error "DVB driver includes with API version 3 not found!"23 # error "DVB driver includes with API version 3 not found!" 25 24 #endif 26 25 27 26 #ifndef DVB_API_VERSION_MINOR 28 # define DVB_API_VERSION_MINOR 027 # define DVB_API_VERSION_MINOR 0 29 28 #endif 30 29 31 #include <linux/dvb/frontend.h>32 #include <linux/dvb/dmx.h>33 34 30 #if (DVB_API_VERSION >= 3 && DVB_API_VERSION_MINOR >= 1) 35 31 # define USE_ATSC 36 32 #else … … 43 39 # define VSB_16 (fe_modulation)(QAM_AUTO+2) 44 40 #endif 45 41 46 #define MPEG_TS_PKT_SIZE 18847 #define DEF_DMX_BUF_SIZE 64 * 102448 #define MAX_SECTION_SIZE 409649 #define DMX_DONT_FILTER 0x200050 51 42 #ifdef FE_GET_EXTENDED_INFO 52 43 #define dvb_fe_params dvb_frontend_parameters_new 53 44 #else … … 57 48 class QString; 58 49 QString toString(fe_status); 59 50 60 typedef vector<uint16_t> dvb_pid_t;61 // needs to add provider id so dvbcam doesnt require parsing62 // of the pmt and or the pmtcache63 typedef vector<uint16_t> dvb_caid_t;64 65 51 #endif // DVB_TYPES_H -
libs/libmythtv/dvbchannel.cpp
534 534 dvbcam->SetPMT(pmt); 535 535 } 536 536 537 /** \fn DVBChannel::SetTimeOffset(double) 538 * \brief Tells the Conditional Access Module the offset 539 * from the computers utc time to dvb time. 540 */ 541 void DVBChannel::SetTimeOffset(double offset) 542 { 543 if (dvbcam->IsRunning()) 544 dvbcam->SetTimeOffset(offset); 545 } 546 537 547 /***************************************************************************** 538 548 Tuning functions for each of the four types of cards. 539 549 *****************************************************************************/ -
libs/libmythtv/siscan.h
94 94 // DVB Main 95 95 void HandleNIT(const NetworkInformationTable*); 96 96 void HandleSDT(uint tsid, const ServiceDescriptionTable*); 97 void HandleTDT(const TimeDateTable*) {} 97 98 98 99 private slots: 99 100 void HandleAllGood(void); -
libs/libmythtv/dvbcam.cpp
273 273 pmt_updated = true; 274 274 } 275 275 276 void DVBCam::SetTimeOffset(double offset_in_seconds) 277 { 278 ciHandler->SetTimeOffset(offset_in_seconds); 279 } 280 276 281 static const char *cplm_info[] = 277 282 { 278 283 "CPLM_MORE", -
libs/libmythtv/dtvsignalmonitor.h
88 88 void HandlePMT(uint, const ProgramMapTable*); 89 89 90 90 // ATSC Main 91 void HandleSTT(const SystemTimeTable*) {}91 void HandleSTT(const SystemTimeTable*); 92 92 void HandleVCT(uint /*tsid*/, const VirtualChannelTable*) {} 93 93 void HandleMGT(const MasterGuideTable*); 94 94 … … 101 101 const DirectedChannelChangeSelectionCodeTable*) {} 102 102 103 103 // DVB Main 104 void HandleTDT(const TimeDateTable*); 104 105 void HandleNIT(const NetworkInformationTable*); 105 106 void HandleSDT(uint, const ServiceDescriptionTable*); 106 107 -
libs/libmythtv/dvbsignalmonitor.cpp
14 14 #include "mythdbcon.h" 15 15 #include "dvbsignalmonitor.h" 16 16 #include "dvbchannel.h" 17 #include "dvbstreamdata.h" 17 18 #include "atscstreamdata.h" 18 19 #include "mpegtables.h" 19 20 #include "atsctables.h" … … 555 556 } 556 557 } 557 558 559 void DVBSignalMonitor::HandlePMT(uint program_num, const ProgramMapTable *pmt) 560 { 561 DTVSignalMonitor::HandlePMT(program_num, pmt); 562 GetDVBChannel()->SetPMT(pmt); 563 } 564 565 void DVBSignalMonitor::HandleSTT(const SystemTimeTable *stt) 566 { 567 DTVSignalMonitor::HandleSTT(stt); 568 GetDVBChannel()->SetTimeOffset(GetStreamData()->TimeOffset()); 569 } 570 571 void DVBSignalMonitor::HandleTDT(const TimeDateTable *tdt) 572 { 573 DTVSignalMonitor::HandleTDT(tdt); 574 GetDVBChannel()->SetTimeOffset(GetStreamData()->TimeOffset()); 575 } 576 577 DVBChannel *DVBSignalMonitor::GetDVBChannel(void) 578 { 579 return dynamic_cast<DVBChannel*>(channel); 580 } 581 558 582 void DVBSignalMonitor::RunTableMonitor(void) 559 583 { 560 584 dtvMonitorRunning = true; -
libs/libmythtv/dtvsignalmonitor.cpp
341 341 } 342 342 } 343 343 344 void DTVSignalMonitor::HandleSTT(const SystemTimeTable*) 345 { 346 VERBOSE(VB_CHANNEL, LOC + "Time Offset: "<<GetStreamData()->TimeOffset()); 347 } 348 344 349 void DTVSignalMonitor::HandleMGT(const MasterGuideTable* mgt) 345 350 { 346 351 AddFlags(kDTVSigMon_MGTSeen); … … 405 410 AddFlags(kDTVSigMon_VCTMatch | kDTVSigMon_CVCTMatch); 406 411 } 407 412 413 void DTVSignalMonitor::HandleTDT(const TimeDateTable*) 414 { 415 VERBOSE(VB_CHANNEL, LOC + "Time Offset: "<<GetStreamData()->TimeOffset()); 416 } 417 408 418 void DTVSignalMonitor::HandleNIT(const NetworkInformationTable *nit) 409 419 { 410 420 DBG_SM("SetNIT()", QString("net_id = %1").arg(nit->NetworkID())); -
libs/libmyth/util.cpp
62 62 return rettime; 63 63 } 64 64 65 int calc_utc_offset(void) 66 { 67 QDateTime loc = QDateTime::currentDateTime(Qt::LocalTime); 68 QDateTime utc = QDateTime::currentDateTime(Qt::UTC); 69 70 int utc_offset = MythSecsTo(utc, loc); 71 72 // clamp to nearest minute if within 10 seconds 73 int off = utc_offset % 60; 74 if (abs(off) < 10) 75 utc_offset -= off; 76 if (off < -50 && off > -60) 77 utc_offset -= 60 + off; 78 if (off > +50 && off < +60) 79 utc_offset += 60 - off; 80 81 return utc_offset; 82 } 83 65 84 /** \fn encodeLongLong(QStringList&,long long) 66 85 * \brief Encodes a long for streaming in the MythTV protocol. 67 86 * -
libs/libmyth/util.h
39 39 }; 40 40 41 41 MPUBLIC QDateTime mythCurrentDateTime(); 42 MPUBLIC int calc_utc_offset(void); 42 43 43 44 // This is necessary for GCC 3.3, which has llabs(long long) 44 45 // but not abs(long long) or std::llabs(long long)