Quick Look in the Xcode Debugger for Obj-C frame buffer classes.

Implement debugQuickLookObject for RTCI420Buffers and RTCCVPixelBuffers.

Also draw gradients consistently regardless of endianness in the unit
tests for RTCCVPixelBuffers and ObjCVideoTrackSource.

Bug: webrtc:9007
Change-Id: Ia5a3d0905a763efc190165471983061fc07551f2
Reviewed-on: https://webrtc-review.googlesource.com/64987
Commit-Queue: Anders Carlsson <andersc@webrtc.org>
Reviewed-by: Kári Helgason <kthelgason@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22746}
This commit is contained in:
Anders Carlsson
2018-04-05 13:07:39 +02:00
committed by Commit Bot
parent 0e075723ad
commit 498644e645
3 changed files with 59 additions and 3 deletions

View File

@ -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 <UIKit/UIKit.h>
#import <VideoToolbox/VideoToolbox.h>
#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);

View File

@ -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 <UIKit/UIKit.h>
#include "third_party/libyuv/include/libyuv.h"
#endif
@implementation RTCI420Buffer {
@protected
rtc::scoped_refptr<webrtc::I420BufferInterface> _i420Buffer;
@ -89,12 +94,42 @@
return self;
}
#pragma mark - Private
- (rtc::scoped_refptr<webrtc::I420BufferInterface>)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 {