/*
* @(#)DataSource.java 1.12 02/08/21
*
* Copyright (c) 1996-2002 Sun Microsystems, Inc. All rights reserved.
*/
package com.sun.media.protocol.javasound;
import java.io.IOException;
import javax.media.*;
import javax.media.protocol.*;
import javax.media.format.*;
import javax.media.format.AudioFormat;
import javax.media.control.FormatControl;
import com.sun.media.protocol.BasicPushBufferDataSource;
public class DataSource extends BasicPushBufferDataSource implements javax.media.protocol.CaptureDevice, RateConfigureable {
PushBufferStream [] streams = new PushBufferStream[0];
JavaSoundSourceStream sourceStream = null;
String contentType;
Time duration;
boolean started = false;
// static String ContentType = "raw";
static String ContentType = ContentDescriptor.RAW;
public DataSource() {
com.sun.media.JMFSecurityManager.checkCapture();
contentType = ContentType;
duration = DURATION_UNBOUNDED;
sourceStream = new JavaSoundSourceStream(this);
streams = new PushBufferStream[1];
streams[0] = sourceStream;
}
static public CaptureDeviceInfo [] listCaptureDeviceInfo() {
return JavaSoundSourceStream.listCaptureDeviceInfo();
}
public CaptureDeviceInfo getCaptureDeviceInfo() {
return (JavaSoundSourceStream.listCaptureDeviceInfo())[0];
}
public FormatControl[] getFormatControls() {
FormatControl fc[] = new FormatControl[1];
fc[0] = (FormatControl)sourceStream.getControl("javax.media.control.FormatControl");
return fc;
}
public PushBufferStream [] getStreams() {
// System.err.println("JavaSoundDataSource.getStreams()");
if (streams == null)
System.err.println(
"DataSource needs to be connected before calling getStreams");
return streams;
}
public void connect() throws IOException {
// System.err.println("JavaSoundDataSource.connect()");
if (sourceStream.isConnected())
return;
if (getLocator() != null)
sourceStream.setFormat(JavaSoundSourceStream.parseLocator(getLocator()));
sourceStream.connect();
}
public void disconnect() {
// System.err.println("JavaSoundDataSource.disconnect()");
sourceStream.disconnect();
}
public void start() throws IOException {
// System.err.println("JavaSoundDataSource.start()");
sourceStream.start();
}
public void stop() throws IOException {
// System.err.println("JavaSoundDataSource.stop()");
sourceStream.stop();
}
public String getContentType() {
// System.err.println("JavaSoundDataSource.getContentType() ");
return contentType;
}
public Time getDuration() {
// System.err.println("JavaSoundDataSource.getDuration()");
return duration;
}
boolean getStarted() {
// System.err.println("JavaSoundDataSource.getStarted()");
return started;
}
public Object[] getControls() {
// System.err.println("JavaSoundDataSource.getControls()");
Object o[] = sourceStream.getControls();
return o;
}
public Object getControl(String name) {
// System.err.println("JavaSoundDataSource.getControl(): " + name);
return sourceStream.getControl(name);
}
/**
* 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 [] = { sourceStream };
return ss;
}
}
}
|