void SourceBuffer::abortIfUpdating() { // Section 3.2 abort() method step 3 substeps. // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#widl-SourceBuffer-abort-void if (!m_updating) return; // 3.1. Abort the buffer append and stream append loop algorithms if they are running. m_appendBufferTimer.stop(); m_pendingAppendData.clear(); m_removeTimer.stop(); m_pendingRemoveStart = -1; m_pendingRemoveEnd = -1; m_appendStreamTimer.stop(); clearAppendStreamState(); // 3.2. Set the updating attribute to false. m_updating = false; // 3.3. Queue a task to fire a simple event named abort at this SourceBuffer object. scheduleEvent(eventNames().abortEvent); // 3.4. Queue a task to fire a simple event named updateend at this SourceBuffer object. scheduleEvent(eventNames().updateendEvent); }
void FontLoader::beginFontLoading(CSSFontFaceRule* rule) { ++m_numLoadingFromCSS; if (m_numLoadingFromCSS == 1 && !m_loadingDoneEvent) scheduleEvent(CSSFontFaceLoadEvent::createForFontFaceRule(eventNames().loadingEvent, rule)); scheduleEvent(CSSFontFaceLoadEvent::createForFontFaceRule(eventNames().loadstartEvent, rule)); }
void SourceBuffer::appendBufferTimerFired(Timer<SourceBuffer>*) { ASSERT(m_updating); // Section 3.5.4 Buffer Append Algorithm // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#sourcebuffer-buffer-append // 1. Run the segment parser loop algorithm. // Step 2 doesn't apply since we run Step 1 synchronously here. size_t appendSize = m_pendingAppendData.size(); if (!appendSize) { // Resize buffer for 0 byte appends so we always have a valid pointer. // We need to convey all appends, even 0 byte ones to |m_private| so // that it can clear its end of stream state if necessary. m_pendingAppendData.resize(1); } m_private->append(m_pendingAppendData.data(), appendSize); // 3. Set the updating attribute to false. m_updating = false; m_pendingAppendData.clear(); // 4. Queue a task to fire a simple event named update at this SourceBuffer object. scheduleEvent(eventNames().updateEvent); // 5. Queue a task to fire a simple event named updateend at this SourceBuffer object. scheduleEvent(eventNames().updateendEvent); }
void MediaSource::setReadyState(const String& state) { ASSERT(state == openKeyword() || state == closedKeyword() || state == endedKeyword()); if (m_readyState == state) return; String oldState = m_readyState; m_readyState = state; if (m_readyState == closedKeyword()) { m_sourceBuffers->clear(); m_activeSourceBuffers->clear(); m_player = 0; scheduleEvent(eventNames().webkitsourcecloseEvent); return; } if (oldState == openKeyword() && m_readyState == endedKeyword()) { scheduleEvent(eventNames().webkitsourceendedEvent); return; } if (m_readyState == openKeyword()) { scheduleEvent(eventNames().webkitsourceopenEvent); return; } }
void SourceBuffer::appendStreamDone(bool success) { ASSERT(m_updating); ASSERT(m_loader); ASSERT(m_stream); clearAppendStreamState(); if (!success) { // Section 3.5.3 Append Error Algorithm // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#sourcebuffer-append-error // // 1. Run the reset parser state algorithm. (Handled by caller) // 2. Set the updating attribute to false. m_updating = false; // 3. Queue a task to fire a simple event named error at this SourceBuffer object. scheduleEvent(eventNames().errorEvent); // 4. Queue a task to fire a simple event named updateend at this SourceBuffer object. scheduleEvent(eventNames().updateendEvent); return; } // Section 3.5.6 Stream Append Loop // Steps 1-11 are handled by appendStreamTimerFired(), |m_loader|, and |m_private|. // 12. Loop Done: Set the updating attribute to false. m_updating = false; // 13. Queue a task to fire a simple event named update at this SourceBuffer object. scheduleEvent(eventNames().updateEvent); // 14. Queue a task to fire a simple event named updateend at this SourceBuffer object. scheduleEvent(eventNames().updateendEvent); }
void SourceBuffer::appendBufferInternal(const unsigned char* data, unsigned size, ExceptionState& es) { // Section 3.2 appendBuffer() // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#widl-SourceBuffer-appendBuffer-void-ArrayBufferView-data // Step 1 is enforced by the caller. // 2. If this object has been removed from the sourceBuffers attribute of the parent media source then throw an InvalidStateError exception and abort these steps. // 3. If the updating attribute equals true, then throw an InvalidStateError exception and abort these steps. if (isRemoved() || m_updating) { es.throwDOMException(InvalidStateError); return; } // 4. If the readyState attribute of the parent media source is in the "ended" state then run the following steps: ... m_source->openIfInEndedState(); // Steps 5-6 // 7. Add data to the end of the input buffer. m_pendingAppendData.append(data, size); // 8. Set the updating attribute to true. m_updating = true; // 9. Queue a task to fire a simple event named updatestart at this SourceBuffer object. scheduleEvent(eventNames().updatestartEvent); // 10. Asynchronously run the buffer append algorithm. m_appendBufferTimer.startOneShot(0); }
void SourceBuffer::remove(double start, double end, ExceptionState& es) { // Section 3.2 remove() method steps. // 1. If start is negative or greater than duration, then throw an InvalidAccessError exception and abort these steps. // 2. If end is less than or equal to start, then throw an InvalidAccessError exception and abort these steps. if (start < 0 || (m_source && (std::isnan(m_source->duration()) || start > m_source->duration())) || end <= start) { es.throwDOMException(InvalidAccessError); return; } // 3. If this object has been removed from the sourceBuffers attribute of the parent media source then throw an // InvalidStateError exception and abort these steps. // 4. If the updating attribute equals true, then throw an InvalidStateError exception and abort these steps. if (isRemoved() || m_updating) { es.throwDOMException(InvalidStateError); return; } // 5. If the readyState attribute of the parent media source is in the "ended" state then run the following steps: // 5.1. Set the readyState attribute of the parent media source to "open" // 5.2. Queue a task to fire a simple event named sourceopen at the parent media source . m_source->openIfInEndedState(); // 6. Set the updating attribute to true. m_updating = true; // 7. Queue a task to fire a simple event named updatestart at this SourceBuffer object. scheduleEvent(eventNames().updatestartEvent); // 8. Return control to the caller and run the rest of the steps asynchronously. m_pendingRemoveStart = start; m_pendingRemoveEnd = end; m_removeTimer.startOneShot(0); }
bool emberAfPreZDOMessageReceivedCallback(EmberNodeId sender, EmberApsFrame* apsFrame, uint8_t* message, uint16_t length) { if (!enabled) { return false; } if (apsFrame->clusterId == END_DEVICE_ANNOUNCE) { EmberEUI64 tempEui64; MEMMOVE(tempEui64, &(message[DEVICE_ANNOUNCE_EUI64_OFFSET]), EUI64_SIZE); // If the device already exists, this call won't overwrite it and will // leave its status alone. Maybe it rejoined and we already know about, // in which case we won't bother re-interrogating it. const EmberAfDeviceInfo* device = emberAfPluginDeviceDatabaseAdd(tempEui64, message[DEVICE_ANNOUNCE_CAPABILITIES_OFFSET]); if (device == NULL) { emberAfCorePrint("Error: %p failed to add device to database: ", PLUGIN_NAME); emberAfPrintLittleEndianEui64(tempEui64); emberAfCorePrintln(""); } else { if (device->status == EMBER_AF_DEVICE_DISCOVERY_STATUS_NEW) { emberAfCorePrint("%p added device to database: ", PLUGIN_NAME); emberAfPrintLittleEndianEui64(tempEui64); emberAfCorePrintln(", capabilities: 0x%X", device->capabilities); scheduleEvent(WITH_DELAY); } } return true; } return false; }
void SourceBufferList::remove(SourceBuffer* buffer) { size_t index = m_list.find(buffer); if (index == kNotFound) return; m_list.remove(index); scheduleEvent(eventNames().removesourcebufferEvent); }
void FontLoader::fontLoaded(CSSFontFaceRule* rule) { ASSERT(m_numLoadingFromCSS > 0); scheduleEvent(CSSFontFaceLoadEvent::createForFontFaceRule(eventNames().loadEvent, rule)); --m_numLoadingFromCSS; if (!m_numLoadingFromCSS) m_loadingDoneEvent = CSSFontFaceLoadEvent::createForFontFaceRule(eventNames().loadingdoneEvent, rule); }
int main() { printf("Enter Time Limit : "); scanf("%f",&TIME_LIMIT); int i, j; srand(time(NULL)); Heap *heap; Ball **ball; Interaction *nextCollision; heap = initHeap(); ball = (Ball **)malloc(PARTICLE_COUNT * sizeof(Ball *)); gnuplotPipe = initPipe(); for(i = 0; i < PARTICLE_COUNT; i++) { logFile[i] = initGraph(i); gnuplotGraphPipe[i] = initGraphPipe(i); } for(i = 0; i < PARTICLE_COUNT; i++) { ball[i] = initBallRandom(i); insertToHeap(heap, eventWallCollideX(heap, ball[i])); insertToHeap(heap, eventWallCollideY(heap, ball[i])); for(j = 0; j < i; j++) insertToHeap(heap, eventBallCollide(heap, ball[i], ball[j])); } while(sim_time < TIME_LIMIT) { nextCollision = getNextEvent(heap); simulateTo(ball, nextCollision->tstamp); printf("Collision at t=%lf\n", sim_time); resolveCollision(nextCollision); removeFromHeap(heap, nextCollision->interactee->id); scheduleEvent(ball, heap, nextCollision->interactee->id); if(nextCollision->interactor != NULL) { removeFromHeap(heap, nextCollision->interactor->id); scheduleEvent(ball, heap, nextCollision->interactor->id); } } fprintf(gnuplotPipe, "quit\n"); saveGraph(ball); showGraph(ball); return 0; }
void MediaController::updateReadyState() { ReadyState oldReadyState = m_readyState; ReadyState newReadyState; if (m_mediaElements.isEmpty()) { // If the MediaController has no slaved media elements, let new readiness state be 0. newReadyState = HTMLMediaElement::HAVE_NOTHING; } else { // Otherwise, let it have the lowest value of the readyState IDL attributes of all of its // slaved media elements. MediaElementSequence::const_iterator it = m_mediaElements.begin(); newReadyState = (*it)->readyState(); for (++it; it != m_mediaElements.end(); ++it) newReadyState = std::min(newReadyState, (*it)->readyState()); } if (newReadyState == oldReadyState) return; // If the MediaController's most recently reported readiness state is greater than new readiness // state then queue a task to fire a simple event at the MediaController object, whose name is the // event name corresponding to the value of new readiness state given in the table below. [omitted] if (oldReadyState > newReadyState) { scheduleEvent(eventNameForReadyState(newReadyState)); return; } // If the MediaController's most recently reported readiness state is less than the new readiness // state, then run these substeps: // 1. Let next state be the MediaController's most recently reported readiness state. ReadyState nextState = oldReadyState; do { // 2. Loop: Increment next state by one. nextState = static_cast<ReadyState>(nextState + 1); // 3. Queue a task to fire a simple event at the MediaController object, whose name is the // event name corresponding to the value of next state given in the table below. [omitted] scheduleEvent(eventNameForReadyState(nextState)); // If next state is less than new readiness state, then return to the step labeled loop } while (nextState < newReadyState); // Let the MediaController's most recently reported readiness state be new readiness state. m_readyState = newReadyState; }
void WebKitMediaSource::onReadyStateChange(const AtomicString& oldState, const AtomicString& newState) { if (isClosed()) { m_sourceBuffers->clear(); m_activeSourceBuffers->clear(); scheduleEvent(eventNames().webkitsourcecloseEvent); return; } if (oldState == openKeyword() && newState == endedKeyword()) { scheduleEvent(eventNames().webkitsourceendedEvent); return; } if (isOpen()) { scheduleEvent(eventNames().webkitsourceopenEvent); return; } }
static void sendSimpleDescriptorRequest(const EmberAfDeviceInfo* device) { uint8_t endpoint = emberAfPluginDeviceDatabaseGetDeviceEndpointFromIndex(device->eui64, currentEndpointIndex); if (endpoint == 0xFF) { emberAfCorePrintln("%p All endpoints discovered for 0x%2X", PLUGIN_NAME, currentNodeId); emberAfPluginDeviceDatabaseSetStatus(device->eui64, EMBER_AF_DEVICE_DISCOVERY_STATUS_DONE); scheduleEvent(WITH_DELAY); clearCurrentDevice(); return; } debugPrintln("%p initiating simple descriptor request for: 0x%2X EP %d", PLUGIN_NAME, currentNodeId, endpoint); EmberStatus status = emberAfFindClustersByDeviceAndEndpoint(currentNodeId, endpoint, serviceDiscoveryCallback); if (status != EMBER_SUCCESS) { noteFailedDiscovery(device); scheduleEvent(WITH_DELAY); return; } // Don't schedule event, since service discovery returns the results via callback. }
void MediaController::scheduleTimeupdateEvent() { double now = WTF::currentTime(); double timedelta = now - m_previousTimeupdateTime; if (timedelta < maxTimeupdateEventFrequency) return; scheduleEvent(EventTypeNames::timeupdate); m_previousTimeupdateTime = now; }
void FontLoader::loadError(CSSFontFaceRule* rule, CSSFontFaceSource* source) { ASSERT(m_numLoadingFromCSS > 0); // FIXME: We should report NetworkError in case of timeout, etc. String errorName = (source && source->isDecodeError()) ? "InvalidFontDataError" : ExceptionCodeDescription(NOT_FOUND_ERR).name; scheduleEvent(CSSFontFaceLoadEvent::createForError(rule, DOMError::create(errorName))); --m_numLoadingFromCSS; if (!m_numLoadingFromCSS) m_loadingDoneEvent = CSSFontFaceLoadEvent::createForFontFaceRule(eventNames().loadingdoneEvent, rule); }
void MediaController::setDefaultPlaybackRate(double rate) { if (m_defaultPlaybackRate == rate) return; // The defaultPlaybackRate attribute, on setting, must set the MediaController's media controller // default playback rate to the new value, m_defaultPlaybackRate = rate; // then queue a task to fire a simple event named ratechange at the MediaController. scheduleEvent(EventTypeNames::ratechange); }
void MediaController::pause() { // When the pause() method is invoked, if the MediaController is a playing media controller, if (m_paused) return; // then the user agent must change the MediaController into a paused media controller, m_paused = true; // queue a task to fire a simple event named pause at the MediaController, scheduleEvent(EventTypeNames::pause); // and then report the controller state of the MediaController. reportControllerState(); }
static void sendActiveEndpointRequest(const EmberAfDeviceInfo* device) { debugPrintln("%p initiating active endpoint requset for: 0x%2X", PLUGIN_NAME, currentNodeId); EmberStatus status = emberAfFindActiveEndpoints(currentNodeId, serviceDiscoveryCallback); if (status != EMBER_SUCCESS) { emberAfCorePrintln("Error: %p failed to initiate Active EP request (0x%X)", PLUGIN_NAME, status); noteFailedDiscovery(device); scheduleEvent(WITH_DELAY); } else { // Don't schedule event, since service discovery returns the results via callback. emberAfPluginDeviceDatabaseSetStatus(device->eui64, EMBER_AF_DEVICE_DISCOVERY_STATUS_FIND_ENDPOINTS); } }
void MediaSource::onReadyStateChange(const AtomicString& oldState, const AtomicString& newState) { if (isOpen()) { scheduleEvent(eventNames().sourceopenEvent); return; } if (oldState == openKeyword() && newState == endedKeyword()) { scheduleEvent(eventNames().sourceendedEvent); return; } ASSERT(isClosed()); m_activeSourceBuffers->clear(); // Clear SourceBuffer references to this object. for (auto& buffer : *m_sourceBuffers) buffer->removedFromMediaSource(); m_sourceBuffers->clear(); scheduleEvent(eventNames().sourcecloseEvent); }
void SourceBuffer::removeTimerFired(Timer<SourceBuffer>*) { ASSERT(m_updating); ASSERT(m_pendingRemoveStart >= 0); ASSERT(m_pendingRemoveStart < m_pendingRemoveEnd); // Section 3.2 remove() method steps // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#widl-SourceBuffer-remove-void-double-start-double-end // 9. Run the coded frame removal algorithm with start and end as the start and end of the removal range. m_private->remove(m_pendingRemoveStart, m_pendingRemoveEnd); // 10. Set the updating attribute to false. m_updating = false; m_pendingRemoveStart = -1; m_pendingRemoveEnd = -1; // 11. Queue a task to fire a simple event named update at this SourceBuffer object. scheduleEvent(eventNames().updateEvent); // 12. Queue a task to fire a simple event named updateend at this SourceBuffer object. scheduleEvent(eventNames().updateendEvent); }
void MediaSource::onReadyStateChange(const AtomicString& oldState, const AtomicString& newState) { if (isOpen()) { scheduleEvent(eventNames().sourceopenEvent); return; } if (oldState == openKeyword() && newState == endedKeyword()) { scheduleEvent(eventNames().sourceendedEvent); return; } ASSERT(isClosed()); m_activeSourceBuffers->clear(); // Clear SourceBuffer references to this object. for (unsigned long i = 0, length = m_sourceBuffers->length(); i < length; ++i) m_sourceBuffers->item(i)->removedFromMediaSource(); m_sourceBuffers->clear(); scheduleEvent(eventNames().sourcecloseEvent); }
void MediaController::setPlaybackRate(double rate) { if (m_clock->playRate() == rate) return; // The playbackRate attribute, on setting, must set the MediaController's media controller // playback rate to the new value, m_clock->setPlayRate(rate); for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) (*it)->updatePlaybackRate(); // then queue a task to fire a simple event named ratechange at the MediaController. scheduleEvent(EventTypeNames::ratechange); }
void MediaController::setMuted(bool flag) { if (m_muted == flag) return; // The muted attribute, on setting, must set the MediaController's media controller mute override // to the new value m_muted = flag; // and queue a task to fire a simple event named volumechange at the MediaController. scheduleEvent(EventTypeNames::volumechange); for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) (*it)->updateVolume(); }
void MediaController::setVolume(double level, ExceptionState& exceptionState) { if (m_volume == level) return; // If the new value is outside the range 0.0 to 1.0 inclusive, then, on setting, an // IndexSizeError exception must be raised instead. if (level < 0 || level > 1) { exceptionState.throwDOMException(IndexSizeError, ExceptionMessages::indexOutsideRange("volume", level, 0.0, ExceptionMessages::InclusiveBound, 1.0, ExceptionMessages::InclusiveBound)); return; } // The volume attribute, on setting, if the new value is in the range 0.0 to 1.0 inclusive, // must set the MediaController's media controller volume multiplier to the new value m_volume = level; // and queue a task to fire a simple event named volumechange at the MediaController. scheduleEvent(EventTypeNames::volumechange); for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) (*it)->updateVolume(); }
void SourceBuffer::appendStreamInternal(PassRefPtr<Stream> stream, ExceptionState& es) { // Section 3.2 appendStream() // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#widl-SourceBuffer-appendStream-void-Stream-stream-unsigned-long-long-maxSize // 1. If stream is null then throw an InvalidAccessError exception and abort these steps. if (!stream || stream->isNeutered()) { es.throwDOMException(InvalidAccessError); return; } // 2. Run the prepare append algorithm. // Section 3.5.4 Prepare Append Algorithm. // https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#sourcebuffer-prepare-append // 1. If this object has been removed from the sourceBuffers attribute of the parent media source then throw an InvalidStateError exception and abort these steps. // 2. If the updating attribute equals true, then throw an InvalidStateError exception and abort these steps. if (isRemoved() || m_updating) { es.throwDOMException(InvalidStateError); return; } // 3. If the readyState attribute of the parent media source is in the "ended" state then run the following steps: ... m_source->openIfInEndedState(); // Steps 4-5 of the prepare append algorithm are handled by m_private. // 3. Set the updating attribute to true. m_updating = true; // 4. Queue a task to fire a simple event named updatestart at this SourceBuffer object. scheduleEvent(eventNames().updatestartEvent); // 5. Asynchronously run the stream append loop algorithm with stream and maxSize. stream->neuter(); m_loader = adoptPtr(new FileReaderLoader(FileReaderLoader::ReadByClient, this)); m_stream = stream; m_appendStreamTimer.startOneShot(0); }
void SourceBufferList::clear() { m_list.clear(); scheduleEvent(eventNames().removesourcebufferEvent); }
void SourceBufferList::add(PassRefPtr<SourceBuffer> buffer) { m_list.append(buffer); scheduleEvent(eventNames().addsourcebufferEvent); }
void Day::scheduleEvent(Event anEvent){ scheduleEvent(anEvent.getStartTime(),anEvent.getEndTime(),anEvent.getDescription()); }
void Day::scheduleEvent() { // add default Event for a full Day scheduleEvent(0,2359,""); }