загрузка видеофайлов в буфер в C ++ - PullRequest
1 голос
/ 04 мая 2011

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

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

Ответы [ 2 ]

2 голосов
/ 04 мая 2011

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

1 голос
/ 04 мая 2011

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

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

...