Am 12.5.2011 09:02, schrieb Dmitriy K:
Hi all!

I use libav to decode MJPEG frames from IP-camera and to show some pixels from them on a SDL-surface. SDL takes only RGB pixels so I have to convert YUV from MJPEG frame to RGB. I have AVFrame after avcodec_decode_video() and as I see, there data[0] stands for Y component, data[1] - V component and data[2] - U component. Also, U and V components arrays are twice shorter, so that 1 U or V component stands for 2 Y components.
Then I use formulas found in wikipedia to convert YUV to RGB:

Yes it's the YUV 4:2:2 format, that is often use in JPEG.

R=Y + 1.370705*(U - 128);
G=Y - 0.698001*(V - 128) - 0.337633*(U - 128);
B=Y + 1.732446*(V - 128);

But in final picture I got colors mismatch in highly white and highly black regions. For example in pixels that should be black, I have blue or red pixels, and in white regions - only green.

So I have two questions:
1) Am I right in my vision of YUV components position in AVFrame->data arrays ?
2) Is there any way to solve problems with colors mismatch?



The formulas are right, but this is not recommend. In libav you can use the swscale libary to do this conversion. It's an easy way for this task.

Steffen

_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to