iOS VideoEngine: move video_{capture,render} to ARC.
Replaces ye olde timey explicit release with teh hotness of automatic reference counting. This is the webrtc/ half; the talk/ half is in https://webrtc-codereview.appspot.com/10499005/ BUG=3054,3055 R=noahric@google.com Review URL: https://webrtc-codereview.appspot.com/10539005 git-svn-id: http://webrtc.googlecode.com/svn/trunk@5770 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@ -8,6 +8,10 @@
|
|||||||
* be found in the AUTHORS file in the root of the source tree.
|
* 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
|
||||||
|
|
||||||
#include "webrtc/modules/video_capture/ios/device_info_ios.h"
|
#include "webrtc/modules/video_capture/ios/device_info_ios.h"
|
||||||
#include "webrtc/modules/video_capture/ios/device_info_ios_objc.h"
|
#include "webrtc/modules/video_capture/ios/device_info_ios_objc.h"
|
||||||
#include "webrtc/modules/video_capture/video_capture_impl.h"
|
#include "webrtc/modules/video_capture/video_capture_impl.h"
|
||||||
|
@ -8,6 +8,10 @@
|
|||||||
* be found in the AUTHORS file in the root of the source tree.
|
* 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 <AVFoundation/AVFoundation.h>
|
#import <AVFoundation/AVFoundation.h>
|
||||||
|
|
||||||
#import "webrtc/modules/video_capture/ios/device_info_ios_objc.h"
|
#import "webrtc/modules/video_capture/ios/device_info_ios_objc.h"
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#ifndef WEBRTC_MODULES_VIDEO_CAPTURE_IOS_VIDEO_CAPTURE_IOS_OBJC_H_
|
#ifndef WEBRTC_MODULES_VIDEO_CAPTURE_IOS_VIDEO_CAPTURE_IOS_OBJC_H_
|
||||||
#define WEBRTC_MODULES_VIDEO_CAPTURE_IOS_VIDEO_CAPTURE_IOS_OBJC_H_
|
#define WEBRTC_MODULES_VIDEO_CAPTURE_IOS_VIDEO_CAPTURE_IOS_OBJC_H_
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
|
|
||||||
#include "webrtc/modules/video_capture/ios/video_capture_ios.h"
|
#include "webrtc/modules/video_capture/ios/video_capture_ios.h"
|
||||||
@ -20,7 +21,7 @@
|
|||||||
// This notification must be posted in order for the capturer to reflect the
|
// This notification must be posted in order for the capturer to reflect the
|
||||||
// orientation change in video w.r.t. the application orientation.
|
// orientation change in video w.r.t. the application orientation.
|
||||||
@interface RTCVideoCaptureIosObjC
|
@interface RTCVideoCaptureIosObjC
|
||||||
: UIViewController<AVCaptureVideoDataOutputSampleBufferDelegate> {
|
: NSObject<AVCaptureVideoDataOutputSampleBufferDelegate> {
|
||||||
@private
|
@private
|
||||||
webrtc::videocapturemodule::VideoCaptureIos* _owner;
|
webrtc::videocapturemodule::VideoCaptureIos* _owner;
|
||||||
webrtc::VideoCaptureCapability _capability;
|
webrtc::VideoCaptureCapability _capability;
|
||||||
|
@ -8,6 +8,12 @@
|
|||||||
* be found in the AUTHORS file in the root of the source tree.
|
* 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 <UIKit/UIKit.h>
|
||||||
|
|
||||||
#import "webrtc/modules/video_capture/ios/device_info_ios_objc.h"
|
#import "webrtc/modules/video_capture/ios/device_info_ios_objc.h"
|
||||||
#import "webrtc/modules/video_capture/ios/rtc_video_capture_ios_objc.h"
|
#import "webrtc/modules/video_capture/ios/rtc_video_capture_ios_objc.h"
|
||||||
|
|
||||||
@ -81,7 +87,6 @@ using namespace webrtc::videocapturemodule;
|
|||||||
|
|
||||||
- (void)dealloc {
|
- (void)dealloc {
|
||||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||||
[super dealloc];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)setCaptureDeviceByUniqueId:(NSString*)uniqueId {
|
- (BOOL)setCaptureDeviceByUniqueId:(NSString*)uniqueId {
|
||||||
@ -174,8 +179,6 @@ using namespace webrtc::videocapturemodule;
|
|||||||
|
|
||||||
[_captureSession startRunning];
|
[_captureSession startRunning];
|
||||||
|
|
||||||
[captureQuality release];
|
|
||||||
|
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,7 +202,8 @@ using namespace webrtc::videocapturemodule;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)onVideoError {
|
- (void)onVideoError:(NSNotification*)notification {
|
||||||
|
NSLog(@"onVideoError: %@", notification);
|
||||||
// TODO(sjlee): make the specific error handling with this notification.
|
// TODO(sjlee): make the specific error handling with this notification.
|
||||||
WEBRTC_TRACE(kTraceError,
|
WEBRTC_TRACE(kTraceError,
|
||||||
kTraceVideoCapture,
|
kTraceVideoCapture,
|
||||||
|
@ -8,6 +8,10 @@
|
|||||||
* be found in the AUTHORS file in the root of the source tree.
|
* 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
|
||||||
|
|
||||||
#include "webrtc/modules/video_capture/ios/device_info_ios_objc.h"
|
#include "webrtc/modules/video_capture/ios/device_info_ios_objc.h"
|
||||||
#include "webrtc/modules/video_capture/ios/rtc_video_capture_ios_objc.h"
|
#include "webrtc/modules/video_capture/ios/rtc_video_capture_ios_objc.h"
|
||||||
#include "webrtc/system_wrappers/interface/ref_count.h"
|
#include "webrtc/system_wrappers/interface/ref_count.h"
|
||||||
@ -86,7 +90,6 @@ int32_t VideoCaptureIos::StopCapture() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
is_capturing_ = false;
|
is_capturing_ = false;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,6 +113,9 @@
|
|||||||
'ios/video_capture_ios.h',
|
'ios/video_capture_ios.h',
|
||||||
'ios/video_capture_ios.mm',
|
'ios/video_capture_ios.mm',
|
||||||
],
|
],
|
||||||
|
'xcode_settings': {
|
||||||
|
'CLANG_ENABLE_OBJC_ARC': 'YES',
|
||||||
|
},
|
||||||
'all_dependent_settings': {
|
'all_dependent_settings': {
|
||||||
'xcode_settings': {
|
'xcode_settings': {
|
||||||
'OTHER_LDFLAGS': [
|
'OTHER_LDFLAGS': [
|
||||||
|
@ -8,6 +8,10 @@
|
|||||||
* be found in the AUTHORS file in the root of the source tree.
|
* 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
|
||||||
|
|
||||||
// This files is mostly copied from
|
// This files is mostly copied from
|
||||||
// webrtc/modules/video_render/android/video_render_opengles20.h
|
// webrtc/modules/video_render/android/video_render_opengles20.h
|
||||||
|
|
||||||
|
@ -8,6 +8,10 @@
|
|||||||
* be found in the AUTHORS file in the root of the source tree.
|
* 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
|
||||||
|
|
||||||
#include "webrtc/modules/video_render/ios/video_render_ios_channel.h"
|
#include "webrtc/modules/video_render/ios/video_render_ios_channel.h"
|
||||||
|
|
||||||
using namespace webrtc;
|
using namespace webrtc;
|
||||||
|
@ -8,6 +8,10 @@
|
|||||||
* be found in the AUTHORS file in the root of the source tree.
|
* 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
|
||||||
|
|
||||||
#include "webrtc/modules/video_render/ios/video_render_ios_gles20.h"
|
#include "webrtc/modules/video_render/ios/video_render_ios_gles20.h"
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
#include "webrtc/system_wrappers/interface/event_wrapper.h"
|
||||||
@ -246,7 +250,7 @@ int VideoRenderIosGles20::GetWindowRect(Rect& rect) {
|
|||||||
int VideoRenderIosGles20::ChangeWindow(void* new_window) {
|
int VideoRenderIosGles20::ChangeWindow(void* new_window) {
|
||||||
CriticalSectionScoped cs(gles_crit_sec_.get());
|
CriticalSectionScoped cs(gles_crit_sec_.get());
|
||||||
|
|
||||||
view_ = (VideoRenderIosView*)new_window;
|
view_ = (__bridge VideoRenderIosView*)new_window;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -99,7 +99,7 @@ class VideoRenderIosImpl : IVideoRender {
|
|||||||
bool full_screen_;
|
bool full_screen_;
|
||||||
|
|
||||||
CriticalSectionWrapper* crit_sec_;
|
CriticalSectionWrapper* crit_sec_;
|
||||||
VideoRenderIosGles20* ptr_ios_render_;
|
webrtc::scoped_ptr<VideoRenderIosGles20> ptr_ios_render_;
|
||||||
};
|
};
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
#endif // WEBRTC_MODULES_VIDEO_RENDER_IOS_VIDEO_RENDER_IOS_IMPL_H_
|
#endif // WEBRTC_MODULES_VIDEO_RENDER_IOS_VIDEO_RENDER_IOS_IMPL_H_
|
||||||
|
@ -8,6 +8,10 @@
|
|||||||
* be found in the AUTHORS file in the root of the source tree.
|
* 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
|
||||||
|
|
||||||
#include "webrtc/modules/video_render/ios/video_render_ios_impl.h"
|
#include "webrtc/modules/video_render/ios/video_render_ios_impl.h"
|
||||||
#include "webrtc/modules/video_render/ios/video_render_ios_gles20.h"
|
#include "webrtc/modules/video_render/ios/video_render_ios_gles20.h"
|
||||||
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
#include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
|
||||||
@ -33,18 +37,13 @@ VideoRenderIosImpl::VideoRenderIosImpl(const int32_t id,
|
|||||||
|
|
||||||
VideoRenderIosImpl::~VideoRenderIosImpl() {
|
VideoRenderIosImpl::~VideoRenderIosImpl() {
|
||||||
delete crit_sec_;
|
delete crit_sec_;
|
||||||
|
|
||||||
if (ptr_ios_render_) {
|
|
||||||
delete ptr_ios_render_;
|
|
||||||
ptr_ios_render_ = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t VideoRenderIosImpl::Init() {
|
int32_t VideoRenderIosImpl::Init() {
|
||||||
CriticalSectionScoped cs(crit_sec_);
|
CriticalSectionScoped cs(crit_sec_);
|
||||||
|
|
||||||
ptr_ios_render_ = new VideoRenderIosGles20(
|
ptr_ios_render_.reset(new VideoRenderIosGles20(
|
||||||
(VideoRenderIosView*)ptr_window_, full_screen_, id_);
|
(__bridge VideoRenderIosView*)ptr_window_, full_screen_, id_));
|
||||||
|
|
||||||
return ptr_ios_render_->Init();
|
return ptr_ios_render_->Init();
|
||||||
;
|
;
|
||||||
|
@ -16,15 +16,7 @@
|
|||||||
|
|
||||||
#include "webrtc/modules/video_render/ios/open_gles20.h"
|
#include "webrtc/modules/video_render/ios/open_gles20.h"
|
||||||
|
|
||||||
@interface VideoRenderIosView : UIView {
|
@interface VideoRenderIosView : UIView
|
||||||
@private // NOLINT
|
|
||||||
EAGLContext* context_;
|
|
||||||
webrtc::OpenGles20* gles_renderer20_;
|
|
||||||
int _frameBufferWidth;
|
|
||||||
int _frameBufferHeight;
|
|
||||||
unsigned int _defaultFrameBuffer;
|
|
||||||
unsigned int _colorRenderBuffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (BOOL)createContext;
|
- (BOOL)createContext;
|
||||||
- (BOOL)presentFramebuffer;
|
- (BOOL)presentFramebuffer;
|
||||||
|
@ -8,12 +8,23 @@
|
|||||||
* be found in the AUTHORS file in the root of the source tree.
|
* 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
|
||||||
|
|
||||||
#include "webrtc/modules/video_render/ios/video_render_ios_view.h"
|
#include "webrtc/modules/video_render/ios/video_render_ios_view.h"
|
||||||
#include "webrtc/system_wrappers/interface/trace.h"
|
#include "webrtc/system_wrappers/interface/trace.h"
|
||||||
|
|
||||||
using namespace webrtc;
|
using namespace webrtc;
|
||||||
|
|
||||||
@implementation VideoRenderIosView
|
@implementation VideoRenderIosView {
|
||||||
|
EAGLContext* _context;
|
||||||
|
webrtc::scoped_ptr<webrtc::OpenGles20> _gles_renderer20;
|
||||||
|
int _frameBufferWidth;
|
||||||
|
int _frameBufferHeight;
|
||||||
|
unsigned int _defaultFrameBuffer;
|
||||||
|
unsigned int _colorRenderBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
@synthesize context = context_;
|
@synthesize context = context_;
|
||||||
|
|
||||||
@ -25,7 +36,7 @@ using namespace webrtc;
|
|||||||
// init super class
|
// init super class
|
||||||
self = [super initWithCoder:coder];
|
self = [super initWithCoder:coder];
|
||||||
if (self) {
|
if (self) {
|
||||||
gles_renderer20_ = new OpenGles20();
|
_gles_renderer20.reset(new OpenGles20());
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@ -34,7 +45,7 @@ using namespace webrtc;
|
|||||||
// init super class
|
// init super class
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) {
|
if (self) {
|
||||||
gles_renderer20_ = new OpenGles20();
|
_gles_renderer20.reset(new OpenGles20());
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@ -43,7 +54,7 @@ using namespace webrtc;
|
|||||||
// init super class
|
// init super class
|
||||||
self = [super initWithFrame:frame];
|
self = [super initWithFrame:frame];
|
||||||
if (self) {
|
if (self) {
|
||||||
gles_renderer20_ = new OpenGles20();
|
_gles_renderer20.reset(new OpenGles20());
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@ -59,13 +70,7 @@ using namespace webrtc;
|
|||||||
_colorRenderBuffer = 0;
|
_colorRenderBuffer = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
context_ = nil;
|
[EAGLContext setCurrentContext:nil];
|
||||||
|
|
||||||
if (gles_renderer20_) {
|
|
||||||
delete gles_renderer20_;
|
|
||||||
}
|
|
||||||
|
|
||||||
[super dealloc];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSString*)description {
|
- (NSString*)description {
|
||||||
@ -84,14 +89,13 @@ using namespace webrtc;
|
|||||||
kEAGLColorFormatRGBA8,
|
kEAGLColorFormatRGBA8,
|
||||||
kEAGLDrawablePropertyColorFormat,
|
kEAGLDrawablePropertyColorFormat,
|
||||||
nil];
|
nil];
|
||||||
context_ = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
|
_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
|
||||||
|
|
||||||
if (!context_) {
|
if (!_context) {
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
// set current EAGLContext to self context_
|
if (![EAGLContext setCurrentContext:_context]) {
|
||||||
if (![EAGLContext setCurrentContext:context_]) {
|
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,7 +106,7 @@ using namespace webrtc;
|
|||||||
// Create color render buffer and allocate backing store.
|
// Create color render buffer and allocate backing store.
|
||||||
glGenRenderbuffers(1, &_colorRenderBuffer);
|
glGenRenderbuffers(1, &_colorRenderBuffer);
|
||||||
glBindRenderbuffer(GL_RENDERBUFFER, _colorRenderBuffer);
|
glBindRenderbuffer(GL_RENDERBUFFER, _colorRenderBuffer);
|
||||||
[context_ renderbufferStorage:GL_RENDERBUFFER
|
[_context renderbufferStorage:GL_RENDERBUFFER
|
||||||
fromDrawable:(CAEAGLLayer*)self.layer];
|
fromDrawable:(CAEAGLLayer*)self.layer];
|
||||||
glGetRenderbufferParameteriv(
|
glGetRenderbufferParameteriv(
|
||||||
GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &_frameBufferWidth);
|
GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &_frameBufferWidth);
|
||||||
@ -121,12 +125,12 @@ using namespace webrtc;
|
|||||||
glBindFramebuffer(GL_FRAMEBUFFER, _defaultFrameBuffer);
|
glBindFramebuffer(GL_FRAMEBUFFER, _defaultFrameBuffer);
|
||||||
glViewport(0, 0, self.frame.size.width, self.frame.size.height);
|
glViewport(0, 0, self.frame.size.width, self.frame.size.height);
|
||||||
|
|
||||||
return gles_renderer20_->Setup([self bounds].size.width,
|
return _gles_renderer20->Setup([self bounds].size.width,
|
||||||
[self bounds].size.height);
|
[self bounds].size.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)presentFramebuffer {
|
- (BOOL)presentFramebuffer {
|
||||||
if (![context_ presentRenderbuffer:GL_RENDERBUFFER]) {
|
if (![_context presentRenderbuffer:GL_RENDERBUFFER]) {
|
||||||
WEBRTC_TRACE(kTraceWarning,
|
WEBRTC_TRACE(kTraceWarning,
|
||||||
kTraceVideoRenderer,
|
kTraceVideoRenderer,
|
||||||
0,
|
0,
|
||||||
@ -139,11 +143,11 @@ using namespace webrtc;
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)renderFrame:(I420VideoFrame*)frameToRender {
|
- (BOOL)renderFrame:(I420VideoFrame*)frameToRender {
|
||||||
if (![EAGLContext setCurrentContext:context_]) {
|
if (![EAGLContext setCurrentContext:_context]) {
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
return gles_renderer20_->Render(*frameToRender);
|
return _gles_renderer20->Render(*frameToRender);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)setCoordinatesForZOrder:(const float)zOrder
|
- (BOOL)setCoordinatesForZOrder:(const float)zOrder
|
||||||
@ -151,7 +155,7 @@ using namespace webrtc;
|
|||||||
Top:(const float)top
|
Top:(const float)top
|
||||||
Right:(const float)right
|
Right:(const float)right
|
||||||
Bottom:(const float)bottom {
|
Bottom:(const float)bottom {
|
||||||
return gles_renderer20_->SetCoordinates(zOrder, left, top, right, bottom);
|
return _gles_renderer20->SetCoordinates(zOrder, left, top, right, bottom);
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -130,6 +130,9 @@
|
|||||||
],
|
],
|
||||||
}],
|
}],
|
||||||
['OS=="ios"', {
|
['OS=="ios"', {
|
||||||
|
'xcode_settings': {
|
||||||
|
'CLANG_ENABLE_OBJC_ARC': 'YES',
|
||||||
|
},
|
||||||
'all_dependent_settings': {
|
'all_dependent_settings': {
|
||||||
'xcode_settings': {
|
'xcode_settings': {
|
||||||
'OTHER_LDFLAGS': [
|
'OTHER_LDFLAGS': [
|
||||||
|
Reference in New Issue
Block a user