CalaBoard is a virtual flipchart where users interact on the same diagram during a video conference by drawing in the air.
This presentation was shown at the ARDevCamp in Amsterdam on the 17th April 2010.
7. PIPELINE 7/15
Code pipeline: video sources 1/2
A model for acquiring data
Drive the pipeline
Abstraction from the hardware
8. PIPELINE 8/15
Code pipeline: video sources 2/2
remoteVideoSource = new SimpleNetworkRemoteVideoSource(
new UDPPublisherReader( remoteHost,
port ) );
...
...
videoSource = new LTIVideoSource();
...
...
videoSource = new ScreenShotVideoSource( 320, 240 );
...
9. PIPELINE 9/15
Code pipeline:
image processing filters
Multiple filters are allowed
Each filter is specialized
...
BufferedImage processedImage =
scannerInfo.getVideoEngine().getFrameProcessor()
.process( scannerInfo.getFrame(), "motion" );
...
10. PIPELINE 10/15
Code pipeline: frame scanners 1/2
Multiple scanners are allowed
Each scanner operates on a different feature
for ( FrameScanner frameScanner : frameScanners ) {
...
frameScanner.scan( scannerInfo );
...
if ( scannerInfo.getCellsNumber() > 0 ) {
frameScanner.callEvents( scannerInfo );
}
}
11. PIPELINE 11/15
Code pipeline: frame scanners 2/2
public int doScan( ScannerInfo si ) throws RecognitionException {
...
for ( int i = 0; i < numAreas; i++ ) {
Rectangle cell = grid.getArea( i );
if ( detectionBounds.contains( cell ) ) {
if ( testCell( testImage, cell, 0.15f ) ) {
detectionCells[foundCells++] = i;
}
}
}
...
12. PIPELINE 12/15
Code pipeline: video rendering
The same VideoEngine can use multiple
VideoRenderers
Video output adapts the results of the pipeline
...
VideoEngine engine = new VideoEngine( source, grid, false );
VideoRenderer renderer = new VideoRenderer();
renderer.addFrameRenderer( this );
engine.addVideoRenderer( renderer );
...