diff options
Diffstat (limited to 'webrtc/base/objc')
-rw-r--r-- | webrtc/base/objc/NSString+StdString.h | 26 | ||||
-rw-r--r-- | webrtc/base/objc/NSString+StdString.mm | 33 | ||||
-rw-r--r-- | webrtc/base/objc/OWNERS | 1 | ||||
-rw-r--r-- | webrtc/base/objc/RTCCameraPreviewView.h | 28 | ||||
-rw-r--r-- | webrtc/base/objc/RTCCameraPreviewView.m | 47 | ||||
-rw-r--r-- | webrtc/base/objc/RTCDispatcher.h | 35 | ||||
-rw-r--r-- | webrtc/base/objc/RTCDispatcher.m | 46 | ||||
-rw-r--r-- | webrtc/base/objc/RTCLogging.h | 75 | ||||
-rw-r--r-- | webrtc/base/objc/RTCLogging.mm | 47 |
9 files changed, 338 insertions, 0 deletions
diff --git a/webrtc/base/objc/NSString+StdString.h b/webrtc/base/objc/NSString+StdString.h new file mode 100644 index 0000000000..8bf6cc94be --- /dev/null +++ b/webrtc/base/objc/NSString+StdString.h @@ -0,0 +1,26 @@ +/* + * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#import <Foundation/Foundation.h> + +#include <string> + +NS_ASSUME_NONNULL_BEGIN + +@interface NSString (StdString) + +@property(nonatomic, readonly) std::string stdString; + ++ (std::string)stdStringForString:(NSString *)nsString; ++ (NSString *)stringForStdString:(const std::string&)stdString; + +@end + +NS_ASSUME_NONNULL_END diff --git a/webrtc/base/objc/NSString+StdString.mm b/webrtc/base/objc/NSString+StdString.mm new file mode 100644 index 0000000000..3210ff0b65 --- /dev/null +++ b/webrtc/base/objc/NSString+StdString.mm @@ -0,0 +1,33 @@ +/* + * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#import "NSString+StdString.h" + +@implementation NSString (StdString) + +- (std::string)stdString { + return [NSString stdStringForString:self]; +} + ++ (std::string)stdStringForString:(NSString *)nsString { + NSData *charData = [nsString dataUsingEncoding:NSUTF8StringEncoding]; + return std::string(reinterpret_cast<const char *>(charData.bytes), + charData.length); +} + ++ (NSString *)stringForStdString:(const std::string&)stdString { + // std::string may contain null termination character so we construct + // using length. + return [[NSString alloc] initWithBytes:stdString.data() + length:stdString.length() + encoding:NSUTF8StringEncoding]; +} + +@end diff --git a/webrtc/base/objc/OWNERS b/webrtc/base/objc/OWNERS new file mode 100644 index 0000000000..cd06158b7f --- /dev/null +++ b/webrtc/base/objc/OWNERS @@ -0,0 +1 @@ +tkchin@webrtc.org diff --git a/webrtc/base/objc/RTCCameraPreviewView.h b/webrtc/base/objc/RTCCameraPreviewView.h new file mode 100644 index 0000000000..03e94c29ae --- /dev/null +++ b/webrtc/base/objc/RTCCameraPreviewView.h @@ -0,0 +1,28 @@ +/* + * Copyright 2015 The WebRTC Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#import <Foundation/Foundation.h> +#import <UIKit/UIKit.h> + +@class AVCaptureSession; +@class RTCAVFoundationVideoSource; + +/** RTCCameraPreviewView is a view that renders local video from an + * AVCaptureSession. + */ +@interface RTCCameraPreviewView : UIView + +/** The capture session being rendered in the view. Capture session + * is assigned to AVCaptureVideoPreviewLayer async in the same + * queue that the AVCaptureSession is started/stopped. + */ +@property(nonatomic, strong) AVCaptureSession *captureSession; + +@end diff --git a/webrtc/base/objc/RTCCameraPreviewView.m b/webrtc/base/objc/RTCCameraPreviewView.m new file mode 100644 index 0000000000..5a57483676 --- /dev/null +++ b/webrtc/base/objc/RTCCameraPreviewView.m @@ -0,0 +1,47 @@ +/* + * Copyright 2015 The WebRTC Project Authors. All rights reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +#import "webrtc/base/objc/RTCCameraPreviewView.h" + +#import <AVFoundation/AVFoundation.h> + +#import "webrtc/base/objc/RTCDispatcher.h" + +@implementation RTCCameraPreviewView + +@synthesize captureSession = _captureSession; + ++ (Class)layerClass { + return [AVCaptureVideoPreviewLayer class]; +} + +- (void)setCaptureSession:(AVCaptureSession *)captureSession { + if (_captureSession == captureSession) { + return; + } + _captureSession = captureSession; + AVCaptureVideoPreviewLayer *previewLayer = [self previewLayer]; + [RTCDispatcher dispatchAsyncOnType:RTCDispatcherTypeCaptureSession + block:^{ + previewLayer.session = captureSession; + }]; +} + +#pragma mark - Private + +- (AVCaptureVideoPreviewLayer *)previewLayer { + return (AVCaptureVideoPreviewLayer *)self.layer; +} + +@end diff --git a/webrtc/base/objc/RTCDispatcher.h b/webrtc/base/objc/RTCDispatcher.h new file mode 100644 index 0000000000..c32b93d472 --- /dev/null +++ b/webrtc/base/objc/RTCDispatcher.h @@ -0,0 +1,35 @@ +/* + * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#import <Foundation/Foundation.h> + +typedef NS_ENUM(NSInteger, RTCDispatcherQueueType) { + // Main dispatcher queue. + RTCDispatcherTypeMain, + // Used for starting/stopping AVCaptureSession, and assigning + // capture session to AVCaptureVideoPreviewLayer. + RTCDispatcherTypeCaptureSession, +}; + +/** Dispatcher that asynchronously dispatches blocks to a specific + * shared dispatch queue. + */ +@interface RTCDispatcher : NSObject + +- (instancetype)init NS_UNAVAILABLE; + +/** Dispatch the block asynchronously on the queue for dispatchType. + * @param dispatchType The queue type to dispatch on. + * @param block The block to dispatch asynchronously. + */ ++ (void)dispatchAsyncOnType:(RTCDispatcherQueueType)dispatchType + block:(dispatch_block_t)block; + +@end diff --git a/webrtc/base/objc/RTCDispatcher.m b/webrtc/base/objc/RTCDispatcher.m new file mode 100644 index 0000000000..065705a4ae --- /dev/null +++ b/webrtc/base/objc/RTCDispatcher.m @@ -0,0 +1,46 @@ +/* + * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#import "RTCDispatcher.h" + +static dispatch_queue_t kCaptureSessionQueue = nil; + +@implementation RTCDispatcher { + dispatch_queue_t _captureSessionQueue; +} + ++ (void)initialize { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + kCaptureSessionQueue = dispatch_queue_create( + "org.webrtc.RTCDispatcherCaptureSession", + DISPATCH_QUEUE_SERIAL); + }); +} + ++ (void)dispatchAsyncOnType:(RTCDispatcherQueueType)dispatchType + block:(dispatch_block_t)block { + dispatch_queue_t queue = [self dispatchQueueForType:dispatchType]; + dispatch_async(queue, block); +} + +#pragma mark - Private + ++ (dispatch_queue_t)dispatchQueueForType:(RTCDispatcherQueueType)dispatchType { + switch (dispatchType) { + case RTCDispatcherTypeMain: + return dispatch_get_main_queue(); + case RTCDispatcherTypeCaptureSession: + return kCaptureSessionQueue; + } +} + +@end + diff --git a/webrtc/base/objc/RTCLogging.h b/webrtc/base/objc/RTCLogging.h new file mode 100644 index 0000000000..19fade5cfc --- /dev/null +++ b/webrtc/base/objc/RTCLogging.h @@ -0,0 +1,75 @@ +/* + * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#import <Foundation/Foundation.h> + +// Subset of rtc::LoggingSeverity. +typedef NS_ENUM(NSInteger, RTCLoggingSeverity) { + kRTCLoggingSeverityVerbose, + kRTCLoggingSeverityInfo, + kRTCLoggingSeverityWarning, + kRTCLoggingSeverityError, +}; + +#if defined(__cplusplus) +extern "C" void RTCLogEx(RTCLoggingSeverity severity, NSString* log_string); +extern "C" void RTCSetMinDebugLogLevel(RTCLoggingSeverity severity); +extern "C" NSString* RTCFileName(const char* filePath); +#else + +// Wrapper for C++ LOG(sev) macros. +// Logs the log string to the webrtc logstream for the given severity. +extern void RTCLogEx(RTCLoggingSeverity severity, NSString* log_string); + +// Wrapper for rtc::LogMessage::LogToDebug. +// Sets the minimum severity to be logged to console. +extern void RTCSetMinDebugLogLevel(RTCLoggingSeverity severity); + +// Returns the filename with the path prefix removed. +extern NSString* RTCFileName(const char* filePath); + +#endif + +// Some convenience macros. + +#define RTCLogString(format, ...) \ + [NSString stringWithFormat:@"(%@:%d %s): " format, \ + RTCFileName(__FILE__), \ + __LINE__, \ + __FUNCTION__, \ + ##__VA_ARGS__] + +#define RTCLogFormat(severity, format, ...) \ + do { \ + NSString* log_string = RTCLogString(format, ##__VA_ARGS__); \ + RTCLogEx(severity, log_string); \ + } while (false) + +#define RTCLogVerbose(format, ...) \ + RTCLogFormat(kRTCLoggingSeverityVerbose, format, ##__VA_ARGS__) \ + +#define RTCLogInfo(format, ...) \ + RTCLogFormat(kRTCLoggingSeverityInfo, format, ##__VA_ARGS__) \ + +#define RTCLogWarning(format, ...) \ + RTCLogFormat(kRTCLoggingSeverityWarning, format, ##__VA_ARGS__) \ + +#define RTCLogError(format, ...) \ + RTCLogFormat(kRTCLoggingSeverityError, format, ##__VA_ARGS__) \ + +#if !defined(NDEBUG) +#define RTCLogDebug(format, ...) RTCLogInfo(format, ##__VA_ARGS__) +#else +#define RTCLogDebug(format, ...) \ + do { \ + } while (false) +#endif + +#define RTCLog(format, ...) RTCLogInfo(format, ##__VA_ARGS__) diff --git a/webrtc/base/objc/RTCLogging.mm b/webrtc/base/objc/RTCLogging.mm new file mode 100644 index 0000000000..e9afe725d1 --- /dev/null +++ b/webrtc/base/objc/RTCLogging.mm @@ -0,0 +1,47 @@ +/* + * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#import "RTCLogging.h" + +#include "webrtc/base/logging.h" + +rtc::LoggingSeverity RTCGetNativeLoggingSeverity(RTCLoggingSeverity severity) { + switch (severity) { + case kRTCLoggingSeverityVerbose: + return rtc::LS_VERBOSE; + case kRTCLoggingSeverityInfo: + return rtc::LS_INFO; + case kRTCLoggingSeverityWarning: + return rtc::LS_WARNING; + case kRTCLoggingSeverityError: + return rtc::LS_ERROR; + } +} + +void RTCLogEx(RTCLoggingSeverity severity, NSString* log_string) { + if (log_string.length) { + const char* utf8_string = log_string.UTF8String; + LOG_V(RTCGetNativeLoggingSeverity(severity)) << utf8_string; + } +} + +void RTCSetMinDebugLogLevel(RTCLoggingSeverity severity) { + rtc::LogMessage::LogToDebug(RTCGetNativeLoggingSeverity(severity)); +} + +NSString* RTCFileName(const char* file_path) { + NSString* ns_file_path = + [[NSString alloc] initWithBytesNoCopy:const_cast<char*>(file_path) + length:strlen(file_path) + encoding:NSUTF8StringEncoding + freeWhenDone:NO]; + return ns_file_path.lastPathComponent; +} + |