| 1 | *** libs/libmythtv/mpeg/dvbstreamdata.cpp.orig 2008-01-10 23:11:39.000000000 +0100 |
|---|
| 2 | --- libs/libmythtv/mpeg/dvbstreamdata.cpp 2008-02-10 11:50:03.952514387 +0100 |
|---|
| 3 | *************** |
|---|
| 4 | *** 189,194 **** |
|---|
| 5 | --- 189,199 ---- |
|---|
| 6 | * \brief Assembles PSIP packets and processes them. |
|---|
| 7 | * \todo This is just a stub. |
|---|
| 8 | */ |
|---|
| 9 | + static uint userDefinedNetworkID(void) |
|---|
| 10 | + { |
|---|
| 11 | + return 1111; |
|---|
| 12 | + } |
|---|
| 13 | + |
|---|
| 14 | bool DVBStreamData::HandleTables(uint pid, const PSIPTable &psip) |
|---|
| 15 | { |
|---|
| 16 | if (MPEGStreamData::HandleTables(pid, psip)) |
|---|
| 17 | *************** |
|---|
| 18 | *** 197,226 **** |
|---|
| 19 | if (IsRedundant(pid, psip)) |
|---|
| 20 | return true; |
|---|
| 21 | |
|---|
| 22 | switch (psip.TableID()) |
|---|
| 23 | { |
|---|
| 24 | case TableID::NIT: |
|---|
| 25 | { |
|---|
| 26 | ! SetVersionNIT(psip.Version(), psip.LastSection()); |
|---|
| 27 | ! SetNITSectionSeen(psip.Section()); |
|---|
| 28 | ! |
|---|
| 29 | ! if (_cache_tables) |
|---|
| 30 | ! { |
|---|
| 31 | ! NetworkInformationTable *nit = |
|---|
| 32 | ! new NetworkInformationTable(psip); |
|---|
| 33 | ! CacheNIT(nit); |
|---|
| 34 | ! QMutexLocker locker(&_listener_lock); |
|---|
| 35 | ! for (uint i = 0; i < _dvb_main_listeners.size(); i++) |
|---|
| 36 | ! _dvb_main_listeners[i]->HandleNIT(nit); |
|---|
| 37 | ! } |
|---|
| 38 | ! else |
|---|
| 39 | ! { |
|---|
| 40 | ! NetworkInformationTable nit(psip); |
|---|
| 41 | ! QMutexLocker locker(&_listener_lock); |
|---|
| 42 | ! for (uint i = 0; i < _dvb_main_listeners.size(); i++) |
|---|
| 43 | ! _dvb_main_listeners[i]->HandleNIT(&nit); |
|---|
| 44 | ! } |
|---|
| 45 | ! |
|---|
| 46 | return true; |
|---|
| 47 | } |
|---|
| 48 | case TableID::SDT: |
|---|
| 49 | --- 202,237 ---- |
|---|
| 50 | if (IsRedundant(pid, psip)) |
|---|
| 51 | return true; |
|---|
| 52 | |
|---|
| 53 | + |
|---|
| 54 | switch (psip.TableID()) |
|---|
| 55 | { |
|---|
| 56 | case TableID::NIT: |
|---|
| 57 | { |
|---|
| 58 | ! // If we have a user-defined network ID then process this |
|---|
| 59 | ! // only if it is the network that we want |
|---|
| 60 | ! if (userDefinedNetworkID() && |
|---|
| 61 | ! userDefinedNetworkID() == psip.TableIDExtension()) |
|---|
| 62 | ! { |
|---|
| 63 | ! SetVersionNIT(psip.Version(), psip.LastSection()); |
|---|
| 64 | ! SetNITSectionSeen(psip.Section()); |
|---|
| 65 | ! |
|---|
| 66 | ! if (_cache_tables) |
|---|
| 67 | ! { |
|---|
| 68 | ! NetworkInformationTable *nit = |
|---|
| 69 | ! new NetworkInformationTable(psip); |
|---|
| 70 | ! CacheNIT(nit); |
|---|
| 71 | ! QMutexLocker locker(&_listener_lock); |
|---|
| 72 | ! for (uint i = 0; i < _dvb_main_listeners.size(); i++) |
|---|
| 73 | ! _dvb_main_listeners[i]->HandleNIT(nit); |
|---|
| 74 | ! } |
|---|
| 75 | ! else |
|---|
| 76 | ! { |
|---|
| 77 | ! NetworkInformationTable nit(psip); |
|---|
| 78 | ! QMutexLocker locker(&_listener_lock); |
|---|
| 79 | ! for (uint i = 0; i < _dvb_main_listeners.size(); i++) |
|---|
| 80 | ! _dvb_main_listeners[i]->HandleNIT(&nit); |
|---|
| 81 | ! } |
|---|
| 82 | ! } |
|---|
| 83 | return true; |
|---|
| 84 | } |
|---|
| 85 | case TableID::SDT: |
|---|
| 86 | *************** |
|---|
| 87 | *** 246,259 **** |
|---|
| 88 | } |
|---|
| 89 | case TableID::NITo: |
|---|
| 90 | { |
|---|
| 91 | ! SetVersionNITo(psip.Version(), psip.LastSection()); |
|---|
| 92 | ! SetNIToSectionSeen(psip.Section()); |
|---|
| 93 | ! NetworkInformationTable nit(psip); |
|---|
| 94 | |
|---|
| 95 | ! QMutexLocker locker(&_listener_lock); |
|---|
| 96 | ! for (uint i = 0; i < _dvb_other_listeners.size(); i++) |
|---|
| 97 | ! _dvb_other_listeners[i]->HandleNITo(&nit); |
|---|
| 98 | |
|---|
| 99 | return true; |
|---|
| 100 | } |
|---|
| 101 | case TableID::SDTo: |
|---|
| 102 | --- 257,297 ---- |
|---|
| 103 | } |
|---|
| 104 | case TableID::NITo: |
|---|
| 105 | { |
|---|
| 106 | ! // If we have a user-defined network ID then treat this as |
|---|
| 107 | ! // the NIT if this is the network that we want |
|---|
| 108 | ! if (userDefinedNetworkID() && |
|---|
| 109 | ! userDefinedNetworkID() == psip.TableIDExtension()) |
|---|
| 110 | ! { |
|---|
| 111 | ! SetVersionNIT(psip.Version(), psip.LastSection()); |
|---|
| 112 | ! SetNITSectionSeen(psip.Section()); |
|---|
| 113 | |
|---|
| 114 | ! if (_cache_tables) |
|---|
| 115 | ! { |
|---|
| 116 | ! NetworkInformationTable *nit = |
|---|
| 117 | ! new NetworkInformationTable(psip); |
|---|
| 118 | ! CacheNIT(nit); |
|---|
| 119 | ! QMutexLocker locker(&_listener_lock); |
|---|
| 120 | ! for (uint i = 0; i < _dvb_main_listeners.size(); i++) |
|---|
| 121 | ! _dvb_main_listeners[i]->HandleNIT(nit); |
|---|
| 122 | ! } |
|---|
| 123 | ! else |
|---|
| 124 | ! { |
|---|
| 125 | ! NetworkInformationTable nit(psip); |
|---|
| 126 | ! QMutexLocker locker(&_listener_lock); |
|---|
| 127 | ! for (uint i = 0; i < _dvb_main_listeners.size(); i++) |
|---|
| 128 | ! _dvb_main_listeners[i]->HandleNIT(&nit); |
|---|
| 129 | ! } |
|---|
| 130 | ! } |
|---|
| 131 | ! else |
|---|
| 132 | ! { |
|---|
| 133 | ! SetVersionNITo(psip.Version(), psip.LastSection()); |
|---|
| 134 | ! SetNIToSectionSeen(psip.Section()); |
|---|
| 135 | ! NetworkInformationTable nit(psip); |
|---|
| 136 | |
|---|
| 137 | + QMutexLocker locker(&_listener_lock); |
|---|
| 138 | + for (uint i = 0; i < _dvb_other_listeners.size(); i++) |
|---|
| 139 | + _dvb_other_listeners[i]->HandleNITo(&nit); |
|---|
| 140 | + } |
|---|
| 141 | return true; |
|---|
| 142 | } |
|---|
| 143 | case TableID::SDTo: |
|---|