Ticket #1783: streamdata_leak_fix.3.diff
File streamdata_leak_fix.3.diff, 22.4 KB (added by , 19 years ago) |
---|
-
libs/libmythtv/dtvsignalmonitor.cpp
old new void DTVSignalMonitor::SetDVBService(uin 222 222 223 223 void DTVSignalMonitor::SetStreamData(MPEGStreamData *data) 224 224 { 225 if (stream_data == data) 226 return; 227 225 228 if (stream_data) 226 229 stream_data->RemoveMPEGListener(this); 227 230 -
libs/libmythtv/tv_rec.cpp
old new static QString load_profile(QString,void 110 110 TVRec::TVRec(int capturecardnum) 111 111 // Various components TVRec coordinates 112 112 : recorder(NULL), channel(NULL), signalMonitor(NULL), 113 scanner(new EITScanner()), 113 scanner(new EITScanner()), streamData(NULL), 114 114 // Configuration variables from database 115 115 eitIgnoresSource(false), transcodeFirst(false), 116 116 earlyCommFlag(false), runJobOnHostOnly(false), … … void TVRec::TeardownAll(void) 317 317 318 318 TeardownRecorder(true); 319 319 320 SetMPEGStreamData(NULL); 321 320 322 SetRingBuffer(NULL); 321 323 } 322 324 … … QString TVRec::GetStartChannel(int cardi 1565 1567 return startchan; 1566 1568 } 1567 1569 1568 void GetPidsToCache( DTVSignalMonitor *dtvMon, pid_cache_t &pid_cache)1570 void GetPidsToCache(ATSCStreamData *asd, pid_cache_t &pid_cache) 1569 1571 { 1570 if (! dtvMon->GetATSCStreamData())1572 if (!asd) 1571 1573 return; 1572 1574 1573 const MasterGuideTable *mgt = dtvMon->GetATSCStreamData()->GetCachedMGT();1575 const MasterGuideTable *mgt = asd->GetCachedMGT(); 1574 1576 if (!mgt) 1575 1577 return; 1576 1578 … … void GetPidsToCache(DTVSignalMonitor *dt 1579 1581 pid_cache_item_t item(mgt->TablePID(i), mgt->TableType(i)); 1580 1582 pid_cache.push_back(item); 1581 1583 } 1582 dtvMon->GetATSCStreamData()->ReturnCachedTable(mgt);1584 asd->ReturnCachedTable(mgt); 1583 1585 } 1584 1586 1585 bool ApplyCachedPids( DTVSignalMonitor *dtvMon, const ChannelBase* channel)1587 bool ApplyCachedPids(ATSCStreamData *asd, const ChannelBase* channel) 1586 1588 { 1587 1589 pid_cache_t pid_cache; 1588 1590 channel->GetCachedPids(pid_cache); … … bool ApplyCachedPids(DTVSignalMonitor *d 1594 1596 (it->second == TableID::CVCT)) 1595 1597 { 1596 1598 vctpid_cached = true; 1597 dtvMon->GetATSCStreamData()->AddListeningPID(it->first);1599 asd->AddListeningPID(it->first); 1598 1600 } 1599 1601 } 1600 1602 return vctpid_cached; … … bool TVRec::SetupDTVSignalMonitor(void) 1617 1619 VERBOSE(VB_RECORD, LOC + "Setting up table monitoring."); 1618 1620 1619 1621 DTVSignalMonitor *sm = GetDTVSignalMonitor(); 1620 MPEGStreamData *sd = NULL; 1621 if (GetDTVRecorder()) 1622 { 1623 sd = GetDTVRecorder()->GetStreamData(); 1622 MPEGStreamData *sd = GetMPEGStreamData(); 1623 if (sd) 1624 1624 sd->SetCaching(true); 1625 }1626 1625 1627 1626 // Check if this is an ATSC Channel 1628 1627 int major = channel->GetMajorChannel(); … … bool TVRec::SetupDTVSignalMonitor(void) 1636 1635 if (!asd) 1637 1636 { 1638 1637 sd = asd = new ATSCStreamData(major, minor); 1638 SetMPEGStreamData(asd); 1639 1639 sd->SetCaching(true); 1640 1640 if (GetDTVRecorder()) 1641 1641 GetDTVRecorder()->SetStreamData(asd); … … bool TVRec::SetupDTVSignalMonitor(void) 1648 1648 1649 1649 // Try to get pid of VCT from cache and 1650 1650 // require MGT if we don't have VCT pid. 1651 if (!ApplyCachedPids( sm, channel))1651 if (!ApplyCachedPids(GetATSCStreamData(), channel)) 1652 1652 sm->AddFlags(kDTVSigMon_WaitForMGT); 1653 1653 1654 1654 VERBOSE(VB_RECORD, LOC + "Successfully set up ATSC table monitoring."); … … bool TVRec::SetupDTVSignalMonitor(void) 1669 1669 if (!dsd) 1670 1670 { 1671 1671 sd = dsd = new DVBStreamData(netid, tsid, progNum); 1672 SetMPEGStreamData(dsd); 1672 1673 sd->SetCaching(true); 1673 1674 if (GetDTVRecorder()) 1674 1675 GetDTVRecorder()->SetStreamData(dsd); … … bool TVRec::SetupDTVSignalMonitor(void) 1716 1717 if (!sd) 1717 1718 { 1718 1719 sd = new MPEGStreamData(progNum, true); 1720 SetMPEGStreamData(sd); 1719 1721 sd->SetCaching(true); 1720 1722 if (GetDTVRecorder()) 1721 1723 GetDTVRecorder()->SetStreamData(sd); … … void TVRec::TeardownSignalMonitor() 1814 1816 if (dtvMon && channel) 1815 1817 { 1816 1818 pid_cache_t pid_cache; 1817 GetPidsToCache( dtvMon, pid_cache);1819 GetPidsToCache(GetATSCStreamData(), pid_cache); 1818 1820 if (pid_cache.size()) 1819 1821 channel->SaveCachedPids(pid_cache); 1820 1822 } … … bool TVRec::TuningOnSameMultiplex(Tuning 3060 3062 3061 3063 if (ChannelUtil::IsOnSameMultiplex(sourceid, newchannum, oldchannum)) 3062 3064 { 3063 MPEGStreamData *mpeg = Get DTVRecorder()->GetStreamData();3065 MPEGStreamData *mpeg = GetMPEGStreamData(); 3064 3066 ATSCStreamData *atsc = dynamic_cast<ATSCStreamData*>(mpeg); 3065 3067 3066 3068 if (atsc) … … void TVRec::HandleTuning(void) 3164 3166 TuningFrequency(lastTuningRequest); 3165 3167 } 3166 3168 3167 MPEGStreamData *streamData = NULL; 3168 bool handle_done = (HasFlags(kFlagWaitingForSignal) && 3169 !(streamData = TuningSignalCheck())); 3169 MPEGStreamData *streamData = GetMPEGStreamData(); 3170 bool handle_done = (HasFlags(kFlagWaitingForSignal) && !TuningSignalCheck()); 3170 3171 3171 3172 // Just because we have signal, we may not have the right transponder. 3172 3173 if (HasFlags(kFlagWaitingForSignal) && !retune_timer->elapsed() && … … void TVRec::TuningFrequency(const Tuning 3344 3345 { 3345 3346 if (request.minorChan) 3346 3347 { 3347 MPEGStreamData *mpeg = Get DTVRecorder()->GetStreamData();3348 MPEGStreamData *mpeg = GetMPEGStreamData(); 3348 3349 ATSCStreamData *atsc = dynamic_cast<ATSCStreamData*>(mpeg); 3349 3350 channel->SetChannelByString(request.channel); 3350 3351 atsc->SetDesiredChannel(request.majorChan, request.minorChan); 3351 3352 } 3352 3353 else if (request.progNum >= 0) 3353 3354 { 3354 MPEGStreamData *mpeg = Get DTVRecorder()->GetStreamData();3355 MPEGStreamData *mpeg = GetMPEGStreamData(); 3355 3356 channel->SetChannelByString(request.channel); 3356 3357 mpeg->SetDesiredProgram(request.progNum); 3357 3358 } … … void TVRec::TuningFrequency(const Tuning 3446 3447 { 3447 3448 if (request.flags & kFlagEITScan) 3448 3449 { 3449 GetDTVSignalMonitor()->GetStreamData()-> 3450 SetVideoStreamsRequired(0); 3450 GetMPEGStreamData()->SetVideoStreamsRequired(0); 3451 3451 } 3452 3452 3453 3453 SetFlags(kFlagSignalMonitorRunning); … … void TVRec::TuningFrequency(const Tuning 3477 3477 * 3478 3478 * \return MPEGStreamData pointer if we have a complete lock, NULL otherwise 3479 3479 */ 3480 MPEGStreamData *TVRec::TuningSignalCheck(void)3480 bool TVRec::TuningSignalCheck(void) 3481 3481 { 3482 3482 if (!signalMonitor->IsAllGood()) 3483 3483 return NULL; 3484 3484 3485 3485 VERBOSE(VB_RECORD, LOC + "Got good signal"); 3486 3486 3487 // grab useful data from DTV signal monitor before we kill it... 3488 MPEGStreamData *streamData = NULL; 3489 if (GetDTVSignalMonitor()) 3490 streamData = GetDTVSignalMonitor()->GetStreamData(); 3487 MPEGStreamData *streamData = GetMPEGStreamData(); 3491 3488 3492 3489 if (!HasFlags(kFlagEITScannerRunning)) 3493 3490 { … … MPEGStreamData *TVRec::TuningSignalCheck 3505 3502 scanner->StartPassiveScan(channel, streamData, eitIgnoresSource); 3506 3503 } 3507 3504 3508 return streamData;3505 return true; 3509 3506 } 3510 3507 3511 3508 static int init_jobs(const ProgramInfo *rec, RecordingProfile &profile, … … QString TuningRequest::toString(void) co 4040 4037 .arg((program != 0) ? "yes" : "no").arg(channel).arg(input) 4041 4038 .arg(TVRec::FlagToString(flags)); 4042 4039 } 4040 4041 4042 void TVRec::SetMPEGStreamData(MPEGStreamData *sd) 4043 { 4044 if (streamData == sd) 4045 return; 4046 4047 if (streamData) 4048 { 4049 VERBOSE(VB_IMPORTANT, LOC + "Deleting streamData"); 4050 delete streamData; 4051 } 4052 4053 streamData = sd; 4054 } 4055 4056 MPEGStreamData *TVRec::GetMPEGStreamData(void) 4057 { 4058 return streamData; 4059 } 4060 4061 ATSCStreamData *TVRec::GetATSCStreamData(void) 4062 { 4063 return dynamic_cast<ATSCStreamData*>(streamData); 4064 } 4065 4066 DVBStreamData *TVRec::GetDVBStreamData(void) 4067 { 4068 return dynamic_cast<DVBStreamData*>(streamData); 4069 } -
libs/libmythtv/tv_rec.h
old new class DVBChannel; 40 40 class Channel; 41 41 42 42 class MPEGStreamData; 43 class ATSCStreamData; 44 class DVBStreamData; 43 45 class ProgramMapTable; 44 46 45 47 /// Used to request ProgramInfo for channel browsing. … … class TVRec : public QObject 290 292 void TeardownSignalMonitor(void); 291 293 DTVSignalMonitor *GetDTVSignalMonitor(void); 292 294 295 void SetMPEGStreamData(MPEGStreamData *sd); 296 MPEGStreamData *GetMPEGStreamData(void); 297 ATSCStreamData *GetATSCStreamData(void); 298 DVBStreamData *GetDVBStreamData(void); 299 293 300 bool HasFlags(uint f) const { return (stateFlags & f) == f; } 294 301 void SetFlags(uint f); 295 302 void ClearFlags(uint f); … … class TVRec : public QObject 298 305 void HandleTuning(void); 299 306 void TuningShutdowns(const TuningRequest&); 300 307 void TuningFrequency(const TuningRequest&); 301 MPEGStreamData *TuningSignalCheck(void);308 bool TuningSignalCheck(void); 302 309 303 310 void TuningNewRecorder(MPEGStreamData*); 304 311 void TuningRestartRecorder(void); … … class TVRec : public QObject 333 340 ChannelBase *channel; 334 341 SignalMonitor *signalMonitor; 335 342 EITScanner *scanner; 343 MPEGStreamData *streamData; 336 344 337 345 // Various threads 338 346 /// Event processing thread, runs RunTV(). -
libs/libmythtv/dtvsignalmonitor.h
old new class DTVSignalMonitor : public SignalMo 55 55 /// and connects the table signals to the monitor. 56 56 void SetStreamData(MPEGStreamData* data); 57 57 58 protected: 58 59 /// Returns the MPEG stream data if it exists 59 60 MPEGStreamData *GetStreamData() { return stream_data; } 60 61 /// Returns the ATSC stream data if it exists … … class DTVSignalMonitor : public SignalMo 73 74 /// Returns the scan stream data if it exists 74 75 const ScanStreamData *GetScanStreamData() const; 75 76 77 public: 76 78 bool IsAllGood(void) const; 77 79 78 80 bool WaitForLock(int timeout=-1); -
libs/libmythtv/dtvrecorder.h
old new class DTVRecorder: public RecorderBase 40 40 41 41 virtual void SetNextRecording(const ProgramInfo*, RingBuffer*); 42 42 virtual void SetStreamData(MPEGStreamData*) {} 43 virtual MPEGStreamData *GetStreamData(void) { return NULL; }44 43 45 44 virtual void Reset(); 46 45 47 46 protected: 47 virtual MPEGStreamData *GetStreamData(void) { return NULL; } 48 48 49 void FinishRecording(void); 49 50 void ResetForNewFile(void); 50 51 -
libs/libmythtv/dvbrecorder.h
old new class DVBRecorder : public DTVRecorder, 80 80 void HandlePMT(uint pid, const ProgramMapTable*); 81 81 82 82 void SetStreamData(MPEGStreamData*); 83 MPEGStreamData* GetStreamData(void) { return _stream_data; }84 83 85 84 private: 85 MPEGStreamData* GetStreamData(void) { return _stream_data; } 86 86 87 void TeardownAll(void); 87 88 88 89 uint ProcessDataTS(unsigned char *buffer, uint len); -
libs/libmythtv/hdhrrecorder.h
old new class HDHRRecorder : public DTVRecorder, 36 36 void StartRecording(void); 37 37 38 38 void SetStreamData(MPEGStreamData*); 39 MPEGStreamData *GetStreamData(void);40 ATSCStreamData *GetATSCStreamData(void) { return _atsc_stream_data; }41 39 42 40 // MPEG Single Program 43 41 void HandleSingleProgramPAT(ProgramAssociationTable *pat); … … class HDHRRecorder : public DTVRecorder, 49 47 void HandleVCT(uint, const VirtualChannelTable*) {} 50 48 51 49 private: 50 MPEGStreamData *GetStreamData(void); 51 ATSCStreamData *GetATSCStreamData(void) { return _atsc_stream_data; } 52 52 53 void AdjustEITPIDs(void); 53 54 void ProcessTSData(const unsigned char *buffer, int len); 54 55 bool ProcessTSPacket(const TSPacket& tspacket); -
libs/libmythtv/hdtvrecorder.h
old new class HDTVRecorder : public DTVRecorder, 53 53 bool Open(void); 54 54 55 55 void SetStreamData(MPEGStreamData*); 56 MPEGStreamData* GetStreamData(void);57 ATSCStreamData* GetATSCStreamData(void) { return _atsc_stream_data; }58 56 59 57 void HandleSingleProgramPAT(ProgramAssociationTable*); 60 58 void HandleSingleProgramPMT(ProgramMapTable*); … … class HDTVRecorder : public DTVRecorder, 64 62 void HandleVCT(uint, const VirtualChannelTable*); 65 63 66 64 private: 65 MPEGStreamData* GetStreamData(void); 66 ATSCStreamData* GetATSCStreamData(void) { return _atsc_stream_data; } 67 67 68 void TeardownAll(void); 68 69 69 70 int ProcessData (const unsigned char *buffer, uint len); -
libs/libmythtv/dvbrecorder.cpp
old new void DVBRecorder::TeardownAll(void) 151 151 delete _input_pmt; 152 152 _input_pmt = NULL; 153 153 } 154 155 SetStreamData(NULL); 154 156 } 155 157 156 158 void DVBRecorder::SetOption(const QString &name, int value) … … void DVBRecorder::SetStreamData(MPEGStre 274 276 if (data == _stream_data) 275 277 return; 276 278 277 MPEGStreamData *old_data = _stream_data; 279 if (_stream_data) 280 { 281 _stream_data->RemoveMPEGListener(this); 282 } 283 278 284 _stream_data = data; 279 if (old_data)280 delete old_data;281 285 282 286 if (data) 283 287 { -
libs/libmythtv/hdhrrecorder.cpp
old new void HDHRRecorder::TeardownAll(void) 49 49 { 50 50 StopRecording(); 51 51 Close(); 52 if (_atsc_stream_data) 53 { 54 delete _atsc_stream_data; 55 _atsc_stream_data = NULL; 56 } 52 53 SetStreamData(NULL); 54 57 55 } 58 56 59 57 void HDHRRecorder::SetOptionsFromProfile(RecordingProfile *profile, … … void HDHRRecorder::SetStreamData(MPEGStr 144 142 if (data == _atsc_stream_data) 145 143 return; 146 144 147 ATSCStreamData *old_data = _atsc_stream_data; 145 if (_atsc_stream_data) 146 { 147 _atsc_stream_data->RemoveMPEGSPListener(this); 148 _atsc_stream_data->RemoveATSCMainListener(this); 149 } 150 148 151 _atsc_stream_data = data; 149 if (old_data)150 delete old_data;151 152 152 153 if (data) 153 154 { -
libs/libmythtv/hdtvrecorder.cpp
old new HDTVRecorder::HDTVRecorder(TVRec *rec) 114 114 _atsc_stream_data(NULL), 115 115 _resync_count(0) 116 116 { 117 SetStreamData(new ATSCStreamData(-1, DEFAULT_SUBCHANNEL)); 117 // XXX: Is this necessary? 118 // If yes how should we handle it when TVRec owns the StreamData 119 //SetStreamData(new ATSCStreamData(-1, DEFAULT_SUBCHANNEL)); 118 120 119 121 _buffer_size = TSPacket::SIZE * 1500; 120 122 if ((_buffer = new unsigned char[_buffer_size])) { … … void HDTVRecorder::SetStreamData(MPEGStr 210 212 if (data == _atsc_stream_data) 211 213 return; 212 214 213 ATSCStreamData *old_data = _atsc_stream_data; 215 if (_atsc_stream_data) 216 { 217 _atsc_stream_data->RemoveMPEGSPListener(this); 218 _atsc_stream_data->RemoveATSCMainListener(this); 219 } 220 214 221 _atsc_stream_data = data; 215 if (old_data)216 delete old_data;217 222 218 223 if (data) 219 224 { -
libs/libmythtv/siscan.cpp
old new SIScan::SIScan(QString _cardtype, Channe 98 98 : // Set in constructor 99 99 channel(_channel), 100 100 signalMonitor(SignalMonitor::Init(_cardtype, -1, _channel)), 101 scanStreamData(new ScanStreamData()), 101 102 sourceID(_sourceID), 102 103 scanMode(IDLE), 103 104 signalTimeout(signal_timeout), … … SIScan::SIScan(QString _cardtype, Channe 121 122 init_freq_tables(); 122 123 current = scanTransports.end(); 123 124 124 // Createa stream data for digital signal monitors125 // Setup a stream data for digital signal monitors 125 126 DTVSignalMonitor* dtvSigMon = GetDTVSignalMonitor(); 126 127 if (dtvSigMon) 127 128 { 128 129 VERBOSE(VB_SIPARSER, LOC + "Connecting up DTVSignalMonitor"); 129 ScanStreamData *data = new ScanStreamData();130 130 131 dtvSigMon->SetStreamData( data);131 dtvSigMon->SetStreamData(GetScanStreamData()); 132 132 dtvSigMon->AddFlags(kDTVSigMon_WaitForMGT | kDTVSigMon_WaitForVCT | 133 133 kDTVSigMon_WaitForNIT | kDTVSigMon_WaitForSDT); 134 134 135 data->AddMPEGListener(this);136 data->AddATSCMainListener(this);137 data->AddDVBMainListener(this);135 GetScanStreamData()->AddMPEGListener(this); 136 GetScanStreamData()->AddATSCMainListener(this); 137 GetScanStreamData()->AddDVBMainListener(this); 138 138 } 139 139 } 140 140 … … SIScan::~SIScan(void) 144 144 VERBOSE(VB_SIPARSER, LOC + "SIScanner Stopped"); 145 145 if (signalMonitor) 146 146 delete signalMonitor; 147 148 GetScanStreamData()->RemoveMPEGListener(this); 147 149 } 148 150 149 151 /** \fn SIScan::ScanServicesSourceID(int) … … void SIScan::HandlePAT(const ProgramAsso 221 223 .arg((*current).FriendlyName)); 222 224 223 225 // Add pmts to list, so we can do MPEG scan properly. 224 ScanStreamData *sd = Get DTVSignalMonitor()->GetScanStreamData();226 ScanStreamData *sd = GetScanStreamData(); 225 227 for (uint i = 0; i < pat->ProgramCount(); i++) 226 228 { 227 229 if (pat->ProgramPID(i)) // don't add NIT "program", MPEG/ATSC safe. … … void SIScan::HandleVCT(uint, const Virtu 234 236 VERBOSE(VB_SIPARSER, LOC + QString("Got a Virtual Channel Table for %1") 235 237 .arg((*current).FriendlyName)); 236 238 237 HandleATSCDBInsertion(Get DTVSignalMonitor()->GetScanStreamData(), true);239 HandleATSCDBInsertion(GetScanStreamData(), true); 238 240 } 239 241 240 242 void SIScan::HandleMGT(const MasterGuideTable*) … … void SIScan::HandleMGT(const MasterGuide 242 244 VERBOSE(VB_SIPARSER, LOC + QString("Got the Master Guide for %1") 243 245 .arg((*current).FriendlyName)); 244 246 245 HandleATSCDBInsertion(Get DTVSignalMonitor()->GetScanStreamData(), true);247 HandleATSCDBInsertion(GetScanStreamData(), true); 246 248 } 247 249 248 250 void SIScan::HandleSDT(uint, const ServiceDescriptionTable* sdt) … … void SIScan::HandleSDT(uint, const Servi 252 254 .arg((*current).FriendlyName)); 253 255 VERBOSE(VB_SIPARSER, LOC + sdt->toString()); 254 256 255 HandleDVBDBInsertion(Get DTVSignalMonitor()->GetScanStreamData(), true);257 HandleDVBDBInsertion(GetScanStreamData(), true); 256 258 } 257 259 258 260 void SIScan::HandleNIT(const NetworkInformationTable *nit) … … void SIScan::HandleNIT(const NetworkInfo 296 298 } 297 299 } 298 300 299 const ScanStreamData *sd = Get DTVSignalMonitor()->GetScanStreamData();301 const ScanStreamData *sd = GetScanStreamData(); 300 302 const DVBStreamData &dsd = *sd; 301 303 if (dsd.HasAllNITSections()) 302 304 { … … void SIScan::HandleNIT(const NetworkInfo 304 306 emit TransportScanComplete(); 305 307 } 306 308 307 HandleDVBDBInsertion(Get DTVSignalMonitor()->GetScanStreamData(), true);309 HandleDVBDBInsertion(GetScanStreamData(), true); 308 310 } 309 311 310 312 void SIScan::HandleMPEGDBInsertion(const ScanStreamData *sd, bool) … … bool SIScan::HandlePostInsertion(void) 414 416 if (!dtvSigMon) 415 417 return false; 416 418 417 const ScanStreamData *sd = dtvSigMon->GetScanStreamData();419 const ScanStreamData *sd = GetScanStreamData(); 418 420 419 421 VERBOSE(VB_SIPARSER, LOC + "HandlePostInsertion() " + 420 422 QString("pat(%1)").arg(sd->HasCachedAnyPAT())); … … void SIScan::ScanTransport(const transpo 697 699 } 698 700 699 701 // If we have a DTV Signal Monitor, perform table scanner reset 700 if (GetDTVSignalMonitor() && Get DTVSignalMonitor()->GetScanStreamData())702 if (GetDTVSignalMonitor() && GetScanStreamData()) 701 703 { 702 Get DTVSignalMonitor()->GetScanStreamData()->Reset();704 GetScanStreamData()->Reset(); 703 705 GetDTVSignalMonitor()->SetChannel(-1,-1); 704 706 } 705 707 -
libs/libmythtv/siscan.h
old new class SIScan : public QObject, 145 145 146 146 static QString loc(const SIScan*); 147 147 148 ScanStreamData *GetScanStreamData(void) { return scanStreamData; } 149 148 150 private: 149 151 // Set in constructor 150 152 ChannelBase *channel; 151 153 SignalMonitor *signalMonitor; 154 ScanStreamData *scanStreamData; 152 155 int sourceID; 153 156 SCANMODE scanMode; 154 157 uint signalTimeout; -
libs/libmythtv/firewirerecorderbase.cpp
old new const int FirewireRecorderBase::kTimeout 19 19 FirewireRecorderBase::FirewireRecorderBase(TVRec *rec) 20 20 : DTVRecorder(rec), _mpeg_stream_data(NULL) 21 21 { 22 SetStreamData(new MPEGStreamData(1, true)); 22 // XXX: Is this necessary? 23 // If yes how should we handle it when TVRec owns the StreamData 24 //SetStreamData(new MPEGStreamData(1, true)); 23 25 } 24 26 25 27 FirewireRecorderBase::~FirewireRecorderBase() … … void FirewireRecorderBase::SetStreamData 131 133 if (data == _mpeg_stream_data) 132 134 return; 133 135 134 MPEGStreamData *old_data = _mpeg_stream_data; 136 if (_mpeg_stream_data) 137 _mpeg_stream_data->RemoveMPEGSPListener(this); 138 135 139 _mpeg_stream_data = data; 136 140 137 141 if (data) 138 142 data->AddMPEGSPListener(this); 139 140 if (old_data)141 delete old_data;142 143 } 143 144 144 145 void FirewireRecorderBase::HandleSingleProgramPAT(