<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" id="owaParaStyle"></style>
</head>
<body fpstyle="1" ocsi="0">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">
<div>We have ARGB buffer to be compressed and then decoded also.</div>
<div>But for encoding the data the input as ARGB wasnt accepted.</div>
<div>The data was converted to YUV and then compressed, and on the receive side decoded and then converted back to ARGB.</div>
<div><br>
</div>
<div><b>The problem is that, While this conversion happens colours change.</b></div>
<div><br>
</div>
<div>Following is the code used to convert from ARGB to YUV and YUV to ARGB respectively.</div>
<div><br>
</div>
<div><br>
</div>
<div>
<div>void <b>ConvertToYUV</b>(int iWidth, int iHeight, BYTE* pARGBBuff)</div>
<div>{<span class="Apple-tab-span" style="white-space:pre"> </span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>#define RNDTO2(X) ( ( (X) & 0xFFFFFFFE )</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>#define RNDTO32(X) ( ( (X) % 32 ) ? ( ( (X) + 32 ) & 0xFFFFFFE0 ) : (X) )</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>//int ystride  = RNDTO32 ( iWidth );</div>
<div>    //int uvstride = RNDTO32 ( iWidth / 2 );</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>int ystride  = iWidth;</div>
<div>    int uvstride = iWidth / 2;</div>
<div>    int ysize    = ystride * iHeight;</div>
<div>    int vusize   = uvstride * ( iHeight / 2 );</div>
<div>    int size     = ysize + ( 2 * vusize );</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>if(m_sws_ctx == NULL)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>//SwsFilter</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>m_sws_ctx = sws_getContext(iWidth, </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>iHeight,</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>AV_PIX_FMT_BGRA, </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>iWidth, iHeight,</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>AV_PIX_FMT_YUV420P, </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>SWS_FAST_BILINEAR, 0, 0, 0);</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>m_picture_buf = (uint8_t*)malloc(size);</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}<span class="Apple-tab-span" style="white-space:pre">
</span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div>    //uint8_t *plane[] = { m_picture_buf, m_picture_buf + ysize, m_picture_buf + ysize + vusize};</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>uint8_t *plane[] = { m_picture_buf, m_picture_buf + ysize + vusize, m_picture_buf + ysize};</div>
<div>    int stride[] = { ystride, uvstride, uvstride};</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>uint8_t *inData[1] = { pARGBBuff };</div>
<div>    int inLinesize[1] = { 4 * iWidth}; </div>
<div><br>
</div>
<div>    sws_scale(m_sws_ctx, inData, inLinesize, 0, iHeight, plane, stride);<span class="Apple-tab-span" style="white-space:pre">
</span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div>}</div>
</div>
<br>
<div>
<div>
<div>void <b>ConvertToARGB</b>(int iWidth, int iHeight)</div>
<div>{<span class="Apple-tab-span" style="white-space:pre"> </span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>#define RNDTO2(X) ( ( (X) & 0xFFFFFFFE )</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>#define RNDTO32(X) ( ( (X) % 32 ) ? ( ( (X) + 32 ) & 0xFFFFFFE0 ) : (X) )</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>int iSize = iWidth * iHeight * 4;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>int ystride  = RNDTO32 ( iWidth );</div>
<div>    int uvstride = RNDTO32 ( iWidth / 2 );<span class="Apple-tab-span" style="white-space:pre">
</span></div>
<div>    int ysize    = ystride * iHeight;</div>
<div>    int vusize   = uvstride * ( iHeight / 2 );</div>
<div> </div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>if(m_sws_ctx == NULL)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>//SwsFilter</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>m_sws_ctx = sws_getContext(iWidth, </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>iHeight,</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>AV_PIX_FMT_YUV420P, </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>iWidth, iHeight,</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>AV_PIX_FMT_BGRA, </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>SWS_FAST_BILINEAR, 0, 0, 0);</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>m_picture_buf = (uint8_t*)malloc(iSize);</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}<span class="Apple-tab-span" style="white-space:pre">
</span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>// src<span class="Apple-tab-span" style="white-space:pre">
</span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>int srcstride[] = {ystride, uvstride, uvstride};   </div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>// dest</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>uint8_t *destplane[] = {m_picture_buf};</div>
<div>    int stride[] = { iWidth * 4};<span class="Apple-tab-span" style="white-space:pre">
</span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div>    int iHeightReturned = sws_scale(m_sws_ctx, m_picture->data, srcstride, 0, iHeight, destplane, stride);<span class="Apple-tab-span" style="white-space:pre">
</span><span class="Apple-tab-span" style="font-size: 10pt; white-space: pre;"></span></div>
<div>  </div>
<div><b>  <span style="font-size: 13.3333330154419px;">m_picture is the output of </span><span style="font-size: 10pt;">avcodec_decode_video2.</span></b><span class="Apple-tab-span" style="font-size: 10pt; white-space: pre;">
</span></div>
<div>}</div>
<div><br>
</div>
<div><br>
</div>
<div>What correction needs to be done in the code, so that colours remain intact.</div>
<div><br>
</div>
<div>Thanks and regards</div>
<div>Jasleen</div>
</div>
</div>
</div>
</body>
</html>