[mythtv] DVB tuning broken in current SVN
Ian Caulfield
imc25 at cam.ac.uk
Wed Oct 5 11:12:57 UTC 2005
On Wed, 5 Oct 2005, Ian Caulfield wrote:
> I've done some fiddling, and if I make the MPEGStreamData::IsRedundant call
> always return false, then it suddenly starts working for me... should it
> check program number as well as version number for PMT tables?
Here's a rough patch which seems to work for me...
Index: mpeg/mpegstreamdata.cpp
===================================================================
--- mpeg/mpegstreamdata.cpp (revision 7389)
+++ mpeg/mpegstreamdata.cpp (working copy)
@@ -282,7 +282,10 @@
return (version == VersionPATSingleProgram());
if (TableID::PMT == table_id)
- return VersionPMT(psip.tsheader()->PID()) == version;
+ {
+ ProgramMapTable pmt(psip);
+ return VersionPMT(psip.tsheader()->PID(), pmt.ProgramNumber()) ==
version;
+ }
return false;
}
@@ -318,7 +321,8 @@
}
case TableID::PMT:
{
- SetVersionPMT(pid, psip.Version());
+ ProgramMapTable pmt(psip);
+ SetVersionPMT(pid, pmt.ProgramNumber(), psip.Version());
if (_cache_tables)
{
ProgramMapTable *pmt = new ProgramMapTable(psip);
Index: mpeg/mpegstreamdata.h
===================================================================
--- mpeg/mpegstreamdata.h (revision 7389)
+++ mpeg/mpegstreamdata.h (working copy)
@@ -21,6 +21,8 @@
typedef vector<const ProgramMapTable*> pmt_vec_t;
typedef QMap<uint, ProgramMapTable*> pmt_cache_t;
+#define ENCODE_PID_PROG(pid, prog) (pid << 16 | (prog & 0xffff))
+
class MPEGStreamData : public QObject
{
Q_OBJECT
@@ -62,8 +64,8 @@
// Table versions
virtual void SetVersionPAT(int version) { _pat_version =
version; }
virtual int VersionPAT(void) const { return
_pat_version; }
- virtual void SetVersionPMT(uint pid, int ver) { _pmt_version[pid] =
ver; }
- virtual inline int VersionPMT(uint pid) const;
+ virtual void SetVersionPMT(uint pid, uint prog_num, int ver) {
_pmt_version[ENCODE_PID_PROG(pid, prog_num)] = ver; }
+ virtual inline int VersionPMT(uint pid, uint prog_num) const;
// Caching
virtual bool HasCachedPAT(void) const;
@@ -199,9 +201,10 @@
//AdaptationFieldControl afc(tspacket.data()+4);
}
-inline int MPEGStreamData::VersionPMT(uint pid) const
+inline int MPEGStreamData::VersionPMT(uint pid, uint prog_num) const
{
- const QMap<uint, int>::const_iterator it = _pmt_version.find(pid);
+ const QMap<uint, int>::const_iterator it =
+ _pmt_version.find(ENCODE_PID_PROG(pid, prog_num));
return (it == _pmt_version.end()) ? -1 : *it;
}
More information about the mythtv-dev
mailing list