else {
off_t position_offset;
if (!relative.empty()) {
- int dur = duration();
+ int dur = calc_length();
DEBUG("duration : %d", dur);
position_offset = (dur * Util::strtollu(relative)) / 100;
}
}
//----------------------------------------------------------------------
-off_t Mpeg::lseek(off_t offset, int whence)
+off_t Mpeg::seek_internal(off_t offset, int whence)
{
if (m_nrfiles < 2)
return ::lseek(get_fd(), offset, whence);
}
//----------------------------------------------------------------------
-ssize_t Mpeg::read(off_t offset, void *buf, size_t count)
+ssize_t Mpeg::read_internal(off_t offset, void *buf, size_t count)
{
if (offset != m_current_offset) {
- m_current_offset = this->lseek(offset, SEEK_SET);
+ m_current_offset = seek_internal(offset, SEEK_SET);
if (m_current_offset < 0) {
return m_current_offset;
}
void Mpeg::calc_end()
{
- off_t end = this->lseek(0, SEEK_END);
+ off_t end = seek_internal(0, SEEK_END);
if (llabs(end - m_last_filelength) > 1*1024*1024) {
m_last_filelength = end;
m_samples_taken = 1;
m_samples.clear();
int retries=2;
- pts_t dummy = duration();
+ pts_t dummy = calc_length();
if (dummy <= 0)
return;
while (left >= 188) {
unsigned char packet[188];
- if (this->read(offset, packet, 188) != 188) {
+ if (read_internal(offset, packet, 188) != 188) {
//break;
return -1;
}
}
//----------------------------------------------------------------------
-int Mpeg::duration()
+int Mpeg::calc_length()
{
calc_begin(); calc_end();
if (!(m_begin_valid && m_end_valid))
int m_begin_valid, m_end_valid, m_futile;
- std::map<pts_t, off_t> m_samples;
int m_samples_taken;
+ std::map<pts_t, off_t> m_samples;
void scan();
int switch_offset(off_t off);
void calc_end();
void calc_begin();
+ int calc_length();
+ int calc_bitrate();
int fix_pts(const off_t &offset, pts_t &now);
int get_pts(off_t &offset, pts_t &pts, int fixed);
-
- int duration();
- off_t lseek(off_t offset, int whence);
- ssize_t read(off_t offset, void *buf, size_t count);
-
int get_offset(off_t &offset, pts_t &pts, int marg);
- int take_sample(off_t off, pts_t &p);
+
void take_samples();
+ int take_sample(off_t off, pts_t &p);
+
+ off_t seek_internal(off_t offset, int whence);
+ ssize_t read_internal(off_t offset, void *buf, size_t count);
- int calc_bitrate();
public:
- Mpeg(std::string file, bool request_time_seek) throw (trap)
- : MpegTS(file, request_time_seek)
+ Mpeg(std::string filename, bool request_time_seek) throw (trap)
+ : MpegTS(filename, request_time_seek)
{
m_current_offset = m_base_offset = m_last_offset = 0;
m_splitsize = m_nrfiles = m_current_file = m_totallength = 0;