Я использую DirectShow в своем приложении для захвата видео с веб-камер. У меня есть проблемы при использовании камер для предварительного просмотра и захвата видео 1080P. Например: камера HD Pro Webcam C910 Logitech. Предварительный просмотр видео 1080P был очень рывким, и четкости HD не наблюдалось. Я мог видеть, что имя перечислимого устройства было «USB Video Device»Предварительный просмотр для видео 1080P с использованием DirectShow
Сегодня мы установили программное обеспечение веб-камеры Logitech на этих компьютерах XP. В этом приложении мы могли видеть видео 1080P без каких-либо подергиваний. Также мы записали видео 1080P в приложении Logitech и увидели их в высоком качестве.
Но когда я проверить мое приложение,
Я могу видеть, что имя перечисляемого устройство было изменено на «Logitech Pro Webcam C910» вместо «USB Video Device», как и в предыдущем случае.
ЦП съеден мое приложение на 20%, но процесс «СИСТЕМА» съедает 60% + и общий процессор вращается около 100%
Несмотря на то, что качество видео было значительно улучшены, рывки все еще существуют, возможно, из-за 100% -ного процессора.
Когда я закрыл свое приложение, высокий процессор utlizaton с помощью процесса «Система» уходит.
Что касается моего заявления - Он использует ICaptureGraphBuilder2 :: RenderStream создать Preview и Capture потоков.
В Capture Stream я подключаю фильтр камеры к визуализатору NULL с захватом образца в качестве промежуточного фильтра.
В предпросмотра потоке, у меня есть
g_pBuild->RenderStream(&PIN_CATEGORY_PREVIEW,&MEDIATYPE_Video,cam,NULL,NULL);
изображение отображается на окна, как указано с помощью интерфейса IVideoWindow. Я использую следующий
g_vidWin->put_Owner((OAHWND)(HWND)hWnd);
g_vidWin->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS);
g_vidWin->put_MessageDrain((OAHWND)hWnd);
Я попытался установить частоту кадров для различных значений (AvgTimePerFrame = 500000 (20 кадров в секунду) и 666667 (15 кадров в секунду) и т.д.
Но все испытания, все еще дают тот же результат. Ясность стала больше, но некоторые рывки все еще остаются, а процессор почти 100% из-за 60% -ной утилизации «Системой». Когда я закрываю свое видео приложение, использование «Системой» возвращается к 1-2%.
Любая помощь по этому поводу очень приветствуется.
Заранее спасибо,
Возможно, дополнительная информация поможет. Каково ваше потребление процессора системой SYSTEM при запуске приложения Logitech? Возможно, это всего лишь драйвер устройства, использующий ваши циклы. Я не уверен, что изменение AvgTimePerFrame повлияет на фактическую частоту кадров камеры. Где вы это устанавливаете? У меня нет C910, но у меня есть пара других камер Logitech, и их частота кадров, похоже, зависит от разрешения и настроек экспозиции. –
Когда приложение Logitech запускается, SYSTEM не использует CPU более 2% У меня создалось впечатление, что изменение AvgTimePerFrame изменит частоту кадров. Не могли бы вы рассказать мне точную процедуру с точки зрения настроек/методов интерфейса DirectShow, с помощью которых можно установить частоту кадров? –
С помощью моих Logitechs единственный способ повлиять на частоту кадров - изменить настройки разрешения и экспозиции. Камера принимает собственное решение о том, какой курс он будет использовать. Я не уверен, но я думаю, что средняя скорость в структуре VIDEOINFO - это то, что ваш исходный фильтр устанавливает, чтобы советовать другим фильтрам о скорости, которую они должны ожидать. Он не изменяет собственную скорость исходного фильтра; это помогает другим фильтрам знать, чего ожидать. Ваша камера собирается откачивать образцы по любой желаемой цене. См. Http://msdn.microsoft.com/en-us/library/windows/desktop/dd407325(v=vs.85).aspx –