Как получить видеокадр с аппаратного оверлея (не из моего приложения)? - PullRequest
0 голосов
/ 17 ноября 2011

Я искал способ получить кадр из видео, которое в настоящее время находится в аппаратном оверлее, и я не нашел ничего надежного. Все, что я нахожу, это либо для захвата кадров из видео, которое вы воспроизводите (в вашем приложении), либо для создания фильтра, для которого я не могу найти хороший пример того, как бы я на самом деле брал кадры в моем приложении (или может ли приложение быть фильтр в памяти, который не нужно «устанавливать» и выбирать в плеере?).

Итак, мой вопрос: как мне поступить? Я знаю, что это возможно с фильтром, я видел, как это было сделано, я просто не видел, как это делается. Есть ли где-нибудь хороший пример того, как захватить кадры в фильтре и отправить их в мое приложение? Или есть такой способ, как подключиться к какому-нибудь вызову процедуры и как-то получить кадр?

Я видел перехват для DirectX, чтобы получить всю информацию о DirectX, но аппаратные оверлеи не являются DirectX, не так ли? Или я могу просто подключиться к DirectX и взять оттуда передний буфер или что-то еще?

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

Если это уместно, я бы предпочел решение на C ++ (приложение, которое у меня есть, на C ++ и в настоящее время использует «обычный» способ получения снимков экрана с экрана, который, конечно, оставляет черные прямоугольники для аппаратного наложения).

Ответы [ 2 ]

0 голосов
/ 17 ноября 2011

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

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

0 голосов
/ 17 ноября 2011

Я знаю, как захватывать кадры с помощью directshow. Первый - с использованием фильтра SampleGrabber, в интернете есть много примеров. Во-вторых, с использованием вашего пользовательского видеореендера, в этом случае вам нужно реализовать свой собственный фильтр, вы можете использовать проект baceclasses из платформы sdk, чтобы извлечь из cbasevideorenderer и реализовать ваш метод рендеринга.

...