Skip to content

macOS support / need your help with trying 0.4.x out on macOS (branch "0.4.x-macos") #246

Closed

Description

@hartwork

Hi! 👋

The CI covers macOS for 0.4.x for two weeks now, there is an input plugin for PortAudio that supports macOS and there have been build system fixes for macOS to make CI integration possible in the first place.

However I have no access to macOS, all my boxes run Linux (and a pile of GNU). I am looking for people to help answer these macOS questions regarding libvisual 0.4.x:

  1. Does it compile out of the box?
  2. If it doesn't compile, did ./configure complain and helped figuring out what was needed?
  3. Does lv-tool-0.4 start and show a spinning 3D GL spectrum?
  4. Does lv-tool-0.4 use actual audio input when run with --input portaudio (and does it use the microphone or the audio that other apps are playing)?

If you can help answer these questions from practical experience, that would rock.
To make that easier for you here's the quickest way I know:

Clone the right branch

git clone --branch 0.4.x-macos https://github.com/Libvisual/libvisual
cd libvisual

Install homebrew packages

EDIT 2023-02-08: Add package autoconf-archive this list of packages to install locally:

brew install \
automake \
bison \
doxygen \
flex \
gettext \
graphviz \
gstreamer \
gtk+3 \
jack \
libpng \
luajit \
mesa \
mesa-glu \
orc \
pkg-config \
portaudio \
sdl12-compat

Compile and run

Here's what I would put in a script run-0.4-macos.sh, this is very close to what I do on Linux, locally:

#! /usr/bin/env bash
set -eux

LV_INSTALL_PREFIX="${PWD}"/INSTALL_PREFIX

configure_args=(
  --prefix="${LV_INSTALL_PREFIX}"

  # In case you would like to play with AddressSanitizer:
  #CFLAGS="-O1 -pipe -g -fsanitize=address -fno-omit-frame-pointer"
  #CXXFLAGS="-O1 -pipe -g -fsanitize=address -fno-omit-frame-pointer"
  #LDFLAGS="-g -fsanitize=address"
)

for i in libvisual libvisual-plugins ; do
  ( cd "$i" && NOCONFIGURE=please ./autogen.sh )
done

pushd libvisual
  ./configure "${configure_args[@]}"
  make -j$(nproc)
  make install
popd

pushd libvisual-plugins
  PKG_CONFIG_PATH="${LV_INSTALL_PREFIX}"/lib/pkgconfig/ \
    ./configure "${configure_args[@]}"
  make -j$(nproc)
  make install
popd

lv_tool_env=(
  #ASAN_OPTIONS=detect_leaks=0
  DYLD_LIBRARY_PATH="${LV_INSTALL_PREFIX}"/lib/
)

exec env "${lv_tool_env[@]}" "${LV_INSTALL_PREFIX}"/bin/lv-tool-0.4 --input portaudio "$@"

What you should see:

  • Compile output including unfixed warnings
  • A window titled "lv-tool" looking a bit like this, but animated:

Screenshot_20230203_195616_lv_tool_0_4

For anything odd that you find except compiler warnings, please open dedicated bug reports at https://github.com/Libvisual/libvisual/issues . Many thanks in advance! 🙏

Best, Sebastian

