2010-02-16 24 views
6

Pracuję nad aplikacją i mam problem, którego nie potrafię znaleźć. Aplikacja napisana jest w języku vC++. Muszę wyświetlić plik wideo YUV z tekstem na górze.Rysowanie wideo z tekstem na górze

Teraz działa poprawnie, rysując tekst w metodzie OnPaint za pomocą GDI i wideo na nakładce DirectDraw. Muszę pozbyć się nakładki, ponieważ powoduje ona wiele problemów. Nie będzie działać na niektórych kartach wideo, Vista, 7 itd.

Nie mogę znaleźć sposobu, aby wykonać to samo w bardziej kompatybilny sposób. Mogę narysować wideo za pomocą DirectDraw z tylnym buforem i skopiować go do głównego bufora. Problem polega na tym, że tekst rysowany w GDI miga ze względu na ilość razy odświeżenie wideo. Naprawdę chciałbym zachować kod, aby narysować tekst w stanie nienaruszonym, jeśli to możliwe, ponieważ działa dobrze.

Czy istnieje sposób narysowania tekstu bezpośrednio do bufora DirectDraw lub bufora pamięci lub czegoś podobnego, a następnie do blendowania go z powrotem? Czy powinienem patrzeć na inną metodę razem? Dwa ważne systemy operacyjne to XP i 7. Jeśli ktoś ma jakieś pomysły, daj mi znać, a ja je przetestuję. Dzięki.

+0

+1 za pytanie – gyurisc

Odpowiedz

2

Spróbuj spojrzeć na DirectShow i próbki Ticker na microsoft.com:

DirectShow Ticker sample

Próbka ta używa Video Mixing Renderer na połączenie wideo i tekstu. Używa interfejsu IVMRMixerBitmap9 do mieszania tekstu z dolną częścią okna wideo.

Program DirectShow służy do tworzenia wykresów filtrów do odtwarzania strumieni audio lub wideo, dodając różne filtry dla różnych efektów i manipulacji próbkami wideo i audio.

1

Zamiast korzystać z Video Renderer mieszania DirectShow, można również użyć interfejsu ISampleGrabber. Zaletą jest to, że jest to filtr, który może być używany również z innymi rendererami, na przykład, gdy nie wyświetla się wideo na ekranie, ale przesyła je strumieniowo przez sieć lub przesyła do pliku.

+1

Wadą tego jest jednak to, że sam się mieszasz w oprogramowaniu i wyłączasz sprzętowe dekodowanie lub usuwanie przeplotu. Jeśli używasz mikroskopu bitmapowego miksera vmr, możesz użyć mieszania alfa wspomaganego sprzętem. –

+0

+1 dla ISampleGrabber, ponieważ używam go intensywnie do malowania w czasie rzeczywistym wideo w .NET z GDI +. nawet na powierzchniach YUY2 :) –