return false;
}
- // rewind stream to beginning
- Seek(0);
+ // test if seeking is supported
+ if (Seek(1) != DVD_NOPTS_VALUE)
+ {
+ // rewind stream to beginning
+ Seek(0);
+ m_bCanSeek = true;
+ }
+ else
+ {
+ m_pInputStream->Seek(0, SEEK_SET);
+ m_pDemuxer->Reset();
+ m_bCanSeek = false;
+ }
if (m_Channels == 0) // no data - just guess and hope for the best
m_Channels = 2;
CDVDDemuxUtils::FreeDemuxPacket(m_pPacket);
m_pPacket = NULL;
- m_pDemuxer->SeekTime((int)iSeekTime, false);
+ bool ret = m_pDemuxer->SeekTime((int)iSeekTime, false);
m_pAudioCodec->Reset();
m_decoded = NULL;
m_nDecodedLen = 0;
+ if (!ret)
+ return DVD_NOPTS_VALUE;
+
return iSeekTime;
}
bool DVDPlayerCodec::CanSeek()
{
- return true;
+ return m_bCanSeek;
}