[Libav-user] Colour space conversion

Rafael Lúcio rafael at inova.in
Wed May 27 14:42:11 CEST 2015


If you convert any RGB format to YUV420 you will lose data. If you want to
just change the format to YCbCr without losing data.. you can try YUV444
format... its 3 bytes per pixel, just like RGB, so you will not lose any
data.

2015-05-27 9:25 GMT-03:00 Jasleen Kaur <Jasleen at beesys.com>:

>  We have ARGB buffer to be compressed and then decoded also.
> But for encoding the data the input as ARGB wasnt accepted.
> The data was converted to YUV and then compressed, and on the receive side
> decoded and then converted back to ARGB.
>
>  *The problem is that, While this conversion happens colours change.*
>
>  Following is the code used to convert from ARGB to YUV and YUV to ARGB
> respectively.
>
>
>  void *ConvertToYUV*(int iWidth, int iHeight, BYTE* pARGBBuff)
> {
> #define RNDTO2(X) ( ( (X) & 0xFFFFFFFE )
> #define RNDTO32(X) ( ( (X) % 32 ) ? ( ( (X) + 32 ) & 0xFFFFFFE0 ) : (X) )
>
>  //int ystride  = RNDTO32 ( iWidth );
>     //int uvstride = RNDTO32 ( iWidth / 2 );
> int ystride  = iWidth;
>     int uvstride = iWidth / 2;
>     int ysize    = ystride * iHeight;
>     int vusize   = uvstride * ( iHeight / 2 );
>     int size     = ysize + ( 2 * vusize );
>
>  if(m_sws_ctx == NULL)
> {
> //SwsFilter
> m_sws_ctx = sws_getContext(iWidth,
> iHeight,
> AV_PIX_FMT_BGRA,
> iWidth, iHeight,
> AV_PIX_FMT_YUV420P,
> SWS_FAST_BILINEAR, 0, 0, 0);
>
>  m_picture_buf = (uint8_t*)malloc(size);
> }
>      //uint8_t *plane[] = { m_picture_buf, m_picture_buf + ysize,
> m_picture_buf + ysize + vusize};
> uint8_t *plane[] = { m_picture_buf, m_picture_buf + ysize + vusize,
> m_picture_buf + ysize};
>     int stride[] = { ystride, uvstride, uvstride};
>
>  uint8_t *inData[1] = { pARGBBuff };
>     int inLinesize[1] = { 4 * iWidth};
>
>      sws_scale(m_sws_ctx, inData, inLinesize, 0, iHeight, plane, stride);
>  }
>
>  void *ConvertToARGB*(int iWidth, int iHeight)
> {
> #define RNDTO2(X) ( ( (X) & 0xFFFFFFFE )
> #define RNDTO32(X) ( ( (X) % 32 ) ? ( ( (X) + 32 ) & 0xFFFFFFE0 ) : (X) )
>
>  int iSize = iWidth * iHeight * 4;
> int ystride  = RNDTO32 ( iWidth );
>     int uvstride = RNDTO32 ( iWidth / 2 );
>     int ysize    = ystride * iHeight;
>     int vusize   = uvstride * ( iHeight / 2 );
>
>
>  if(m_sws_ctx == NULL)
> {
> //SwsFilter
> m_sws_ctx = sws_getContext(iWidth,
> iHeight,
> AV_PIX_FMT_YUV420P,
> iWidth, iHeight,
> AV_PIX_FMT_BGRA,
> SWS_FAST_BILINEAR, 0, 0, 0);
>
>  m_picture_buf = (uint8_t*)malloc(iSize);
> }
>  // src
> int srcstride[] = {ystride, uvstride, uvstride};
>
>  // dest
> uint8_t *destplane[] = {m_picture_buf};
>     int stride[] = { iWidth * 4};
>      int iHeightReturned = sws_scale(m_sws_ctx, m_picture->data,
> srcstride, 0, iHeight, destplane, stride);
>
> *  m_picture is the output of avcodec_decode_video2.*
> }
>
>
>  What correction needs to be done in the code, so that colours remain
> intact.
>
>  Thanks and regards
> Jasleen
>
> _______________________________________________
> Libav-user mailing list
> Libav-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/libav-user
>
>


-- 
 ​ Rafael Lúcio
INOVA COMUNICAÇÕES INTELIGENTES
+55 61 9996 5587
+55 61 3574- 7100
Fax +55 61 3574 7024
http://www.inova.in/


Antes de imprimir, pense em sua responsabilidade com o MEIO AMBIENTE

---- BEGIN SSH2 PUBLIC KEY ----
AAAAB3NzaC1yc2EAAAABJQAAAQEAmEyriiqf7mtO/4kLHp2pbbJ1ScVD73z8RqEK
evHWx1tPEIv749EnghOFVvg7xYdyE0sfk6UT8EAVznsOmzU96F+ENdsRGFZhDIk6
kjL9ZabmLMzIlRqh6naB6aJl7/sut7SGwxV1CIr0DPWXtTIr+pSkBzKfPmR6dZ4o
OIcPsSY3hFaq7zTPLWm/IOnZO/9NWvI7d+v0ULfj3pslHeVkUlaqD8D/sm/A+qar
DXd/3eVaPLE8FyVGqLhLgoqoDRdqL6KCX9kdiigStuXJ6ZxjXeqWUzHbSiHn0YMy
LHtUmcYPnYuEx3dEhPqMLSr/m+RSMHUQBW6umlhyejN2AfeB/w==
---- END SSH2 PUBLIC KEY ----
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://ffmpeg.org/pipermail/libav-user/attachments/20150527/d44d5756/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: logo-inova-pequena-iso.jpg
Type: image/jpeg
Size: 2994 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/libav-user/attachments/20150527/d44d5756/attachment.jpg>


More information about the Libav-user mailing list