Рисование видео с текстом сверху - PullRequest
6 голосов
/ 16 февраля 2010

Я работаю над приложением, и у меня есть проблема, для которой я просто не могу найти решение. Приложение написано на vc ++. Что мне нужно сделать, это отобразить YUV видео-канал с текстом поверх него.

Сейчас он работает правильно, рисуя текст в методе OnPaint с использованием GDI и видео в оверлее DirectDraw. Мне нужно избавиться от наложения, потому что это вызывает много проблем. Он не будет работать на некоторых видеокартах, Vista, 7 и т. Д.

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

Есть ли способ нарисовать текст непосредственно в буфер DirectDraw или буфер памяти или что-то еще, а затем переместить его в задний буфер? Должен ли я смотреть на другой метод все вместе? Двумя важными ОС являются XP и 7. Если у кого-то есть идеи, просто дайте мне знать, и я их опробую. Спасибо.

Ответы [ 2 ]

2 голосов
/ 16 февраля 2010

Попробуйте заглянуть в DirectShow и образец Ticker на microsoft.com:

.

Пример тикера DirectShow

В этом примере для смешивания видео и текста используется рендерер микширования видео. Он использует интерфейс IVMRMixerBitmap9 для смешивания текста в нижней части видеоокна.

DirectShow предназначен для построения графиков фильтров для воспроизведения аудио- или видеопотоков с добавлением различных фильтров для различных эффектов и манипулирования образцами видео и аудио.

1 голос
/ 16 февраля 2010

Вместо использования Video Mixing Renderer DirectShow, вы также можете использовать интерфейс ISampleGrabber . Преимущество состоит в том, что это фильтр, который можно использовать и с другими средствами визуализации, например, когда видео не отображается на экране, а транслируется по сети или дампируется в файл.

...