- From: Brian Birtles <bbirtles@mozilla.com>
- Date: Wed, 16 Oct 2013 14:35:23 +0900
- To: public-fx@w3.org
Hi again,
Following up the previous post[1] with a sketch of how the API for
Option C might look:
interface Player {
attribute TimedItem? source;
readonly attribute Timeline timeline;
attribute double startTime;
attribute double currentTime;
readonly attribute double timeLag;
attribute double playbackRate;
readonly attribute boolean paused;
readonly attribute boolean ended;
void cancel ();
void finish ();
void play ();
void pause ();
void reverse ();
};
Members of interest:
* currentTime - unchanged, you can still set it to anything you like
(although we'll need to revisit the definition of effective current time
but that's a separate discussion)
* timeLag - unchanged but incorporates time lag accumulated due to
"auto-pausing" behaviour outlined in the previous post.[1]
* paused - now readonly and we use play() / pause() to update its state
much like HTMLMediaElement
* ended - this is taken from HTMLMediaElement. It gets set whenever
currentTime >= source.endTime (unless I guess playbackRate < 0 and
currentTime == source.endTime?) This is asymmetrical--it doesn't get set
when you finish playing in reverse, but that's also how it works in
HTMLMediaElement.
* cancel() - sets source to null. Causes all animation effects produced
by this player to be cleared.
* finish() - jQuery has this and I've sometimes wanted it. Not sure what
it should do when playbackRate < 0 but for the forwards case, it seeks
to source.endTime.
* play() - unpauses if paused is true. In HTML, if you're ended it seeks
back to the start. I think we should probably do that here for
consistency even though I don't like these operations that produce very
different behaviour whether you call them 1ms before or after the player
finishes.
Not sure what we should do if:
- currentTime > source.endTime and playbackRate < 0 -- suggest we
seek to source.endTime
- currentTime < 0 and playbackRate < 0 -- do nothing? or seek to
source.endTime?
- currentTime < 0 and playbackRate > 0 -- suggest we seek to 0
- playbackRate = 0 -- do nothing I guess
HTML only does restart behaviour when playback is forwards but we
might want to deviate from that depending on how we define reverse.
* pause() - sets paused to true (and follows all the steps associated
with that)
* reverse() - sets playbackRate to -playbackRate.
If the new playbackRate < 0 and currentTime > source.endTime, seeks
to source.endTime.
If the new playbackRate > 0 and currentTime < 0, seeks to 0.
Note that the above means that calling reverse() twice is not
always a no-op, but the cases where it isn't are fairly rare
(specifically only when we seek outside the content range or shorten the
source content after ending).
Suggestions are most welcome.
Best regards,
Brian
[1] http://lists.w3.org/Archives/Public/public-fx/2013OctDec/0059.html
Received on Wednesday, 16 October 2013 05:35:51 UTC