Search in sources :

Example 11 with ElementTime

use of org.w3c.dom.smil.ElementTime in project qksms by moezbhatti.

the class SmilDocumentImpl method getBody.

public SMILElement getBody() {
    Node rootElement = getDocumentElement();
    Node headElement = getHead();
    Node bodyElement = headElement.getNextSibling();
    if (bodyElement == null || !(bodyElement instanceof SMILElement)) {
        // The body doesn't exist. Create a new one.
        bodyElement = createElement("body");
        rootElement.appendChild(bodyElement);
    }
    // Initialize the real sequential time container, which is body.
    mSeqTimeContainer = new ElementSequentialTimeContainerImpl((SMILElement) bodyElement) {

        public NodeList getTimeChildren() {
            return getBody().getElementsByTagName("par");
        }

        public boolean beginElement() {
            Event startEvent = createEvent("Event");
            startEvent.initEvent(SMIL_DOCUMENT_START_EVENT, false, false);
            dispatchEvent(startEvent);
            return true;
        }

        public boolean endElement() {
            Event endEvent = createEvent("Event");
            endEvent.initEvent(SMIL_DOCUMENT_END_EVENT, false, false);
            dispatchEvent(endEvent);
            return true;
        }

        public void pauseElement() {
        // TODO Auto-generated method stub
        }

        public void resumeElement() {
        // TODO Auto-generated method stub
        }

        public void seekElement(float seekTo) {
        // TODO Auto-generated method stub
        }

        ElementTime getParentElementTime() {
            return null;
        }
    };
    return (SMILElement) bodyElement;
}
Also used : Node(org.w3c.dom.Node) NodeList(org.w3c.dom.NodeList) DocumentEvent(org.w3c.dom.events.DocumentEvent) Event(org.w3c.dom.events.Event) SMILElement(org.w3c.dom.smil.SMILElement) ElementTime(org.w3c.dom.smil.ElementTime)

Example 12 with ElementTime

use of org.w3c.dom.smil.ElementTime in project qksms by moezbhatti.

the class SmilPlayer method getSeqTimeline.

private static ArrayList<TimelineEntry> getSeqTimeline(ElementSequentialTimeContainer seq, double offset, double maxOffset) {
    ArrayList<TimelineEntry> timeline = new ArrayList<>();
    double orgOffset = offset;
    // Set my begin at first
    TimeList myBeginList = seq.getBegin();
    /*
         * Begin list only contain 1 begin time which has been resolved.
         * @see com.android.mms.dom.smil.ElementSequentialTimeContainerImpl#getBegin()
         */
    Time begin = myBeginList.item(0);
    double beginOffset = begin.getResolvedOffset() + offset;
    if (beginOffset > maxOffset) {
        // This element can't be started.
        return timeline;
    }
    TimelineEntry myBegin = new TimelineEntry(beginOffset, seq, TimelineEntry.ACTION_BEGIN);
    timeline.add(myBegin);
    TimeList myEndList = seq.getEnd();
    /*
         * End list only contain 1 end time which has been resolved.
         * @see com.android.mms.dom.smil.ElementSequentialTimeContainerImpl#getEnd()
         */
    Time end = myEndList.item(0);
    double endOffset = end.getResolvedOffset() + offset;
    if (endOffset > maxOffset) {
        endOffset = maxOffset;
    }
    TimelineEntry myEnd = new TimelineEntry(endOffset, seq, TimelineEntry.ACTION_END);
    maxOffset = endOffset;
    // Get children's timelines
    NodeList children = seq.getTimeChildren();
    for (int i = 0; i < children.getLength(); ++i) {
        ElementTime child = (ElementTime) children.item(i);
        ArrayList<TimelineEntry> childTimeline = getTimeline(child, offset, maxOffset);
        timeline.addAll(childTimeline);
        // Since the child timeline has been sorted, the offset of the last one is the biggest.
        offset = childTimeline.get(childTimeline.size() - 1).getOffsetTime();
    }
    // Add end-event to timeline for all active children
    NodeList activeChildrenAtEnd = seq.getActiveChildrenAt((float) (endOffset - orgOffset));
    for (int i = 0; i < activeChildrenAtEnd.getLength(); ++i) {
        timeline.add(new TimelineEntry(endOffset, (ElementTime) activeChildrenAtEnd.item(i), TimelineEntry.ACTION_END));
    }
    // Set my end at last
    timeline.add(myEnd);
    return timeline;
}
Also used : NodeList(org.w3c.dom.NodeList) ArrayList(java.util.ArrayList) ElementTime(org.w3c.dom.smil.ElementTime) Time(org.w3c.dom.smil.Time) ElementTime(org.w3c.dom.smil.ElementTime) TimeList(org.w3c.dom.smil.TimeList)

