diff options
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) |