001/** 002 * Copyright (c) 2011, The University of Southampton and the individual contributors. 003 * All rights reserved. 004 * 005 * Redistribution and use in source and binary forms, with or without modification, 006 * are permitted provided that the following conditions are met: 007 * 008 * * Redistributions of source code must retain the above copyright notice, 009 * this list of conditions and the following disclaimer. 010 * 011 * * Redistributions in binary form must reproduce the above copyright notice, 012 * this list of conditions and the following disclaimer in the documentation 013 * and/or other materials provided with the distribution. 014 * 015 * * Neither the name of the University of Southampton nor the names of its 016 * contributors may be used to endorse or promote products derived from this 017 * software without specific prior written permission. 018 * 019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 020 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 021 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 022 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 023 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 024 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 025 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 026 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 027 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 028 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 029 */ 030package org.openimaj.examples.hardware.kinect; 031 032import java.awt.event.KeyAdapter; 033import java.awt.event.KeyEvent; 034 035import javax.swing.SwingUtilities; 036 037import org.openimaj.demos.hardware.KinectDemo; 038import org.openimaj.hardware.kinect.KinectException; 039import org.openimaj.image.MBFImage; 040import org.openimaj.video.VideoDisplay; 041import org.openimaj.video.VideoDisplayListener; 042import org.openimaj.video.xuggle.XuggleVideoWriter; 043 044/** 045 * Record the output from a kinect to a file 046 * 047 * @author Sina Samangooei (ss@ecs.soton.ac.uk) 048 * @author Jonathon Hare (jsh2@ecs.soton.ac.uk) 049 * 050 */ 051public class KinectRecordingExample extends KeyAdapter implements VideoDisplayListener<MBFImage> { 052 private KinectDemo demo; 053 private XuggleVideoWriter writer; 054 private boolean close = false; 055 056 /** 057 * Default constructor 058 * 059 * @throws KinectException 060 * if there is a problem with the Kinect hardware 061 */ 062 public KinectRecordingExample() throws KinectException { 063 demo = new KinectDemo(0); 064 065 writer = new XuggleVideoWriter("kinect.mpg", demo.getCurrentFrame().getWidth(), 066 demo.getCurrentFrame().getHeight(), 22); 067 068 demo.getDisplay().addVideoListener(this); 069 070 SwingUtilities.getRoot(demo.getDisplay().getScreen()).addKeyListener(this); 071 } 072 073 @Override 074 public void keyPressed(KeyEvent arg0) { 075 close = arg0.getKeyCode() == KeyEvent.VK_ESCAPE; 076 } 077 078 @Override 079 public void afterUpdate(VideoDisplay<MBFImage> display) { 080 } 081 082 @Override 083 public void beforeUpdate(MBFImage frame) { 084 if (!close) 085 writer.addFrame(frame); 086 } 087 088 /** 089 * Main method 090 * 091 * @param args 092 * ignored 093 * @throws KinectException 094 * if there is a problem with the Kinect hardware 095 */ 096 public static void main(String[] args) throws KinectException { 097 new KinectRecordingExample(); 098 } 099}