• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007-2008 Esmertec AG.
3  * Copyright (C) 2007-2008 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 package com.android.mms.dom.smil;
19 
20 import com.android.mms.dom.events.EventImpl;
21 import org.w3c.dom.DOMException;
22 import org.w3c.dom.events.DocumentEvent;
23 import org.w3c.dom.events.Event;
24 import org.w3c.dom.smil.ElementTime;
25 import org.w3c.dom.smil.SMILMediaElement;
26 import org.w3c.dom.smil.TimeList;
27 
28 import android.util.Log;
29 
30 public class SmilMediaElementImpl extends SmilElementImpl implements
31         SMILMediaElement {
32     public final static String SMIL_MEDIA_START_EVENT = "SmilMediaStart";
33     public final static String SMIL_MEDIA_END_EVENT = "SmilMediaEnd";
34     public final static String SMIL_MEDIA_PAUSE_EVENT = "SmilMediaPause";
35     public final static String SMIL_MEDIA_SEEK_EVENT = "SmilMediaSeek";
36     private final static String TAG = "Mms:smil";
37     private static final boolean DEBUG = false;
38     private static final boolean LOCAL_LOGV = false;
39 
40     ElementTime mElementTime = new ElementTimeImpl(this) {
41             private Event createEvent(String eventType) {
42                 DocumentEvent doc =
43                     (DocumentEvent)SmilMediaElementImpl.this.getOwnerDocument();
44                 Event event = doc.createEvent("Event");
45                 event.initEvent(eventType, false, false);
46                 if (LOCAL_LOGV) {
47                     Log.v(TAG, "Dispatching 'begin' event to "
48                             + SmilMediaElementImpl.this.getTagName() + " "
49                             + SmilMediaElementImpl.this.getSrc() + " at "
50                             + System.currentTimeMillis());
51                 }
52                 return event;
53             }
54 
55             private Event createEvent(String eventType, int seekTo) {
56                 DocumentEvent doc =
57                     (DocumentEvent)SmilMediaElementImpl.this.getOwnerDocument();
58                 EventImpl event = (EventImpl) doc.createEvent("Event");
59                 event.initEvent(eventType, false, false, seekTo);
60                 if (LOCAL_LOGV) {
61                     Log.v(TAG, "Dispatching 'begin' event to "
62                             + SmilMediaElementImpl.this.getTagName() + " "
63                             + SmilMediaElementImpl.this.getSrc() + " at "
64                             + System.currentTimeMillis());
65                 }
66                 return event;
67             }
68 
69             public boolean beginElement() {
70                 Event startEvent = createEvent(SMIL_MEDIA_START_EVENT);
71                 dispatchEvent(startEvent);
72                 return true;
73             }
74 
75             public boolean endElement() {
76                 Event endEvent = createEvent(SMIL_MEDIA_END_EVENT);
77                 dispatchEvent(endEvent);
78                 return true;
79             }
80 
81             public void resumeElement() {
82                 Event resumeEvent = createEvent(SMIL_MEDIA_START_EVENT);
83                 dispatchEvent(resumeEvent);
84             }
85 
86             public void pauseElement() {
87                 Event pauseEvent = createEvent(SMIL_MEDIA_PAUSE_EVENT);
88                 dispatchEvent(pauseEvent);
89             }
90 
91             public void seekElement(float seekTo) {
92                 Event seekEvent = createEvent(SMIL_MEDIA_SEEK_EVENT, (int) seekTo);
93                 dispatchEvent(seekEvent);
94             }
95 
96             @Override
97             public float getDur() {
98                 float dur = super.getDur();
99                 if (dur == 0) {
100                     // Duration is not specified, So get the implicit duration.
101                     String tag = getTagName();
102                     if (tag.equals("video") || tag.equals("audio")) {
103                         // Continuous media
104                         // FIXME Should get the duration of the media. "indefinite" instead here.
105                         dur = -1.0F;
106                     } else if (tag.equals("text") || tag.equals("img")) {
107                         // Discrete media
108                         dur = 0;
109                     } else {
110                         Log.w(TAG, "Unknown media type");
111                     }
112                 }
113                 return dur;
114             }
115 
116             @Override
117             ElementTime getParentElementTime() {
118                 return ((SmilParElementImpl) mSmilElement.getParentNode()).mParTimeContainer;
119             }
120     };
121 
122     /*
123      * Internal Interface
124      */
125 
SmilMediaElementImpl(SmilDocumentImpl owner, String tagName)126     SmilMediaElementImpl(SmilDocumentImpl owner, String tagName) {
127         super(owner, tagName);
128     }
129 
130     /*
131      * SMILMediaElement Interface
132      */
133 
getAbstractAttr()134     public String getAbstractAttr() {
135         return this.getAttribute("abstract");
136     }
137 
getAlt()138     public String getAlt() {
139         return this.getAttribute("alt");
140     }
141 
getAuthor()142     public String getAuthor() {
143         return this.getAttribute("author");
144     }
145 
getClipBegin()146     public String getClipBegin() {
147         return this.getAttribute("clipBegin");
148     }
149 
getClipEnd()150     public String getClipEnd() {
151         return this.getAttribute("clipEnd");
152     }
153 
getCopyright()154     public String getCopyright() {
155         return this.getAttribute("copyright");
156     }
157 
getLongdesc()158     public String getLongdesc() {
159         return this.getAttribute("longdesc");
160     }
161 
getPort()162     public String getPort() {
163         return this.getAttribute("port");
164     }
165 
getReadIndex()166     public String getReadIndex() {
167         return this.getAttribute("readIndex");
168     }
169 
getRtpformat()170     public String getRtpformat() {
171         return this.getAttribute("rtpformat");
172     }
173 
getSrc()174     public String getSrc() {
175         return this.getAttribute("src");
176     }
177 
getStripRepeat()178     public String getStripRepeat() {
179         return this.getAttribute("stripRepeat");
180     }
181 
getTitle()182     public String getTitle() {
183         return this.getAttribute("title");
184     }
185 
getTransport()186     public String getTransport() {
187         return this.getAttribute("transport");
188     }
189 
getType()190     public String getType() {
191         return this.getAttribute("type");
192     }
193 
setAbstractAttr(String abstractAttr)194     public void setAbstractAttr(String abstractAttr) throws DOMException {
195         this.setAttribute("abstract", abstractAttr);
196     }
197 
setAlt(String alt)198     public void setAlt(String alt) throws DOMException {
199         this.setAttribute("alt", alt);
200     }
201 
setAuthor(String author)202     public void setAuthor(String author) throws DOMException {
203         this.setAttribute("author", author);
204     }
205 
setClipBegin(String clipBegin)206     public void setClipBegin(String clipBegin) throws DOMException {
207         this.setAttribute("clipBegin", clipBegin);
208     }
209 
setClipEnd(String clipEnd)210     public void setClipEnd(String clipEnd) throws DOMException {
211         this.setAttribute("clipEnd", clipEnd);
212     }
213 
setCopyright(String copyright)214     public void setCopyright(String copyright) throws DOMException {
215         this.setAttribute("copyright", copyright);
216     }
217 
setLongdesc(String longdesc)218     public void setLongdesc(String longdesc) throws DOMException {
219         this.setAttribute("longdesc", longdesc);
220 
221     }
222 
setPort(String port)223     public void setPort(String port) throws DOMException {
224         this.setAttribute("port", port);
225     }
226 
setReadIndex(String readIndex)227     public void setReadIndex(String readIndex) throws DOMException {
228         this.setAttribute("readIndex", readIndex);
229     }
230 
setRtpformat(String rtpformat)231     public void setRtpformat(String rtpformat) throws DOMException {
232         this.setAttribute("rtpformat", rtpformat);
233     }
234 
setSrc(String src)235     public void setSrc(String src) throws DOMException {
236         this.setAttribute("src", src);
237     }
238 
setStripRepeat(String stripRepeat)239     public void setStripRepeat(String stripRepeat) throws DOMException {
240         this.setAttribute("stripRepeat", stripRepeat);
241     }
242 
setTitle(String title)243     public void setTitle(String title) throws DOMException {
244         this.setAttribute("title", title);
245     }
246 
setTransport(String transport)247     public void setTransport(String transport) throws DOMException {
248         this.setAttribute("transport", transport);
249     }
250 
setType(String type)251     public void setType(String type) throws DOMException {
252         this.setAttribute("type", type);
253     }
254 
255     /*
256      * TimeElement Interface
257      */
258 
beginElement()259     public boolean beginElement() {
260         return mElementTime.beginElement();
261     }
262 
endElement()263     public boolean endElement() {
264         return mElementTime.endElement();
265     }
266 
getBegin()267     public TimeList getBegin() {
268         return mElementTime.getBegin();
269     }
270 
getDur()271     public float getDur() {
272         return mElementTime.getDur();
273     }
274 
getEnd()275     public TimeList getEnd() {
276         return mElementTime.getEnd();
277     }
278 
getFill()279     public short getFill() {
280         return mElementTime.getFill();
281     }
282 
getFillDefault()283     public short getFillDefault() {
284         return mElementTime.getFillDefault();
285     }
286 
getRepeatCount()287     public float getRepeatCount() {
288         return mElementTime.getRepeatCount();
289     }
290 
getRepeatDur()291     public float getRepeatDur() {
292         return mElementTime.getRepeatDur();
293     }
294 
getRestart()295     public short getRestart() {
296         return mElementTime.getRestart();
297     }
298 
pauseElement()299     public void pauseElement() {
300         mElementTime.pauseElement();
301     }
302 
resumeElement()303     public void resumeElement() {
304         mElementTime.resumeElement();
305     }
306 
seekElement(float seekTo)307     public void seekElement(float seekTo) {
308         mElementTime.seekElement(seekTo);
309     }
310 
setBegin(TimeList begin)311     public void setBegin(TimeList begin) throws DOMException {
312         mElementTime.setBegin(begin);
313     }
314 
setDur(float dur)315     public void setDur(float dur) throws DOMException {
316         mElementTime.setDur(dur);
317     }
318 
setEnd(TimeList end)319     public void setEnd(TimeList end) throws DOMException {
320         mElementTime.setEnd(end);
321     }
322 
setFill(short fill)323     public void setFill(short fill) throws DOMException {
324         mElementTime.setFill(fill);
325     }
326 
setFillDefault(short fillDefault)327     public void setFillDefault(short fillDefault) throws DOMException {
328         mElementTime.setFillDefault(fillDefault);
329     }
330 
setRepeatCount(float repeatCount)331     public void setRepeatCount(float repeatCount) throws DOMException {
332         mElementTime.setRepeatCount(repeatCount);
333     }
334 
setRepeatDur(float repeatDur)335     public void setRepeatDur(float repeatDur) throws DOMException {
336         mElementTime.setRepeatDur(repeatDur);
337     }
338 
setRestart(short restart)339     public void setRestart(short restart) throws DOMException {
340         mElementTime.setRestart(restart);
341     }
342 }
343