diff --git a/sdk/objc/Framework/Classes/Video/RTCCVPixelBuffer.mm b/sdk/objc/Framework/Classes/Video/RTCCVPixelBuffer.mm index f572ae24d4..f854c91edc 100644 --- a/sdk/objc/Framework/Classes/Video/RTCCVPixelBuffer.mm +++ b/sdk/objc/Framework/Classes/Video/RTCCVPixelBuffer.mm @@ -13,9 +13,13 @@ #include "common_video/libyuv/include/webrtc_libyuv.h" #include "rtc_base/checks.h" #include "rtc_base/logging.h" - #include "third_party/libyuv/include/libyuv.h" +#if !defined(NDEBUG) && defined(WEBRTC_IOS) +#import +#import +#endif + @implementation RTCCVPixelBuffer { int _width; int _height; @@ -244,6 +248,20 @@ return i420Buffer; } +#pragma mark - Debugging + +#if !defined(NDEBUG) && defined(WEBRTC_IOS) +- (id)debugQuickLookObject { + CGImageRef cgImage; + VTCreateCGImageFromCVPixelBuffer(_pixelBuffer, NULL, &cgImage); + UIImage *image = [UIImage imageWithCGImage:cgImage scale:1.0 orientation:UIImageOrientationUp]; + CGImageRelease(cgImage); + return image; +} +#endif + +#pragma mark - Private + - (void)cropAndScaleNV12To:(CVPixelBufferRef)outputPixelBuffer withTempBuffer:(uint8_t*)tmpBuffer { // Prepare output pointers. CVReturn cvRet = CVPixelBufferLockBaseAddress(outputPixelBuffer, 0); diff --git a/sdk/objc/Framework/Classes/Video/RTCI420Buffer.mm b/sdk/objc/Framework/Classes/Video/RTCI420Buffer.mm index 2848f2b45e..65f3d5ad41 100644 --- a/sdk/objc/Framework/Classes/Video/RTCI420Buffer.mm +++ b/sdk/objc/Framework/Classes/Video/RTCI420Buffer.mm @@ -8,10 +8,15 @@ * be found in the AUTHORS file in the root of the source tree. */ -#import "WebRTC/RTCVideoFrameBuffer.h" +#import "RTCI420Buffer+Private.h" #include "api/video/i420_buffer.h" +#if !defined(NDEBUG) && defined(WEBRTC_IOS) +#import +#include "third_party/libyuv/include/libyuv.h" +#endif + @implementation RTCI420Buffer { @protected rtc::scoped_refptr _i420Buffer; @@ -89,12 +94,42 @@ return self; } +#pragma mark - Private + - (rtc::scoped_refptr)nativeI420Buffer { return _i420Buffer; } +#pragma mark - Debugging + +#if !defined(NDEBUG) && defined(WEBRTC_IOS) +- (id)debugQuickLookObject { + UIGraphicsBeginImageContext(CGSizeMake(_i420Buffer->width(), _i420Buffer->height())); + CGContextRef c = UIGraphicsGetCurrentContext(); + uint8_t *ctxData = (uint8_t *)CGBitmapContextGetData(c); + + libyuv::I420ToARGB(_i420Buffer->DataY(), + _i420Buffer->StrideY(), + _i420Buffer->DataU(), + _i420Buffer->StrideU(), + _i420Buffer->DataV(), + _i420Buffer->StrideV(), + ctxData, + _i420Buffer->width() * 4, + _i420Buffer->width(), + _i420Buffer->height()); + + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return image; +} +#endif + @end +#pragma mark - + @implementation RTCMutableI420Buffer - (uint8_t *)mutableDataY { diff --git a/sdk/objc/Framework/UnitTests/frame_buffer_helpers.mm b/sdk/objc/Framework/UnitTests/frame_buffer_helpers.mm index 862ead4af9..c6a7550fac 100644 --- a/sdk/objc/Framework/UnitTests/frame_buffer_helpers.mm +++ b/sdk/objc/Framework/UnitTests/frame_buffer_helpers.mm @@ -18,13 +18,16 @@ void DrawGradientInRGBPixelBuffer(CVPixelBufferRef pixelBuffer) { size_t width = CVPixelBufferGetWidth(pixelBuffer); size_t height = CVPixelBufferGetHeight(pixelBuffer); CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + int byteOrder = CVPixelBufferGetPixelFormatType(pixelBuffer) == kCVPixelFormatType_32ARGB ? + kCGBitmapByteOrder32Little : + 0; CGContextRef cgContext = CGBitmapContextCreate(baseAddr, width, height, 8, CVPixelBufferGetBytesPerRow(pixelBuffer), colorSpace, - kCGImageAlphaNoneSkipLast); + byteOrder | kCGImageAlphaNoneSkipLast); // Create a gradient CGFloat colors[] = {