git.cweiske.de
/
enigma2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix high systemload with plugged CI on e2 start
[enigma2.git]
/
lib
/
dvb
/
tstools.cpp
diff --git
a/lib/dvb/tstools.cpp
b/lib/dvb/tstools.cpp
index 4dab5294f15bd9f3e15f7c6925ba5ff94d932154..4ee26265632f464acfa0747cbbf8834cdf830ea6 100644
(file)
--- a/
lib/dvb/tstools.cpp
+++ b/
lib/dvb/tstools.cpp
@@
-15,6
+15,10
@@
eDVBTSTools::eDVBTSTools()
m_use_streaminfo = 0;
m_samples_taken = 0;
m_use_streaminfo = 0;
m_samples_taken = 0;
+
+ m_last_filelength = 0;
+
+ m_futile = 0;
}
eDVBTSTools::~eDVBTSTools()
}
eDVBTSTools::~eDVBTSTools()
@@
-38,7
+42,7
@@
int eDVBTSTools::openFile(const char *filename)
m_samples_taken = 0;
m_samples_taken = 0;
- if (m_file.open(filename) < 0)
+ if (m_file.open(filename
, 1
) < 0)
return -1;
return 0;
}
return -1;
return 0;
}
@@
-240,11
+244,13
@@
void eDVBTSTools::calcBegin()
if (!m_file.valid())
return;
if (!m_file.valid())
return;
- if (!
m_begin_valid
)
+ if (!
(m_begin_valid || m_futile)
)
{
m_offset_begin = 0;
if (!getPTS(m_offset_begin, m_pts_begin))
m_begin_valid = 1;
{
m_offset_begin = 0;
if (!getPTS(m_offset_begin, m_pts_begin))
m_begin_valid = 1;
+ else
+ m_futile = 1;
}
}
}
}
@@
-255,27
+261,44
@@
void eDVBTSTools::calcEnd()
off_t end = m_file.lseek(0, SEEK_END);
off_t end = m_file.lseek(0, SEEK_END);
- if (abs(end - m_
offset_end
) > 1*1024*1024)
+ if (abs(end - m_
last_filelength
) > 1*1024*1024)
{
{
- m_
offset_end
= end;
+ m_
last_filelength
= end;
m_end_valid = 0;
m_end_valid = 0;
+
+ m_futile = 0;
eDebug("file size changed, recalc length");
}
int maxiter = 10;
eDebug("file size changed, recalc length");
}
int maxiter = 10;
- while (!m_end_valid)
+ m_offset_end = m_last_filelength;
+
+ while (!(m_end_valid || m_futile))
{
if (!--maxiter)
{
if (!--maxiter)
+ {
+ m_futile = 1;
return;
return;
-
+ }
+
m_offset_end -= m_maxrange;
if (m_offset_end < 0)
m_offset_end = 0;
m_offset_end -= m_maxrange;
if (m_offset_end < 0)
m_offset_end = 0;
+
+ /* restore offset if getpts fails */
+ off_t off = m_offset_end;
+
if (!getPTS(m_offset_end, m_pts_end))
m_end_valid = 1;
if (!getPTS(m_offset_end, m_pts_end))
m_end_valid = 1;
+ else
+ m_offset_end = off;
+
if (!m_offset_end)
if (!m_offset_end)
- return;
+ {
+ m_futile = 1;
+ break;
+ }
}
}
}
}