Ticket #6881: hdhr-cleanup.patch
| File hdhr-cleanup.patch, 12.5 KB (added by , 16 years ago) |
|---|
-
libs/libmythtv/hdhrsignalmonitor.cpp
diff -Nur -x .svn mythtv/libs/libmythtv/hdhrsignalmonitor.cpp mythtv.new/libs/libmythtv/hdhrsignalmonitor.cpp
old new 40 40 HDHRSignalMonitor::HDHRSignalMonitor( 41 41 int db_cardnum, HDHRChannel* _channel, uint64_t _flags) : 42 42 DTVSignalMonitor(db_cardnum, _channel, _flags), 43 streamHandlerStarted(false), streamHandler(NULL)43 _stream_handler_started(false), _stream_handler(NULL) 44 44 { 45 45 VERBOSE(VB_CHANNEL, LOC + "ctor"); 46 46 … … 48 48 49 49 AddFlags(kSigMon_WaitForSig); 50 50 51 streamHandler = HDHRStreamHandler::Get(_channel->GetDevice());51 _stream_handler = HDHRStreamHandler::Get(_channel->GetDevice()); 52 52 } 53 53 54 54 /** \fn HDHRSignalMonitor::~HDHRSignalMonitor() … … 58 58 { 59 59 VERBOSE(VB_CHANNEL, LOC + "dtor"); 60 60 Stop(); 61 HDHRStreamHandler::Return( streamHandler);61 HDHRStreamHandler::Return(_stream_handler); 62 62 } 63 63 64 64 /** \fn HDHRSignalMonitor::Stop(void) … … 69 69 VERBOSE(VB_CHANNEL, LOC + "Stop() -- begin"); 70 70 SignalMonitor::Stop(); 71 71 if (GetStreamData()) 72 streamHandler->RemoveListener(GetStreamData());73 streamHandlerStarted = false;72 _stream_handler->RemoveListener(GetStreamData()); 73 _stream_handler_started = false; 74 74 75 75 VERBOSE(VB_CHANNEL, LOC + "Stop() -- end"); 76 76 } … … 91 91 if (!running || exit) 92 92 return; 93 93 94 if ( streamHandlerStarted)94 if (_stream_handler_started) 95 95 { 96 96 EmitStatus(); 97 97 if (IsAllGood()) … … 104 104 } 105 105 106 106 struct hdhomerun_tuner_status_t status; 107 streamHandler->GetTunerStatus(&status);107 _stream_handler->GetTunerStatus(&status); 108 108 109 109 uint sig = status.signal_strength; 110 110 uint snq = status.signal_to_noise_quality; … … 137 137 kDTVSigMon_WaitForMGT | kDTVSigMon_WaitForVCT | 138 138 kDTVSigMon_WaitForNIT | kDTVSigMon_WaitForSDT)) 139 139 { 140 streamHandler->AddListener(GetStreamData());141 streamHandlerStarted = true;140 _stream_handler->AddListener(GetStreamData()); 141 _stream_handler_started = true; 142 142 } 143 143 144 144 update_done = true; -
libs/libmythtv/hdhrsignalmonitor.h
diff -Nur -x .svn mythtv/libs/libmythtv/hdhrsignalmonitor.h mythtv.new/libs/libmythtv/hdhrsignalmonitor.h
old new 28 28 HDHRChannel *GetHDHRChannel(void); 29 29 30 30 protected: 31 bool streamHandlerStarted;32 HDHRStreamHandler * streamHandler;31 bool _stream_handler_started; 32 HDHRStreamHandler *_stream_handler; 33 33 }; 34 34 35 35 #endif // HDHRSIGNALMONITOR_H -
libs/libmythtv/hdhrstreamhandler.cpp
diff -Nur -x .svn mythtv/libs/libmythtv/hdhrstreamhandler.cpp mythtv.new/libs/libmythtv/hdhrstreamhandler.cpp
old new 39 39 40 40 QMap<QString,HDHRStreamHandler*>::iterator it = _handlers.find(devkey); 41 41 42 hdhr_id_data device_data;43 44 if (it == _handlers.end())45 {46 // Not found in the current _handlers47 // Try to find the physical device and determine a unique device key48 // Then check to see if the unique key exists49 FindDevice(devname, device_data);50 51 devkey = QString("%1-%2").arg(device_data.device_id, 8, 16)52 .arg(device_data.tuner);53 54 // If the physical device is not found use the key "NOTFOUND-0"55 if (device_data.device_id == 0)56 devkey = "NOTFOUND-0";57 58 devkey = devkey.toUpper();59 it = _handlers.find(devkey);60 }61 62 63 42 if (it == _handlers.end()) 64 43 { 65 HDHRStreamHandler *newhandler = new HDHRStreamHandler(devkey, 66 device_data); 44 HDHRStreamHandler *newhandler = new HDHRStreamHandler(devkey); 67 45 newhandler->Open(); 68 46 _handlers[devkey] = newhandler; 69 47 _handlers_refcnt[devkey] = 1; 70 48 71 // If we are adding a "NOTFOUND" device,72 // up its refcount so we never delete it.73 if (device_data.device_id == 0)74 _handlers_refcnt[devkey]++;75 76 49 VERBOSE(VB_RECORD, 77 50 QString("HDHRSH: Creating new stream handler %1 for %2") 78 51 .arg(devkey).arg(devname)); … … 127 100 ref = NULL; 128 101 } 129 102 130 HDHRStreamHandler::HDHRStreamHandler(const QString &devicename, 131 hdhr_id_data &device_data) : 103 HDHRStreamHandler::HDHRStreamHandler(const QString &devicename) : 132 104 _hdhomerun_device(NULL), 133 _device_id(device_data.device_id), 134 _device_ip(device_data.device_ip), 135 _tuner(device_data.tuner), 105 _tuner(-1), 136 106 _devicename(devicename), 137 107 138 108 _start_stop_lock(QMutex::Recursive), … … 590 560 591 561 bool HDHRStreamHandler::Open(void) 592 562 { 593 // By the time we get here we have a unique device_id & device_ip pair594 // for the hdhomerun. _device_id == 0 and _devicename == "NOTFOUND-0"595 // denote a device which is configured but we coudn't find.596 if (_device_id == 0)597 return false;598 563 return Connect(); 599 564 } 600 565 … … 610 575 611 576 bool HDHRStreamHandler::Connect(void) 612 577 { 613 _hdhomerun_device = hdhomerun_device_create(_device_id, _device_ip, _tuner, NULL); 578 _hdhomerun_device = hdhomerun_device_create_from_str( 579 _devicename.toLocal8Bit().constData(), NULL); 614 580 615 581 if (!_hdhomerun_device) 616 582 { … … 618 584 return false; 619 585 } 620 586 587 _tuner = hdhomerun_device_get_tuner(_hdhomerun_device); 588 621 589 if (hdhomerun_device_get_local_machine_addr(_hdhomerun_device) == 0) 622 590 { 623 591 VERBOSE(VB_IMPORTANT, LOC_ERR + "Unable to connect to device"); … … 628 596 return true; 629 597 } 630 598 631 void HDHRStreamHandler::FindDevice(const QString &_devicename,632 hdhr_id_data &device_data)633 {634 hdhomerun_device_t* thisdevice = hdhomerun_device_create_from_str(635 _devicename.toLocal8Bit().constData(), NULL);636 637 if (thisdevice)638 {639 device_data.device_id = hdhomerun_device_get_device_id(thisdevice);640 device_data.device_ip = hdhomerun_device_get_device_ip(thisdevice);641 device_data.tuner = hdhomerun_device_get_tuner(thisdevice);642 hdhomerun_device_destroy(thisdevice);643 644 if (device_data.device_ip != 0)645 {646 VERBOSE(VB_IMPORTANT,647 QString("HDHRSH: device %1 found at "648 "address %2.%3.%4.%5 tuner %6")649 .arg(_devicename)650 .arg((device_data.device_ip>>24) & 0xFF)651 .arg((device_data.device_ip>>16) & 0xFF)652 .arg((device_data.device_ip>> 8) & 0xFF)653 .arg((device_data.device_ip>> 0) & 0xFF)654 .arg(device_data.tuner));655 }656 else657 {658 VERBOSE(VB_IMPORTANT, LOC + "device not found");659 device_data.device_id = 0;660 device_data.device_ip = hdhomerun_device_get_device_ip_requested(661 thisdevice);662 device_data.tuner = 0;663 }664 }665 else666 {667 VERBOSE(VB_IMPORTANT, LOC + "device not found");668 device_data.device_id = 0;669 device_data.device_ip = 0;670 device_data.tuner = 0;671 }672 }673 674 675 599 bool HDHRStreamHandler::EnterPowerSavingMode(void) 676 600 { 677 601 if (!hdhomerun_device_get_video_sock(_hdhomerun_device)) … … 685 609 } 686 610 } 687 611 688 QString HDHRStreamHandler:: DeviceGet(612 QString HDHRStreamHandler::TunerGet( 689 613 const QString &name, bool report_error_return, bool print_error) const 690 614 { 691 615 QMutexLocker locker(&_hdhr_lock); … … 696 620 return QString::null; 697 621 } 698 622 623 QString valname = QString("/tuner%1/%2").arg(_tuner).arg(name); 699 624 char *value = NULL; 700 625 char *error = NULL; 701 626 if (hdhomerun_device_get_var( 702 _hdhomerun_device, name.toLocal8Bit().constData(),627 _hdhomerun_device, valname.toLocal8Bit().constData(), 703 628 &value, &error) < 0) 704 629 { 705 630 VERBOSE(VB_IMPORTANT, LOC_ERR + "Get request failed" + ENO); … … 720 645 return QString(value); 721 646 } 722 647 723 QString HDHRStreamHandler:: DeviceSet(648 QString HDHRStreamHandler::TunerSet( 724 649 const QString &name, const QString &val, 725 650 bool report_error_return, bool print_error) 726 651 { … … 732 657 return QString::null; 733 658 } 734 659 660 661 QString valname = QString("/tuner%1/%2").arg(_tuner).arg(name); 735 662 char *value = NULL; 736 663 char *error = NULL; 664 737 665 if (hdhomerun_device_set_var( 738 _hdhomerun_device, name.toLocal8Bit().constData(),666 _hdhomerun_device, valname.toLocal8Bit().constData(), 739 667 val.toLocal8Bit().constData(), &value, &error) < 0) 740 668 { 741 669 VERBOSE(VB_IMPORTANT, LOC_ERR + "Set request failed" + ENO); … … 758 686 return QString(value); 759 687 } 760 688 761 QString HDHRStreamHandler::TunerGet(762 const QString &name, bool report_error_return, bool print_error) const763 {764 return DeviceGet(QString("/tuner%1/%2").arg(_tuner).arg(name),765 report_error_return, print_error);766 }767 768 QString HDHRStreamHandler::TunerSet(769 const QString &name, const QString &value,770 bool report_error_return, bool print_error)771 {772 QString valname = QString("/tuner%1/%2").arg(_tuner).arg(name);773 return DeviceSet(valname, value, report_error_return, print_error);774 }775 776 bool HDHRStreamHandler::DeviceSetTarget(unsigned short localPort)777 {778 if (localPort == 0)779 {780 return false;781 }782 783 unsigned long localIP = hdhomerun_device_get_local_machine_addr(784 _hdhomerun_device);785 if (localIP == 0)786 {787 return false;788 }789 790 QString rtpValue = QString("rtp://%1.%2.%3.%4:%5")791 .arg((localIP >> 24) & 0xFF).arg((localIP >> 16) & 0xFF)792 .arg((localIP >> 8) & 0xFF).arg((localIP >> 0) & 0xFF)793 .arg(localPort);794 795 QString err = TunerSet("target", rtpValue, true, false);796 797 if (err.isEmpty())798 {799 QString udpValue = QString("udp://%1.%2.%3.%4:%5")800 .arg((localIP >> 24) & 0xFF).arg((localIP >> 16) & 0xFF)801 .arg((localIP >> 8) & 0xFF).arg((localIP >> 0) & 0xFF)802 .arg(localPort);803 return !TunerSet("target", udpValue).isEmpty();804 }805 806 return true;807 }808 809 bool HDHRStreamHandler::DeviceClearTarget(void)810 {811 return !TunerSet("target", "0.0.0.0:0").isEmpty();812 }813 814 689 void HDHRStreamHandler::GetTunerStatus(struct hdhomerun_tuner_status_t *status) 815 690 { 816 691 hdhomerun_device_get_tuner_status(_hdhomerun_device, NULL, status); -
libs/libmythtv/hdhrstreamhandler.h
diff -Nur -x .svn mythtv/libs/libmythtv/hdhrstreamhandler.h mythtv.new/libs/libmythtv/hdhrstreamhandler.h
old new 30 30 31 31 //#define RETUNE_TIMEOUT 5000 32 32 33 struct hdhr_id_data {34 uint device_id;35 uint device_ip;36 uint tuner;37 };38 39 33 class HDHRStreamHandler : public ReaderPausedCB 40 34 { 41 35 friend void *run_hdhr_stream_handler_thunk(void *param); … … 61 55 virtual void ReaderPaused(int fd) { (void) fd; } 62 56 63 57 private: 64 HDHRStreamHandler(const QString & , hdhr_id_data &);58 HDHRStreamHandler(const QString &); 65 59 ~HDHRStreamHandler(); 66 60 67 static void FindDevice(const QString &, hdhr_id_data &);68 61 bool Connect(void); 69 62 70 QString DeviceGet(const QString &name,71 bool report_error_return = true,72 bool print_error = true) const;73 QString DeviceSet(const QString &name, const QString &value,74 bool report_error_return = true,75 bool print_error = true);76 77 63 QString TunerGet(const QString &name, 78 64 bool report_error_return = true, 79 65 bool print_error = true) const; … … 81 67 bool report_error_return = true, 82 68 bool print_error = true); 83 69 84 bool DeviceSetTarget(short unsigned int);85 bool DeviceClearTarget(void);86 87 70 bool Open(void); 88 71 void Close(void); 89 72 … … 106 89 107 90 private: 108 91 hdhomerun_device_t *_hdhomerun_device; 109 uint _device_id;110 uint _device_ip;111 92 uint _tuner; 112 93 QString _devicename; 113 94
