diff --git a/src/VideoPrefsVC.mm b/src/VideoPrefsVC.mm index f86ed47f1f40a2604b0ad49841420b6a315b95df..c99f4ac95c25e5a3e18de1129619103dfb8c2562 100644 --- a/src/VideoPrefsVC.mm +++ b/src/VideoPrefsVC.mm @@ -99,17 +99,12 @@ QMetaObject::Connection previewStopped; } - // check if preview has to be started/stopped by this controller - self.shouldHandlePreview = !Video::PreviewManager::instance().isPreviewing(); - [previewView setWantsLayer:YES]; [previewView setLayer:[CALayer layer]]; [previewView.layer setBackgroundColor:[NSColor blackColor].CGColor]; [previewView.layer setContentsGravity:kCAGravityResizeAspect]; [previewView.layer setFrame:previewView.frame]; [previewView.layer setBounds:previewView.frame]; - - [self connectPreviewSignals]; } - (IBAction)chooseDevice:(id)sender { @@ -135,32 +130,33 @@ QMetaObject::Connection previewStopped; QObject::disconnect(frameUpdated); QObject::disconnect(previewStopped); QObject::disconnect(previewStarted); + previewStarted = QObject::connect(&Video::PreviewManager::instance(), - &Video::PreviewManager::previewStarted, - [=](Video::Renderer* renderer) { - NSLog(@"Preview started"); - QObject::disconnect(frameUpdated); - frameUpdated = QObject::connect(renderer, - &Video::Renderer::frameUpdated, - [=]() { - [self renderer:Video::PreviewManager::instance().previewRenderer() renderFrameForView:previewView]; - }); - }); + &Video::PreviewManager::previewStarted, + [=](Video::Renderer* renderer) { + NSLog(@"Preview started"); + QObject::disconnect(frameUpdated); + frameUpdated = QObject::connect(renderer, + &Video::Renderer::frameUpdated, + [=]() { + [self renderer:Video::PreviewManager::instance().previewRenderer() renderFrameForView:previewView]; + }); + }); previewStopped = QObject::connect(&Video::PreviewManager::instance(), - &Video::PreviewManager::previewStopped, - [=](Video::Renderer* renderer) { - NSLog(@"Preview stopped"); - QObject::disconnect(frameUpdated); - [previewView.layer setContents:nil]; - }); + &Video::PreviewManager::previewStopped, + [=](Video::Renderer* renderer) { + NSLog(@"Preview stopped"); + QObject::disconnect(frameUpdated); + [previewView.layer setContents:nil]; + }); frameUpdated = QObject::connect(Video::PreviewManager::instance().previewRenderer(), - &Video::Renderer::frameUpdated, - [=]() { - [self renderer:Video::PreviewManager::instance().previewRenderer() + &Video::Renderer::frameUpdated, + [=]() { + [self renderer:Video::PreviewManager::instance().previewRenderer() renderFrameForView:previewView]; - }); + }); } -(void) renderer: (Video::Renderer*)renderer renderFrameForView:(NSView*) view @@ -197,6 +193,10 @@ QMetaObject::Connection previewStopped; - (void) viewWillAppear { + // check if preview has to be started/stopped by this controller + self.shouldHandlePreview = !Video::PreviewManager::instance().previewRenderer()->isRendering(); + + [self connectPreviewSignals]; if (self.shouldHandlePreview) { Video::PreviewManager::instance().startPreview(); } @@ -204,6 +204,9 @@ QMetaObject::Connection previewStopped; - (void)viewWillDisappear { + QObject::disconnect(frameUpdated); + QObject::disconnect(previewStopped); + QObject::disconnect(previewStarted); if (self.shouldHandlePreview) { Video::PreviewManager::instance().stopPreview(); }