From ff206d6d5d9150bbfeac0dfbe92825d97a7de5b2 Mon Sep 17 00:00:00 2001 From: Alec Mouri Date: Mon, 8 Jul 2024 21:41:59 +0000 Subject: Use pixel stride of 2 for Y422_I's Y plane Y422_I's layout is: Y0 Cr0 Y1 Cb0 ... ...which means that successive luminance samples are separated by 2 bytes, not 1. Bug: 351311764 Test: builds Flag: EXEMPT bugfix Change-Id: I4c24aae97ef052f6385281dd6e73f748d880decb --- libs/nativewindow/AHardwareBuffer.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'libs/nativewindow/AHardwareBuffer.cpp') diff --git a/libs/nativewindow/AHardwareBuffer.cpp b/libs/nativewindow/AHardwareBuffer.cpp index 52612870ab..dd78049b16 100644 --- a/libs/nativewindow/AHardwareBuffer.cpp +++ b/libs/nativewindow/AHardwareBuffer.cpp @@ -300,7 +300,9 @@ int AHardwareBuffer_lockPlanes(AHardwareBuffer* buffer, uint64_t usage, if (result == 0) { outPlanes->planeCount = 3; outPlanes->planes[0].data = yuvData.y; - if (format == AHARDWAREBUFFER_FORMAT_YCbCr_P010) { + // P010 is word-aligned 10-bit semiplaner, and YCbCr_422_I is a single interleaved plane + if (format == AHARDWAREBUFFER_FORMAT_YCbCr_P010 || + format == AHARDWAREBUFFER_FORMAT_YCbCr_422_I) { outPlanes->planes[0].pixelStride = 2; } else { outPlanes->planes[0].pixelStride = 1; -- cgit v1.2.3-59-g8ed1b From 86f8fe4d4b3512b4bc4d26ff9ae13f2cd003784f Mon Sep 17 00:00:00 2001 From: Alina Kalyakina Date: Thu, 18 Jul 2024 16:00:47 +0000 Subject: Reject usage == 0 in AHardwareBuffer_lock* functions Usage flags must be a combination of AHARDWAREBUFFER_USAGE_CPU_* flags Bug: 346894869 Flag: EXEMPT bugfix Change-Id: I247ea504f1e31dd242cccaa5fbba08c9ad2a3135 --- libs/nativewindow/AHardwareBuffer.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'libs/nativewindow/AHardwareBuffer.cpp') diff --git a/libs/nativewindow/AHardwareBuffer.cpp b/libs/nativewindow/AHardwareBuffer.cpp index dd78049b16..ca41346d46 100644 --- a/libs/nativewindow/AHardwareBuffer.cpp +++ b/libs/nativewindow/AHardwareBuffer.cpp @@ -196,10 +196,10 @@ int AHardwareBuffer_lockAndGetInfo(AHardwareBuffer* buffer, uint64_t usage, return BAD_VALUE; } - if (usage & ~(AHARDWAREBUFFER_USAGE_CPU_READ_MASK | - AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK)) { + if (usage & ~(AHARDWAREBUFFER_USAGE_CPU_READ_MASK | AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK) || + usage == 0) { ALOGE("Invalid usage flags passed to AHardwareBuffer_lock; only " - "AHARDWAREBUFFER_USAGE_CPU_* flags are allowed"); + "AHARDWAREBUFFER_USAGE_CPU_* flags are allowed"); return BAD_VALUE; } @@ -248,10 +248,10 @@ int AHardwareBuffer_lock(AHardwareBuffer* buffer, uint64_t usage, if (!buffer) return BAD_VALUE; - if (usage & ~(AHARDWAREBUFFER_USAGE_CPU_READ_MASK | - AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK)) { + if (usage & ~(AHARDWAREBUFFER_USAGE_CPU_READ_MASK | AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK) || + usage == 0) { ALOGE("Invalid usage flags passed to AHardwareBuffer_lock; only " - "AHARDWAREBUFFER_USAGE_CPU_* flags are allowed"); + "AHARDWAREBUFFER_USAGE_CPU_* flags are allowed"); return BAD_VALUE; } @@ -277,10 +277,10 @@ int AHardwareBuffer_lockPlanes(AHardwareBuffer* buffer, uint64_t usage, int32_t fence, const ARect* rect, AHardwareBuffer_Planes* outPlanes) { if (!buffer || !outPlanes) return BAD_VALUE; - if (usage & ~(AHARDWAREBUFFER_USAGE_CPU_READ_MASK | - AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK)) { + if (usage & ~(AHARDWAREBUFFER_USAGE_CPU_READ_MASK | AHARDWAREBUFFER_USAGE_CPU_WRITE_MASK) || + usage == 0) { ALOGE("Invalid usage flags passed to AHardwareBuffer_lock; only " - " AHARDWAREBUFFER_USAGE_CPU_* flags are allowed"); + " AHARDWAREBUFFER_USAGE_CPU_* flags are allowed"); return BAD_VALUE; } -- cgit v1.2.3-59-g8ed1b