More fixes in sycc422_to_rgb and sycc420_to_rgb when image width is odd

This patch is supplementary to issue 418881

R=tsepez@chromium.org

Review URL: https://codereview.chromium.org/645793007
diff --git a/core/src/fxcodec/codec/fx_codec_jpx_opj.cpp b/core/src/fxcodec/codec/fx_codec_jpx_opj.cpp
index 1180bfc..8dcecf9 100644
--- a/core/src/fxcodec/codec/fx_codec_jpx_opj.cpp
+++ b/core/src/fxcodec/codec/fx_codec_jpx_opj.cpp
@@ -166,13 +166,19 @@
     d0 = r = FX_Alloc(int, (size_t)max);
     d1 = g = FX_Alloc(int, (size_t)max);
     d2 = b = FX_Alloc(int, (size_t)max);
-    for(i = 0; i < maxh; ++i) {
-        for (j = 0; j < maxw; ++j, ++y, ++r, ++g, ++b) {
-            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-            if (j % 2){
-                ++cb;
-                ++cr;
-            }
+    for(i = 0; i < maxh; ++i)
+    {
+        for (j = 0; (OPJ_UINT32)j < (maxw & ~(OPJ_UINT32)1); j += 2)

+        {

+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);

+            ++y; ++r; ++g; ++b;

+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);

+            ++y; ++r; ++g; ++b; ++cb; ++cr;

+        }

+        if (j < maxw)

+        {

+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);

+            ++y; ++r; ++g; ++b; ++cb; ++cr;

         }
     }
     FX_Free(img->comps[0].data);
@@ -212,40 +218,47 @@
     d0 = r = FX_Alloc(int, (size_t)max);
     d1 = g = FX_Alloc(int, (size_t)max);
     d2 = b = FX_Alloc(int, (size_t)max);
-    for(i = 0; i < maxh; i += 2) {
-        ny = y + maxw;
-        nr = r + maxw;
-        ng = g + maxw;
-        nb = b + maxw;
-        for(j = 0; j < maxw;  j += 2) {
-            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-            ++y;
-            ++r;
-            ++g;
-            ++b;
-            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);
-            ++y;
-            ++r;
-            ++g;
-            ++b;
-            sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
-            ++ny;
-            ++nr;
-            ++ng;
-            ++nb;
-            sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);
-            ++ny;
-            ++nr;
-            ++ng;
-            ++nb;
-            ++cb;
-            ++cr;
-        }
-        y += maxw;
-        r += maxw;
-        g += maxw;
-        b += maxw;
-    }
+    for (i = 0; (OPJ_UINT32)i < (maxh & ~(OPJ_UINT32)1); i += 2)

+    {

+        ny = y + maxw;

+        nr = r + maxw;

+        ng = g + maxw;

+        nb = b + maxw;

+        for (j = 0; (OPJ_UINT32)j < (maxw & ~(OPJ_UINT32)1); j += 2)

+        {

+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);

+            ++y; ++r; ++g; ++b;

+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);

+            ++y; ++r; ++g; ++b;

+            sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);

+            ++ny; ++nr; ++ng; ++nb;

+            sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);

+            ++ny; ++nr; ++ng; ++nb; ++cb; ++cr;

+        }

+        if (j < maxw)

+        {

+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);

+            ++y; ++r; ++g; ++b;

+            sycc_to_rgb(offset, upb, *ny, *cb, *cr, nr, ng, nb);

+            ++ny; ++nr; ++ng; ++nb; ++cb; ++cr;

+        }

+        y += maxw; r += maxw; g += maxw; b += maxw;

+    }

+    if (i < maxh)

+    {

+        for (j = 0; (OPJ_UINT32)j < (maxw & ~(OPJ_UINT32)1); j += 2)

+        {

+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);

+            ++y; ++r; ++g; ++b;

+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);

+            ++y; ++r; ++g; ++b; ++cb; ++cr;

+        }

+        if (j < maxw)

+        {

+            sycc_to_rgb(offset, upb, *y, *cb, *cr, r, g, b);

+        }

+    }

+
     FX_Free(img->comps[0].data);
     img->comps[0].data = d0;
     FX_Free(img->comps[1].data);