2011-05-04 3 views
1

В настоящее время я пытаюсь создать программу, которая принимает видеофайл, обычно AVI, и пытается преобразовать его в изображения. До сих пор я отлично работал над процессом и мог быть оставлен в покое, если это необходимо. Однако я хотел бы посмотреть, можно ли оптимизировать его для скорости. Поэтому мой вопрос заключается в том, что можно загружать часть видеофайла в кусок памяти куском вместо потоковой передачи. Возможно, загрузите 2 - 3-минутный клип в буфер, обработайте его и повторно используйте в течение следующих 2 - 3 минут видео. Я просмотрел Direct Show и OpenCV для загрузки и воспроизведения видеофайлов, но до сих пор не смог найти ничего о загрузке видео в буфер. Любые ссылки на учебные пособия или концепции очень приветствуются.Загрузка видеофайлов в буфер в C++

Это будет разработано на компьютере под управлением Windows XP/7, если это поможет.

ответ

2

Что вы можете сделать, это загрузить несколько кадров, позвонив им в кусок N кадров, в очередь с диска. Как только вы установите ограничение для буфера, вы вытащите фреймы и обработайте их. Вы можете сделать это параллельно, используя две очереди (Q1 и Q2) и два потока (T1 и T2). При обработке кадров из Q1 с использованием T2 вы можете загрузить Q2 с помощью T1. Вы будете переводить одну очередь в одну очередь, когда она будет заполнена, вытащить фреймы и обработать их, пока другая очередь загружается фреймами с диска. Конечно, вам нужно будет обрабатывать тонкие/параллельные тонкости, связанные с таким подходом, и в этом случае потоки BOOST могут оказаться полезными.

+0

Я понимаю это, но вопрос, который я задаю, - это загрузить фреймы в буфер. – Seb

+0

@Seb, если вы имеете в виду, как правило, память, я могу сказать, что вы создаете очередь типа IPLImage. Когда это доступно, вы просто нажимаете на него фреймы. Я так думаю о буфере. –

+0

@Wajih, похоже, что это сработает. В таком случае я смогу открыть видеофайл дважды и каждый поток будет обрабатывать часть необходимых изображений? Как нить 1 идет с 0:00 до 1:59 видеофайла, а нить 2 идет с 2:00 до 3:59, или это будет бутылочная шее? – Seb

1

Узкое приложения, как это чтение файла с диска и преобразования каждого кадра к изображению. Вы не можете убежать от этих задач. Если вы не делаете это неправильно, вам нечего делать, чтобы значительно ускорить выполнение приложения.

Надеюсь, вам не придется записывать эти образы обратно на диск.

+0

Изображения должны быть записаны на диск в какой-то момент. В этом случае я собираюсь обработать часть видеофайла до тех пор, пока не будет достигнут максимальный объем буферов. Затем обработайте эти буферы для генерации изображений. Из них я бы либо повторил процесс, если обнаружил, что потребление памяти прилично или начнет толкать изображения на диск, прежде чем повторять этот процесс. – Seb

+0

Сделайте один поток, прочитав файл и преобразовывая кадры в изображения, в то время как другой поток просто извлекает эти изображения и записывает их на диск. Иногда объем работы, связанной с разработкой этих систем, не оправдывает короткого повышения производительности, которое они будут предоставлять. – karlphillip

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