Эффективный формат файла для видео-подобных данных

Я работаю с датчиком Kinect и хочу сохранить и загрузить полученные данные. По сути, это дает мне два типа кадров (цвет и глубина), которые я сохраняю в двоичном файле. Поскольку каждый кадр имеет размер чуть более 1 МБ и записи Kinect со скоростью 30 кадров в секунду, файлы имеют тенденцию расти довольно быстро.

Теперь мне нужен эффективный способ загрузки данных и быстрый произвольный доступ к кадрам.

То, как я это сделал сейчас, выглядит так:

  • у меня есть Frame класс, который содержит заголовок кадра (номер кадра, метку времени, тип, размер данных) и указатель на фактические данные изображения
  • у меня есть Replay класс, который содержит заголовок (количество кадров, разрешение и т. д.) и два вектора: frames который содержит Frame объекты с указателем данных инициализированы в NULL и framePositions который сопоставляет номер кадра с его местоположением в файле.
    • Когда мне нужен кадр, я просто загружаю его данные из файла.

Загрузка выглядит примерно так (сжато):

Replay replay;
Frame frame;
int position = fStream.tellg();
fStream.read((char *) &frame.header, sizeof(frame.header));
fStream.ignore(frame.dataSize);    // skip image data for now
replay.insertFrame(frame, pos);    // put frame and pos into vectors

Так что это лучше, чем загружать все в память, но все равно медленно. Существует программное обеспечение MS под названием Kinect Studio, которое мгновенно открывает записанные файлы. Буквально в одно мгновение, в то время как мое решение занимает несколько секунд, чтобы загрузить файл аналогичного размера. Что это за колдовство?

Теперь у меня есть следующая идея: создать массив позиций кадров в файле, поместить его в конец файла (так как это будет переменный размер), поместить его смещение и размер в заголовок, даже не беспокойтесь загрузка кадров, просто загрузите массив и запросите кадры, когда это необходимо.

Я думаю, что это может сработать, но я решил обратиться за советом, прежде чем пытаться его реализовать, так как считаю, что существуют стандартные способы решения таких проблем, и я не хочу изобретать велосипед путем проб и ошибок.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]