]> git.sesse.net Git - vlc/blob - modules/stream_filter/dash/adaptationlogic/RateBasedAdaptationLogic.cpp
dash: RateBasedAdaptationLogic: cosmetics.
[vlc] / modules / stream_filter / dash / adaptationlogic / RateBasedAdaptationLogic.cpp
1 /*
2  * RateBasedAdaptationLogic.cpp
3  *****************************************************************************
4  * Copyright (C) 2010 - 2011 Klagenfurt University
5  *
6  * Created on: Aug 10, 2010
7  * Authors: Christopher Mueller <christopher.mueller@itec.uni-klu.ac.at>
8  *          Christian Timmerer  <christian.timmerer@itec.uni-klu.ac.at>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU Lesser General Public License as published
12  * by the Free Software Foundation; either version 2.1 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
23  *****************************************************************************/
24 #ifdef HAVE_CONFIG_H
25 # include "config.h"
26 #endif
27
28 #include "RateBasedAdaptationLogic.h"
29
30 using namespace dash::logic;
31 using namespace dash::xml;
32 using namespace dash::http;
33 using namespace dash::mpd;
34 using namespace dash::exception;
35
36 RateBasedAdaptationLogic::RateBasedAdaptationLogic  (IMPDManager *mpdManager) :
37     AbstractAdaptationLogic( mpdManager ),
38     mpdManager( mpdManager ),
39     count( 0 ),
40     currentPeriod( mpdManager->getFirstPeriod() )
41 {
42 }
43
44 Chunk*  RateBasedAdaptationLogic::getNextChunk () throw(EOFException)
45 {
46     if(this->mpdManager == NULL)
47         throw EOFException();
48
49     if(this->currentPeriod == NULL)
50         throw EOFException();
51
52     long bitrate = this->getBpsAvg();
53
54     Representation *rep = this->mpdManager->getRepresentation(this->currentPeriod, bitrate);
55
56     if(rep == NULL)
57         throw EOFException();
58
59     std::vector<ISegment *> segments = this->mpdManager->getSegments(rep);
60
61     if(this->count == segments.size())
62     {
63         this->currentPeriod = this->mpdManager->getNextPeriod(this->currentPeriod);
64         this->count = 0;
65         return this->getNextChunk();
66     }
67
68     if ( segments.size() > this->count )
69     {
70         Chunk *chunk = new Chunk;
71         chunk->setUrl( segments.at( this->count )->getSourceUrl() );
72         this->count++;
73         return chunk;
74     }
75     return NULL;
76 }