+ public void loadPixel(final int step, final int offsetX, final int offsetY,
+ final int x, final int y, final byte[] pixels,
+ final int averageDecodedY, final int averageDecodedU,
+ final int averageDecodedV) throws IOException {
+
+ final int index = (y * width) + x;
+
+ final int halfStep = step / 2;
+
+ int parentIndex;
+ if (offsetX > 0) {
+ if (offsetY > 0) {
+ // diagonal approach
+ parentIndex = ((y - halfStep) * width) + (x - halfStep);
+ } else {
+ // take left pixel
+ parentIndex = (y * width) + (x - halfStep);
+ }
+ } else {
+ // take upper pixel
+ parentIndex = ((y - halfStep) * width) + x;
+ }
+
+ final int colorBufferIndex = index * 3;
+
+ final Color color = new Color();
+ color.y = loadChannel(decodedYRangeMap, decodedYMap,
+ approximator.yTable, averageDecodedY, index, parentIndex);
+ color.u = loadChannel(decodedURangeMap, decodedUMap,
+ approximator.uTable, averageDecodedU, index, parentIndex);
+ color.v = loadChannel(decodedVRangeMap, decodedVMap,
+ approximator.vTable, averageDecodedV, index, parentIndex);
+
+ color.YUV2RGB();
+
+ pixels[colorBufferIndex] = (byte) color.r;
+ pixels[colorBufferIndex + 1] = (byte) color.g;
+ pixels[colorBufferIndex + 2] = (byte) color.b;
+
+ }
+