diff options
author | chriszero <zerov83@gmail.com> | 2015-02-07 16:06:39 +0100 |
---|---|---|
committer | chriszero <zerov83@gmail.com> | 2015-02-07 16:06:39 +0100 |
commit | 886aa7f168ebdc922864aeee432735ba48dde55b (patch) | |
tree | aeff64c746c48a275616194d347b82c055ec7c3f /hlsPlayer.cpp | |
parent | 2cabbc7e52769a897f72521bea1feaacf2981bf3 (diff) | |
download | vdr-plugin-plex-886aa7f168ebdc922864aeee432735ba48dde55b.tar.gz vdr-plugin-plex-886aa7f168ebdc922864aeee432735ba48dde55b.tar.bz2 |
Implements resizing of the ringbuffer if a segment is bigger than the estimate.
Diffstat (limited to 'hlsPlayer.cpp')
-rw-r--r-- | hlsPlayer.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/hlsPlayer.cpp b/hlsPlayer.cpp index a6c0e6b..8feb8f0 100644 --- a/hlsPlayer.cpp +++ b/hlsPlayer.cpp @@ -278,6 +278,10 @@ bool cHlsSegmentLoader::DoLoad(void) std::string segmentUri = GetSegmentUri(m_lastLoadedSegment++); result = LoadSegment(segmentUri); } + } else { + if(nextSegmentSize >= m_ringBufferSize) { + ResizeRingbuffer(nextSegmentSize + MEGABYTE(1)); + } } m_bufferFilled = result; } else { @@ -339,6 +343,25 @@ void cHlsSegmentLoader::Ping(void) } } +void cHlsSegmentLoader::ResizeRingbuffer(int newsize) +{ + hlsMutex.Lock(); + isyslog("[plex] %s, Oldsize: %d, Newsize: %d", __FUNCTION__, m_ringBufferSize, newsize); + //Create new Ringbuffer + cRingBufferLinear* newBuffer = new cRingBufferLinear(newsize, 2*TS_SIZE); + // Copy old data + int count = 0; + uchar* pData = m_pRingbuffer->Get(count); + newBuffer->Put(pData, count); + // delete old buffer + delete m_pRingbuffer; + m_pRingbuffer = NULL; + // assing new buffer + m_pRingbuffer = newBuffer; + m_ringBufferSize = newsize; + hlsMutex.Unlock(); +} + //--- cHlsPlayer cHlsPlayer::cHlsPlayer(std::string startm3u8, plexclient::Video* Video, int offset) |