diff options
Diffstat (limited to 'receiver')
| -rw-r--r-- | receiver/Makefile | 13 | ||||
| -rw-r--r-- | receiver/addons.make | 1 | ||||
| -rw-r--r-- | receiver/config.make | 142 | ||||
| -rw-r--r-- | receiver/libs/libndi.3.dylib | bin | 0 -> 2263988 bytes | |||
| -rw-r--r-- | receiver/obj/osx/Release/.compiler_flags | 1 | ||||
| -rwxr-xr-x | receiver/src/main.cpp | 45 | ||||
| -rwxr-xr-x | receiver/src/ofApp.cpp | 322 | ||||
| -rwxr-xr-x | receiver/src/ofApp.h | 81 | ||||
| -rwxr-xr-x | receiver/start | 2 |
9 files changed, 607 insertions, 0 deletions
diff --git a/receiver/Makefile b/receiver/Makefile new file mode 100644 index 0000000..177e172 --- /dev/null +++ b/receiver/Makefile @@ -0,0 +1,13 @@ +# Attempt to load a config.make file. +# If none is found, project defaults in config.project.make will be used. +ifneq ($(wildcard config.make),) + include config.make +endif + +# make sure the the OF_ROOT location is defined +ifndef OF_ROOT + OF_ROOT=$(realpath ../../..) +endif + +# call the project makefile! +include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk diff --git a/receiver/addons.make b/receiver/addons.make new file mode 100644 index 0000000..9850f54 --- /dev/null +++ b/receiver/addons.make @@ -0,0 +1 @@ +ofxNDI diff --git a/receiver/config.make b/receiver/config.make new file mode 100644 index 0000000..a2f4f86 --- /dev/null +++ b/receiver/config.make @@ -0,0 +1,142 @@ +################################################################################ +# CONFIGURE PROJECT MAKEFILE (optional) +# This file is where we make project specific configurations. +################################################################################ + +################################################################################ +# OF ROOT +# The location of your root openFrameworks installation +# (default) OF_ROOT = ../../.. +################################################################################ +OF_ROOT = ../../openFrameworks + +################################################################################ +# PROJECT ROOT +# The location of the project - a starting place for searching for files +# (default) PROJECT_ROOT = . (this directory) +# +################################################################################ +# PROJECT_ROOT = . + +################################################################################ +# PROJECT SPECIFIC CHECKS +# This is a project defined section to create internal makefile flags to +# conditionally enable or disable the addition of various features within +# this makefile. For instance, if you want to make changes based on whether +# GTK is installed, one might test that here and create a variable to check. +################################################################################ +# None + +################################################################################ +# PROJECT EXTERNAL SOURCE PATHS +# These are fully qualified paths that are not within the PROJECT_ROOT folder. +# Like source folders in the PROJECT_ROOT, these paths are subject to +# exlclusion via the PROJECT_EXLCUSIONS list. +# +# (default) PROJECT_EXTERNAL_SOURCE_PATHS = (blank) +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_EXTERNAL_SOURCE_PATHS = + +################################################################################ +# PROJECT EXCLUSIONS +# These makefiles assume that all folders in your current project directory +# and any listed in the PROJECT_EXTERNAL_SOURCH_PATHS are are valid locations +# to look for source code. The any folders or files that match any of the +# items in the PROJECT_EXCLUSIONS list below will be ignored. +# +# Each item in the PROJECT_EXCLUSIONS list will be treated as a complete +# string unless teh user adds a wildcard (%) operator to match subdirectories. +# GNU make only allows one wildcard for matching. The second wildcard (%) is +# treated literally. +# +# (default) PROJECT_EXCLUSIONS = (blank) +# +# Will automatically exclude the following: +# +# $(PROJECT_ROOT)/bin% +# $(PROJECT_ROOT)/obj% +# $(PROJECT_ROOT)/%.xcodeproj +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_EXCLUSIONS = + +################################################################################ +# PROJECT LINKER FLAGS +# These flags will be sent to the linker when compiling the executable. +# +# (default) PROJECT_LDFLAGS = -Wl,-rpath=./libs +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ + +# Currently, shared libraries that are needed are copied to the +# $(PROJECT_ROOT)/bin/libs directory. The following LDFLAGS tell the linker to +# add a runtime path to search for those shared libraries, since they aren't +# incorporated directly into the final executable application binary. +# TODO: should this be a default setting? +# PROJECT_LDFLAGS=-Wl,-rpath=./libs + +################################################################################ +# PROJECT DEFINES +# Create a space-delimited list of DEFINES. The list will be converted into +# CFLAGS with the "-D" flag later in the makefile. +# +# (default) PROJECT_DEFINES = (blank) +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_DEFINES = + +################################################################################ +# PROJECT CFLAGS +# This is a list of fully qualified CFLAGS required when compiling for this +# project. These CFLAGS will be used IN ADDITION TO the PLATFORM_CFLAGS +# defined in your platform specific core configuration files. These flags are +# presented to the compiler BEFORE the PROJECT_OPTIMIZATION_CFLAGS below. +# +# (default) PROJECT_CFLAGS = (blank) +# +# Note: Before adding PROJECT_CFLAGS, note that the PLATFORM_CFLAGS defined in +# your platform specific configuration file will be applied by default and +# further flags here may not be needed. +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_CFLAGS = + +################################################################################ +# PROJECT OPTIMIZATION CFLAGS +# These are lists of CFLAGS that are target-specific. While any flags could +# be conditionally added, they are usually limited to optimization flags. +# These flags are added BEFORE the PROJECT_CFLAGS. +# +# PROJECT_OPTIMIZATION_CFLAGS_RELEASE flags are only applied to RELEASE targets. +# +# (default) PROJECT_OPTIMIZATION_CFLAGS_RELEASE = (blank) +# +# PROJECT_OPTIMIZATION_CFLAGS_DEBUG flags are only applied to DEBUG targets. +# +# (default) PROJECT_OPTIMIZATION_CFLAGS_DEBUG = (blank) +# +# Note: Before adding PROJECT_OPTIMIZATION_CFLAGS, please note that the +# PLATFORM_OPTIMIZATION_CFLAGS defined in your platform specific configuration +# file will be applied by default and further optimization flags here may not +# be needed. +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_OPTIMIZATION_CFLAGS_RELEASE = +# PROJECT_OPTIMIZATION_CFLAGS_DEBUG = + +################################################################################ +# PROJECT COMPILERS +# Custom compilers can be set for CC and CXX +# (default) PROJECT_CXX = (blank) +# (default) PROJECT_CC = (blank) +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_CXX = +# PROJECT_CC = diff --git a/receiver/libs/libndi.3.dylib b/receiver/libs/libndi.3.dylib Binary files differnew file mode 100644 index 0000000..d079763 --- /dev/null +++ b/receiver/libs/libndi.3.dylib diff --git a/receiver/obj/osx/Release/.compiler_flags b/receiver/obj/osx/Release/.compiler_flags new file mode 100644 index 0000000..50bc4e0 --- /dev/null +++ b/receiver/obj/osx/Release/.compiler_flags @@ -0,0 +1 @@ +-Os -mtune=native -DNDEBUG -stdlib=libc++ -Wall -fexceptions -fpascal-strings -mmacosx-version-min=10.9 -D__MACOSX_CORE__ -fPIC -x objective-c++ -std=c++11 -I../../openFrameworks/libs/FreeImage/include -I../../openFrameworks/libs/boost/include -I../../openFrameworks/libs/boost/include/boost -I../../openFrameworks/libs/cairo/include -I../../openFrameworks/libs/cairo/include/cairo -I../../openFrameworks/libs/curl/include -I../../openFrameworks/libs/curl/include/curl -I../../openFrameworks/libs/fmodex/include -I../../openFrameworks/libs/freetype/include -I../../openFrameworks/libs/freetype/include/freetype2 -I../../openFrameworks/libs/freetype/include/freetype2/freetype -I../../openFrameworks/libs/freetype/include/freetype2/freetype/config -I../../openFrameworks/libs/freetype/include/freetype2/freetype/internal -I../../openFrameworks/libs/freetype/include/freetype2/freetype/internal/services -I../../openFrameworks/libs/glew/include -I../../openFrameworks/libs/glew/include/GL -I../../openFrameworks/libs/glfw/include -I../../openFrameworks/libs/glfw/include/GLFW -I../../openFrameworks/libs/glm/include -I../../openFrameworks/libs/glm/include/glm -I../../openFrameworks/libs/glm/include/glm/detail -I../../openFrameworks/libs/glm/include/glm/gtc -I../../openFrameworks/libs/glm/include/glm/gtx -I../../openFrameworks/libs/glm/include/glm/simd -I../../openFrameworks/libs/json/include -I../../openFrameworks/libs/kiss/include -I../../openFrameworks/libs/pugixml/include -I../../openFrameworks/libs/rtAudio/include -I../../openFrameworks/libs/tess2/include -I../../openFrameworks/libs/uriparser/include -I../../openFrameworks/libs/uriparser/include/uriparser -I../../openFrameworks/libs/utf8/include -I../../openFrameworks/libs/utf8/include/utf8 -I../../openFrameworks/libs/utf8cpp/include -I../../openFrameworks/libs/utf8cpp/include/utf8 -I../../openFrameworks/libs/openFrameworks -I../../openFrameworks/libs/openFrameworks/3d -I../../openFrameworks/libs/openFrameworks/app -I../../openFrameworks/libs/openFrameworks/communication -I../../openFrameworks/libs/openFrameworks/events -I../../openFrameworks/libs/openFrameworks/gl -I../../openFrameworks/libs/openFrameworks/graphics -I../../openFrameworks/libs/openFrameworks/math -I../../openFrameworks/libs/openFrameworks/sound -I../../openFrameworks/libs/openFrameworks/types -I../../openFrameworks/libs/openFrameworks/utils -I../../openFrameworks/libs/openFrameworks/video -I/work/workspace/raverony/receiver/libs -I/work/workspace/raverony/receiver/src -I/work/workspace/openFrameworks/addons/ofxNDI/src -I/work/workspace/openFrameworks/addons/ofxNDI/libs -I/work/workspace/openFrameworks/addons/ofxNDI/libs/linndi -I/work/workspace/openFrameworks/addons/ofxNDI/libs/linndi/include -I/work/workspace/openFrameworks/addons/ofxNDI/libs/linndi/lib -I/work/workspace/openFrameworks/addons/ofxNDI/libs/linndi/lib/osx -stdlib=libc++ -mmacosx-version-min=10.9 -v -framework Accelerate -framework QTKit -framework AGL -framework ApplicationServices -framework AudioToolbox -framework CoreAudio -framework CoreFoundation -framework CoreServices -framework OpenGL -framework IOKit -framework Cocoa -framework CoreVideo -framework AVFoundation -framework CoreMedia -framework QuartzCore -framework Security -framework LDAP diff --git a/receiver/src/main.cpp b/receiver/src/main.cpp new file mode 100755 index 0000000..0d13cee --- /dev/null +++ b/receiver/src/main.cpp @@ -0,0 +1,45 @@ +#include "ofMain.h" +#include "ofApp.h" + +/* + ========================================================================= + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + ========================================================================= +*/ + +//-------------------------------------------------------------- +// to change options for console window (Visual Studio) +// +// Properties > Linker > System > Subsystem +// for console : Windows (/SUBSYSTEM:CONSOLE) +// +// for Window : Windows (/SUBSYSTEM:WINDOWS) +// +// Click APPLY and OK. Then make changes to Main as below +//-------------------------------------------------------------- + +// for default console +//======================================================================== +int main() { +// +// for window without console +//======================================================================== +// int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { + ofSetupOpenGL(640, 360, OF_WINDOW); // <-------- setup the GL context + // this kicks off the running of my app + // can be OF_WINDOW or OF_FULLSCREEN + // pass in width and height too: + ofRunApp( new ofApp()); + +} diff --git a/receiver/src/ofApp.cpp b/receiver/src/ofApp.cpp new file mode 100755 index 0000000..60a48cd --- /dev/null +++ b/receiver/src/ofApp.cpp @@ -0,0 +1,322 @@ +/* + + OpenFrameworks NDI receiver + using the NewTek NDI SDK to receive frames via network + + Advanced example using a shader for BGRA-RGBA conversion and sender selection dialog + + http://NDI.NewTek.com + + Copyright (C) 2016-2017 Lynn Jarvis. + + http://www.spout.zeal.co + + With help from Harvey Buchan + + https://github.com/Harvey3141 + + ========================================================================= + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + ========================================================================= + + 13.10.16 - Addon receiver example created + 14.10.16 - Included received frame rate + 03.11.16 - Receive into image pixels directly + - Add a sender selection dialog + 05.11.16 - Note - dialog is Windows only + the ofxNDIdialog class is used separately by the application + and can be omitted along with resources + 09.02.17 - Updated to ofxNDI with Version 2 NDI SDK + - Added changes by Harvey Buchan to optionally + specify preferred pixel format in CreateReceiver + +*/ +#include "ofApp.h" + +//-------------------------------------------------------------- +void ofApp::setup() { + + ofBackground(0); + ofSetColor(255); + + // Set the window title to show that it is a receiver + ofSetWindowTitle("Openframeworks NDI receiver"); + cout << "NDI SDK copyright NewTek (http:\\NDI.NewTek.com)" << endl; + cout << "Press 'SPACE' to list NDI senders or RH click to open sender dialog" << endl; + + senderName[0] = 0; // The sender name used for display + nSenders = 0; // Total number of NDI senders + senderWidth = 0; // Sender width + senderHeight = 0; // Sender height + bNDIreceiver = false; // Receiver creation + + // Create an intial receiving image + ndiImage.allocate(ofGetWidth(), ofGetHeight(), OF_IMAGE_COLOR_ALPHA); + + // For received frame fps calculations - independent of the rendering rate + startTime = lastTime = frameTime = 0; + fps = frameRate = 1; // starting value + + +} // end setup + +//-------------------------------------------------------------- +void ofApp::update() { + +} + +//-------------------------------------------------------------- +void ofApp::draw() { + + char str[256]; + unsigned int width = 0; + unsigned int height = 0; + bool bResult = false; + + // Update the NDI sender list to find new senders + // There is no delay if no new senders are found + nSenders = ndiReceiver.FindSenders(); + + if(nSenders > 0) { + + // Has the user changed the sender index ? + if(ndiReceiver.SenderSelected()) { + // Release the current receiver. + // A new one is then created from the selected sender index. + ndiReceiver.ReleaseReceiver(); + bNDIreceiver = false; + } + + // Create a new receiver if one does not exist. + // We don't know the sender dimensions until a frame is received. + if(!bNDIreceiver) { + + // The receiver will detect which format a sender is using and convert + // the pixel buffer to BGRA for return. However, we can specify here + // that RGBA is the preferred format. + bNDIreceiver = ndiReceiver.CreateReceiver(NDIlib_recv_color_format_e_RGBX_RGBA); + // bNDIreceiver = ndiReceiver.CreateReceiver(); // default is BRRA + + // + // A receiver is created from an index into a list of sender names. + // The current user selected index is saved in the NDIreceiver class + // and is used to create the receiver unless you specify a particular index. + // + // The name of the sender can also be retrieved if you need it. + // If you specified a particular sender index to create the receiver + // use that index to retrieve it's name. + // + // In this application we use it to display the sender name. + // + + ndiReceiver.GetSenderName(senderName); + if(bNDIreceiver) + cout << "Created NDI receiver for " << senderName << endl; + + // Reset the starting values for frame rate calulations + fps = frameRate = 1; + + } + + } + + // Receive an image from the NDI sender + if(bNDIreceiver) { + + // If the NDI sender uses BGRA format, the received buffer is converted to rgba by ReceiveImage. + // Optionally you can flip the image if necessary. + + // !CHECKME MACOS + // ReceiveImage needs an unsigned char* so changed + // ndiImage.getPixels() to ndiImage.getPixels().getData() + // to avoid type error + if(ndiReceiver.ReceiveImage(ndiImage.getPixels().getData(), width, height, false)) { // receives as rgba + + ndiImage.update(); + + // ---------------------------- + // Calculate received frame fps + lastTime = startTime; + startTime = ofGetElapsedTimeMicros(); + frameTime = (startTime - lastTime)/1000000; // seconds + if( frameTime > 0.01) { + frameRate = floor(1.0/frameTime + 0.5); + // damping from a starting fps value + fps *= 0.95; + fps += 0.05*frameRate; + } + // ---------------------------- + + // Have the NDI sender dimensions changed ? + if(senderWidth != width || senderHeight != height) { + + // Update the sender dimensions + senderWidth = width; + senderHeight = height; + + // Update the receiving image size + ndiImage.allocate(senderWidth, senderHeight, OF_IMAGE_COLOR_ALPHA); + + } + } + + // + // Draw the current image. + // + // If receiveimage fails, the connection could be down so keep waiting for it to come back up. + // Or the frame rate of the NDI sender can be less than the receiver draw cycle. + // + if(bNDIreceiver) ndiImage.draw(0, 0, ofGetWidth(), ofGetHeight()); + + // Show fps etc. + if(nSenders > 0) { + if(bNDIreceiver) { + #ifdef _MSC_VER + sprintf_s(str, 256, "[%s] (%dx%d) - fps %2.0f", senderName, senderWidth, senderHeight, fps); + #else + // !CHECK MACOS + snprintf(str, 256, "[%s] (%dx%d) - fps %2.0f", senderName, senderWidth, senderHeight, fps); + str[255] = 0; + #endif + ofDrawBitmapString(str, 20, 30); + } + + if(nSenders == 1) { + ofDrawBitmapString("1 network source", 20, ofGetHeight()-20); + } + else { + #ifdef _MSC_VER + sprintf_s(str, 256, "%d network sources", nSenders); + #else + // !CHECK MACOS + snprintf(str, 256, "%d network sources", nSenders); + str[255] = 0; + #endif + ofDrawBitmapString(str, 20, ofGetHeight()-40); + ofDrawBitmapString("'SPACE' to list senders or RH click to open sender dialog", 20, ofGetHeight()-20); + } + } + } + else { + ofDrawBitmapString("Connecting . . .", 20, 30); + } + +} + + +//-------------------------------------------------------------- +void ofApp::keyPressed(int key) { + + char name[256]; + int index = key-48; + int nSenders = ndiReceiver.GetSenderCount(); + + if(key == ' ') { + // List all the senders + if(nSenders > 0) { + cout << "Number of NDI senders found: " << nSenders << endl; + for (int i = 0; i < nSenders; i++) { + ndiReceiver.GetSenderName(name, i); + cout << " Sender " << i << " [" << name << "]" << endl; + } + if(nSenders > 1) + cout << "Press key [0] to [" << nSenders-1 << "] to select a sender" << endl; + } + else + cout << "No NDI senders found" << endl; + } + else if(index >= 0 && index < nSenders) { + // Update the receiver with the returned index + // "SenderSelected" will then return true in Draw() to update the receiver + ndiReceiver.SetSenderIndex(index); + } +} + +//-------------------------------------------------------------- +void ofApp::keyReleased(int key){ + +} + +//-------------------------------------------------------------- +void ofApp::mousePressed(int x, int y, int button) { + + char name[256]; + int index = 0; + std::vector<std::string> senderlist; + + if(button == 2) { // RH button + // Get the senders into a list for the dialog + int nSenders = ndiReceiver.GetSenderCount(); + if(nSenders > 0) { + cout << "Number of NDI senders found: " << nSenders << endl; + for (int i = 0; i < nSenders; i++) { + ndiReceiver.GetSenderName(name, i); + senderlist.push_back(name); + cout << " Sender " << i << " [" << name << "]" << endl; + } + // Open the sender list dialog + // Returns true for OK, false for Cancel and the selected index + if(ndiDialog.SelectNDIPanel(senderlist, index)) { + // Update the receiver with the returned index + // "SenderSelected" will then return true in Draw() to update the receiver + ndiReceiver.SetSenderIndex(index); + // Show which sender was selected + ndiReceiver.GetSenderName(name, index); + cout << " Selected sender " << index << " [" << name << "]" << endl; + } + } + else + cout << "No NDI senders found" << endl; + } +} + +//-------------------------------------------------------------- +void ofApp::mouseMoved(int x, int y ){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseDragged(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseReleased(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseEntered(int x, int y){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseExited(int x, int y){ + +} + +//-------------------------------------------------------------- +void ofApp::windowResized(int w, int h){ + +} + +//-------------------------------------------------------------- +void ofApp::gotMessage(ofMessage msg){ + +} + +//-------------------------------------------------------------- +void ofApp::dragEvent(ofDragInfo dragInfo){ + +} diff --git a/receiver/src/ofApp.h b/receiver/src/ofApp.h new file mode 100755 index 0000000..d8a9526 --- /dev/null +++ b/receiver/src/ofApp.h @@ -0,0 +1,81 @@ +/* + + OpenFrameworks NDI receiver example + + using the NDI SDK to receive frames via network + + http://NDI.NewTek.com + + Copyright (C) 2016-2017 Lynn Jarvis. + + http://www.spout.zeal.co + + ========================================================================= + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + ========================================================================= +*/ +#pragma once + +#include "ofMain.h" +#include "ofxNDI.h" // NDI classes + +#include "ofxNDIdialog.h" // for the sender dialog +// +// Also if you want to use the sender selection dialog, +// include in your project from the ofxNDI addon source files : +// ofxNDIdialog.h +// ofxNDIdialog.cpp +// resource.h +// resource.rc +// If this conflicts with existing resources, you will need to include +// the code for the dialog within your own resource files and change +// identifiers as necessary. +// + +class ofApp : public ofBaseApp { + + public: + + void setup(); + void update(); + void draw(); + + void keyPressed(int key); + void keyReleased(int key); + void mouseMoved(int x, int y ); + void mouseDragged(int x, int y, int button); + void mousePressed(int x, int y, int button); + void mouseReleased(int x, int y, int button); + void mouseEntered(int x, int y); + void mouseExited(int x, int y); + void windowResized(int w, int h); + void dragEvent(ofDragInfo dragInfo); + void gotMessage(ofMessage msg); + + ofxNDIreceiver ndiReceiver; // NDI receiver object + ofxNDIdialog ndiDialog; // for the sender dialog + + ofImage ndiImage; // Image used for pixel transfer and display + char senderName[256]; // Sender name used by a receiver + int nSenders; + unsigned int senderWidth; + unsigned int senderHeight; + bool bNDIreceiver; + + // For received frame fps calculations + double startTime, lastTime, frameTime, frameRate, fps; + + + +}; diff --git a/receiver/start b/receiver/start new file mode 100755 index 0000000..ae5a2e8 --- /dev/null +++ b/receiver/start @@ -0,0 +1,2 @@ +mkdir bin/receiver.app/Contents/MacOS/@rpath +cp libs/libndi.3.dylib bin/receiver.app/Contents/MacOS/@rpath/ |
