Fixed incorrect stride value in MPPImageUtils
This commit is contained in:
parent
3227635ea0
commit
ddce041725
|
@ -133,6 +133,9 @@ using ::mediapipe::ImageFrame;
|
||||||
size_t height = CVPixelBufferGetHeight(pixelBuffer);
|
size_t height = CVPixelBufferGetHeight(pixelBuffer);
|
||||||
size_t stride = CVPixelBufferGetBytesPerRow(pixelBuffer);
|
size_t stride = CVPixelBufferGetBytesPerRow(pixelBuffer);
|
||||||
|
|
||||||
|
size_t destinationChannelCount = 3;
|
||||||
|
size_t destinationStride = destinationChannelCount * width;
|
||||||
|
|
||||||
uint8_t *rgbPixelData = [MPPPixelDataUtils
|
uint8_t *rgbPixelData = [MPPPixelDataUtils
|
||||||
rgbPixelDataFromPixelData:(uint8_t *)CVPixelBufferGetBaseAddress(pixelBuffer)
|
rgbPixelDataFromPixelData:(uint8_t *)CVPixelBufferGetBaseAddress(pixelBuffer)
|
||||||
withWidth:CVPixelBufferGetWidth(pixelBuffer)
|
withWidth:CVPixelBufferGetWidth(pixelBuffer)
|
||||||
|
@ -148,7 +151,7 @@ using ::mediapipe::ImageFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<ImageFrame> imageFrame = absl::make_unique<ImageFrame>(
|
std::unique_ptr<ImageFrame> imageFrame = absl::make_unique<ImageFrame>(
|
||||||
::mediapipe::ImageFormat::SRGB, width, height, stride, static_cast<uint8 *>(rgbPixelData),
|
::mediapipe::ImageFormat::SRGB, width, height, destinationStride, static_cast<uint8 *>(rgbPixelData),
|
||||||
/*deleter=*/free);
|
/*deleter=*/free);
|
||||||
|
|
||||||
return imageFrame;
|
return imageFrame;
|
||||||
|
@ -183,11 +186,14 @@ using ::mediapipe::ImageFrame;
|
||||||
|
|
||||||
NSInteger bitsPerComponent = 8;
|
NSInteger bitsPerComponent = 8;
|
||||||
NSInteger channelCount = 4;
|
NSInteger channelCount = 4;
|
||||||
|
size_t bytesPerRow = channelCount * width;
|
||||||
|
|
||||||
|
NSInteger destinationChannelCount = 3;
|
||||||
|
size_t destinationBytesPerRow = destinationChannelCount * width;
|
||||||
|
|
||||||
UInt8 *pixelDataToReturn = NULL;
|
UInt8 *pixelDataToReturn = NULL;
|
||||||
|
|
||||||
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
|
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
|
||||||
size_t bytesPerRow = channelCount * width;
|
|
||||||
|
|
||||||
// iOS infers bytesPerRow if it is set to 0.
|
// iOS infers bytesPerRow if it is set to 0.
|
||||||
// See https://developer.apple.com/documentation/coregraphics/1455939-cgbitmapcontextcreate
|
// See https://developer.apple.com/documentation/coregraphics/1455939-cgbitmapcontextcreate
|
||||||
// But for segmentation test image, this was not the case.
|
// But for segmentation test image, this was not the case.
|
||||||
|
@ -219,9 +225,13 @@ using ::mediapipe::ImageFrame;
|
||||||
|
|
||||||
CGColorSpaceRelease(colorSpace);
|
CGColorSpaceRelease(colorSpace);
|
||||||
|
|
||||||
|
if (!pixelDataToReturn) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::unique_ptr<ImageFrame> imageFrame =
|
std::unique_ptr<ImageFrame> imageFrame =
|
||||||
absl::make_unique<ImageFrame>(mediapipe::ImageFormat::SRGB, (int)width, (int)height,
|
absl::make_unique<ImageFrame>(mediapipe::ImageFormat::SRGB, (int)width, (int)height,
|
||||||
(int)bytesPerRow, static_cast<uint8 *>(pixelDataToReturn),
|
(int)destinationBytesPerRow, static_cast<uint8 *>(pixelDataToReturn),
|
||||||
/*deleter=*/free);
|
/*deleter=*/free);
|
||||||
|
|
||||||
return imageFrame;
|
return imageFrame;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user