FileDocCategorySizeDatePackage
Handler.javaAPI DocJMF 2.1.1e5480Mon May 12 12:21:20 BST 2003com.sun.media.content.video.mpeg

Handler.java

/*
 * @(#)Handler.java	1.6 02/08/21
 *
 * Copyright (c) 1996-2002 Sun Microsystems, Inc.  All rights reserved.
 */

package com.sun.media.content.video.mpeg;

import javax.media.*;
import javax.media.protocol.*;
import java.io.*;
import java.awt.*;
import java.util.*;
import java.net.*;
import com.sun.media.*;
import com.sun.media.util.*;
import com.sun.media.ui.*;
import com.sun.media.amovie.*;
import com.sun.media.controls.*;

/**
 * A MPEG player implementation for windows that runs on top of Active Movie.
 */

public class Handler extends BasicPlayer {

    /*************************************************************************
     * Variables
     *************************************************************************/
    
    private DefaultControlPanel controlPanel = null;

    protected AMController amController = null;

    private boolean justDeallocated = false;

    //private TimeBase masterTimeBase = mixerTimeBase;

    /*************************************************************************
     * Methods
     *************************************************************************/
    
    public Handler() {
    }

    public void setSource(DataSource source)
	throws IOException, IncompatibleSourceException {
	//if (BuildInfo.usePureJava()) {
	//  throw new IncompatibleSourceException(this + " : does not support mpeg on this platform.");
	//}
	super.setSource(source);
	try {
	    if (amController == null) {
		amController = new AMController(this);
		amController.setSource(source);
		manageController(amController);
	    }
	} catch (Exception e) {
	    throw new IncompatibleSourceException(e.getMessage());
	}
    }

    protected TimeBase getMasterTimeBase() {
	return amController.getTimeBase();
    }
    
    public void updateStats() {
    }
    
    /**
     * Get the Component this player will output its visual media to.  If
     * this player has no visual component (e.g. audio only)
     * getVisualComponent() will return null.
     *
     * @return the media display component.
    */
    public Component getVisualComponent() {
	if (state == Unrealized || state == Realizing)
	    throw new javax.media.NotRealizedError("Cannot get visual component from an unrealized player.");
	return amController.getVisualComponent();
    }


    /**
     * Get the object for controlling audio gain. Returns null
     * if this player does not have a GainControl (e.g. no audio).
     *
     * @return the GainControl object for this player.
    */
    public GainControl getGainControl() {
	return super.getGainControl();
    }

    /**
     * Get the Component with the default user interface for controlling
     * this player.
     * If this player has no default control panel null is
     * returned.
     *
     * @return the default control panel GUI.
     */
    public Component getControlPanelComponent() {
	return super.getControlPanelComponent();
    }

    protected boolean connectNodes() {
	//addControls(amController.getControls());
	return true;
    }

    protected void createGainControl() {
	// called by MediaPlayer.doRealize()
    }

    protected void doDeallocate() {
	super.doDeallocate();
	justDeallocated = true;
    }

    protected synchronized boolean doRealize() {
	boolean returnVal = super.doRealize();

	if (!returnVal)
	    return false;
	/*
	if (audioEnabled()) {
	    gainControl = new GainCA(false);
	    gainControl.addGainChangeListener( this );
	}
	// set rate control to null if player plays only AUDIO since
	// we dont support audio rate control  
	if ((rateControl != null) && (audioEnabled()) && (!videoEnabled()))
	    rateControl = null;
	
	if (regionControl != null)
	    regionControl.setEnable(false);
	Time dur = amController.getDuration();
	if (dur != null)
	    setMediaLength(dur.getNanoseconds());
	*/
	return true;
    }

    protected boolean doPrefetch() {
	if (justDeallocated) {
	    setMediaTime(new Time(0));
	    justDeallocated = false;
	}
	return super.doPrefetch();
    }
    
    public void doClose() {
	/*
	if (controlPanel != null)
	    controlPanel.dispose();
	controlPanel = null;
	*/
	super.doClose();
	amController = null;
    }

    public boolean audioEnabled() {
	return amController.audioEnabled();
    }

    public boolean videoEnabled() {
	return amController.videoEnabled();
    }
    
    /*
    public void gainChange(GainChangeEvent gce) {
       	amController.gainChange(gce);
    }

    public void muteChange(boolean state) {
	amController.muteChange(state);
    }

    public StringControl getFrameRate() {
	return frameRate;			      // from MediaPlayer
    }

    public StringControl getBitRate() {
	return bitRate;				      // from MediaPlayer
    }

    public StringControl getAudioProps() {
	return audioProps;			      // from MediaPlayer
    }

    public StringControl getVideoProps() {
	return videoProps;			      // from MediaPlayer
    }

    public StringControl getAudioCodec() {
	return audioCodec;			      // from MediaPlayer
    }

    public StringControl getVideoCodec() {
	return videoCodec;			      // from MediaPlayer
    }
    */
    /*************************************************************************
     * INNER CLASSES
     *************************************************************************/

    /*
    class GainCA extends GainControlAdapter {

	public GainCA(boolean mute) {
	    super(mute);
	}

	public void setMute(boolean m) {
	    muteChange(m);
	    super.setMute(m);
	}
    }
    */
}