[vlc-commits] demux: adaptative: use streams vector instead of static array
Francois Cartegnie
git at videolan.org
Fri Jul 24 15:09:27 CEST 2015
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Sun Jul 19 16:38:00 2015 +0200| [69361064e9ab4d13d6e393ce5427701f2d8e5126] | committer: Francois Cartegnie
demux: adaptative: use streams vector instead of static array
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=69361064e9ab4d13d6e393ce5427701f2d8e5126
---
modules/demux/adaptative/PlaylistManager.cpp | 82 ++++++++++++--------------
modules/demux/adaptative/PlaylistManager.h | 3 +-
modules/demux/dash/DASHManager.cpp | 7 +--
modules/demux/hls/HLSManager.cpp | 7 +--
4 files changed, 45 insertions(+), 54 deletions(-)
diff --git a/modules/demux/adaptative/PlaylistManager.cpp b/modules/demux/adaptative/PlaylistManager.cpp
index 6979925..6bba8db 100644
--- a/modules/demux/adaptative/PlaylistManager.cpp
+++ b/modules/demux/adaptative/PlaylistManager.cpp
@@ -51,16 +51,16 @@ PlaylistManager::PlaylistManager( AbstractPlaylist *pl,
stream ( stream ),
nextPlaylistupdate ( 0 )
{
- for(int i=0; i<StreamTypeCount; i++)
- streams[i] = NULL;
}
PlaylistManager::~PlaylistManager ()
{
delete conManager;
delete streamOutputFactory;
- for(int i=0; i<StreamTypeCount; i++)
- delete streams[i];
+ std::vector<Stream *>::iterator it;
+ for(it=streams.begin(); it!=streams.end(); ++it)
+ delete *it;
+ streams.clear();
}
bool PlaylistManager::start(demux_t *demux)
@@ -75,14 +75,13 @@ bool PlaylistManager::start(demux_t *demux)
const BaseAdaptationSet *set = period->getAdaptationSet(type);
if(set)
{
- streams[type] = new (std::nothrow) Stream(demux, type, set->getStreamFormat());
- if(!streams[type])
+ Stream *st = new (std::nothrow) Stream(demux, type, set->getStreamFormat());
+ if(!st)
continue;
AbstractAdaptationLogic *logic = createLogic(logicType);
if(!logic)
{
- delete streams[type];
- streams[type] = NULL;
+ delete st;
continue;
}
@@ -90,13 +89,15 @@ bool PlaylistManager::start(demux_t *demux)
try
{
if(!tracker || !streamOutputFactory)
+ {
+ delete tracker;
+ delete logic;
throw VLC_ENOMEM;
- streams[type]->create(logic, tracker, streamOutputFactory);
+ }
+ st->create(logic, tracker, streamOutputFactory);
+ streams.push_back(st);
} catch (int) {
- delete streams[type];
- delete logic;
- delete tracker;
- streams[type] = NULL;
+ delete st;
}
}
}
@@ -115,13 +116,10 @@ Stream::status PlaylistManager::demux(mtime_t nzdeadline, bool send)
{
Stream::status i_return = Stream::status_eof;
- for(int type=0; type<StreamTypeCount; type++)
+ std::vector<Stream *>::iterator it;
+ for(it=streams.begin(); it!=streams.end(); ++it)
{
- if(!streams[type])
- continue;
-
- Stream::status i_ret =
- streams[type]->demux(conManager, nzdeadline, send);
+ Stream::status i_ret = (*it)->demux(conManager, nzdeadline, send);
if(i_ret == Stream::status_buffering)
{
@@ -140,12 +138,11 @@ Stream::status PlaylistManager::demux(mtime_t nzdeadline, bool send)
mtime_t PlaylistManager::getPCR() const
{
mtime_t pcr = VLC_TS_INVALID;
- for(int type=0; type<StreamTypeCount; type++)
+ std::vector<Stream *>::const_iterator it;
+ for(it=streams.begin(); it!=streams.end(); ++it)
{
- if(!streams[type])
- continue;
- if(pcr == VLC_TS_INVALID || pcr > streams[type]->getPCR())
- pcr = streams[type]->getPCR();
+ if(pcr == VLC_TS_INVALID || pcr > (*it)->getPCR())
+ pcr = (*it)->getPCR();
}
return pcr;
}
@@ -153,23 +150,21 @@ mtime_t PlaylistManager::getPCR() const
mtime_t PlaylistManager::getFirstDTS() const
{
mtime_t dts = VLC_TS_INVALID;
- for(int type=0; type<StreamTypeCount; type++)
+ std::vector<Stream *>::const_iterator it;
+ for(it=streams.begin(); it!=streams.end(); ++it)
{
- if(!streams[type])
- continue;
- if(dts == VLC_TS_INVALID || dts > streams[type]->getFirstDTS())
- dts = streams[type]->getFirstDTS();
+ if(dts == VLC_TS_INVALID || dts > (*it)->getFirstDTS())
+ dts = (*it)->getFirstDTS();
}
return dts;
}
int PlaylistManager::getGroup() const
{
- for(int type=0; type<StreamTypeCount; type++)
+ std::vector<Stream *>::const_iterator it;
+ for(it=streams.begin(); it!=streams.end(); ++it)
{
- if(!streams[type])
- continue;
- return streams[type]->getGroup();
+ return (*it)->getGroup();
}
return -1;
}
@@ -177,11 +172,10 @@ int PlaylistManager::getGroup() const
int PlaylistManager::esCount() const
{
int es = 0;
- for(int type=0; type<StreamTypeCount; type++)
+ std::vector<Stream *>::const_iterator it;
+ for(it=streams.begin(); it!=streams.end(); ++it)
{
- if(!streams[type])
- continue;
- es += streams[type]->esCount();
+ es += (*it)->esCount();
}
return es;
}
@@ -200,11 +194,10 @@ bool PlaylistManager::setPosition(mtime_t time)
for(int real = 0; real < 2; real++)
{
/* Always probe if we can seek first */
- for(int type=0; type<StreamTypeCount; type++)
+ std::vector<Stream *>::iterator it;
+ for(it=streams.begin(); it!=streams.end(); ++it)
{
- if(!streams[type])
- continue;
- ret &= streams[type]->setPosition(time, !real);
+ ret &= (*it)->setPosition(time, !real);
}
if(!ret)
break;
@@ -217,11 +210,10 @@ bool PlaylistManager::seekAble() const
if(playlist->isLive())
return false;
- for(int type=0; type<StreamTypeCount; type++)
+ std::vector<Stream *>::const_iterator it;
+ for(it=streams.begin(); it!=streams.end(); ++it)
{
- if(!streams[type])
- continue;
- if(!streams[type]->seekAble())
+ if(!(*it)->seekAble())
return false;
}
return true;
diff --git a/modules/demux/adaptative/PlaylistManager.h b/modules/demux/adaptative/PlaylistManager.h
index 8281849..62e8d71 100644
--- a/modules/demux/adaptative/PlaylistManager.h
+++ b/modules/demux/adaptative/PlaylistManager.h
@@ -24,6 +24,7 @@
#include "logic/AbstractAdaptationLogic.h"
#include "Streams.hpp"
+#include <vector>
namespace adaptative
{
@@ -74,7 +75,7 @@ namespace adaptative
AbstractPlaylist *playlist;
AbstractStreamOutputFactory *streamOutputFactory;
stream_t *stream;
- Stream *streams[StreamTypeCount];
+ std::vector<Stream *> streams;
mtime_t nextPlaylistupdate;
};
diff --git a/modules/demux/dash/DASHManager.cpp b/modules/demux/dash/DASHManager.cpp
index f894902..6188f9b 100644
--- a/modules/demux/dash/DASHManager.cpp
+++ b/modules/demux/dash/DASHManager.cpp
@@ -107,11 +107,10 @@ bool DASHManager::updatePlaylist()
}
mtime_t minsegmentTime = 0;
- for(int type=0; type<StreamTypeCount; type++)
+ std::vector<Stream *>::iterator it;
+ for(it=streams.begin(); it!=streams.end(); it++)
{
- if(!streams[type])
- continue;
- mtime_t segmentTime = streams[type]->getPosition();
+ mtime_t segmentTime = (*it)->getPosition();
if(!minsegmentTime || segmentTime < minsegmentTime)
minsegmentTime = segmentTime;
}
diff --git a/modules/demux/hls/HLSManager.cpp b/modules/demux/hls/HLSManager.cpp
index a6e9b21..06f2d34 100644
--- a/modules/demux/hls/HLSManager.cpp
+++ b/modules/demux/hls/HLSManager.cpp
@@ -121,11 +121,10 @@ bool HLSManager::updatePlaylist()
delete updatedplaylist;
/* pruning */
- for(int type=0; type<StreamTypeCount; type++)
+ std::vector<Stream *>::iterator it;
+ for(it=streams.begin(); it!=streams.end(); ++it)
{
- if(!streams[type])
- continue;
- streams[type]->prune();
+ (*it)->prune();
}
}
else
More information about the vlc-commits
mailing list