Loading graphics/common/aidl/android/hardware/graphics/common/PlaneLayout.aidl +0 −15 Original line number Diff line number Diff line Loading @@ -107,19 +107,4 @@ parcelable PlaneLayout { */ long horizontalSubsampling; long verticalSubsampling; /** * Some buffer producers require extra padding to their output buffer; therefore the * physical size of the native buffer will be larger than its logical size. * The crop rectangle determines the offset and logical size of the buffer that should be * read by consumers. * * The crop rectangle is measured in samples and is relative to the offset of the * plane. Valid crop rectangles are within the boundaries of the plane: * [0, 0, widthInSamples, heightInSamples]. * * The default crop rectangle is a rectangle the same size as the plane: * [0, 0, widthInSamples, heightInSamples]. */ Rect crop; } graphics/common/aidl/android/hardware/graphics/common/StandardMetadataType.aidl +31 −5 Original line number Diff line number Diff line Loading @@ -259,6 +259,32 @@ enum StandardMetadataType { */ PLANE_LAYOUTS = 15, /** * Can be used to get the crop of the buffer. * * Some buffer producers require extra padding to their output buffer; therefore the * physical size of the native buffer will be larger than its logical size. * The crop rectangle(s) determine the offset and logical size of the buffer that should be * read by consumers. * * The crop is defined per plane. The crop(s) are represented by an array of * android.hardware.graphics.common.Rects. The array must be the same length and in the same * order as the array of PlaneLayouts. Eg. the first crop in the array is the crop for the * first PlaneLayout in the PlaneLayout array. * * Each crop Rect is measured in samples and is relative to the offset of the plane. Valid crop * rectangles are within the boundaries of the plane: [0, 0, widthInSamples, heightInSamples]. * The default crop rectangle of each plane is a rectangle the same size as the plane: * [0, 0, widthInSamples, heightInSamples]. * * When it is encoded into a byte stream, the total number of Rects is written using * 8 bytes in little endian. It is followed by each Rect. * * To encode a Rect, write the following fields in this order each as 8 bytes in little endian: * left, top, right and bottom. */ CROP = 16, /** * Can be used to get or set the dataspace of the buffer. The framework may attempt to set * this value. Loading @@ -273,7 +299,7 @@ enum StandardMetadataType { * When it is encoded into a byte stream, it is first cast to a int32_t and then represented in * the byte stream by 4 bytes written in little endian. */ DATASPACE = 16, DATASPACE = 17, /** * Can be used to get or set the BlendMode. The framework may attempt to set this value. Loading @@ -287,7 +313,7 @@ enum StandardMetadataType { * When it is encoded into a byte stream, it is first cast to a int32_t and then represented by * 4 bytes written in little endian. */ BLEND_MODE = 17, BLEND_MODE = 18, /** * Can be used to get or set static HDR metadata specified by SMPTE ST 2086. Loading @@ -300,7 +326,7 @@ enum StandardMetadataType { * little endian. The ordering of float values follows the definition of Smpte2086 and XyColor. * If this is unset when encoded into a byte stream, the byte stream is empty. */ SMPTE2086 = 18, SMPTE2086 = 19, /** * Can be used to get or set static HDR metadata specified by CTA 861.3. Loading @@ -313,7 +339,7 @@ enum StandardMetadataType { * little endian. The ordering of float values follows the definition of Cta861_3. * If this is unset when encoded into a byte stream, the byte stream is empty. */ CTA861_3 = 19, CTA861_3 = 20, /** * Can be used to get or set dynamic HDR metadata specified by SMPTE ST 2094-40:2016. Loading @@ -326,5 +352,5 @@ enum StandardMetadataType { * using 8 bytes in little endian. It is followed by the uint8_t byte array. * If this is unset when encoded into a byte stream, the byte stream is empty. */ SMPTE2094_40 = 20, SMPTE2094_40 = 21, } graphics/mapper/4.0/vts/functional/VtsHalGraphicsMapperV4_0TargetTest.cpp +57 −18 Original line number Diff line number Diff line Loading @@ -151,11 +151,6 @@ class GraphicsMapperHidlTest planeLayout.totalSizeInBytes); EXPECT_EQ(1, planeLayout.horizontalSubsampling); EXPECT_EQ(1, planeLayout.verticalSubsampling); EXPECT_EQ(0, planeLayout.crop.left); EXPECT_EQ(0, planeLayout.crop.top); EXPECT_EQ(planeLayout.widthInSamples, planeLayout.crop.right); EXPECT_EQ(planeLayout.heightInSamples, planeLayout.crop.bottom); } void verifyBufferDump(const IMapper::BufferDump& bufferDump, Loading Loading @@ -997,6 +992,22 @@ TEST_P(GraphicsMapperHidlTest, GetPlaneLayouts) { ASSERT_NO_FATAL_FAILURE(verifyDummyDescriptorInfoPlaneLayouts(planeLayouts)); } /** * Test IMapper::get(Crop) */ TEST_P(GraphicsMapperHidlTest, GetCrop) { auto info = mDummyDescriptorInfo; info.format = PixelFormat::RGBA_8888; info.usage = static_cast<uint64_t>(BufferUsage::CPU_WRITE_OFTEN | BufferUsage::CPU_READ_OFTEN); testGet(info, gralloc4::MetadataType_Crop, [](const IMapper::BufferDescriptorInfo& /*info*/, const hidl_vec<uint8_t>& vec) { std::vector<aidl::android::hardware::graphics::common::Rect> crops; ASSERT_EQ(NO_ERROR, gralloc4::decodeCrop(vec, &crops)); EXPECT_EQ(1, crops.size()); }); } /** * Test IMapper::get(Dataspace) */ Loading Loading @@ -1104,6 +1115,8 @@ TEST_P(GraphicsMapperHidlTest, GetMetadataBadValue) { ASSERT_EQ(Error::BAD_BUFFER, mGralloc->get(bufferHandle, gralloc4::MetadataType_PlaneLayouts, &vec)); ASSERT_EQ(0, vec.size()); ASSERT_EQ(Error::BAD_BUFFER, mGralloc->get(bufferHandle, gralloc4::MetadataType_Crop, &vec)); ASSERT_EQ(0, vec.size()); ASSERT_EQ(Error::BAD_BUFFER, mGralloc->get(bufferHandle, gralloc4::MetadataType_Dataspace, &vec)); ASSERT_EQ(0, vec.size()); Loading Loading @@ -1362,10 +1375,6 @@ TEST_P(GraphicsMapperHidlTest, SetPlaneLayouts) { planeLayoutA.totalSizeInBytes = planeLayoutA.strideInBytes * info.height; planeLayoutA.horizontalSubsampling = 1; planeLayoutA.verticalSubsampling = 1; planeLayoutA.crop.left = 0; planeLayoutA.crop.top = 0; planeLayoutA.crop.right = info.width; planeLayoutA.crop.bottom = info.height; component.type = gralloc4::PlaneLayoutComponentType_A; component.offsetInBits = 0; Loading @@ -1382,10 +1391,6 @@ TEST_P(GraphicsMapperHidlTest, SetPlaneLayouts) { planeLayoutRGB.totalSizeInBytes = planeLayoutRGB.strideInBytes * info.height; planeLayoutRGB.horizontalSubsampling = 1; planeLayoutRGB.verticalSubsampling = 1; planeLayoutRGB.crop.left = 0; planeLayoutRGB.crop.top = 0; planeLayoutRGB.crop.right = info.width; planeLayoutRGB.crop.bottom = info.height; component.type = gralloc4::PlaneLayoutComponentType_R; planeLayoutRGB.components.push_back(component); Loading Loading @@ -1423,11 +1428,6 @@ TEST_P(GraphicsMapperHidlTest, SetPlaneLayouts) { EXPECT_EQ(planeLayout.horizontalSubsampling, realPlaneLayout.horizontalSubsampling); EXPECT_EQ(planeLayout.verticalSubsampling, realPlaneLayout.verticalSubsampling); EXPECT_EQ(planeLayout.crop.left, realPlaneLayout.crop.left); EXPECT_EQ(planeLayout.crop.top, realPlaneLayout.crop.top); EXPECT_EQ(planeLayout.crop.right, realPlaneLayout.crop.right); EXPECT_EQ(planeLayout.crop.bottom, realPlaneLayout.crop.bottom); ASSERT_EQ(planeLayout.components.size(), realPlaneLayout.components.size()); for (int j = 0; j < realPlaneLayout.components.size(); j++) { Loading @@ -1442,6 +1442,26 @@ TEST_P(GraphicsMapperHidlTest, SetPlaneLayouts) { } } /** * Test IMapper::set(Crop) */ TEST_P(GraphicsMapperHidlTest, SetCrop) { std::vector<aidl::android::hardware::graphics::common::Rect> crops{{0, 0, 32, 32}}; hidl_vec<uint8_t> vec; ASSERT_EQ(NO_ERROR, gralloc4::encodeCrop(crops, &vec)); testSet(mDummyDescriptorInfo, gralloc4::MetadataType_Crop, vec, [&](const IMapper::BufferDescriptorInfo& /*info*/, const hidl_vec<uint8_t>& vec) { std::vector<aidl::android::hardware::graphics::common::Rect> realCrops; ASSERT_EQ(NO_ERROR, gralloc4::decodeCrop(vec, &realCrops)); ASSERT_EQ(1, realCrops.size()); ASSERT_EQ(crops.front().left, realCrops.front().left); ASSERT_EQ(crops.front().top, realCrops.front().top); ASSERT_EQ(crops.front().right, realCrops.front().right); ASSERT_EQ(crops.front().bottom, realCrops.front().bottom); }); } /** * Test IMapper::set(Dataspace) */ Loading Loading @@ -1589,6 +1609,7 @@ TEST_P(GraphicsMapperHidlTest, SetMetadataNullBuffer) { mGralloc->set(bufferHandle, gralloc4::MetadataType_ChromaSiting, vec)); ASSERT_EQ(Error::BAD_BUFFER, mGralloc->set(bufferHandle, gralloc4::MetadataType_PlaneLayouts, vec)); ASSERT_EQ(Error::BAD_BUFFER, mGralloc->set(bufferHandle, gralloc4::MetadataType_Crop, vec)); ASSERT_EQ(Error::BAD_BUFFER, mGralloc->set(bufferHandle, gralloc4::MetadataType_Dataspace, vec)); ASSERT_EQ(Error::BAD_BUFFER, Loading Loading @@ -1653,6 +1674,7 @@ TEST_P(GraphicsMapperHidlTest, SetBadMetadata) { mGralloc->set(bufferHandle, gralloc4::MetadataType_ChromaSiting, vec)); ASSERT_EQ(Error::UNSUPPORTED, mGralloc->set(bufferHandle, gralloc4::MetadataType_PlaneLayouts, vec)); ASSERT_EQ(Error::UNSUPPORTED, mGralloc->set(bufferHandle, gralloc4::MetadataType_Crop, vec)); ASSERT_EQ(Error::UNSUPPORTED, mGralloc->set(bufferHandle, gralloc4::MetadataType_Dataspace, vec)); ASSERT_EQ(Error::UNSUPPORTED, Loading Loading @@ -1866,6 +1888,23 @@ TEST_P(GraphicsMapperHidlTest, GetFromBufferDescriptorInfoPlaneLayouts) { ASSERT_NO_FATAL_FAILURE(verifyDummyDescriptorInfoPlaneLayouts(planeLayouts)); } /** * Test IMapper::getFromBufferDescriptorInfo(Crop) */ TEST_P(GraphicsMapperHidlTest, GetFromBufferDescriptorInfoCrop) { auto info = mDummyDescriptorInfo; info.format = PixelFormat::RGBA_8888; info.usage = static_cast<uint64_t>(BufferUsage::CPU_WRITE_OFTEN | BufferUsage::CPU_READ_OFTEN); hidl_vec<uint8_t> vec; ASSERT_EQ(Error::NONE, mGralloc->getFromBufferDescriptorInfo(info, gralloc4::MetadataType_Crop, &vec)); std::vector<aidl::android::hardware::graphics::common::Rect> crops; ASSERT_EQ(NO_ERROR, gralloc4::decodeCrop(vec, &crops)); EXPECT_EQ(1, crops.size()); } /** * Test IMapper::getFromBufferDescriptorInfo(Dataspace) */ Loading Loading
graphics/common/aidl/android/hardware/graphics/common/PlaneLayout.aidl +0 −15 Original line number Diff line number Diff line Loading @@ -107,19 +107,4 @@ parcelable PlaneLayout { */ long horizontalSubsampling; long verticalSubsampling; /** * Some buffer producers require extra padding to their output buffer; therefore the * physical size of the native buffer will be larger than its logical size. * The crop rectangle determines the offset and logical size of the buffer that should be * read by consumers. * * The crop rectangle is measured in samples and is relative to the offset of the * plane. Valid crop rectangles are within the boundaries of the plane: * [0, 0, widthInSamples, heightInSamples]. * * The default crop rectangle is a rectangle the same size as the plane: * [0, 0, widthInSamples, heightInSamples]. */ Rect crop; }
graphics/common/aidl/android/hardware/graphics/common/StandardMetadataType.aidl +31 −5 Original line number Diff line number Diff line Loading @@ -259,6 +259,32 @@ enum StandardMetadataType { */ PLANE_LAYOUTS = 15, /** * Can be used to get the crop of the buffer. * * Some buffer producers require extra padding to their output buffer; therefore the * physical size of the native buffer will be larger than its logical size. * The crop rectangle(s) determine the offset and logical size of the buffer that should be * read by consumers. * * The crop is defined per plane. The crop(s) are represented by an array of * android.hardware.graphics.common.Rects. The array must be the same length and in the same * order as the array of PlaneLayouts. Eg. the first crop in the array is the crop for the * first PlaneLayout in the PlaneLayout array. * * Each crop Rect is measured in samples and is relative to the offset of the plane. Valid crop * rectangles are within the boundaries of the plane: [0, 0, widthInSamples, heightInSamples]. * The default crop rectangle of each plane is a rectangle the same size as the plane: * [0, 0, widthInSamples, heightInSamples]. * * When it is encoded into a byte stream, the total number of Rects is written using * 8 bytes in little endian. It is followed by each Rect. * * To encode a Rect, write the following fields in this order each as 8 bytes in little endian: * left, top, right and bottom. */ CROP = 16, /** * Can be used to get or set the dataspace of the buffer. The framework may attempt to set * this value. Loading @@ -273,7 +299,7 @@ enum StandardMetadataType { * When it is encoded into a byte stream, it is first cast to a int32_t and then represented in * the byte stream by 4 bytes written in little endian. */ DATASPACE = 16, DATASPACE = 17, /** * Can be used to get or set the BlendMode. The framework may attempt to set this value. Loading @@ -287,7 +313,7 @@ enum StandardMetadataType { * When it is encoded into a byte stream, it is first cast to a int32_t and then represented by * 4 bytes written in little endian. */ BLEND_MODE = 17, BLEND_MODE = 18, /** * Can be used to get or set static HDR metadata specified by SMPTE ST 2086. Loading @@ -300,7 +326,7 @@ enum StandardMetadataType { * little endian. The ordering of float values follows the definition of Smpte2086 and XyColor. * If this is unset when encoded into a byte stream, the byte stream is empty. */ SMPTE2086 = 18, SMPTE2086 = 19, /** * Can be used to get or set static HDR metadata specified by CTA 861.3. Loading @@ -313,7 +339,7 @@ enum StandardMetadataType { * little endian. The ordering of float values follows the definition of Cta861_3. * If this is unset when encoded into a byte stream, the byte stream is empty. */ CTA861_3 = 19, CTA861_3 = 20, /** * Can be used to get or set dynamic HDR metadata specified by SMPTE ST 2094-40:2016. Loading @@ -326,5 +352,5 @@ enum StandardMetadataType { * using 8 bytes in little endian. It is followed by the uint8_t byte array. * If this is unset when encoded into a byte stream, the byte stream is empty. */ SMPTE2094_40 = 20, SMPTE2094_40 = 21, }
graphics/mapper/4.0/vts/functional/VtsHalGraphicsMapperV4_0TargetTest.cpp +57 −18 Original line number Diff line number Diff line Loading @@ -151,11 +151,6 @@ class GraphicsMapperHidlTest planeLayout.totalSizeInBytes); EXPECT_EQ(1, planeLayout.horizontalSubsampling); EXPECT_EQ(1, planeLayout.verticalSubsampling); EXPECT_EQ(0, planeLayout.crop.left); EXPECT_EQ(0, planeLayout.crop.top); EXPECT_EQ(planeLayout.widthInSamples, planeLayout.crop.right); EXPECT_EQ(planeLayout.heightInSamples, planeLayout.crop.bottom); } void verifyBufferDump(const IMapper::BufferDump& bufferDump, Loading Loading @@ -997,6 +992,22 @@ TEST_P(GraphicsMapperHidlTest, GetPlaneLayouts) { ASSERT_NO_FATAL_FAILURE(verifyDummyDescriptorInfoPlaneLayouts(planeLayouts)); } /** * Test IMapper::get(Crop) */ TEST_P(GraphicsMapperHidlTest, GetCrop) { auto info = mDummyDescriptorInfo; info.format = PixelFormat::RGBA_8888; info.usage = static_cast<uint64_t>(BufferUsage::CPU_WRITE_OFTEN | BufferUsage::CPU_READ_OFTEN); testGet(info, gralloc4::MetadataType_Crop, [](const IMapper::BufferDescriptorInfo& /*info*/, const hidl_vec<uint8_t>& vec) { std::vector<aidl::android::hardware::graphics::common::Rect> crops; ASSERT_EQ(NO_ERROR, gralloc4::decodeCrop(vec, &crops)); EXPECT_EQ(1, crops.size()); }); } /** * Test IMapper::get(Dataspace) */ Loading Loading @@ -1104,6 +1115,8 @@ TEST_P(GraphicsMapperHidlTest, GetMetadataBadValue) { ASSERT_EQ(Error::BAD_BUFFER, mGralloc->get(bufferHandle, gralloc4::MetadataType_PlaneLayouts, &vec)); ASSERT_EQ(0, vec.size()); ASSERT_EQ(Error::BAD_BUFFER, mGralloc->get(bufferHandle, gralloc4::MetadataType_Crop, &vec)); ASSERT_EQ(0, vec.size()); ASSERT_EQ(Error::BAD_BUFFER, mGralloc->get(bufferHandle, gralloc4::MetadataType_Dataspace, &vec)); ASSERT_EQ(0, vec.size()); Loading Loading @@ -1362,10 +1375,6 @@ TEST_P(GraphicsMapperHidlTest, SetPlaneLayouts) { planeLayoutA.totalSizeInBytes = planeLayoutA.strideInBytes * info.height; planeLayoutA.horizontalSubsampling = 1; planeLayoutA.verticalSubsampling = 1; planeLayoutA.crop.left = 0; planeLayoutA.crop.top = 0; planeLayoutA.crop.right = info.width; planeLayoutA.crop.bottom = info.height; component.type = gralloc4::PlaneLayoutComponentType_A; component.offsetInBits = 0; Loading @@ -1382,10 +1391,6 @@ TEST_P(GraphicsMapperHidlTest, SetPlaneLayouts) { planeLayoutRGB.totalSizeInBytes = planeLayoutRGB.strideInBytes * info.height; planeLayoutRGB.horizontalSubsampling = 1; planeLayoutRGB.verticalSubsampling = 1; planeLayoutRGB.crop.left = 0; planeLayoutRGB.crop.top = 0; planeLayoutRGB.crop.right = info.width; planeLayoutRGB.crop.bottom = info.height; component.type = gralloc4::PlaneLayoutComponentType_R; planeLayoutRGB.components.push_back(component); Loading Loading @@ -1423,11 +1428,6 @@ TEST_P(GraphicsMapperHidlTest, SetPlaneLayouts) { EXPECT_EQ(planeLayout.horizontalSubsampling, realPlaneLayout.horizontalSubsampling); EXPECT_EQ(planeLayout.verticalSubsampling, realPlaneLayout.verticalSubsampling); EXPECT_EQ(planeLayout.crop.left, realPlaneLayout.crop.left); EXPECT_EQ(planeLayout.crop.top, realPlaneLayout.crop.top); EXPECT_EQ(planeLayout.crop.right, realPlaneLayout.crop.right); EXPECT_EQ(planeLayout.crop.bottom, realPlaneLayout.crop.bottom); ASSERT_EQ(planeLayout.components.size(), realPlaneLayout.components.size()); for (int j = 0; j < realPlaneLayout.components.size(); j++) { Loading @@ -1442,6 +1442,26 @@ TEST_P(GraphicsMapperHidlTest, SetPlaneLayouts) { } } /** * Test IMapper::set(Crop) */ TEST_P(GraphicsMapperHidlTest, SetCrop) { std::vector<aidl::android::hardware::graphics::common::Rect> crops{{0, 0, 32, 32}}; hidl_vec<uint8_t> vec; ASSERT_EQ(NO_ERROR, gralloc4::encodeCrop(crops, &vec)); testSet(mDummyDescriptorInfo, gralloc4::MetadataType_Crop, vec, [&](const IMapper::BufferDescriptorInfo& /*info*/, const hidl_vec<uint8_t>& vec) { std::vector<aidl::android::hardware::graphics::common::Rect> realCrops; ASSERT_EQ(NO_ERROR, gralloc4::decodeCrop(vec, &realCrops)); ASSERT_EQ(1, realCrops.size()); ASSERT_EQ(crops.front().left, realCrops.front().left); ASSERT_EQ(crops.front().top, realCrops.front().top); ASSERT_EQ(crops.front().right, realCrops.front().right); ASSERT_EQ(crops.front().bottom, realCrops.front().bottom); }); } /** * Test IMapper::set(Dataspace) */ Loading Loading @@ -1589,6 +1609,7 @@ TEST_P(GraphicsMapperHidlTest, SetMetadataNullBuffer) { mGralloc->set(bufferHandle, gralloc4::MetadataType_ChromaSiting, vec)); ASSERT_EQ(Error::BAD_BUFFER, mGralloc->set(bufferHandle, gralloc4::MetadataType_PlaneLayouts, vec)); ASSERT_EQ(Error::BAD_BUFFER, mGralloc->set(bufferHandle, gralloc4::MetadataType_Crop, vec)); ASSERT_EQ(Error::BAD_BUFFER, mGralloc->set(bufferHandle, gralloc4::MetadataType_Dataspace, vec)); ASSERT_EQ(Error::BAD_BUFFER, Loading Loading @@ -1653,6 +1674,7 @@ TEST_P(GraphicsMapperHidlTest, SetBadMetadata) { mGralloc->set(bufferHandle, gralloc4::MetadataType_ChromaSiting, vec)); ASSERT_EQ(Error::UNSUPPORTED, mGralloc->set(bufferHandle, gralloc4::MetadataType_PlaneLayouts, vec)); ASSERT_EQ(Error::UNSUPPORTED, mGralloc->set(bufferHandle, gralloc4::MetadataType_Crop, vec)); ASSERT_EQ(Error::UNSUPPORTED, mGralloc->set(bufferHandle, gralloc4::MetadataType_Dataspace, vec)); ASSERT_EQ(Error::UNSUPPORTED, Loading Loading @@ -1866,6 +1888,23 @@ TEST_P(GraphicsMapperHidlTest, GetFromBufferDescriptorInfoPlaneLayouts) { ASSERT_NO_FATAL_FAILURE(verifyDummyDescriptorInfoPlaneLayouts(planeLayouts)); } /** * Test IMapper::getFromBufferDescriptorInfo(Crop) */ TEST_P(GraphicsMapperHidlTest, GetFromBufferDescriptorInfoCrop) { auto info = mDummyDescriptorInfo; info.format = PixelFormat::RGBA_8888; info.usage = static_cast<uint64_t>(BufferUsage::CPU_WRITE_OFTEN | BufferUsage::CPU_READ_OFTEN); hidl_vec<uint8_t> vec; ASSERT_EQ(Error::NONE, mGralloc->getFromBufferDescriptorInfo(info, gralloc4::MetadataType_Crop, &vec)); std::vector<aidl::android::hardware::graphics::common::Rect> crops; ASSERT_EQ(NO_ERROR, gralloc4::decodeCrop(vec, &crops)); EXPECT_EQ(1, crops.size()); } /** * Test IMapper::getFromBufferDescriptorInfo(Dataspace) */ Loading