2013-03-06 5 views
0

Я пытаюсь записать файлы oni с помощью Java. Он работает хорошо, когда я записываю один файл. Но когда я хочу записать несколько файлов, я сталкиваюсь с проблемами.Не удается перезаписать файл oni

Вот некоторые тестовый код:

package test; 

import org.OpenNI.Context; 
import org.OpenNI.DepthGenerator; 
import org.OpenNI.GeneralException; 
import org.OpenNI.ImageGenerator; 
import org.OpenNI.OutArg; 
import org.OpenNI.RecordMedium; 
import org.OpenNI.Recorder; 
import org.OpenNI.ScriptNode; 

public class RecorderProblems { 

    private static final String SAMPLE_XML_FILE = "KinectConfig.xml"; 
    private static final String TEST1_ONI_FILE = "Test1.oni"; 
    private static final String TEST2_ONI_FILE = "Test2.oni"; 

    public static void main(String[] args) { 
     Context context = null; 
     DepthGenerator depthGenerator = null; 
     ImageGenerator imageGenerator = null; 
     try { 
      OutArg<ScriptNode> scriptNode = new OutArg<ScriptNode>(); 

      // Init Hardware 
      System.out.println("Init Hardware"); 
      context = Context.createFromXmlFile(SAMPLE_XML_FILE, scriptNode); 
      depthGenerator = DepthGenerator.create(context); 
      imageGenerator = ImageGenerator.create(context); 
      context.startGeneratingAll(); 

      // Record 1 
      System.out.println("Start Record 1"); 
      Recorder recorder = Recorder.create(context, "oni"); 
      // Adding next line produces a corrupt file, but the program runs fine 
//   context.createProductionTree(recorder.getInfo()); 
      recorder.setDestination(RecordMedium.FILE, TEST1_ONI_FILE); 
      recorder.addNodeToRecording(depthGenerator); 
      recorder.addNodeToRecording(imageGenerator); 
      for (int i = 0; i < 100; i++) { 
       context.waitOneUpdateAll(imageGenerator); 
       recorder.Record(); 
      } 
      recorder.removeNodeToRecording(depthGenerator); 
      recorder.removeNodeToRecording(imageGenerator); 
      recorder.dispose(); 

      // Record 2 
      System.out.println("Start Record 2"); 
      recorder = Recorder.create(context, "oni"); 
      // Adding next line produces a corrupt file, but the program runs fine 
//   context.createProductionTree(recorder.getInfo()); 
      recorder.setDestination(RecordMedium.FILE, TEST2_ONI_FILE); 
      recorder.addNodeToRecording(depthGenerator); 
      recorder.addNodeToRecording(imageGenerator); 
      for (int i = 0; i < 100; i++) { 
       context.waitOneUpdateAll(imageGenerator); 
       recorder.Record(); 
      } 
      recorder.removeNodeToRecording(depthGenerator); 
      recorder.removeNodeToRecording(imageGenerator); 
      recorder.dispose(); 
     } catch (GeneralException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } finally { 
      // End Hardware 
      System.out.println("End Hardware"); 
      depthGenerator.dispose(); 
      depthGenerator = null; 
      imageGenerator.dispose(); 
      imageGenerator = null; 
      context.release(); 
      context.dispose(); 
     } 
    } 
} 

При попытке установить место назначения для второй записи я получаю StatusException «указатель ввода является недействительным».

Если я добавляю строку без комментирования, программа работает нормально, но созданные файлы oni не читаются. (Я точно не знаю, что делает линия.)

Я также попытался повторно инициализировать контекст. Сначала это работало нормально, но когда я попытался записать несколько файлов, у меня также возникли проблемы при повторной инициализации. Вот некоторые примеры кода: «Тайм-аут произошел во время ожидания новых данных»

package test; 

import org.OpenNI.Context; 
import org.OpenNI.DepthGenerator; 
import org.OpenNI.GeneralException; 
import org.OpenNI.ImageGenerator; 
import org.OpenNI.OutArg; 
import org.OpenNI.RecordMedium; 
import org.OpenNI.Recorder; 
import org.OpenNI.ScriptNode; 

public class RecorderProblems { 

    private static final String SAMPLE_XML_FILE = "KinectConfig.xml"; 

    public static void main(String[] args) { 
     Context context = null; 
     DepthGenerator depthGenerator = null; 
     ImageGenerator imageGenerator = null; 
     try { 
      OutArg<ScriptNode> scriptNode = new OutArg<ScriptNode>(); 

      // Record 1 
      for (int i = 0; i < 25; i++) { 
       System.out.println("Run " + i); 
       // Init Hardware 
       System.out.println("Init Hardware " + i); 
       context = Context 
         .createFromXmlFile(SAMPLE_XML_FILE, scriptNode); 
       depthGenerator = DepthGenerator.create(context); 
       imageGenerator = ImageGenerator.create(context); 
       context.startGeneratingAll(); 

       System.out.println("Start Record " + i); 
       Recorder recorder = Recorder.create(context, "oni"); 
       recorder.setDestination(RecordMedium.FILE, "test_" + i + ".oni"); 
       recorder.addNodeToRecording(depthGenerator); 
       recorder.addNodeToRecording(imageGenerator); 
       for (int j = 0; j < 100; j++) { 
        context.waitOneUpdateAll(imageGenerator); 
        recorder.Record(); 
       } 
       recorder.removeNodeToRecording(depthGenerator); 
       recorder.removeNodeToRecording(imageGenerator); 
       recorder.dispose(); 

       System.out.println("End Hardware " + i); 
       depthGenerator.dispose(); 
       depthGenerator = null; 
       imageGenerator.dispose(); 
       imageGenerator = null; 
       context.release(); 
       context.dispose(); 
      } 

     } catch (GeneralException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

На третьем ходу я получил StatusExcption.

Есть ли у кого-нибудь опыт записи файлов? Я не знаю, неправильно ли я использую библиотеку, или если это проблема OpenNI (с Java)?

Кстати, я использую OpenNI 1.5.2.23 и камеру Kinect. Файл конфигурации XML «KinectConfig.xml» является XML-файлом по умолчанию, который поставляется с образцами OpenNI. Я просто переименовал его.

Спасибо за вашу помощь

ответ

0

Почему вы делаете это так сложно? Вы можете: Android libraries для этого.

+0

Мне нужен формат файла oni. Созданные файлы oni должны обрабатываться с помощью существующей библиотеки, для которой в качестве входных данных требуются файлы ini. Я думаю, что эта библиотека не поддерживает oni, или я ее перепробовал? – hami

0

У меня проблема с чтением глубины разрешения VGA и rgb с одинаковой ошибкой тайм-аута. Если я уменьшу разрешение любой глубины или rgb до четверти vga, все будет работать.

Смежные вопросы