/*
* @(#)DataSource.java 1.11 02/08/21
*
* Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved.
*/
package com.sun.media.protocol.vfw;
import java.awt.Dimension;
import java.awt.Frame;
import java.io.IOException;
import javax.media.*;
import javax.media.protocol.*;
import javax.media.control.FormatControl;
import com.sun.media.controls.FormatAdapter;
import com.sun.media.protocol.BasicPushBufferDataSource;
import javax.media.format.*;
import com.sun.media.format.AviVideoFormat;
import com.sun.media.vfw.*;
import java.util.Vector;
public class DataSource
extends BasicPushBufferDataSource
implements CaptureDevice, RateConfigureable {
private PushBufferStream [] streams = null;
private VFWSourceStream vfwStream = null;
private static String ContentType = ContentDescriptor.RAW;
private FormatControl fc = null;
protected Control [] controls = null;
public DataSource() {
com.sun.media.JMFSecurityManager.checkCapture();
contentType = ContentType;
duration = DURATION_UNBOUNDED;
}
public void setLocator(MediaLocator loc) {
super.setLocator(loc);
if (vfwStream == null) {
vfwStream = new VFWSourceStream(getLocator());
}
}
public PushBufferStream [] getStreams() {
if (streams == null)
System.err.println("DataSource needs to be connected before calling getStreams");
return streams;
}
public FormatControl [] getFormatControls() {
if (vfwStream == null)
return new FormatControl[0];
else
return new FormatControl[] {(FormatControl) vfwStream};
}
public CaptureDeviceInfo getCaptureDeviceInfo() {
if (vfwStream == null)
return null;
else
return vfwStream.getCaptureDeviceInfo();
}
public void connect() throws IOException {
if (streams == null) {
streams = new PushBufferStream[1];
if (vfwStream == null)
vfwStream = new VFWSourceStream(getLocator());
streams[0] = vfwStream;
}
vfwStream.connect(null);
super.connect();
}
public void disconnect() {
vfwStream.disconnect();
super.disconnect();
}
public void start() throws IOException {
vfwStream.start();
super.start();
}
public void stop() throws IOException {
vfwStream.stop();
super.stop();
}
boolean getStarted() {
return started;
}
public Object [] getControls() {
if (vfwStream != null)
return vfwStream.getControls();
else
return new Control[0];
}
/**
* Return the control based on a control type for the PlugIn.
*/
public Object getControl(String controlType) {
try {
Class cls = Class.forName(controlType);
Object cs[] = getControls();
for (int i = 0; i < cs.length; i++) {
if (cls.isInstance(cs[i]))
return cs[i];
}
return null;
} catch (Exception e) { // no such controlType or such control
return null;
}
}
/**
* Methods for the RateConfigurable interface.
*/
public RateConfiguration[] getRateConfigurations() {
RateConfiguration config [] = { new OneRateConfig() };
return config;
}
public RateConfiguration setRateConfiguration(RateConfiguration config) {
return config;
}
/////////////////////////////////////
//
// Inner class RateConfiguration
/////////////////////////////////////
class OneRateConfig implements RateConfiguration {
public RateRange getRate() {
return new RateRange(1.0f, 1.0f, 1.0f, true);
}
public SourceStream[] getStreams() {
SourceStream ss [] = { vfwStream };
return ss;
}
}
}
|