*** libs/libmythtv/mpeg/dvbstreamdata.cpp.orig	2008-01-10 23:11:39.000000000 +0100
--- libs/libmythtv/mpeg/dvbstreamdata.cpp	2008-02-10 11:50:03.952514387 +0100
***************
*** 189,194 ****
--- 189,199 ----
   *  \brief Assembles PSIP packets and processes them.
   *  \todo This is just a stub.
   */
+ static uint userDefinedNetworkID(void)
+ {
+     return 1111;
+ }
+ 
  bool DVBStreamData::HandleTables(uint pid, const PSIPTable &psip)
  {
      if (MPEGStreamData::HandleTables(pid, psip))
***************
*** 197,226 ****
      if (IsRedundant(pid, psip))
          return true;
  
      switch (psip.TableID())
      {
          case TableID::NIT:
          {
!             SetVersionNIT(psip.Version(), psip.LastSection());
!             SetNITSectionSeen(psip.Section());
! 
!             if (_cache_tables)
!             {
!                 NetworkInformationTable *nit =
!                     new NetworkInformationTable(psip);
!                 CacheNIT(nit);
!                 QMutexLocker locker(&_listener_lock);
!                 for (uint i = 0; i < _dvb_main_listeners.size(); i++)
!                     _dvb_main_listeners[i]->HandleNIT(nit);
!             }
!             else
!             {
!                 NetworkInformationTable nit(psip);
!                 QMutexLocker locker(&_listener_lock);
!                 for (uint i = 0; i < _dvb_main_listeners.size(); i++)
!                     _dvb_main_listeners[i]->HandleNIT(&nit);
!             }
! 
              return true;
          }
          case TableID::SDT:
--- 202,237 ----
      if (IsRedundant(pid, psip))
          return true;
  
+ 
      switch (psip.TableID())
      {
          case TableID::NIT:
          {
! 	    // If we have a user-defined network ID then process this
! 	    // only if it is the network that we want
! 	    if (userDefinedNetworkID() &&
! 	        userDefinedNetworkID() == psip.TableIDExtension())
! 	    {
!                 SetVersionNIT(psip.Version(), psip.LastSection());
!                 SetNITSectionSeen(psip.Section());
! 
!                 if (_cache_tables)
!                 {
!                     NetworkInformationTable *nit =
!                         new NetworkInformationTable(psip);
!                     CacheNIT(nit);
!                     QMutexLocker locker(&_listener_lock);
!                     for (uint i = 0; i < _dvb_main_listeners.size(); i++)
!                         _dvb_main_listeners[i]->HandleNIT(nit);
!                 }
!                 else
!                 {
!                     NetworkInformationTable nit(psip);
!                     QMutexLocker locker(&_listener_lock);
!                     for (uint i = 0; i < _dvb_main_listeners.size(); i++)
!                         _dvb_main_listeners[i]->HandleNIT(&nit);
!                 }
! 	    }
              return true;
          }
          case TableID::SDT:
***************
*** 246,259 ****
          }
          case TableID::NITo:
          {
!             SetVersionNITo(psip.Version(), psip.LastSection());
!             SetNIToSectionSeen(psip.Section());
!             NetworkInformationTable nit(psip);
  
!             QMutexLocker locker(&_listener_lock);
!             for (uint i = 0; i < _dvb_other_listeners.size(); i++)
!                 _dvb_other_listeners[i]->HandleNITo(&nit);
  
              return true;
          }
          case TableID::SDTo:
--- 257,297 ----
          }
          case TableID::NITo:
          {
! 	    // If we have a user-defined network ID then treat this as
! 	    // the NIT if this is the network that we want
! 	    if (userDefinedNetworkID() &&
! 	        userDefinedNetworkID() == psip.TableIDExtension())
!             {
!                 SetVersionNIT(psip.Version(), psip.LastSection());
!                 SetNITSectionSeen(psip.Section());
  
!                 if (_cache_tables)
!                 {
!                     NetworkInformationTable *nit =
!                         new NetworkInformationTable(psip);
!                     CacheNIT(nit);
!                     QMutexLocker locker(&_listener_lock);
!                     for (uint i = 0; i < _dvb_main_listeners.size(); i++)
!                         _dvb_main_listeners[i]->HandleNIT(nit);
!                 }
!                 else
!                 {
!                     NetworkInformationTable nit(psip);
!                     QMutexLocker locker(&_listener_lock);
!                     for (uint i = 0; i < _dvb_main_listeners.size(); i++)
!                         _dvb_main_listeners[i]->HandleNIT(&nit);
!                 }
! 	    }
! 	    else
! 	    {
!                 SetVersionNITo(psip.Version(), psip.LastSection());
!                 SetNIToSectionSeen(psip.Section());
!                 NetworkInformationTable nit(psip);
  
+                 QMutexLocker locker(&_listener_lock);
+                 for (uint i = 0; i < _dvb_other_listeners.size(); i++)
+                     _dvb_other_listeners[i]->HandleNITo(&nit);
+ 	    }
              return true;
          }
          case TableID::SDTo:
