return bestval;
}
-int tuner_type_channel_default(ePtr<iDVBChannelList> &channellist, const eDVBChannelID &chid)
+int tuner_type_channel_default(ePtr<iDVBChannelList> &channellist, const eDVBChannelID &chid, int &system)
{
+ system = iDVBFrontend::feSatellite;
if (channellist)
{
ePtr<iDVBFrontendParameters> feparm;
if (!channellist->getChannelFrontendData(chid, feparm))
{
- int system;
if (!feparm->getSystem(system))
{
- switch(system)
+ switch (system)
{
case iDVBFrontend::feSatellite:
return 50000;
return 0;
}
-int eDVBResourceManager::canAllocateChannel(const eDVBChannelID &channelid, const eDVBChannelID& ignore, bool simulate)
+int eDVBResourceManager::canAllocateChannel(const eDVBChannelID &channelid, const eDVBChannelID& ignore, int &system, bool simulate)
{
std::list<active_channel> &active_channels = simulate ? m_active_simulate_channels : m_active_channels;
- int ret=0;
+ int ret = 0;
+ system = iDVBFrontend::feSatellite;
if (!simulate && m_cached_channel)
{
eDVBChannel *cache_chan = (eDVBChannel*)&(*m_cached_channel);
if(channelid==cache_chan->getChannelID())
- return tuner_type_channel_default(m_list, channelid);
+ return tuner_type_channel_default(m_list, channelid, system);
}
/* first, check if a channel is already existing. */
if (i->m_channel_id == channelid)
{
// eDebug("found shared channel..");
- return tuner_type_channel_default(m_list, channelid);
+ return tuner_type_channel_default(m_list, channelid, system);
}
}
eDebug("channel not found!");
goto error;
}
+ feparm->getSystem(system);
ret = canAllocateFrontend(feparm, simulate);
}
} else if (state == iDVBFrontend::stateFailed)
{
-#ifdef BUILD_VUPLUS /* ikseong */
+#ifdef BUILD_VUPLUS
if (m_current_frontend_parameters)
{
eDebug("OURSTATE: lost lock, trying to retune");
if (sign)
x = -x;
- x -= x % align;
- len += x % align;
+ int r = x % align;
+ x -= r;
+ len += r;
if (sign)
x = -x;
max = align(m_skipmode_n, blocksize);
}
- eDebug("getNextSourceSpan, current offset is %08llx, m_skipmode_m = %d!", current_offset, m_skipmode_m);
+ eDebug("getNextSourceSpan, current offset is %08lld, m_skipmode_m = %d!", current_offset, m_skipmode_m);
int frame_skip_success = 0;
if (m_skipmode_m)
{
int frames_to_skip = m_skipmode_frames + m_skipmode_frames_remainder;
- eDebug("we are at %llx, and we try to skip %d+%d frames from here", current_offset, m_skipmode_frames, m_skipmode_frames_remainder);
+ eDebug("we are at %lld, and we try to skip %d+%d frames from here", current_offset, m_skipmode_frames, m_skipmode_frames_remainder);
size_t iframe_len;
off_t iframe_start = current_offset;
int frames_skipped = frames_to_skip;
if (!frame_skip_success)
{
current_offset += align(m_skipmode_m, blocksize);
-
- if (m_skipmode_m)
+ if(current_offset < 0)
+ current_offset = 0;
+ else
{
- eDebug("we are at %llx, and we try to find the iframe here:", current_offset);
- size_t iframe_len;
- off_t iframe_start = current_offset;
-
- int direction = (m_skipmode_m < 0) ? -1 : +1;
- if (m_tstools.findFrame(iframe_start, iframe_len, direction))
- eDebug("failed");
- else
+ if (m_skipmode_m)
{
- current_offset = align_with_len(iframe_start, blocksize, iframe_len);
- max = align(iframe_len, blocksize);
+ eDebug("we are at %lld, and we try to find the iframe here:", current_offset);
+ size_t iframe_len;
+ off_t start_offset = current_offset;
+ off_t new_offset = start_offset;
+ int direction = (m_skipmode_m < 0) ? -1 : +1;
+ if (m_tstools.findFrame(start_offset, new_offset, iframe_len, direction))
+ eDebug("failed");
+ else
+ {
+ current_offset = align_with_len(new_offset, blocksize, iframe_len);
+ max = align(iframe_len, blocksize);
+ }
}
}
}
}
}
+ if(current_offset <0)
+ current_offset =0;
if ((current_offset < -m_skipmode_m) && (m_skipmode_m < 0))
{
eDebug("reached SOF");
m_skipmode_m = 0;
m_pvr_thread->sendEvent(eFilePushThread::evtUser);
}
-
if (m_source_span.empty())
{
start = current_offset;
size = max;
- eDebug("NO CUESHEET. (%08llx, %zd)", start, size);
+ eDebug("NO CUESHEET. (%08lld, %zd)", start, size);
} else
{
start = current_offset;
m_pvr_thread = 0;
}
- if (!source->valid())
+ if (!source->valid() && !source->isStream())
{
eDebug("PVR source is not valid!");
return -ENOENT;
m_pvr_thread = new eDVBChannelFilePush();
m_pvr_thread->enablePVRCommit(1);
/* If the source specifies a length, it's a file. If not, it's a stream */
- m_pvr_thread->setStreamMode(source->length() <= 0);
+ m_pvr_thread->setStreamMode(source->isStream());
m_pvr_thread->setScatterGather(this);
m_event(this, evtPreStart);