[vlc-commits] macosx: Add Renderer Dialog
Marvin Scholz
git at videolan.org
Fri Jun 17 17:16:17 CEST 2016
vlc | branch: master | Marvin Scholz <epirat07 at gmail.com> | Thu Jun 16 23:54:18 2016 +0200| [6f2093a7e443b06b6fd13346eddb1fff6c7f0e7b] | committer: Felix Paul Kühne
macosx: Add Renderer Dialog
This adds a dialog to choose a renderer discovered with VLCRendererDiscovery, this allows for example to render to Chromecast in the future.
Additionally edited the Makefile for the new classes to be compiled.
Signed-off-by: Felix Paul Kühne <fkuehne at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6f2093a7e443b06b6fd13346eddb1fff6c7f0e7b
---
modules/gui/macosx/Makefile.am | 5 +-
modules/gui/macosx/VLCRendererDialog.h | 35 ++++++++
modules/gui/macosx/VLCRendererDialog.m | 155 ++++++++++++++++++++++++++++++++
3 files changed, 194 insertions(+), 1 deletion(-)
diff --git a/modules/gui/macosx/Makefile.am b/modules/gui/macosx/Makefile.am
index 1210d47..787f1cb 100644
--- a/modules/gui/macosx/Makefile.am
+++ b/modules/gui/macosx/Makefile.am
@@ -81,4 +81,7 @@ libmacosx_plugin_la_SOURCES = \
VLCHUDButtonCell.h VLCHUDButtonCell.m \
VLCHUDCheckboxCell.h VLCHUDCheckboxCell.m \
VLCHUDRadiobuttonCell.h VLCHUDRadiobuttonCell.m \
- VLCHUDTextFieldCell.h VLCHUDTextFieldCell.m
+ VLCHUDTextFieldCell.h VLCHUDTextFieldCell.m \
+ VLCRendererDiscovery.h VLCRendererDiscovery.m \
+ VLCRendererItem.h VLCRendererItem.m \
+ VLCRendererDialog.h VLCRendererDialog.m
diff --git a/modules/gui/macosx/VLCRendererDialog.h b/modules/gui/macosx/VLCRendererDialog.h
new file mode 100644
index 0000000..4999294
--- /dev/null
+++ b/modules/gui/macosx/VLCRendererDialog.h
@@ -0,0 +1,35 @@
+/*****************************************************************************
+ * VLCRendererDialog.h: View controller class for the renderer dialog
+ *****************************************************************************
+ * Copyright (C) 2016 VLC authors and VideoLAN
+ * $Id$
+ *
+ * Authors: Marvin Scholz <epirat07 at gmail dot com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import <Cocoa/Cocoa.h>
+
+#import "VLCRendererItem.h"
+#import "VLCRendererDiscovery.h"
+
+ at interface VLCRendererDialog : NSWindowController <VLCRendererDiscoveryDelegate, NSWindowDelegate>
+
+ at property NSMutableArray<VLCRendererItem*> *rendererItems;
+
+- (IBAction)selectRenderer:(id)sender;
+
+ at end
diff --git a/modules/gui/macosx/VLCRendererDialog.m b/modules/gui/macosx/VLCRendererDialog.m
new file mode 100644
index 0000000..f2f2d16
--- /dev/null
+++ b/modules/gui/macosx/VLCRendererDialog.m
@@ -0,0 +1,155 @@
+/*****************************************************************************
+ * VLCRendererDialog.m: View controller class for the renderer dialog
+ *****************************************************************************
+ * Copyright (C) 2016 VLC authors and VideoLAN
+ * $Id$
+ *
+ * Authors: Marvin Scholz <epirat07 at gmail dot com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#import "VLCRendererDialog.h"
+
+#import "VLCRendererItem.h"
+#import "intf.h"
+
+#include <vlc_renderer_discovery.h>
+
+
+ at interface VLCRendererDialog ()
+{
+ IBOutlet NSTableView *tableView;
+ IBOutlet NSArrayController *arrayController;
+
+ NSMutableArray<VLCRendererDiscovery*> *renderer_discoveries;
+
+ intf_thread_t *p_intf;
+ vlc_renderer_discovery *p_rd;
+}
+ at end
+
+ at implementation VLCRendererDialog
+
+- (id)init
+{
+ self = [super initWithWindowNibName:@"VLCRendererDialog"];
+ if (self) {
+ _rendererItems = [[NSMutableArray alloc] init];
+ renderer_discoveries = [[NSMutableArray alloc] initWithCapacity:1];
+ p_intf = getIntf();
+ }
+ return self;
+}
+
+- (void)dealloc
+{
+ [self stopRendererDiscoveries];
+ [self clearRendererDiscoveries];
+}
+
+- (void)windowDidLoad
+{
+ [super windowDidLoad];
+ [self.window setDelegate:self];
+ [self.window setTitle:_NS("Renderer selection")];
+
+ [self loadRendererDiscoveries];
+}
+
+- (void)windowWillClose:(NSNotification *)notification
+{
+ // Stop all renderer discoveries here!
+ [self stopRendererDiscoveries];
+}
+
+- (void)showWindow:(id)sender
+{
+ // Start all renderer discoveries here!
+ [self startRendererDiscoveries];
+ return [super showWindow:sender];
+}
+
+- (void)loadRendererDiscoveries
+{
+ playlist_t *playlist = pl_Get(p_intf);
+
+ // Service Discovery subnodes
+ char **ppsz_longnames;
+ char **ppsz_names;
+
+ if (vlc_rd_get_names(playlist, &ppsz_names, &ppsz_longnames) != VLC_SUCCESS) {
+ return;
+ }
+ char **ppsz_name = ppsz_names;
+ char **ppsz_longname = ppsz_longnames;
+
+ for( ; *ppsz_name; ppsz_name++, ppsz_longname++) {
+ VLCRendererDiscovery *dc = [[VLCRendererDiscovery alloc] initWithName:*ppsz_name andLongname:*ppsz_longname];
+ [dc setDelegate:self];
+ [dc startDiscovery];
+ [renderer_discoveries addObject:dc];
+ }
+ free(ppsz_names);
+ free(ppsz_longnames);
+}
+
+- (void)clearRendererDiscoveries
+{
+ [renderer_discoveries removeAllObjects];
+}
+
+- (void)startRendererDiscoveries
+{
+ for (VLCRendererDiscovery *dc in renderer_discoveries) {
+ [dc startDiscovery];
+ }
+}
+
+- (void)stopRendererDiscoveries
+{
+ for (VLCRendererDiscovery *dc in renderer_discoveries) {
+ [dc stopDiscovery];
+ }
+}
+
+- (IBAction)selectRenderer:(id)sender
+{
+ playlist_t *playlist = pl_Get(p_intf);
+ VLCRendererItem* item = [arrayController.selectedObjects firstObject];
+ if (item) {
+ [item setSoutForPlaylist:playlist];
+ } else {
+ [self unsetSoutForPlaylist:playlist];
+ }
+}
+
+- (void)unsetSoutForPlaylist:(playlist_t*)playlist
+{
+ var_SetString(playlist, "sout", "");
+}
+
+#pragma mark VLCRendererDiscoveryDelegate methods
+- (void)addedRendererItem:(VLCRendererItem *)item from:(VLCRendererDiscovery *)sender
+{
+ [arrayController addObject:item];
+}
+
+- (void)removedRendererItem:(VLCRendererItem *)item from:(VLCRendererDiscovery *)sender
+{
+ [arrayController removeObject:item];
+}
+
+ at end
More information about the vlc-commits
mailing list