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);
