Skip to content

Commit e377a30

Browse files
committed
Fix stride issue in imageAnalyzer
1 parent 949dd77 commit e377a30

File tree

1 file changed

+35
-3
lines changed

1 file changed

+35
-3
lines changed

app/src/main/java/ai/deepar/deepar_example/MainActivity.java

+35-3
Original file line numberDiff line numberDiff line change
@@ -418,10 +418,42 @@ public void analyze(@NonNull ImageProxy image) {
418418

419419
byte[] byteData = new byte[ySize + uSize + vSize];
420420

421+
int width = image.getWidth();
422+
int yStride = image.getPlanes()[0].getRowStride();
423+
int uStride = image.getPlanes()[1].getRowStride();
424+
int vStride = image.getPlanes()[2].getRowStride();
425+
int outputOffset = 0;
426+
if (width == yStride) {
427+
yBuffer.get(byteData, outputOffset, ySize);
428+
outputOffset += ySize;
429+
} else {
430+
for (int inputOffset = 0; inputOffset < ySize; inputOffset += yStride) {
431+
yBuffer.position(inputOffset);
432+
yBuffer.get(byteData, outputOffset, Math.min(yBuffer.remaining(), width));
433+
outputOffset += width;
434+
}
435+
}
421436
//U and V are swapped
422-
yBuffer.get(byteData, 0, ySize);
423-
vBuffer.get(byteData, ySize, vSize);
424-
uBuffer.get(byteData, ySize + vSize, uSize);
437+
if (width == vStride) {
438+
vBuffer.get(byteData, outputOffset, vSize);
439+
outputOffset += vSize;
440+
} else {
441+
for (int inputOffset = 0; inputOffset < vSize; inputOffset += vStride) {
442+
vBuffer.position(inputOffset);
443+
vBuffer.get(byteData, outputOffset, Math.min(vBuffer.remaining(), width));
444+
outputOffset += width;
445+
}
446+
}
447+
if (width == uStride) {
448+
uBuffer.get(byteData, outputOffset, uSize);
449+
outputOffset += uSize;
450+
} else {
451+
for (int inputOffset = 0; inputOffset < uSize; inputOffset += uStride) {
452+
uBuffer.position(inputOffset);
453+
uBuffer.get(byteData, outputOffset, Math.min(uBuffer.remaining(), width));
454+
outputOffset += width;
455+
}
456+
}
425457

426458
buffers[currentBuffer].put(byteData);
427459
buffers[currentBuffer].position(0);

0 commit comments

Comments
 (0)