Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 351 | 351 |
| 352 // 2. If the readyState attribute is not "open" then throw an InvalidStateEr ror | 352 // 2. If the readyState attribute is not "open" then throw an InvalidStateEr ror |
| 353 // exception and abort these steps. | 353 // exception and abort these steps. |
| 354 // 3. If the updating attribute equals true on any SourceBuffer in sourceBuf fers, | 354 // 3. If the updating attribute equals true on any SourceBuffer in sourceBuf fers, |
| 355 // then throw an InvalidStateError exception and abort these steps. | 355 // then throw an InvalidStateError exception and abort these steps. |
| 356 if (throwExceptionIfClosedOrUpdating(isOpen(), isUpdating(), exceptionState) ) | 356 if (throwExceptionIfClosedOrUpdating(isOpen(), isUpdating(), exceptionState) ) |
| 357 return; | 357 return; |
| 358 | 358 |
| 359 // 4. Run the duration change algorithm with new duration set to the value b eing | 359 // 4. Run the duration change algorithm with new duration set to the value b eing |
| 360 // assigned to this attribute. | 360 // assigned to this attribute. |
| 361 // Synchronously process duration change algorithm to enforce any required | 361 durationChangeAlgorithm(duration); |
| 362 // seek is started prior to returning. | 362 } |
| 363 m_attachedElement->durationChanged(duration); | 363 |
| 364 m_webMediaSource->setDuration(duration); | 364 void MediaSource::durationChangeAlgorithm(double newDuration) |
| 365 { | |
| 366 // Section 2.6.4 Duration change | |
| 367 // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-sou rce.html#duration-change-algorithm | |
| 368 // 1. If the current value of duration is equal to new duration, then return . | |
| 369 if (newDuration == duration()) | |
| 370 return; | |
| 371 | |
| 372 // 2. Set old duration to the current value of duration. | |
| 373 double oldDuration = duration(); | |
| 374 | |
| 375 bool requestSeek = m_attachedElement->currentTime() > newDuration; | |
| 376 | |
| 377 // 3. Update duration to new duration. | |
| 378 m_webMediaSource->setDuration(newDuration); | |
| 379 | |
| 380 // 4. If the new duration is less than old duration, then call remove(new du ration, old duration) on all all objects in sourceBuffers. | |
| 381 if (newDuration < oldDuration) { | |
| 382 for (size_t i = 0; i < m_sourceBuffers->length(); ++i) | |
| 383 m_sourceBuffers->item(i)->remove(newDuration, oldDuration, ASSERT_NO _EXCEPTION); | |
| 384 } | |
| 385 | |
| 386 // 5. If a user agent is unable to partially render audio frames or text cue s that start before and end after the duration, then run the following steps: | |
| 387 // NOTE: Currently we assume that the media engine is able to render partial frames/cues. If a media | |
| 388 // engine gets added that doesn't support this, then we'll need to add logic to handle the substeps. | |
| 389 | |
| 390 // 6. Update the media controller duration to new duration and run the HTMLM ediaElement duration change algorithm. | |
|
philipj_slow
2014/06/16 13:26:19
Spec nit: The "media controller duration" is a cal
acolwell GONE FROM CHROMIUM
2014/06/17 01:24:02
Good point. I'll update the spec.
| |
| 391 m_attachedElement->durationChanged(newDuration, requestSeek); | |
| 365 } | 392 } |
| 366 | 393 |
| 367 void MediaSource::setReadyState(const AtomicString& state) | 394 void MediaSource::setReadyState(const AtomicString& state) |
| 368 { | 395 { |
| 369 ASSERT(state == openKeyword() || state == closedKeyword() || state == endedK eyword()); | 396 ASSERT(state == openKeyword() || state == closedKeyword() || state == endedK eyword()); |
| 370 | 397 |
| 371 AtomicString oldState = readyState(); | 398 AtomicString oldState = readyState(); |
| 372 WTF_LOG(Media, "MediaSource::setReadyState() %p : %s -> %s", this, oldState. ascii().data(), state.ascii().data()); | 399 WTF_LOG(Media, "MediaSource::setReadyState() %p : %s -> %s", this, oldState. ascii().data(), state.ascii().data()); |
| 373 | 400 |
| 374 if (state == closedKeyword()) { | 401 if (state == closedKeyword()) { |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 516 | 543 |
| 517 m_asyncEventQueue->enqueueEvent(event.release()); | 544 m_asyncEventQueue->enqueueEvent(event.release()); |
| 518 } | 545 } |
| 519 | 546 |
| 520 URLRegistry& MediaSource::registry() const | 547 URLRegistry& MediaSource::registry() const |
| 521 { | 548 { |
| 522 return MediaSourceRegistry::registry(); | 549 return MediaSourceRegistry::registry(); |
| 523 } | 550 } |
| 524 | 551 |
| 525 } // namespace WebCore | 552 } // namespace WebCore |
| OLD | NEW |