/* * @(#)BasicSinkModule.java 1.13 02/08/21 * * Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved. */ package com.sun.media; import javax.media.*; import javax.media.format.*; /** * BasicSinkModule is the base class for the modules that are the end points * of a flow graph. Renderer modules and Multiplexer modules are two * decendents of it. It manages a clock that could be used as the time * base of the entire Player or Processor. **/ public abstract class BasicSinkModule extends BasicModule { private Clock clock; protected boolean prerolling = false; protected float rate = 1.0f; protected long stopTime = -1; public void doStart() { super.doStart(); if (clock != null) clock.syncStart(clock.getTimeBase().getTime()); } public void doStop() { if (clock != null) clock.stop(); } public void doSetMediaTime(Time t) { if (clock != null) clock.setMediaTime(t); } public float doSetRate(float r) { if (clock != null) rate = clock.setRate(r); else rate = r; return rate; } public void setTimeBase(TimeBase tb) throws IncompatibleTimeBaseException { if (clock != null) clock.setTimeBase(tb); } public TimeBase getTimeBase() { if (clock != null) return clock.getTimeBase(); else return controller.getTimeBase(); } public Time getMediaTime() { if (clock != null) return clock.getMediaTime(); else return controller.getMediaTime(); } public long getMediaNanoseconds() { if (clock != null) return clock.getMediaNanoseconds(); else return controller.getMediaNanoseconds(); } public Clock getClock() { return clock; } protected void setClock(Clock c) { clock = c; } public void setStopTime(Time t) { if (t == Clock.RESET) stopTime = -1; else stopTime = t.getNanoseconds(); } /** * Enable prerolling. * @param t the media time when the prerolling starts. Let's say the * the requested media time is set to 100 and the current location is * set to 90 (the previous key frame where the parser can seek to). The * parameter t should be set to 90. */ public void setPreroll(long wanted, long actual) { // If the time actually set on the parser is less than // the time requested, we'll preroll the media // to the requested time. if (actual < wanted) prerolling = true; } public void triggerReset() { } public void doneReset() { } }