Activity

  1. ChrisScheffler commented on Feb 4, 2023

    @ChrisScheffler

    CPU: M1 Pro (arm64)
    MacOS: Ventura 13.0.1
    Kernel: Darwin Kernel Version 22.1.0

    Does it compile out of the box?

    no

    If it doesn't compile, did ./configure complain and helped figuring out what was needed?

    no, it fails at make

    Does lv-tool-0.4 start and show a spinning 3D GL spectrum?

    (after successful compile) it does start, but with a blank window

    Does lv-tool-0.4 use actual audio input when run with --input portaudio (and does it use the microphone or the audio that other apps are playing)?

    no
    libvisual CRITICAL: lv-tool-0.4: inp_portaudio_upload(): assertion `priv->stream != NULL' failed

    image

    Workaround for compile

    make fails with default compiler clang

    1. install alternative compiler gcc 11 via brew brew install gcc@11
    2. override compiler flags for configure & make
      2.1. ./configure CC=/opt/homebrew/bin/gcc-11 CXX=/opt/homebrew/bin/g++-11
      2.2. make CC=/opt/homebrew/bin/gcc-11 CXX=/opt/homebrew/bin/g++-11

    notes for run-0.4-macos.sh

    1. nproc is not available by default
    2. make install requires root privileges
  2. idleberg commented on Feb 4, 2023

    @idleberg

    For comparison, here's the result on my rather old setup:

    System Version: macOS 10.15.7 (19H2026)
    Kernel Version: Darwin 19.6.0
    Model Name: Mac mini
    Model Identifier: Macmini8,1
    Processor Name: 6-Core Intel Core i5

    The output of your demo script:

    
    + LV_INSTALL_PREFIX=/Users/jan/Desktop/libvisual/INSTALL_PREFIX
    + configure_args=(--prefix="${LV_INSTALL_PREFIX}")
    + for i in libvisual libvisual-plugins
    + cd libvisual
    + NOCONFIGURE=please
    + ./autogen.sh
    autoreconf: export WARNINGS=
    autoreconf: Entering directory '.'
    autoreconf: running: autopoint --force
    autoreconf: running: aclocal --force -I m4
    autoreconf: configure.ac: tracing
    autoreconf: running: glibtoolize --copy --force
    autoreconf: configure.ac: not using Intltool
    autoreconf: configure.ac: not using Gtkdoc
    autoreconf: running: aclocal --force -I m4
    autoreconf: running: /usr/local/Cellar/autoconf/2.71/bin/autoconf --force
    configure.ac:101: error: possibly undefined macro: AC_MSG_ERROR
          If this token and others are legitimate, please use m4_pattern_allow.
          See the Autoconf documentation.
    autoreconf: error: /usr/local/Cellar/autoconf/2.71/bin/autoconf failed with exit status: 1
    
  3. hartwork commented on Feb 5, 2023

    @hartwork
    MemberAuthor

    Thank you! 👍 👍 That's more and more severe trouble than I expected.

    @ChrisScheffler regarding your report:

    • Is there no other error output before the priv->stream != NULL? It would mean that PortAudio failed to open the stream but also pretended it worked (thinking line visual_log_return_val_if_fail (open_error == paNoError, -3);)
    • Any ideas on why PortAudio could have trouble opening the microphone on your system? Are you aware of other apps using PortAudio that work fine for you on macOS? The only two things I can think of right now are stereo versus mono (currently tries stereo) and permission problems. For permissions, someone has ideas here: macOS 10.15 error opening audio: Internal PortAudio error pure-data/pure-data#1208 (comment) .
    • My guess on the blank window is that we'd need to link against macOS -framework OpenGL rather than homebrew's Mesa then.
    • Regarding the Clang compile error, could you share the error, the clang version and whether it's from homebrew or macOS very own?
    • nproc is GNU coreutils, right, coreutils was is not in the list for homebrew to install, my bad.
    • Did make install require root despite --prefix="${LV_INSTALL_PREFIX}"? If so, did you find why?

    @idleberg regarding the AC_MSG_ERROR, is this with pkg-config installed, did you run the homebrew install list mentioned above? From what this reads it seems to happen when pkg-config is not installed.

  4. hartwork commented on Feb 5, 2023

    @hartwork
    MemberAuthor

    @idleberg PS: Alternatively, could it be that there are multiple copies of pkg-config and the wrong one wins the ${PATH} race? Does which pkg-config point at homebrew? Autoconf tries to satisfy macro PKG_PROG_PKG_CONFIG and it needs file pkg.m4 for that — my copy is at /usr/share/aclocal/pkg.m4. If the wrong pkg-config looks in effectively the wrong place, maybe that would cause the error.

  5. idleberg commented on Feb 5, 2023

    @idleberg

    Homebrew gave me some warnings when installing the dependencies. Basically, they don't guarantee that installing "formalas" will continue work for an outdated OS. I tried again and I'm now getting this:

    =====================================================================
    LIBVISUAL, AN AUDIO VISUALISATION ABSTRACTION LIBRARY, VERSION 0.4.1
    =====================================================================
    
    install path                         : ~/libvisual/INSTALL_PREFIX/lib
    plugins base directory               : /Users/jan/Desktop/libvisual/INSTALL_PREFIX/lib/libvisual-0.4
    compiler                             : gcc
    debug enabled                        : no
    
    ++ nproc
    + make -j6
    /Library/Developer/CommandLineTools/usr/bin/make  all-recursive
    Making all in libvisual
    make[2]: Nothing to be done for `all'.
    Making all in po
    make[2]: Nothing to be done for `all'.
    Making all in examples
    make[2]: Nothing to be done for `all'.
    Making all in tools/lv-tool
    g++ -DHAVE_CONFIG_H -I. -I../..  -I../.. -I../../libvisual  -D_THREAD_SAFE -I/usr/local/include/SDL -g -O2 -MT lv_tool_0_4-lv-tool.o -MD -MP -MF .deps/lv_tool_0_4-lv-tool.Tpo -c -o lv_tool_0_4-lv-tool.o `test -f 'lv-tool.cpp' || echo './'`lv-tool.cpp
    lv-tool.cpp:145:55: error: expected ';' after top level declarator
      const std::unordered_set<std::string> actors_to_skip {
                                                          ^
                                                          ;
    lv-tool.cpp:168:8: warning: scoped enumerations are a C++11 extension [-Wc++11-extensions]
      enum class CycleDir
           ^
    lv-tool.cpp:382:11: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
              auto modelist = SDL_ListModes (nullptr, SDL_FULLSCREEN);
              ^
    lv-tool.cpp:415:67: error: expected ';' at end of declaration
                      std::array<SDL_Color, target_color_count> colors {};
                                                                      ^
                                                                      ;
    lv-tool.cpp:733:7: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
          auto cycler = (dir == CycleDir::NEXT) ? visual_actor_get_next_by_name
          ^
    lv-tool.cpp:733:29: warning: use of enumeration in a nested name specifier is a C++11 extension [-Wc++11-extensions]
          auto cycler = (dir == CycleDir::NEXT) ? visual_actor_get_next_by_name
                                ^
    lv-tool.cpp:736:7: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
          auto new_name = cycler (name.c_str ());
          ^
    lv-tool.cpp:770:19: error: no matching constructor for initialization of '(anonymous namespace)::Libvisual'
            Libvisual main {argc, argv};
                      ^
    /usr/local/include/SDL/SDL_main.h:34:14: note: expanded from macro 'main'
    #define main SDL_main
                 ^
    lv-tool.cpp:175:9: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0
          were provided
      class Libvisual
            ^
    lv-tool.cpp:179:7: note: candidate constructor not viable: requires 2 arguments, but 0 were provided
          Libvisual (int& argc, char**& argv)
          ^
    lv-tool.cpp:770:23: error: expected ';' at end of declaration
            Libvisual main {argc, argv};
                          ^
                          ;
    lv-tool.cpp:807:9: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
            auto actor = bin.get_actor();
            ^
    lv-tool.cpp:835:9: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
            auto vidoptions = visual_actor_get_video_attribute_options(actor);
            ^
    lv-tool.cpp:841:9: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
            auto video = display.create(depth, vidoptions, width, height, true);
            ^
    lv-tool.cpp:887:29: error: no matching constructor for initialization of '(anonymous namespace)::DisplayLock'
                    DisplayLock lock {display};
                                ^
    lv-tool.cpp:458:7: note: candidate constructor not viable: requires single argument 'display', but no arguments were
          provided
          DisplayLock(Display & display) : m_display(&display) {
          ^
    lv-tool.cpp:453:9: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0
          were provided
      class DisplayLock
            ^
    lv-tool.cpp:887:33: error: expected ';' at end of declaration
                    DisplayLock lock {display};
                                    ^
                                    ;
    lv-tool.cpp:910:64: warning: use of enumeration in a nested name specifier is a C++11 extension [-Wc++11-extensions]
                        actor_name = cycle_actor_name (actor_name, CycleDir::NEXT);
                                                                   ^
    lv-tool.cpp:922:13: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
                auto pluginqueue = visual_plugin_get_eventqueue (visual_actor_get_plugin(bin.get_actor()));
                ^
    lv-tool.cpp:938:37: error: no matching constructor for initialization of '(anonymous namespace)::DisplayLock'
                            DisplayLock lock {display};
                                        ^
    lv-tool.cpp:458:7: note: candidate constructor not viable: requires single argument 'display', but no arguments were
          provided
          DisplayLock(Display & display) : m_display(&display) {
          ^
    lv-tool.cpp:453:9: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0
          were provided
      class DisplayLock
            ^
    lv-tool.cpp:938:41: error: expected ';' at end of declaration
                            DisplayLock lock {display};
                                            ^
                                            ;
    lv-tool.cpp:960:68: warning: use of enumeration in a nested name specifier is a C++11 extension [-Wc++11-extensions]
                            actor_name = cycle_actor_name (actor_name, CycleDir::NEXT);
                                                                       ^
    lv-tool.cpp:1032:29: error: no matching constructor for initialization of '(anonymous namespace)::DisplayLock'
                    DisplayLock lock {display};
                                ^
    lv-tool.cpp:458:7: note: candidate constructor not viable: requires single argument 'display', but no arguments were
          provided
          DisplayLock(Display & display) : m_display(&display) {
          ^
    lv-tool.cpp:453:9: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0
          were provided
      class DisplayLock
            ^
    lv-tool.cpp:1032:33: error: expected ';' at end of declaration
                    DisplayLock lock {display};
                                    ^
                                    ;
    11 warnings and 10 errors generated.
    make[2]: *** [lv_tool_0_4-lv-tool.o] Error 1
    make[1]: *** [all-recursive] Error 1
    make: *** [all] Error 2
    
  6. ChrisScheffler commented on Feb 5, 2023

    @ChrisScheffler

    startup with root privileges:

    libvisual CRITICAL: lv-tool-0.4: VisPluginRef **visual_plugin_get_references(const char *, int *)(): Cannot load plugin: dlopen(/usr/local/lib/libvisual-0.4/input/input_mplayer.so, 0x0001): symbol not found in flat namespace '_mremap'
    lv-tool - Libvisual 0.4.1 commandline tool - https://github.com/Libvisual/libvisual
    libvisual CRITICAL: lv-tool-0.4: int visual_video_set_depth(VisVideo *, VisVideoDepth)(): assertion `video != NULL' failed
    libvisual CRITICAL: lv-tool-0.4: int visual_video_set_depth(VisVideo *, VisVideoDepth)(): assertion `video != NULL' failed
    libvisual CRITICAL: lv-tool-0.4: inp_portaudio_init(): assertion `open_error == paNoError' failed
    libvisual CRITICAL: lv-tool-0.4: inp_portaudio_upload(): assertion `priv->stream != NULL' failed
    
  7. ChrisScheffler commented on Feb 5, 2023

    @ChrisScheffler

    @idleberg last comment addresses the clang issue. Its the default compiler frontend (not homebrew).
    On M1 Pro @ Ventura: gcc -v

    Apple clang version 14.0.0 (clang-1400.0.29.202)
    Target: arm64-apple-darwin22.1.0
    
  8. hartwork commented on Feb 6, 2023

    @hartwork
    MemberAuthor

    Thanks for the updates, interesting! 👍

    There is a new branch 0.4.x-macos with these noteworthy changes:

    • Enable C++11 support for the compiler, Clang in particular
    • Compile and link against macOS' own OpenGL rather than Mesa's
    • Make the PortAudio plugin output error code and error message to help understand the situation
    • Fix C++11 and Clang macOS issues until the CI was all green

    Could you try with branch 0.4.x-macos and report back?

    Thanks in advance! 🙏

  9. hartwork commented on Feb 6, 2023

    @hartwork
    MemberAuthor

    PS: One more homebrew package is needed with branch 0.4.x-macos now: autoconf-archive.

  10. changed the title [-]macOS support / need your help with trying 0.4.x out on macOS (branch "0.4.x-fix-palette-use-after-free")[/-] [+]macOS support / need your help with trying 0.4.x out on macOS (branch "0.4.x-macos")[/+] on Feb 6, 2023
  11. ChrisScheffler commented on Feb 6, 2023

    @ChrisScheffler

    compiling branch 0.4.x-macos with native clang fails for G-Force plugin (errors only):

    G-Force.cpp:345:4: error: no matching member function for call to 'Print'
                            Print(_("WaveShape:  "));
                            ^~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Print( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Print( UtilStr* inStr )                                                                                 { if ( inStr ) Print( inStr -> getCStr() );             }
                                                            ^
    G-Force.cpp:347:4: error: no matching member function for call to 'Print'
                            Print(_("ColorMap:   "));
                            ^~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Print( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Print( UtilStr* inStr )                                                                                 { if ( inStr ) Print( inStr -> getCStr() );             }
                                                            ^
    G-Force.cpp:349:4: error: no matching member function for call to 'Print'
                            Print(_("DeltaField: "));
                            ^~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Print( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Print( UtilStr* inStr )                                                                                 { if ( inStr ) Print( inStr -> getCStr() );             }
                                                            ^
    G-Force.cpp:353:5: error: no matching member function for call to 'Print'
                                    Print(_("Particles:  "));
                                    ^~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Print( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Print( UtilStr* inStr )                                                                                 { if ( inStr ) Print( inStr -> getCStr() );             }
                                                            ^
    G-Force.cpp:374:4: error: no matching member function for call to 'Print'
                            Print(_("Amplitude scale: "));
                            ^~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Print( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Print( UtilStr* inStr )                                                                                 { if ( inStr ) Print( inStr -> getCStr() );             }
                                                            ^
    G-Force.cpp:381:4: error: no matching member function for call to 'Print'
                            Print(_("Amplitude scale: "));
                            ^~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Print( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Print( UtilStr* inStr )                                                                                 { if ( inStr ) Print( inStr -> getCStr() );             }
                                                            ^
    G-Force.cpp:388:5: error: no matching member function for call to 'Println'
                                    Println(_("Particles ON"));
                                    ^~~~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Println( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                            ^
    G-Force.cpp:390:5: error: no matching member function for call to 'Println'
                                    Println(_("Particles OFF"));
                                    ^~~~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Println( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                            ^
    G-Force.cpp:412:5: error: no matching member function for call to 'Println'
                                    Println(_("Show names ON"));
                                    ^~~~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Println( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                            ^
    G-Force.cpp:414:5: error: no matching member function for call to 'Println'
                                    Println(_("Show names OFF"));
                                    ^~~~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Println( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                            ^
    G-Force.cpp:420:5: error: no matching member function for call to 'Println'
                                    Println(_("Normalize ON"));
                                    ^~~~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Println( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                            ^
    G-Force.cpp:422:5: error: no matching member function for call to 'Println'
                                    Println(_("Normalize OFF"));
                                    ^~~~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Println( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                            ^
    G-Force.cpp:435:5: error: no matching member function for call to 'Print'
                                    Print(_("Loading DeltaField: "));
                                    ^~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Print( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Print( UtilStr* inStr )                                                                                 { if ( inStr ) Print( inStr -> getCStr() );             }
                                                            ^
    G-Force.cpp:446:5: error: no matching member function for call to 'Println'
                                    Println(_("DeltaField slideshow ON"));
                                    ^~~~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Println( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                            ^
    G-Force.cpp:449:5: error: no matching member function for call to 'Println'
                                    Println(_("DeltaField slideshow OFF"));
                                    ^~~~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Println( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                            ^
    G-Force.cpp:457:4: error: no matching member function for call to 'Println'
                            Println(_("All slideshows ON"));
                            ^~~~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Println( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                            ^
    G-Force.cpp:464:4: error: no matching member function for call to 'Println'
                            Println(_("All slideshows OFF"));
                            ^~~~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Println( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                            ^
    G-Force.cpp:483:5: error: no matching member function for call to 'Println'
                                    Println(_("ColorMap slideshow ON"));
                                    ^~~~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Println( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                            ^
    G-Force.cpp:486:5: error: no matching member function for call to 'Println'
                                    Println(_("ColorMap slideshow OFF"));
                                    ^~~~~~~
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                    void                                    Println( char* inStr );
                                                            ^
    ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                    void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                            ^
    fatal error: too many errors emitted, stopping now [-ferror-limit=]
    

    output for compiled binary (with gcc 11):

    lv-tool - Libvisual 0.4.1 commandline tool - https://github.com/Libvisual/libvisual
    libvisual CRITICAL: lv-tool-0.4: int visual_video_set_depth(VisVideo *, VisVideoDepth)(): assertion `video != NULL' failed
    libvisual CRITICAL: lv-tool-0.4: int visual_video_set_depth(VisVideo *, VisVideoDepth)(): assertion `video != NULL' failed
    libvisual CRITICAL: lv-tool-0.4: inp_portaudio_init(): PortAudio: Could not open input stream, error -9998 "Invalid number of channels".
    libvisual CRITICAL: lv-tool-0.4: inp_portaudio_upload(): assertion `priv->stream != NULL' failed
    
  12. hartwork commented on Feb 6, 2023

    @hartwork
    MemberAuthor

    @ChrisScheffler thanks! Will need to look into the C++ errors and find a clean way to make the PortAudio code first try stereo and the fall back to mono. With the changes regarding OpenGL, did you still get a black window or a rotating plane of squares this time?

  13. ChrisScheffler commented on Feb 6, 2023

    @ChrisScheffler

    @hartwork sorry, forgot the screenshot. The window is now filled with colored "bars" as expected.

    image

  14. hartwork commented on Feb 6, 2023

    @hartwork
    MemberAuthor

    @ChrisScheffler that is plain awesome! 👍

  15. idleberg commented on Feb 6, 2023

    @idleberg

    With the new version, I'm getting dozens of warnings (C++11 related, OpenGL deprecations and others) and ultimately an error:

    ~/Desktop/libvisual
    + lv_tool_env=(DYLD_LIBRARY_PATH="${LV_INSTALL_PREFIX}"/lib/)
    + exec env DYLD_LIBRARY_PATH=/Users/jan/Desktop/libvisual/INSTALL_PREFIX/lib/ /Users/jan/Desktop/libvisual/INSTALL_PREFIX/bin/lv-tool-0.4 --input portaudio
    lv-tool - Libvisual 0.4.1 commandline tool - https://github.com/Libvisual/libvisual
    Failed to start pipeline with actor 'lv_gltest' and input 'portaudio'
    

    Let me know if you need the entire log (3181 lines)

    PS: neither version will compile with root privileges

  16. hartwork commented on Feb 6, 2023

    @hartwork
    MemberAuthor

    @ChrisScheffler I made the PortAudio plugin fall back to mono now when stereo is not available, same branch. Could you give it a try?

    @idleberg I did try with macOS 10.15 and its system Clang in the CI earlier, strange. If you could drag-n-drop the full log as a text file into a reply, that would rock (and be the easiest to look at). Alternatively, a <details> tag would work well too. The log would allow seeing if plugins lv_gltest and portaudio were fully built.
    PS: There should be no need for root with anything here, I made run-0.4-macos.sh with that in mind, e.g. that's why I put DYLD_LIBRARY_PATH in there. But maybe it needs adjustment (if the plugins are fully built). Could you share the output of find . -name \*lv_gltest.dy\*?

  17. hartwork commented on Feb 6, 2023

    @hartwork
    MemberAuthor

    @idleberg PS: Got your e-mail just now.

  18. ChrisScheffler commented on Feb 6, 2023

    @ChrisScheffler

    @hartwork with the new version of the plugin audio is captured from the microphone and visualized.

    output:

    lv-tool - Libvisual 0.4.1 commandline tool - https://github.com/Libvisual/libvisual
    libvisual CRITICAL: lv-tool-0.4: visual_video_set_depth(): assertion `video != NULL' failed
    libvisual CRITICAL: lv-tool-0.4: visual_video_set_depth(): assertion `video != NULL' failed
    
  19. hartwork commented on Feb 6, 2023

    @hartwork
    MemberAuthor

    @hartwork with the new version of the plugin audio is captured from the microphone and visualized.

    @ChrisScheffler awesome!

    lv-tool - Libvisual 0.4.1 commandline tool - https://github.com/Libvisual/libvisual
    libvisual CRITICAL: lv-tool-0.4: visual_video_set_depth(): assertion `video != NULL' failed
    libvisual CRITICAL: lv-tool-0.4: visual_video_set_depth(): assertion `video != NULL' failed
    

    The assertion output is not specific to macOS and a known todo, but thanks.

  20. hartwork commented on Feb 6, 2023

    @hartwork
    MemberAuthor

    compiling branch 0.4.x-macos with native clang fails for G-Force plugin (errors only):

    Compiler output ``` G-Force.cpp:345:4: error: no matching member function for call to 'Print' Print(_("WaveShape: ")); ^~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Print( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Print( UtilStr* inStr ) { if ( inStr ) Print( inStr -> getCStr() ); } ^ G-Force.cpp:347:4: error: no matching member function for call to 'Print' Print(_("ColorMap: ")); ^~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Print( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Print( UtilStr* inStr ) { if ( inStr ) Print( inStr -> getCStr() ); } ^ G-Force.cpp:349:4: error: no matching member function for call to 'Print' Print(_("DeltaField: ")); ^~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Print( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Print( UtilStr* inStr ) { if ( inStr ) Print( inStr -> getCStr() ); } ^ G-Force.cpp:353:5: error: no matching member function for call to 'Print' Print(_("Particles: ")); ^~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Print( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Print( UtilStr* inStr ) { if ( inStr ) Print( inStr -> getCStr() ); } ^ G-Force.cpp:374:4: error: no matching member function for call to 'Print' Print(_("Amplitude scale: ")); ^~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Print( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Print( UtilStr* inStr ) { if ( inStr ) Print( inStr -> getCStr() ); } ^ G-Force.cpp:381:4: error: no matching member function for call to 'Print' Print(_("Amplitude scale: ")); ^~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Print( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Print( UtilStr* inStr ) { if ( inStr ) Print( inStr -> getCStr() ); } ^ G-Force.cpp:388:5: error: no matching member function for call to 'Println' Println(_("Particles ON")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:390:5: error: no matching member function for call to 'Println' Println(_("Particles OFF")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:412:5: error: no matching member function for call to 'Println' Println(_("Show names ON")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:414:5: error: no matching member function for call to 'Println' Println(_("Show names OFF")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:420:5: error: no matching member function for call to 'Println' Println(_("Normalize ON")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:422:5: error: no matching member function for call to 'Println' Println(_("Normalize OFF")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:435:5: error: no matching member function for call to 'Print' Print(_("Loading DeltaField: ")); ^~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Print( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Print( UtilStr* inStr ) { if ( inStr ) Print( inStr -> getCStr() ); } ^ G-Force.cpp:446:5: error: no matching member function for call to 'Println' Println(_("DeltaField slideshow ON")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:449:5: error: no matching member function for call to 'Println' Println(_("DeltaField slideshow OFF")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:457:4: error: no matching member function for call to 'Println' Println(_("All slideshows ON")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:464:4: error: no matching member function for call to 'Println' Println(_("All slideshows OFF")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:483:5: error: no matching member function for call to 'Println' Println(_("ColorMap slideshow ON")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:486:5: error: no matching member function for call to 'Println' Println(_("ColorMap slideshow OFF")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ fatal error: too many errors emitted, stopping now [-ferror-limit=] ```

    @ChrisScheffler this^^ seems to be about const correctness. I believe that is fixed by 0c21b88 now, same branch. Can you confirm?

  21. ChrisScheffler commented on Feb 7, 2023

    @ChrisScheffler

    @hartwork 6d93614 compiles without errors for clang and gcc11

  22. hartwork commented on Feb 7, 2023

    @hartwork
    MemberAuthor

    @ChrisScheffler perfect, thank you! 👍

  23. added this to the 0.4.2 milestone on Feb 15, 2023
  24. hartwork commented on Apr 25, 2023

    @hartwork
    MemberAuthor

    libvisual just entered Homebrew. Please be invited to try it on macOS for yourself:

    brew install libvisual libvisual-plugins libvisual-projectm
    lv-tool-0.4 --input portaudio  # left click cycles through visual effects
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions