Merge "camera2: update original ByteBuffer using bulk get on 'viewed' ByteBuffer for correct position" into tm-d1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
138fc75ad4
@@ -26,6 +26,10 @@ import static android.hardware.camera2.marshal.MarshalHelpers.getPrimitiveTypeCl
|
|||||||
|
|
||||||
import java.lang.reflect.Array;
|
import java.lang.reflect.Array;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.DoubleBuffer;
|
||||||
|
import java.nio.FloatBuffer;
|
||||||
|
import java.nio.IntBuffer;
|
||||||
|
import java.nio.LongBuffer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -51,28 +55,36 @@ public class MarshalQueryableArray<T> implements MarshalQueryable<T> {
|
|||||||
return new PrimitiveArrayFiller() {
|
return new PrimitiveArrayFiller() {
|
||||||
@Override
|
@Override
|
||||||
public void fillArray(Object arr, int size, ByteBuffer buffer) {
|
public void fillArray(Object arr, int size, ByteBuffer buffer) {
|
||||||
buffer.asIntBuffer().get(int[].class.cast(arr), 0, size);
|
IntBuffer ib = buffer.asIntBuffer().get(int[].class.cast(arr), 0, size);
|
||||||
|
// Update buffer position since the IntBuffer has independent position.
|
||||||
|
buffer.position(buffer.position() + ib.position() * Integer.BYTES);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} else if (componentType == float.class) {
|
} else if (componentType == float.class) {
|
||||||
return new PrimitiveArrayFiller() {
|
return new PrimitiveArrayFiller() {
|
||||||
@Override
|
@Override
|
||||||
public void fillArray(Object arr, int size, ByteBuffer buffer) {
|
public void fillArray(Object arr, int size, ByteBuffer buffer) {
|
||||||
buffer.asFloatBuffer().get(float[].class.cast(arr), 0, size);
|
FloatBuffer fb =
|
||||||
|
buffer.asFloatBuffer().get(float[].class.cast(arr), 0, size);
|
||||||
|
buffer.position(buffer.position() + fb.position() * Float.BYTES);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} else if (componentType == long.class) {
|
} else if (componentType == long.class) {
|
||||||
return new PrimitiveArrayFiller() {
|
return new PrimitiveArrayFiller() {
|
||||||
@Override
|
@Override
|
||||||
public void fillArray(Object arr, int size, ByteBuffer buffer) {
|
public void fillArray(Object arr, int size, ByteBuffer buffer) {
|
||||||
buffer.asLongBuffer().get(long[].class.cast(arr), 0, size);
|
LongBuffer lb =
|
||||||
|
buffer.asLongBuffer().get(long[].class.cast(arr), 0, size);
|
||||||
|
buffer.position(buffer.position() + lb.position() * Long.BYTES);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} else if (componentType == double.class) {
|
} else if (componentType == double.class) {
|
||||||
return new PrimitiveArrayFiller() {
|
return new PrimitiveArrayFiller() {
|
||||||
@Override
|
@Override
|
||||||
public void fillArray(Object arr, int size, ByteBuffer buffer) {
|
public void fillArray(Object arr, int size, ByteBuffer buffer) {
|
||||||
buffer.asDoubleBuffer().get(double[].class.cast(arr), 0, size);
|
DoubleBuffer db =
|
||||||
|
buffer.asDoubleBuffer().get(double[].class.cast(arr), 0, size);
|
||||||
|
buffer.position(buffer.position() + db.position() * Double.BYTES);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} else if (componentType == byte.class) {
|
} else if (componentType == byte.class) {
|
||||||
|
|||||||
Reference in New Issue
Block a user