Loading media/ndk/NdkImage.cpp +55 −0 Original line number Diff line number Diff line Loading @@ -247,6 +247,13 @@ AImage::getPlanePixelStride(int planeIdx, /*out*/int32_t* pixelStride) const { case HAL_PIXEL_FORMAT_YCrCb_420_SP: *pixelStride = (planeIdx == 0) ? 1 : 2; return AMEDIA_OK; case HAL_PIXEL_FORMAT_YCBCR_P010: if (mLockedBuffer->dataCb && mLockedBuffer->dataCr) { *pixelStride = (planeIdx == 0) ? 2 : mLockedBuffer->chromaStep; } else { *pixelStride = (planeIdx == 0) ? 2 : 4; } return AMEDIA_OK; case HAL_PIXEL_FORMAT_Y8: *pixelStride = 1; return AMEDIA_OK; Loading Loading @@ -316,6 +323,13 @@ AImage::getPlaneRowStride(int planeIdx, /*out*/int32_t* rowStride) const { *rowStride = (planeIdx == 0) ? mLockedBuffer->stride : ALIGN(mLockedBuffer->stride / 2, 16); return AMEDIA_OK; case HAL_PIXEL_FORMAT_YCBCR_P010: if (mLockedBuffer->dataCb && mLockedBuffer->dataCr) { *rowStride = (planeIdx == 0) ? mLockedBuffer->stride : mLockedBuffer->chromaStride; } else { *rowStride = mLockedBuffer->stride * 2; } return AMEDIA_OK; case HAL_PIXEL_FORMAT_RAW10: case HAL_PIXEL_FORMAT_RAW12: // RAW10 and RAW12 are used for 10-bit and 12-bit raw data, they are single plane Loading Loading @@ -473,6 +487,47 @@ AImage::getPlaneData(int planeIdx,/*out*/uint8_t** data, /*out*/int* dataLength) : (planeIdx == 1) ? cb : cr; dataSize = (planeIdx == 0) ? ySize : cSize; break; case HAL_PIXEL_FORMAT_YCBCR_P010: if (mLockedBuffer->height % 2 != 0) { ALOGE("YCBCR_P010: height (%d) should be a multiple of 2", mLockedBuffer->height); return AMEDIA_ERROR_UNKNOWN; } if (mLockedBuffer->width <= 0) { ALOGE("YCBCR_P010: width (%d) should be a > 0", mLockedBuffer->width); return AMEDIA_ERROR_UNKNOWN; } if (mLockedBuffer->height <= 0) { ALOGE("YCBCR_P010: height (%d) should be a > 0", mLockedBuffer->height); return AMEDIA_ERROR_UNKNOWN; } if (mLockedBuffer->dataCb && mLockedBuffer->dataCr) { pData = (planeIdx == 0) ? mLockedBuffer->data : (planeIdx == 1) ? mLockedBuffer->dataCb : mLockedBuffer->dataCr; // only map until last pixel if (planeIdx == 0) { cStride = mLockedBuffer->stride; dataSize = cStride * (mLockedBuffer->height - 1) + mLockedBuffer->width * 2; } else { bytesPerPixel = mLockedBuffer->chromaStep; cStride = mLockedBuffer->chromaStride; dataSize = cStride * (mLockedBuffer->height / 2 - 1) + bytesPerPixel * (mLockedBuffer->width / 2); } break; } cStride = mLockedBuffer->stride * 2; ySize = cStride * mLockedBuffer->height; cSize = ySize / 2; cb = mLockedBuffer->data + ySize; cr = cb + 2; pData = (planeIdx == 0) ? mLockedBuffer->data : (planeIdx == 1) ? cb : cr; dataSize = (planeIdx == 0) ? ySize : cSize; break; case HAL_PIXEL_FORMAT_Y8: // Single plane, 8bpp. Loading media/ndk/NdkImageReader.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ AImageReader::isSupportedFormatAndUsage(int32_t format, uint64_t usage) { case AIMAGE_FORMAT_HEIC: case AIMAGE_FORMAT_DEPTH_JPEG: case AIMAGE_FORMAT_RAW_DEPTH10: case HAL_PIXEL_FORMAT_YCBCR_P010: return true; case AIMAGE_FORMAT_PRIVATE: // For private format, cpu usage is prohibited. Loading @@ -86,6 +87,7 @@ int AImageReader::getNumPlanesForFormat(int32_t format) { switch (format) { case AIMAGE_FORMAT_YUV_420_888: case HAL_PIXEL_FORMAT_YCBCR_P010: return 3; case AIMAGE_FORMAT_RGBA_8888: case AIMAGE_FORMAT_RGBX_8888: Loading Loading
media/ndk/NdkImage.cpp +55 −0 Original line number Diff line number Diff line Loading @@ -247,6 +247,13 @@ AImage::getPlanePixelStride(int planeIdx, /*out*/int32_t* pixelStride) const { case HAL_PIXEL_FORMAT_YCrCb_420_SP: *pixelStride = (planeIdx == 0) ? 1 : 2; return AMEDIA_OK; case HAL_PIXEL_FORMAT_YCBCR_P010: if (mLockedBuffer->dataCb && mLockedBuffer->dataCr) { *pixelStride = (planeIdx == 0) ? 2 : mLockedBuffer->chromaStep; } else { *pixelStride = (planeIdx == 0) ? 2 : 4; } return AMEDIA_OK; case HAL_PIXEL_FORMAT_Y8: *pixelStride = 1; return AMEDIA_OK; Loading Loading @@ -316,6 +323,13 @@ AImage::getPlaneRowStride(int planeIdx, /*out*/int32_t* rowStride) const { *rowStride = (planeIdx == 0) ? mLockedBuffer->stride : ALIGN(mLockedBuffer->stride / 2, 16); return AMEDIA_OK; case HAL_PIXEL_FORMAT_YCBCR_P010: if (mLockedBuffer->dataCb && mLockedBuffer->dataCr) { *rowStride = (planeIdx == 0) ? mLockedBuffer->stride : mLockedBuffer->chromaStride; } else { *rowStride = mLockedBuffer->stride * 2; } return AMEDIA_OK; case HAL_PIXEL_FORMAT_RAW10: case HAL_PIXEL_FORMAT_RAW12: // RAW10 and RAW12 are used for 10-bit and 12-bit raw data, they are single plane Loading Loading @@ -473,6 +487,47 @@ AImage::getPlaneData(int planeIdx,/*out*/uint8_t** data, /*out*/int* dataLength) : (planeIdx == 1) ? cb : cr; dataSize = (planeIdx == 0) ? ySize : cSize; break; case HAL_PIXEL_FORMAT_YCBCR_P010: if (mLockedBuffer->height % 2 != 0) { ALOGE("YCBCR_P010: height (%d) should be a multiple of 2", mLockedBuffer->height); return AMEDIA_ERROR_UNKNOWN; } if (mLockedBuffer->width <= 0) { ALOGE("YCBCR_P010: width (%d) should be a > 0", mLockedBuffer->width); return AMEDIA_ERROR_UNKNOWN; } if (mLockedBuffer->height <= 0) { ALOGE("YCBCR_P010: height (%d) should be a > 0", mLockedBuffer->height); return AMEDIA_ERROR_UNKNOWN; } if (mLockedBuffer->dataCb && mLockedBuffer->dataCr) { pData = (planeIdx == 0) ? mLockedBuffer->data : (planeIdx == 1) ? mLockedBuffer->dataCb : mLockedBuffer->dataCr; // only map until last pixel if (planeIdx == 0) { cStride = mLockedBuffer->stride; dataSize = cStride * (mLockedBuffer->height - 1) + mLockedBuffer->width * 2; } else { bytesPerPixel = mLockedBuffer->chromaStep; cStride = mLockedBuffer->chromaStride; dataSize = cStride * (mLockedBuffer->height / 2 - 1) + bytesPerPixel * (mLockedBuffer->width / 2); } break; } cStride = mLockedBuffer->stride * 2; ySize = cStride * mLockedBuffer->height; cSize = ySize / 2; cb = mLockedBuffer->data + ySize; cr = cb + 2; pData = (planeIdx == 0) ? mLockedBuffer->data : (planeIdx == 1) ? cb : cr; dataSize = (planeIdx == 0) ? ySize : cSize; break; case HAL_PIXEL_FORMAT_Y8: // Single plane, 8bpp. Loading
media/ndk/NdkImageReader.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ AImageReader::isSupportedFormatAndUsage(int32_t format, uint64_t usage) { case AIMAGE_FORMAT_HEIC: case AIMAGE_FORMAT_DEPTH_JPEG: case AIMAGE_FORMAT_RAW_DEPTH10: case HAL_PIXEL_FORMAT_YCBCR_P010: return true; case AIMAGE_FORMAT_PRIVATE: // For private format, cpu usage is prohibited. Loading @@ -86,6 +87,7 @@ int AImageReader::getNumPlanesForFormat(int32_t format) { switch (format) { case AIMAGE_FORMAT_YUV_420_888: case HAL_PIXEL_FORMAT_YCBCR_P010: return 3; case AIMAGE_FORMAT_RGBA_8888: case AIMAGE_FORMAT_RGBX_8888: Loading