aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/tstools.cpp
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2005-11-18 00:46:31 +0000
committerFelix Domke <tmbinc@elitedvb.net>2005-11-18 00:46:31 +0000
commita376db5731c531cbadd12108be1f565b7477c54e (patch)
treef30006090813b2bbb2db0062602e91e2cc66ff2e /lib/dvb/tstools.cpp
parent942f9e8554c495e6782d93524c8e820ec548a8a9 (diff)
downloadenigma2-a376db5731c531cbadd12108be1f565b7477c54e.tar.gz
enigma2-a376db5731c531cbadd12108be1f565b7477c54e.zip
tstools: fix adaption field, lower maxrange (increases accuracy), with multiple tries at end of file
Diffstat (limited to 'lib/dvb/tstools.cpp')
-rw-r--r--lib/dvb/tstools.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/lib/dvb/tstools.cpp b/lib/dvb/tstools.cpp
index b83fd50a..81e62dd2 100644
--- a/lib/dvb/tstools.cpp
+++ b/lib/dvb/tstools.cpp
@@ -10,7 +10,7 @@ eDVBTSTools::eDVBTSTools()
{
m_fd = -1;
m_pid = -1;
- m_maxrange = 1*1024*1024;
+ m_maxrange = 256*1024;
m_begin_valid = 0;
m_end_valid = 0;
@@ -92,7 +92,7 @@ int eDVBTSTools::getPTS(off_t &offset, pts_t &pts)
unsigned char *pes;
/* check for adaption field */
- if (block[3] & 0x10)
+ if (block[3] & 0x20)
pes = block + block[4] + 4 + 1;
else
pes = block + 4;
@@ -112,7 +112,7 @@ int eDVBTSTools::getPTS(off_t &offset, pts_t &pts)
return 0;
}
}
-
+
return -1;
}
@@ -133,11 +133,22 @@ void eDVBTSTools::calcEnd()
if (m_fd < 0)
return;
- if (!m_end_valid)
+ m_offset_end = lseek(m_fd, 0, SEEK_END);
+
+ int maxiter = 10;
+
+ while (!m_end_valid)
{
- m_offset_end = lseek(m_fd, 0, SEEK_END) - m_maxrange;
+ if (!--maxiter)
+ return;
+
+ m_offset_end -= m_maxrange;
+ if (m_offset_end < 0)
+ m_offset_end = 0;
if (!getPTS(m_offset_end, m_pts_end))
m_end_valid = 1;
+ if (!m_offset_end)
+ return;
}
}