RecordingManager.java
Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 2008, AIST, the University of Tokyo and General Robotix Inc.
00003  * All rights reserved. This program is made available under the terms of the
00004  * Eclipse Public License v1.0 which accompanies this distribution, and is
00005  * available at http://www.eclipse.org/legal/epl-v10.html
00006  * Contributors:
00007  * General Robotix Inc.
00008  * National Institute of Advanced Industrial Science and Technology (AIST) 
00009  */
00017 package com.generalrobotix.ui.view.tdview;
00018 
00019 import java.io.*;
00020 import java.util.*;
00021 import java.awt.image.BufferedImage;
00022 import javax.media.Format;
00023 
00024 
00025 public class RecordingManager{
00026     //--------------------------------------------------------------------
00027     // 定数
00028     //最適化パラメータ
00029     private static int SLEEP_TIME=50;  //スリープする時間(ms)
00030 
00031     //スリープに入るまでの最大許容イメージスタック数
00032     private static int MAX_STACK_SIZE=0;
00033     
00034     //--------------------------------------------------------------------
00035     // クラス変数
00036     private static RecordingManager this_;
00037 
00038     //--------------------------------------------------------------------
00039     // メンバ変数
00040     private int width_,height_;
00041     private float frameRate_;
00042     private Hashtable<String, Format> htFormat_;   //String--Format
00043     
00044     private ImageToMovie movie_;
00045     
00046     //--------------------------------------------------------------------
00047     // コンストラクタ
00048     private RecordingManager() {
00049     }
00050     
00051     //--------------------------------------------------------------------
00052     // クラスメソッド
00053     public static RecordingManager getInstance() {
00054         if (this_ == null) {
00055             this_ = new RecordingManager();
00056         }
00057 
00058         return this_;
00059     }
00060 
00061     //--------------------------------------------------------------------
00062     // 公開メソッド
00063     
00064     public void setImageSize(int w, int h) {
00065         width_ = w;
00066         height_ = h;
00067     }
00068 
00069     public int getWidth(){
00070         return width_;
00071     }
00072 
00073     public int getHeight(){
00074         return height_;
00075     }
00076 
00077     public void setFrameRate(float rate){
00078         frameRate_=rate;
00079     }
00080 
00081     public float getFrameRate(){
00082         return frameRate_;
00083     }
00084 
00085     public Object[] getSuportedFormat(){
00086         htFormat_=new Hashtable<String, Format>();
00087         Vector<String> ret = new Vector<String>();
00088         //テンポラリを作ってフォーマットを得る
00089         String fileName =
00090             "file:" +
00091             System.getProperty("user.dir") + 
00092             System.getProperty("file.separator") +
00093             _getUniqueName();
00094         ImageToMovie tempMovie =
00095             new ImageToMovie(
00096                 width_,
00097                 height_,
00098                 frameRate_,
00099                 fileName,
00100                 ImageToMovie.QUICKTIME
00101             );
00102         Format[] formats=tempMovie.getSupportedFormats();
00103         for(int i=0;i<formats.length;i++){
00104             String keyStr = formats[i].toString();
00105             if(htFormat_.get(keyStr) != null){
00106                 continue;
00107             }
00108             ret.add(keyStr);
00109             htFormat_.put(keyStr,formats[i]);
00110         }
00111         tempMovie.setFormat(formats[0]);
00112         //テンポラリを消す
00113         File file=new File(fileName);
00114         file.delete();
00115         
00116         return ret.toArray();
00117     }
00118 
00119     private String _getUniqueName() {
00120         Calendar cal=new GregorianCalendar();
00121         String str="`~$" + cal.getTime().hashCode() +".TMP";
00122         return str;
00123     }
00124     public Object[] preRecord(String fileName, String fileType)
00125         {
00126         Vector<String> ret = new Vector<String>();
00127         movie_=
00128             new ImageToMovie(
00129                 width_,
00130                 height_,
00131                 frameRate_,
00132                 fileName,
00133                 fileType
00134             );
00135         htFormat_=new Hashtable<String, Format>();
00136         
00137         Format[] formats = movie_.getSupportedFormats();
00138         for(int i=0;i<formats.length;i++){
00139             String keyStr = formats[i].toString();
00140             if(htFormat_.get(keyStr) != null){
00141                 continue;
00142             }
00143             ret.add(keyStr);
00144             htFormat_.put(keyStr,formats[i]);
00145         }
00146         return ret.toArray();
00147     }
00148 
00149     public boolean startRecord(String formatStr){
00150         Format format=(Format)htFormat_.get(formatStr);
00151         movie_.setFormat(format);
00152 
00153         if(movie_.startProcess())
00154                 return true;
00155         else 
00156                 return false;
00157     }
00158 
00159     public void endRecord() {
00160         movie_.endProcess();
00161     }
00162 
00163     public void pushImage(BufferedImage image)
00164         {
00165             movie_.pushImage(image);
00166             do {
00167                 try {
00168                     Thread.sleep(SLEEP_TIME);
00169                 } catch (Exception ex) {
00170                     ex.printStackTrace();
00171                 }
00172             } while (movie_.getImageStackSize() > MAX_STACK_SIZE);
00173     }
00174 }


openhrp3
Author(s): AIST, General Robotix Inc., Nakamura Lab of Dept. of Mechano Informatics at University of Tokyo
autogenerated on Thu Apr 11 2019 03:30:19