/*
* @(#)MediaTimeBase.java 1.3 02/08/21
*
* Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved.
*/
package com.sun.media;
import javax.media.*;
/**
* This is the abstract base class to create a time base
* out of the media time of a component.
* e.g., this can be used to generate a time base from an audio
* device with reports time ticks as samples are played.
* A TimeBase ticks even when the media has stopped. This class
* takes care of that by internally maintaining a system time base
* that takes over when the media has ended.
* A TimeBase needs to be monotonically increasing. If the media
* time is set or wrapped around, this class will takes care of that.
*/
abstract public class MediaTimeBase implements TimeBase {
long origin = 0;
long offset = 0;
long time = 0;
TimeBase systemTimeBase = null;
public MediaTimeBase() {
mediaStopped();
}
public Time getTime() {
return new Time(getNanoseconds());
}
public synchronized long getNanoseconds() {
long t;
if (systemTimeBase != null)
time = origin + systemTimeBase.getNanoseconds() - offset;
else
time = origin + getMediaTime() - offset;
return time;
}
abstract public long getMediaTime();
public synchronized void mediaStarted() {
systemTimeBase = null;
offset = getMediaTime();
origin = time;
}
public synchronized void mediaStopped() {
systemTimeBase = new SystemTimeBase();
offset = systemTimeBase.getNanoseconds();
origin = time;
}
}
|