mirror of
https://github.com/processing/processing4.git
synced 2026-06-16 04:26:26 +02:00
changing camera to capture, slight tweak to faq
This commit is contained in:
@@ -7,6 +7,9 @@ X memory on external apps is a little broken
|
||||
X update the script for the mailing list
|
||||
X processing vs. flash item on the faq? a "why?" page?
|
||||
X clean up faq page to use text A NAME tags
|
||||
X rename video.Camera to video.Video ? Capture ?
|
||||
X VideoInput VideoOutput, SoundInput, SoundOutput or AudioInput/AudioOutput
|
||||
X need to straighten out for when audio comes along
|
||||
|
||||
save as... bugs
|
||||
X always make sure that the sketch folder still exists
|
||||
@@ -52,12 +55,7 @@ unhide "a_2"
|
||||
unhide "a"
|
||||
where did "a_2" go ?
|
||||
|
||||
|
||||
pending
|
||||
_ rename video.Camera to video.Video ? Capture ?
|
||||
_ VideoInput VideoOutput, SoundInput, SoundOutput or AudioInput/AudioOutput
|
||||
_ need to straighten out for when audio comes along
|
||||
_ faq menu selection should select current page so can navigate elsewhere
|
||||
X faq menu selection should select current page so can navigate elsewhere
|
||||
_ also missing "founders" and "interview" pages
|
||||
_ remove interview page if not already done
|
||||
_ founders page is online, just integrate - info.html
|
||||
@@ -65,8 +63,7 @@ _ list of changes since rev 69? run through revisions.txt
|
||||
|
||||
_ list of known bugs should be on the faq page
|
||||
_ a bunch of stuff from revisions.txt on 84 and 82
|
||||
_ how to deal with bugs, since there are so many known...
|
||||
|
||||
o how to deal with bugs, since there are so many known...
|
||||
|
||||
|
||||
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|
||||
|
||||
Regular → Executable
+38
-52
@@ -1,7 +1,6 @@
|
||||
/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */
|
||||
|
||||
/*
|
||||
Camera - whatchin shit on tv
|
||||
Part of the Processing project - http://processing.org
|
||||
|
||||
Copyright (c) 2004-05 Ben Fry and Casey Reas
|
||||
@@ -35,10 +34,12 @@ import quicktime.std.sg.*;
|
||||
import quicktime.util.RawEncodedImage;
|
||||
|
||||
|
||||
// this is the useful ref page
|
||||
// http://developer.apple.com/documentation/Java/Reference/1.4.1/Java141API_QTJ/constant-values.html
|
||||
|
||||
public class Camera extends PImage implements Runnable {
|
||||
/**
|
||||
* whatchin shit on tv
|
||||
* <p>
|
||||
* The useful ref page for <a href="http://developer.apple.com/documentation/Java/Reference/1.4.1/Java141API_QTJ/constant-values.html">quicktime constants</a>
|
||||
*/
|
||||
public class Capture extends PImage implements Runnable {
|
||||
|
||||
// there are more, but these are all we'll provide for now
|
||||
static public final int COMPOSITE = StdQTConstants.compositeIn; // 0
|
||||
@@ -51,13 +52,14 @@ public class Camera extends PImage implements Runnable {
|
||||
static public final int SECAM = StdQTConstants.secamIn;
|
||||
|
||||
PApplet parent;
|
||||
Method cameraEventMethod;
|
||||
Method captureEventMethod;
|
||||
String name; // keep track for error messages (unused)
|
||||
Thread runner;
|
||||
|
||||
boolean available = false;
|
||||
|
||||
/** Temporary storage for the raw image data read directly from the camera */
|
||||
/** Temporary storage for the raw image
|
||||
data read directly from the capture device */
|
||||
public int data[];
|
||||
|
||||
public int dataWidth;
|
||||
@@ -90,22 +92,22 @@ public class Camera extends PImage implements Runnable {
|
||||
QTRuntimeException.registerHandler(new QTRuntimeHandler() {
|
||||
public void exceptionOccurred(QTRuntimeException e,
|
||||
Object obj, String s, boolean flag) {
|
||||
System.err.println("Problem inside Camera");
|
||||
System.err.println("Problem inside Capture");
|
||||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public Camera(PApplet parent, int requestWidth, int requestHeight) {
|
||||
public Capture(PApplet parent, int requestWidth, int requestHeight) {
|
||||
this(parent, null, requestWidth, requestHeight, 30);
|
||||
}
|
||||
|
||||
public Camera(PApplet parent, int reqWidth, int reqHeight, int framerate) {
|
||||
public Capture(PApplet parent, int reqWidth, int reqHeight, int framerate) {
|
||||
this(parent, null, reqWidth, reqHeight, framerate);
|
||||
}
|
||||
|
||||
public Camera(PApplet parent, String name, int reqWidth, int reqHeight) {
|
||||
public Capture(PApplet parent, String name, int reqWidth, int reqHeight) {
|
||||
this(parent, name, reqWidth, reqHeight, 30);
|
||||
}
|
||||
|
||||
@@ -116,11 +118,11 @@ public class Camera extends PImage implements Runnable {
|
||||
* used by a QuickTime application.
|
||||
* <P>
|
||||
* If the following function:
|
||||
* public void cameraEvent(Camera c)
|
||||
* public void captureEvent(Capture c)
|
||||
* is defined int the host PApplet, then it will be called every
|
||||
* time a new frame is available from the camera.
|
||||
* time a new frame is available from the capture device.
|
||||
*/
|
||||
public Camera(PApplet parent, String name,
|
||||
public Capture(PApplet parent, String name,
|
||||
int requestWidth, int requestHeight, int framerate) {
|
||||
this.parent = parent;
|
||||
this.name = name;
|
||||
@@ -173,9 +175,9 @@ public class Camera extends PImage implements Runnable {
|
||||
parent.registerDispose(this);
|
||||
|
||||
try {
|
||||
cameraEventMethod =
|
||||
parent.getClass().getMethod("cameraEvent",
|
||||
new Class[] { Camera.class });
|
||||
captureEventMethod =
|
||||
parent.getClass().getMethod("captureEvent",
|
||||
new Class[] { Capture.class });
|
||||
} catch (Exception e) {
|
||||
// no such method, or an error.. which is fine, just ignore
|
||||
}
|
||||
@@ -185,15 +187,15 @@ public class Camera extends PImage implements Runnable {
|
||||
|
||||
int errorCode = qte.errorCode();
|
||||
if (errorCode == Errors.couldntGetRequiredComponent) {
|
||||
// this can happen when the camera isn't available or
|
||||
// wasn't shut down properly
|
||||
parent.die("No camera could be found, " +
|
||||
// this can happen when the capture device isn't available
|
||||
// or wasn't shut down properly
|
||||
parent.die("No capture could be found, " +
|
||||
"or the VDIG is not installed correctly.", qte);
|
||||
} else {
|
||||
parent.die("Error while setting up Camera", qte);
|
||||
parent.die("Error while setting up Capture", qte);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
parent.die("Error while setting up Camera", e);
|
||||
parent.die("Error while setting up Capture", e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -202,13 +204,13 @@ public class Camera extends PImage implements Runnable {
|
||||
* True if a frame is ready to be read.
|
||||
* <PRE>
|
||||
* // put this somewhere inside draw
|
||||
* if (camera.available()) camera.read();
|
||||
* if (capture.available()) capture.read();
|
||||
* </PRE>
|
||||
* Alternatively, you can use cameraEvent(Camera c) to notify you
|
||||
* Alternatively, you can use captureEvent(Capture c) to notify you
|
||||
* whenever available() is set to true. In which case, things might
|
||||
* look like this:
|
||||
* <PRE>
|
||||
* public void cameraEvent(Camera c) {
|
||||
* public void captureEvent(Capture c) {
|
||||
* c.read();
|
||||
* // do something exciting now that c has been updated
|
||||
* }
|
||||
@@ -222,7 +224,7 @@ public class Camera extends PImage implements Runnable {
|
||||
/**
|
||||
* Set the video to crop from its original.
|
||||
* <P>
|
||||
* It seems common that cameras add lines to the top or bottom
|
||||
* It seems common that captures add lines to the top or bottom
|
||||
* of an image, so this can be useful for removing them.
|
||||
* Internally, the pixel buffer size returned from QuickTime is
|
||||
* often a different size than requested, so crop will be set
|
||||
@@ -310,14 +312,14 @@ public class Camera extends PImage implements Runnable {
|
||||
//read();
|
||||
available = true;
|
||||
|
||||
if (cameraEventMethod != null) {
|
||||
if (captureEventMethod != null) {
|
||||
try {
|
||||
cameraEventMethod.invoke(parent, new Object[] { this });
|
||||
captureEventMethod.invoke(parent, new Object[] { this });
|
||||
} catch (Exception e) {
|
||||
System.err.println("Disabling cameraEvent() for " + name +
|
||||
System.err.println("Disabling captureEvent() for " + name +
|
||||
" because of an error.");
|
||||
e.printStackTrace();
|
||||
cameraEventMethod = null;
|
||||
captureEventMethod = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -335,11 +337,11 @@ public class Camera extends PImage implements Runnable {
|
||||
|
||||
/**
|
||||
* Set the framerate for how quickly new frames are read
|
||||
* from the camera.
|
||||
* from the capture device.
|
||||
*/
|
||||
public void framerate(int iframerate) {
|
||||
if (iframerate <= 0) {
|
||||
System.err.println("Camera: ignoring bad framerate of " +
|
||||
System.err.println("Capture: ignoring bad framerate of " +
|
||||
iframerate + " fps.");
|
||||
return;
|
||||
}
|
||||
@@ -380,7 +382,7 @@ public class Camera extends PImage implements Runnable {
|
||||
* I think of something slightly more intelligent to do.
|
||||
*/
|
||||
protected void errorMessage(String where, Exception e) {
|
||||
parent.die("Error inside Camera." + where + "()", e);
|
||||
parent.die("Error inside Capture." + where + "()", e);
|
||||
}
|
||||
|
||||
|
||||
@@ -441,37 +443,21 @@ public class Camera extends PImage implements Runnable {
|
||||
int errorCode = qte.errorCode();
|
||||
if (errorCode != Errors.userCanceledErr) {
|
||||
qte.printStackTrace();
|
||||
throw new RuntimeException("error inside Camera.settings()");
|
||||
throw new RuntimeException("error inside Capture.settings()");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
public String[] listInputs() {
|
||||
VideoDigitizer digitizer = channel.getDigitizerComponent();
|
||||
int count = digitizer.getNumberOfInputs();
|
||||
|
||||
String outgoing[] = new String[count];
|
||||
//digitizer.setInput(2); // or something
|
||||
//DigitizerInfo di = digitizer.getDigitizerInfo()
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Get a list of all available cameras as a String array.
|
||||
* i.e. printarr(Camera.list()) will show you the goodies.
|
||||
* Get a list of all available captures as a String array.
|
||||
* i.e. println(Capture.list()) will show you the goodies.
|
||||
*/
|
||||
static public String[] list() {
|
||||
try {
|
||||
SequenceGrabber grabber = new SequenceGrabber();
|
||||
SGVideoChannel channel = new SGVideoChannel(grabber);
|
||||
|
||||
//VideoDigitizer digitizer = channel.getDigitizerComponent();
|
||||
//digitizer.setInput(2); // or something
|
||||
//DigitizerInfo di = digitizer.getDigitizerInfo()
|
||||
|
||||
SGDeviceList deviceList = channel.getDeviceList(0); // flags is 0
|
||||
String listing[] = new String[deviceList.getCount()];
|
||||
for (int i = 0; i < deviceList.getCount(); i++) {
|
||||
Reference in New Issue
Block a user