views:

351

answers:

1

Hello there! I'm writing a program, that will do some transformations with image from a webcam in real-time. As almost all other webcams, my noname gives data in YUY2 format (as written in bmiHeader.biCompression). I tried straight conversion on CPU side according to http://www.fourcc.org/yuv.php#YUY2, but it is VERY slow and wrong :).

When I connect source output pin to renderer, picture and framerate are well.

So I'm looking for a DirectShow filter, or, maybe, some codec, that will do fast conversion from YUY2 to RGB24 on video card and will give me result without rendering it on screen.

I'm using:

  • 32 bit Windows XP SP3.
  • VC++ 2005
  • Recently downloaded Windows SDK.
  • DirectX August'09.
+2  A: 

I don't have the code available at the moment. but take a look at using the GDI to do the conversion its very fast.

Basically capture the source frame, create a memory dib in the correct format (rgb24) and blit to the bitmap. the conversion occurs during the blitting and in my experience is very fast.

I use this to grab frames from a webcam and then I can drop the frames to the hard drive at the required frame rate as either jpegs or bitmaps.

DC

DeveloperChris
I marked answer accepted not because it helped me. But I found the solution. I just set AM_MEDIA_TYPE for my ISampleGrabber to rgb24, as written in MSDN.