Example 13 with ElementTime

use of org.w3c.dom.smil.ElementTime in project qksms by moezbhatti.

the class SmilPlayer method endActiveElements.

private synchronized void endActiveElements() {
    for (int i = mActiveElements.size() - 1; i >= 0; i--) {
        ElementTime element = mActiveElements.get(i);
        if (LOCAL_LOGV)
            Log.v(TAG, "[STOP]  " + " at " + mCurrentTime + " " + element);
        element.endElement();
    }
}
Also used : ElementTime(org.w3c.dom.smil.ElementTime)

Example 14 with ElementTime

use of org.w3c.dom.smil.ElementTime in project qksms by moezbhatti.

the class SmilPlayer method getParTimeline.

private static ArrayList<TimelineEntry> getParTimeline(ElementParallelTimeContainer par, double offset, double maxOffset) {
    ArrayList<TimelineEntry> timeline = new ArrayList<>();
    // Set my begin at first
    TimeList myBeginList = par.getBegin();
    /*
         * Begin list only contain 1 begin time which has been resolved.
         * @see com.android.mms.dom.smil.ElementParallelTimeContainerImpl#getBegin()
         */
    Time begin = myBeginList.item(0);
    double beginOffset = begin.getResolvedOffset() + offset;
    if (beginOffset > maxOffset) {
        // This element can't be started.
        return timeline;
    }
    TimelineEntry myBegin = new TimelineEntry(beginOffset, par, TimelineEntry.ACTION_BEGIN);
    timeline.add(myBegin);
    TimeList myEndList = par.getEnd();
    /*
         * End list only contain 1 end time which has been resolved.
         * @see com.android.mms.dom.smil.ElementParallelTimeContainerImpl#getEnd()
         */
    Time end = myEndList.item(0);
    double endOffset = end.getResolvedOffset() + offset;
    if (endOffset > maxOffset) {
        endOffset = maxOffset;
    }
    TimelineEntry myEnd = new TimelineEntry(endOffset, par, TimelineEntry.ACTION_END);
    maxOffset = endOffset;
    NodeList children = par.getTimeChildren();
    for (int i = 0; i < children.getLength(); ++i) {
        ElementTime child = (ElementTime) children.item(i);
        ArrayList<TimelineEntry> childTimeline = getTimeline(child, offset, maxOffset);
        timeline.addAll(childTimeline);
    }
    Collections.sort(timeline, sTimelineEntryComparator);
    // Add end-event to timeline for all active children
    NodeList activeChildrenAtEnd = par.getActiveChildrenAt((float) (endOffset - offset) * 1000);
    for (int i = 0; i < activeChildrenAtEnd.getLength(); ++i) {
        timeline.add(new TimelineEntry(endOffset, (ElementTime) activeChildrenAtEnd.item(i), TimelineEntry.ACTION_END));
    }
    // Set my end at last
    timeline.add(myEnd);
    return timeline;
}
Also used : NodeList(org.w3c.dom.NodeList) ArrayList(java.util.ArrayList) ElementTime(org.w3c.dom.smil.ElementTime) Time(org.w3c.dom.smil.Time) ElementTime(org.w3c.dom.smil.ElementTime) TimeList(org.w3c.dom.smil.TimeList)

Aggregations

ElementTime (org.w3c.dom.smil.ElementTime)14 NodeList (org.w3c.dom.NodeList)10 Time (org.w3c.dom.smil.Time)6 TimeList (org.w3c.dom.smil.TimeList)6 ArrayList (java.util.ArrayList)4 Node (org.w3c.dom.Node)4 DocumentEvent (org.w3c.dom.events.DocumentEvent)2 Event (org.w3c.dom.events.Event)2 SMILElement (org.w3c.dom.smil.SMILElement)2 NodeListImpl (com.android.mms.dom.NodeListImpl)1 NodeListImpl (org.thoughtcrime.securesms.dom.NodeListImpl)1