diff --git a/.gitignore b/.gitignore index 7215b1e784..bc2a26572c 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,6 @@ m4/lt~obsolete.m4 _sync.bat _sync.sh to_sync/ +.DS_Store +src/projectM-sdl/build/ +src/libprojectM/build/ diff --git a/mac/config.h b/mac/config.h new file mode 100644 index 0000000000..71c15c0c71 --- /dev/null +++ b/mac/config.h @@ -0,0 +1,3 @@ +#define projectm_mac 1 + + diff --git a/src/libprojectM/libprojectM.xcodeproj/project.pbxproj b/src/libprojectM/libprojectM.xcodeproj/project.pbxproj index 6eb45afbb0..19d44ad932 100644 --- a/src/libprojectM/libprojectM.xcodeproj/project.pbxproj +++ b/src/libprojectM/libprojectM.xcodeproj/project.pbxproj @@ -671,7 +671,7 @@ 161789B8207A675B00D3B0C8 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0920; + LastUpgradeCheck = 1130; ORGANIZATIONNAME = MVSTG; TargetAttributes = { 1612C9A3207A855D00862A3A = { @@ -698,6 +698,7 @@ hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = 161789B7207A675B00D3B0C8; productRefGroup = 161789C1207A675B00D3B0C8 /* Products */; @@ -884,6 +885,7 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; @@ -891,6 +893,7 @@ CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -921,6 +924,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../mac", "$(SRCROOT)/../..", "$(SRCROOT)/Renderer", "$(SRCROOT)/", @@ -948,6 +952,7 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; @@ -955,6 +960,7 @@ CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -982,6 +988,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../mac", "$(SRCROOT)/../..", "$(SRCROOT)/Renderer", "$(SRCROOT)/", diff --git a/src/projectM-sdl/SDLprojectM.xcodeproj/project.pbxproj b/src/projectM-sdl/SDLprojectM.xcodeproj/project.pbxproj index f2125d92f7..19cc0d7e72 100644 --- a/src/projectM-sdl/SDLprojectM.xcodeproj/project.pbxproj +++ b/src/projectM-sdl/SDLprojectM.xcodeproj/project.pbxproj @@ -16,7 +16,6 @@ 168F7156211248E4001806E7 /* SDLprojectM in Executable */ = {isa = PBXBuildFile; fileRef = C34521441BF02294001707D2 /* SDLprojectM */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 168F715921124C0E001806E7 /* config.inp in Support files */ = {isa = PBXBuildFile; fileRef = 16B52AAA21105A6900830F34 /* config.inp */; }; 168F715A21124C14001806E7 /* fonts in Support files */ = {isa = PBXBuildFile; fileRef = C3D30B8F1BF02BE5009AAACD /* fonts */; }; - 168F715C21124CDF001806E7 /* SDL2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 166853F02105E2850042793A /* SDL2.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 168F718021126256001806E7 /* AppIcon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 168F717F21126256001806E7 /* AppIcon.icns */; }; C345215C1BF025A9001707D2 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C345215B1BF025A9001707D2 /* OpenGL.framework */; }; C345215E1BF025CF001707D2 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C345215D1BF025CF001707D2 /* CoreFoundation.framework */; }; @@ -121,7 +120,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - 168F715C21124CDF001806E7 /* SDL2.framework in Frameworks */, ); name = Frameworks; runOnlyForDeploymentPostprocessing = 0; @@ -140,8 +138,6 @@ /* Begin PBXFileReference section */ 1612C98C207A807000862A3A /* libprojectM.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = libprojectM.xcodeproj; path = ../libprojectM/libprojectM.xcodeproj; sourceTree = ""; }; - 166853F02105E2850042793A /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL2.framework; path = ../../../../../../Library/Frameworks/SDL2.framework; sourceTree = ""; }; - 166853F22105E2CF0042793A /* SDL2.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = SDL2.framework; sourceTree = ""; }; 168F714921120210001806E7 /* projectM SDL.app */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "projectM SDL.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 168F714B21120211001806E7 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 168F717F21126256001806E7 /* AppIcon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = AppIcon.icns; sourceTree = ""; }; @@ -190,7 +186,6 @@ 161070CE1F7041B0001905AB /* Frameworks */ = { isa = PBXGroup; children = ( - 166853F22105E2CF0042793A /* SDL2.framework */, C345215D1BF025CF001707D2 /* CoreFoundation.framework */, C345215B1BF025A9001707D2 /* OpenGL.framework */, ); @@ -242,7 +237,6 @@ C345214E1BF022A5001707D2 /* projectM_SDL_main.cpp */, 16B52AAA21105A6900830F34 /* config.inp */, 16B52AA8211054E900830F34 /* projectMSDL-pkg.plist */, - 166853F02105E2850042793A /* SDL2.framework */, 1612C98C207A807000862A3A /* libprojectM.xcodeproj */, C307DFD31D565B57002F6B9E /* presets */, 16A42128207802AF006F30CE /* Dependencies */, @@ -316,7 +310,7 @@ C345213C1BF02293001707D2 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0920; + LastUpgradeCheck = 1130; ORGANIZATIONNAME = int80; TargetAttributes = { 168F714821120210001806E7 = { @@ -331,11 +325,11 @@ }; buildConfigurationList = C345213F1BF02293001707D2 /* Build configuration list for PBXProject "SDLprojectM" */; compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( - English, en, + Base, ); mainGroup = C345213B1BF02293001707D2; productRefGroup = C34521451BF02294001707D2 /* Products */; @@ -535,6 +529,7 @@ C34521491BF02294001707D2 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -543,12 +538,14 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -592,6 +589,7 @@ C345214A1BF02294001707D2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; @@ -600,12 +598,14 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -646,15 +646,22 @@ CODE_SIGN_STYLE = Manual; DEVELOPMENT_TEAM = ""; GCC_LINK_WITH_DYNAMIC_LIBRARIES = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../libprojectM", + /usr/local/include, + "$(SRCROOT)/../../mac", + ); INFOPLIST_FILE = "$(SRCROOT)/projectM-SDL/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "@executable_path/ @loader_path/../Frameworks/ @loader_path/Frameworks/"; - OTHER_LDFLAGS = ( - "-framework", - SDL2, + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/../projectM-iTunes/macos/contrib", + /usr/local/lib, ); + OTHER_LDFLAGS = "-lSDL2"; PRODUCT_BUNDLE_IDENTIFIER = net.projectm.sdl; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + SYMROOT = "$(SRCROOT)/build"; }; name = Debug; }; @@ -665,15 +672,22 @@ CODE_SIGN_STYLE = Manual; DEVELOPMENT_TEAM = ""; GCC_LINK_WITH_DYNAMIC_LIBRARIES = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../libprojectM", + /usr/local/include, + "$(SRCROOT)/../../mac", + ); INFOPLIST_FILE = "$(SRCROOT)/projectM-SDL/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "@executable_path/ @loader_path/../Frameworks/ @loader_path/Frameworks/"; - OTHER_LDFLAGS = ( - "-framework", - SDL2, + LIBRARY_SEARCH_PATHS = ( + "$(SRCROOT)/../projectM-iTunes/macos/contrib", + /usr/local/lib, ); + OTHER_LDFLAGS = "-lSDL2"; PRODUCT_BUNDLE_IDENTIFIER = net.projectm.sdl; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; + SYMROOT = "$(SRCROOT)/build"; }; name = Release; }; diff --git a/src/projectM-sdl/pmSDL.cpp b/src/projectM-sdl/pmSDL.cpp index e46b685f4e..944c18e9ea 100644 --- a/src/projectM-sdl/pmSDL.cpp +++ b/src/projectM-sdl/pmSDL.cpp @@ -75,30 +75,18 @@ SDL_AudioDeviceID projectMSDL::selectAudioInput(int _count) { return 0; } -int projectMSDL::openAudioInput() { - // get audio driver name (static) - const char* driver_name = SDL_GetCurrentAudioDriver(); - SDL_Log("Using audio driver: %s\n", driver_name); - - // get audio input device - unsigned int i, count2 = SDL_GetNumAudioDevices(true); // capture, please - if (count2 == 0) { - SDL_LogCritical(SDL_LOG_CATEGORY_APPLICATION, "No audio capture devices found"); - SDL_Quit(); - } - for (i = 0; i < count2; i++) { - SDL_Log("Found audio capture device %d: %s", i, SDL_GetAudioDeviceName(i, true)); - } +int projectMSDL::toggleAudioInput() { + + CurAudioDevice++; + if (CurAudioDevice >= NumAudioDevices) + CurAudioDevice = 0; + selectedAudioDevice = CurAudioDevice; + initAudioInput(); + return 1; +} - SDL_AudioDeviceID selectedAudioDevice = 0; // device to open - if (count2 > 1) { - // need to choose which input device to use - selectedAudioDevice = selectAudioInput(count2); - if (selectedAudioDevice > count2) { - SDL_LogCritical(SDL_LOG_CATEGORY_APPLICATION, "No audio input device specified."); - SDL_Quit(); - } - } +int projectMSDL::initAudioInput() { + // params for audio input SDL_AudioSpec want, have; @@ -128,6 +116,41 @@ int projectMSDL::openAudioInput() { audioSampleCount = have.samples; audioFormat = have.format; audioInputDevice = audioDeviceID; + + return 1; +} + +int projectMSDL::openAudioInput() { + // get audio driver name (static) + const char* driver_name = SDL_GetCurrentAudioDriver(); + SDL_Log("Using audio driver: %s\n", driver_name); + + // get audio input device + unsigned int i; + NumAudioDevices = SDL_GetNumAudioDevices(true); // capture, please + + CurAudioDevice = 0; + if (NumAudioDevices == 0) { + SDL_LogCritical(SDL_LOG_CATEGORY_APPLICATION, "No audio capture devices found"); + SDL_Quit(); + } + for (i = 0; i < NumAudioDevices; i++) { + SDL_Log("Found audio capture device %d: %s", i, SDL_GetAudioDeviceName(i, true)); + } + + // device to open + selectedAudioDevice = 0; + if (NumAudioDevices > 1) { + // need to choose which input device to use + selectedAudioDevice = selectAudioInput(CurAudioDevice); + if (selectedAudioDevice > NumAudioDevices) { + SDL_LogCritical(SDL_LOG_CATEGORY_APPLICATION, "No audio input device specified."); + SDL_Quit(); + } + } + + initAudioInput(); + return 1; } @@ -267,6 +290,13 @@ void projectMSDL::keyHandler(SDL_Event *sdl_evt) { return; } break; + case SDLK_i: + if (sdl_mod & KMOD_LGUI || sdl_mod & KMOD_RGUI || sdl_mod & KMOD_LCTRL) + { + toggleAudioInput(); + return; // handled + } + break; case SDLK_s: if (sdl_mod & KMOD_LGUI || sdl_mod & KMOD_RGUI || sdl_mod & KMOD_LCTRL) { @@ -402,12 +432,14 @@ void projectMSDL::pollEvent() { { switch (evt.type) { case SDL_WINDOWEVENT: + int h, w; + SDL_GL_GetDrawableSize(win,&w,&h); switch (evt.window.event) { - case SDL_WINDOWEVENT_RESIZED: - resize(evt.window.data1, evt.window.data2); + case SDL_WINDOWEVENT_RESIZED: + resize(w, h); break; - case SDL_WINDOWEVENT_SIZE_CHANGED: - resize(evt.window.data1, evt.window.data2); + case SDL_WINDOWEVENT_SIZE_CHANGED: + resize(w, h); break; } break; diff --git a/src/projectM-sdl/pmSDL.hpp b/src/projectM-sdl/pmSDL.hpp index 7c19a1f497..bd55ac0a2c 100644 --- a/src/projectM-sdl/pmSDL.hpp +++ b/src/projectM-sdl/pmSDL.hpp @@ -88,11 +88,12 @@ class projectMSDL : public projectM { bool done; - projectMSDL(Settings settings, int flags); projectMSDL(std::string config_file, int flags); void init(SDL_Window *window, SDL_GLContext *glCtx, const bool renderToTexture = false); int openAudioInput(); + int toggleAudioInput(); + int initAudioInput(); void beginAudioCapture(); void endAudioCapture(); void stretchMonitors(); @@ -120,11 +121,14 @@ class projectMSDL : public projectM { GLuint textureID = 0; // audio input device characteristics + unsigned int NumAudioDevices; + unsigned int CurAudioDevice; unsigned short audioChannelsCount; unsigned short audioSampleRate; unsigned short audioSampleCount; SDL_AudioFormat audioFormat; SDL_AudioDeviceID audioDeviceID; + SDL_AudioDeviceID selectedAudioDevice; static void audioInputCallbackF32(void *userdata, unsigned char *stream, int len); static void audioInputCallbackS16(void *userdata, unsigned char *stream, int len); diff --git a/src/projectM-sdl/projectM_SDL_main.cpp b/src/projectM-sdl/projectM_SDL_main.cpp index b02ed3fa63..7251909b2a 100644 --- a/src/projectM-sdl/projectM_SDL_main.cpp +++ b/src/projectM-sdl/projectM_SDL_main.cpp @@ -244,7 +244,6 @@ srand((int)(time(NULL))); #if UNLOCK_FPS setenv("vblank_mode", "0", 1); #endif - SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO); if (! SDL_VERSION_ATLEAST(2, 0, 5)) { @@ -278,9 +277,10 @@ srand((int)(time(NULL))); #endif - SDL_Window *win = SDL_CreateWindow("projectM", 0, 0, width, height, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE); + SDL_Window *win = SDL_CreateWindow("projectM", 0, 0, width, height, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI); + + SDL_GL_GetDrawableSize(win,&width,&height); - #if STEREOSCOPIC_SBS // enable stereo