- Timestamp:
- 08/25/10 00:20:41 (21 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/applications/applestreamingclient/src/playlist.cpp
r103 r104 128 128 //that means the item is finished. Save it 129 129 _items[itemIndex] = item; 130 _itemMediaSequences[ itemIndex] = _lastMediaSequence;130 _itemMediaSequences[_lastMediaSequence] = itemIndex; 131 131 _itemKeyUris[itemIndex] = _pLastKeyUri; 132 132 _itemUris[itemIndex] = pLine; … … 189 189 } 190 190 191 string Playlist::GetItemUri(uint32_t index) { 191 string Playlist::GetItemUri(uint32_t &sequence) { 192 uint32_t index = GetIndex(sequence); 192 193 if (index >= _itemUris.size()) 193 194 return ""; … … 203 204 } 204 205 205 string Playlist::GetItemKeyUri(uint32_t index) { 206 string Playlist::GetItemKeyUri(uint32_t &sequence) { 207 uint32_t index = GetIndex(sequence); 206 208 if (index >= _itemKeyUris.size()) 207 209 return ""; … … 211 213 } 212 214 213 uint32_t Playlist::GetItemMediaSequence(uint32_t index) { 214 if (index >= _itemMediaSequences.size()) 215 return 0; 216 return _itemMediaSequences[index]; 217 } 218 219 uint32_t Playlist::GetItemBandwidth(uint32_t index) { 215 uint32_t Playlist::GetItemBandwidth(uint32_t &sequence) { 216 uint32_t index = GetIndex(sequence); 220 217 if (index >= _itemBandwidths.size()) 221 218 return 0; … … 223 220 } 224 221 225 Variant Playlist::GetItemVariant(uint32_t index) { 226 if (index >= _items.size()) 227 return Variant(); 222 Variant Playlist::GetItemVariant(uint32_t &sequence) { 223 uint32_t index = GetIndex(sequence); 228 224 Variant result; 229 225 result["encryptionKeyUri"] = GetItemKeyUri(index); … … 233 229 } 234 230 235 void Playlist::ApproximateStartEndTimes(uint32_t index, double start, double end) { 236 _meanDuration = _meanDuration * (double) _meanDurationCount + end - start; 237 _meanDurationCount++; 238 _meanDuration /= (double) _meanDurationCount; 239 } 240 241 void Playlist::GetSeekRange(double &min, double &max) { 242 min = 0; 243 max = (double) _items.size() * _meanDuration; 244 } 245 246 uint32_t Playlist::GetItemIndex(double seekPoint) { 247 if (_meanDuration == 0) 248 return 0; 249 uint32_t index = (uint32_t) (seekPoint / _meanDuration); 250 if (_items.size() <= index) 251 return 0; 252 return index; 253 } 254 255 uint32_t Playlist::GetLastMediaSequence() { 256 if (_itemMediaSequences.size() == 0) 257 return 0; 258 return _itemMediaSequences[_itemMediaSequences.size() - 1]; 259 } 231 uint32_t Playlist::GetIndex(uint32_t &sequence) { 232 FINEST("---------------------"); 233 FINEST("sequence requested: %d", sequence); 234 //1. We have it, we return it 235 if (MAP_HAS1(_itemMediaSequences, sequence)) { 236 FINEST("WE have it"); 237 FINEST("---------------------"); 238 return _itemMediaSequences[sequence]; 239 } 240 241 //2. We don't have it, and is a 0 value, that means it was never initialized 242 if (sequence == 0) { 243 FINEST("sequence is 0"); 244 FINEST("_itemMediaSequences.size(): %d", _itemMediaSequences.size()); 245 if (_itemMediaSequences.size() != 0) { 246 //3. We have stuff. Init and return 247 FINEST("Return the first entry"); 248 sequence = MAP_KEY(_itemMediaSequences.begin()); 249 FINEST("---------------------"); 250 return MAP_VAL(_itemMediaSequences.begin()); 251 } else { 252 //4. We don't have stuff. Don't do nothing and return 253 FINEST("empty sequences"); 254 FINEST("---------------------"); 255 return 0xffffffff; 256 } 257 } 258 259 //5. Ok, sequence is initialized but we don't have that value. 260 //So, we search the next one, init and return; 261 FINEST("DISC????"); 262 if (_itemMediaSequences.size() > 0) { 263 FINEST("So, we have some items"); 264 if (MAP_KEY(_itemMediaSequences.end()) >= sequence) { 265 FINEST("Our sequence is somewhere there..."); 266 267 FOR_MAP(_itemMediaSequences, uint32_t, uint32_t, i) { 268 FINEST("sequence: %d; MAP_KEY(i): %d", sequence, MAP_KEY(i)); 269 if (MAP_KEY(i) >= sequence) { 270 sequence = MAP_KEY(i); 271 FINEST("JACKPOT"); 272 FINEST("---------------------"); 273 return MAP_VAL(i); 274 } 275 } 276 } else { 277 FINEST("sequence is bigger than the last item"); 278 } 279 } 280 281 //6. Nada. This is the bottom 282 FINEST("Nothing left to do...."); 283 FINEST("---------------------"); 284 return 0xffffffff; 285 }
Note: See TracChangeset
for help on using the changeset viewer.
