Code Monkey home page Code Monkey logo

ggarra13 / mrv2 Goto Github PK

View Code? Open in Web Editor NEW
162.0 10.0 10.0 201.26 MB

Professional player and review tool for vfx, animation and computer graphics.

Home Page: https://mrv2.sourceforge.io

License: BSD 3-Clause "New" or "Revised" License

CMake 2.03% Shell 1.81% C++ 54.55% Objective-C++ 0.04% Python 9.28% Batchfile 0.02% NSIS 0.88% HTML 28.39% CSS 0.91% JavaScript 1.86% SWIG 0.22%
linux macos windows vfx video-player animation cgi flipbook movie movies

mrv2's Introduction

License Build Status Build Status Build Status Build Status Donate Sponsor

mrv2

mrv2 is an open source professional player and review tool for vfx, animation and computer graphics.

Contents:

Pre-built binaries

If you are looking for pre-built binaries for Windows, Linux or macOS, they can be found in:

GitHub

or in its mirror site at:

SourceForge

The source forge site also hosts beta builds (nightly builds with the latest changes):

SourceForge Betas

Compatibility

mrv2 binaries run on Windows 8.1+, RedHat 8.9+ or Ubuntu 20.04+ and macOS 11.0+.

Notes on installation

  • On macOS you install it by opening the .dmg file, and dragging the mrv2 icon to the Applications directory. If there's already an mrv2 version, we recommend you overwrite it. The macOS application is currently not notarized, so when you launch it you will not be able to run it as macOS will warn you that the file is not secure as it was downloaded from internet. To avoid that, you need to open the Finder, go to the Applications directory and CTRL + Left mouse click on the mrv2 application. That will bring up the same warning, but this time it will have a button that will allow you to open it. You only need to do this once.

  • Windows and Chrome, like macOS, also protect you from installing files from the Internet. When you first download it with Chrome it may warn you that it is not an usual archive to be downloaded. Make sure to click on the right up arrow menu to Save it anyway. You cannot open the .exe from Chrome directly. You will need to open Windows Explorer and go to the Downloads directory. You should then run it from there. Then Windows will popup a Blue box telling you Windows SmartScreen prevented the start of an unknown aplication and that you can place your PC at risk. Click on the More Information text and a Button that says Run anyway or similar should appear. Click on it and follow the standard instructions to any Windows installer.

  • On Linux, in order to install the .rpm or .deb packages requires your user to have sudo permissions.

    On Debian (Ubuntu, etc) systems, you would install with:

  sudo dpkg -i mrv2-v1.0.0-Linux-amd64.tar.gz

On Red Hat (Rocky Linux, etc), you would install it with:

  sudo rpm -i mrv2-v1.0.0-Linux-amd64.tar.gz

Once you install it, you can run mrv2 by just typing mrv2 in the shell, as a symlink to the executable is placed in /usr/bin. The installers will also associate file extensions and install an icon for easy starting up in the Desktop icon of the user that installed it. For running mrv2 with the icon, you need to select it and use the right mouse button to open the menu and choose Allow Launch.

If you lack sudo permissions in your organization, you should download the .tar.gz file and you can uncompress it with:

  tar -xf mrv2-v1.0.0-Linux-amd64.tar.gz

That will create a folder in the direcory you uncompress it from. You can then run mrv2 by using the mrv2.sh shell script in the bin/ subdirectory.

Features

The source code is written in C++17 and uses CMake for the build system, with some bash scripts for auxiliary tasks.
The core of the playback engine is a custom version of tlRender (www.github.com/darbyjohnston/tlRender.git).

Currently supported:

  • Movie files (H264, MP4, VPX, WEBM, AV1, etc.)
  • Image file sequences (Cineon, DPX, JPEG, OpenEXR, PNG, PPM, TIFF, TGA, BMP, PSD)
  • RAW Camera Formats (CR2, CR3, X3F, etc).
  • Multi-channel audio
  • Color management
  • A/B comparison
  • Native OpenTimelineIO with dissolves
  • .otioz file bundles
  • Creation of OpenTimelineIO playlists
  • OpenEXR multichannel, multiview and multipart support
  • Environment mapping (Spherical and Cubic)
  • Python3 API and Plugin system
  • Network connections
  • Stereo 3D (Anaglyph, Scanlines, Columns, Checkered, Side by Side)
  • PDF Exporting of Annotations and Notes

Building

Dependencies

RedHat

#
# Repositories
#
sudo dnf -y install dnf-plugins-core
sudo dnf -y install epel-release
sudo dnf config-manager --set-enabled powertools

#
# Update dnf database
#
sudo dnf makecache --refresh

#
# Install bundles
#
sudo dnf -y groupinstall "Development Tools"
sudo dnf -y install perl perl-CPAN

# Install IPC::Cmd non-interactively
sudo cpan App::cpanminus && cpanm --notest IPC::Cmd

# Install python3 and meson
sudo dnf -y install python3
sudo pip3 install meson

#
# Install dependencies
#
sudo dnf -y install git wget cmake pango-devel gettext ninja-build \
	       libglvnd-devel alsa-lib-devel pulseaudio-libs-devel \
	       libXScrnSaver-devel dpkg \
	       autoconf wayland-devel wayland-protocols-devel cairo-devel \
	       libxkbcommon-devel dbus-devel mesa-libGLU-devel gtk3-devel \
	       libffi-devel openssl-devel tk-devel tcl-devel libXt-devel \
	       subversion swig

Ubuntu

#
# Update apt database
#
sudo apt update

#
# Install dependencies
#
sudo apt -y install build-essential perl git cmake ninja-build libpango1.0-dev \
		    xorg-dev libx11-dev libxcursor-dev libxinerama-dev \
		    libxss-dev gettext libasound2-dev \
		    libpulse-dev libssl-dev libffi-dev \
		    libwayland-dev wayland-protocols libdbus-1-dev \
		    libxkbcommon-dev libegl-dev libgtk-3-dev rpm \
                    doxygen tk-dev libxt-dev swig subversion

# Install cpanminus and IPC::Cmd non-interactively
sudo cpan App::cpanminus && cpanm --notest IPC::Cmd

# Install meson for dav1d codec
sudo pip3 install meson

macOS

#
# Install
#
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

#
# Install development tools
#
xcode-select --install

#
# Install dependencies
#
brew install git gnu-sed swig subversion meson cmake ninja gettext openssl readline sqlite3 xz zlib

Windows

Additional dependencies are downloaded and built automatically by the CMake superbuild script. For a list of non-system libraries that mrv2 depends on and their licenses, please refer to mrv2/docs/Legal.

The only special requirement is installing a new copy of cmake than the one that ships with MSVC19. If building the NSIS installer, you need to place the root of mrv2 in a path that has less than 20 characters, like:

     /D/code/applications

Building mrv2

Clone the repository:

cd some_dir

#
# Clone the latest cutting-edge build (might be unstable).
#
git clone https://github.com/ggarra13/mrv2.git

cd mrv2
./runme.sh

The script is a superbuild script that will download all needed dependencies required. It will create a build and a:

BUILD-KERNEL-ARCH/BUILDTYPE/install

directory where all files shall reside.

Make sure you meet the basic dependencies for your platform. See Dependencies.

The runme.sh sript will output its progress to the terminal and also save it in:

BUILD-KERNEL-ARCH/BUILDTYPE/compile.log.

The default is to build with all cores in all the Operating Systems. Currently, the build with all settings on takes about 39 minutes on 16 cores.

If you want more or less cores pass another number to any of the runme*.sh scripts. For example, to build with 4 cores, you can do:

./runme.sh -j 4

Later, if you just want to build mrv2 quickly (runme quick mnemonic) without running through all the dependencies, run:

./runmeq.sh

Later, to just build FLTK, tlRender and mrv2 (runme three mnemonic), run;

./runmet.sh

Also, look in the bin/ directory for other runme.sh scripts which compile a quicker version of mrv2 without features like USD, python or networking.

Debug builds

All runme.sh scripts support two additional parameters. For a debug build, you would do:

./runme.sh debug

To clean up the directory, run a debug build with 8 cores, run:

./runme.sh clean debug -j 8

Building on Windows

For windows, in addition to Visual Studio, you will need a new and fresh copy of Msys. There is a .bat file included in the distribution (in windows/bat), which needs to be modified to the path of Visual Studio (2019 by default), the optional Windows SDK (none by default) and your copy of Msys. You run the .bat file first, which will set the Visual Studio paths and fire up a Msys console. From then on, all commands described are run in the Msys console.

FFmpeg and liblcms2 are now compiled as part of the pre-flight cmake build. libssh and libcrypto are taken from Msys64 repositories when building FFmpeg as well as swig and subversion.

The libintl and libiconv libraries are taken from the MSys64 repositories as pre-flight check with the bin/install_libintl_window.sh script (part of runme.sh).

CMake build options

The main runme.sh script supports passing CMake flags to it and allows turning on or off some options of mrv2. You must pass them like:

-D TLRENDER_USD=OFF

The flags are listed when you start the runme.sh script. If you want to make some change to the flags permanent, you should change them in runme_nolog.sh or create a wrapper script that calls runme.sh.

Building FFmpeg as GPL or LGPL

If you pass -gpl or -lpgl to the runme.sh script, like:

./runme.sh -gpl

The build system will compile FFmpeg as GPL or LGPL on all platforms. The default is to build a LGPL version of FFmpeg as that complies with the BSD binary distribution license. The LGPL version of FFmpeg, however, does not come with libx264, which means you cannot save movie files with the H264 codec on Windows and Linux. It also does not support GoPro Cineform files with alpha.

The GPL version of FFmpeg does not have that restriction and it will compile libx264 on all platforms and work GoPro Cineform with alpha.

Running mrv2

macOS and Linux

If you have a bin directory in your $HOME (ie. ~/bin ), the build scripts will create a symlink there. So you should add ~/bin to your PATH in your .bashrc or .zshrc.

Assuming you complied mrv2 with the ~/bin directory already created, then to start mrv2 then you'd do:

export PATH=~/bin:$PATH  # no need if you add this line to your .bashrc
mrv2

and to run the debug build.

export PATH=~/bin:$PATH  # no need if you add this line to your .bashrc
mrv2-dbg

If you compiled mrv2 without bin directory in your HOME directory, you can start it from the BUILD directory with the mrv2.sh script, like:

BUILD-Linux-amd64/Release/install/bin/mrv2.sh

Windows

On Windows, we cannot create symbolic links, so in Msys you need to type the whole path to the install. That is, for example:

BUILD-Msys-amd64/Release/install/bin/mrv2.exe

If you like to work command line, you should add the whole path to the mrv2.exe to your path. In Msys, you can add it to the .bashrc like shown on macOS and Linux.

For cmd.exe or PowerShell, on the Windows taskbar, right-click the Windows icon and select System. In the Settings window, under Related Settings, click Advanced system settings. On the Advanced tab, click Environment Variables. Find the PATH environment variable and add the full path to mrv2.exe.

For working with a GUI, after the build is done, you should do:

cd BUILD-Msys-amd64/Release/install/bin/  # or similar
explorer .

And in the explorer directory that it will open, you should create a shortcut with the RMB to the mrv2.exe. Once that is done, you can drag and rename the shortcut to your Desktop to have it handy. Note that if you will not be developing mrv2, you should instead proceed to Packaging.

Tutorials

Besides the basic API documentation included, there is a special channel on youtube.com where you can find some tutorials on its basic use:

Video Tutorials

Documenting

Currently, the documentation is generated automatically from the translations. To do so, you must run:

./runmeq.sh -t doc

Translating

mrv2 can support multiple natural language translations. Currently, English and Spanish are supported. The translation system used is gettext so familiarity with it is desired (albeit not essential). The translations reside in mrv2/po and follow internationalization language code files, like es.po (for Spanish) or de.po (for German).

To create such a file for a new language, open the file cmake/translations.cmake and add a language international code to this line:

set( LANGUAGES es ) # add a new language code inside the parenthesis, like "de".

Then, run:

./runmeq.sh -t po

If there's no .po file for that language yet, gettext's msginit command will be run for you. You may be asked for your email address as part of the process.

Go to mrv2/po/{lang}.po where lang is the language you added.

and edit the text. Make sure to change the charset to UTF-8.

Note that you should use an editor that can write in Unicode (UTF-8) to write non-Occidental languages.

You need to edit "msgstr" strings and leave "msgid" untouched as a reference. If the comment has a "fuzzy" string it means gettext tried to guess the translation, but it will not use it. Remove the fuzzy qualifier and change the "msgstr" string. Note that if the "msgid" has new-lines you need to match them too. Refer to the gettext manual for further information.

Once you are ready to test your translation, run:

./runmeq.sh -t mo

That will create the .mo files for your language.

If you compiled mrv2

To test the translation, you can just run:

./runmeq.sh -t install

or just:

./runmeq.sh

and that will place the .mo files in the: $BUILD-$OS-$ARCH/$BUILD_TYPE/install/share/locale directory.

If you add or remove strings as part of your code changes, you may want to regenerate the .pot files after a while, before calling -t mo. To do so:

./runmeq.sh -t pot

Note that this change is dramatic as your commits of the code changes will get mangled with all the .pot/.po comments, preventing a clean PR (Pull Request) on github.com.

If you did not compile mrv2

Manually copy the .mo to your installed mrv2 directory. Make sure the VERSION matches.

cp mrv2/share/locale/${lang}/LC_MESSAGES/mrv2-v${VERSION}.mo ${installed_location of mrv2)/hare/locale/${lang}/LC_MESSAGES/

Translating on Windows

On Windows, besides the text of mrv2, you also need to translate the text for the NSIS .exe installer.

You can do it by editing the cmake/nsis/mrv2_translations.nsh file. Just follow the examples in that file.

Packaging

Once you build mrv2 and tested that it runs, you might want to create a package for distribution. On macOS, this is a .dmg file. On Linux it is a RPM, DEB or TGZ file. On Windows it is a ZIP or an NSIS EXE installer.

To do so, from the main dir of mrv2, you have to do:

./runmeq.sh -t package

For all architectures, the installers will be stored in:

packages/

That is the root directory of mrv2.

Developing

If you want to become a developer, first familiarize yourself with the build process. Then clone the repository to your github account and send PRs. If you become an avid developer, you can then request access to the main repository.

One additional thing that you will need for making commits to the repository, is:

clang-format

This is part of the LLVM project, you can download it from your usual repositories (apt, brew, etc.), or from:

LLVM Main Download Page

This utility verifies previous to a commit that all the C++ formatting follows the standard used in mrv2.

You might also want to get Doxygen so as to get the source code documentation in docs/Doxygen.

mrv2's People

Contributors

360highdynamicrangehdr avatar bigroy avatar ggarra13 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mrv2's Issues

Stuttering playback depending on mouse position

Stupid title and maybe not reproducible on every OS / hardware. But here goes:

I noticed that with higher resolution image sequences I get stuttering playback despite of a sufficient RAM cache WHEN (and only when) the mouse pointer is over the viewer and mrv2's color picker is showing a color.
As soon as I move the mouse pointer away from the area where the sequence is shown on screen all is smooth. Same goes if I press F12 to go to fullscreen: everything is playing back nicely.
It looks like the color picker / display is causing a delay somehow?

It's not happening with 1920x1080 sequences on my hardware, so I attached a very simple image sequence to hopefully reproduce the problem: https://1drv.ms/u/s!AlOpRG0iPvzdhKMZuZBy9KfbkZYk6w?e=6hXCI9

Just play it back and move the mouse over the image -> it stutters. Move the mouse anywhere else so the color picker doesn't pick up anything -> smooth playback.

macOS 12.6 if I drag an image into the window from the finder it looks for the wrong start frame

I have a folder with moving.0001.exr, moving.0002.exr etc. If I drag any one of them into the window, instead of opening them I get the error:

368.611 ERROR tl::io::ISequenceRead (/Users/gga/code/applications/mrv2/tlRender/lib/tlIO/SequenceIORead.cpp: 123): /Users/jrb/Documents/moving/obj/moving.0000.exr: /Users/jrb/Documents/moving/obj/moving.0000.exr: Cannot open file: No such file or directory

note it tried to open frame 0000 which doesn't exist. If I copy a frame and rename it so there is a 0000 then it opens

Move "About" menu entry from "Window" to "Help" menu

Issue

I was looking for the About dialog for my specific mrv2 build and at first couldn't find it. Then I unexpectedly saw it under the Window menu.

As far as I know most applications provide the About pop-up from the Help menu entry. A quick look around in some other apps, e.g. VLC, DJV, PyCharm, Maya, Slack desktop app, Firefox, etc. they all seem to have the About menu entry in the Help menu.

Should we move the About entry to match more with many other applications?

Linux Compilation Error

Another Linux compilation failure just crept in:

[1/47] Building CXX object lib/mrvFl/CMakeFiles/mrvFl.dir/mrvCallbacks.cpp.o
FAILED: lib/mrvFl/CMakeFiles/mrvFl.dir/mrvCallbacks.cpp.o 
/usr/bin/g++ -DImath_FOUND -DMRV2_PYBIND11 -DMRV2_VERSION=\"0.3.6\" -DOCIO_FOUND -DOpenColorIO_SKIP_IMPORTS -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_JPEG -DTLRENDER_OPENGL -DTLRENDER_PNG -DTLRENDER_TIFF -DTLRENDER_VERSION=\"\" -Dopentime_FOUND -Dopentimelineio_FOUND -I/home/steffen/mrv2/BUILD-Linux-amd64/Release/install/include/tlRender -I/home/steffen/mrv2/BUILD-Linux-amd64/Release/install/include/OpenEXR -I/home/steffen/mrv2/mrv2/lib -I/home/steffen/mrv2/mrv2 -I/home/steffen/mrv2/BUILD-Linux-amd64/Release/mrv2/src/mrv2-build/lib/mrvWidgets -I/home/steffen/mrv2/mrv2/../tlRender/lib -isystem /home/steffen/mrv2/BUILD-Linux-amd64/Release/install/include -isystem /home/steffen/mrv2/BUILD-Linux-amd64/Release/install/include/Imath -isystem /home/steffen/mrv2/BUILD-Linux-amd64/Release/install/include/opentimelineio/deps -O3 -DNDEBUG -std=c++17   -D NOMINMAX -fvisibility=hidden -MD -MT lib/mrvFl/CMakeFiles/mrvFl.dir/mrvCallbacks.cpp.o -MF lib/mrvFl/CMakeFiles/mrvFl.dir/mrvCallbacks.cpp.o.d -o lib/mrvFl/CMakeFiles/mrvFl.dir/mrvCallbacks.cpp.o -c /home/steffen/mrv2/mrv2/lib/mrvFl/mrvCallbacks.cpp
/home/steffen/mrv2/mrv2/lib/mrvFl/mrvCallbacks.cpp:36:10: fatal error: FL/FL.H: No such file or directory
   36 | #include <FL/FL.H>
      |          ^~~~~~~~~
compilation terminated.

Add support for OTIO playlists

Currently, mrv2 can read and play .otio files, but cannot create them. There's already a temporary attempt at a fix in the current HEAD of the main branch. I dislike it as it requires saving the otio file to /usr/tmp and that looses the relative paths (which are currently transformed into absolute paths).

on macOS 12.6 directories and files aren't visible

You can browse with File->Open->Directory down to your home directory but then it appears as if you have no files or folders in your home dir.

I would guess this is a security permission issue, macOS should be prompting me for the app to have Disk Access but it doesn't.

Python Panel UnicodeDecodeError when running script single line of code

When running a script in the Python Panel then this works fine:

(empty line)
import os

_I typed empty line because otherwise Github still didn't show it if it was an empty line.

👇 But this doesn't:

import os

The error is:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x90 in position 0: invalid start byte

👇 But it does work if you have more than one line of code:

import subprocess
import os

Some others:

👇 Does not work:

import os
(empty line)

👇 Does work:

import os
(empty line)
import subprocess

In short, it seems a bit picky with running a single line of code.


Tested on Windows in both MRV2 0.6.3 and 0.6.1.

OCIO Input Color Space not active by default

Hi there,

every time I double click an image / image sequence to open mrv2, the Input Color Space that I set up in the preferences is not "active", no matter what OCIO config I use. I have to switch to the right ICS every single time:

image

It just says "Input Color Space" although I set up proper input color spaces for different input bit depths. After I set it manually, everything runs and looks like expected,

Tested under Linux and Windows with 0.3.4 (own compile and release from Github).

Package as flatpak and make it available on Flathub

Hi!

It would be great to have mrv2 available as a flatpak on Flathub, to make it easier for people to discover and install it.

Flathub is probably the biggest Linux app hub right now, with over 2,000 apps available and over 700,000 downloads every day. And newly-added apps show up at the top of the home page, in the "New Apps" section.

Additionally, Linux-related blogs and vlogs often advertise apps newly-added to Flathub, which could promote mrv2 even further.

Some crashes on Linux

Hi there, great to see mrViewer get a well deserved upgrade :)

I know mrv2 is still in it's infancy, but I noticed some crashes during my first tests:

  • If I open Preferences, go to Playback and then click on the "FPS" menu / switch, mrv2 instantly crashes.
  • If I go to the OCIO tab in the Preferences and change the OCIO config to something other than the nuke-default coming with mrv2, it works. If I now click the option to "Save OCIO Config File in Preferences", hit OK and re-open the Preferences (or mrv2) the OCIO config is back to nuke-default.
  • There were several crashes during changing and trying to save some Preference values.
  • I could not set or assign the Input Color Spaces in the prefs. If I click on "Pick", mrv2 closes.

I noticed that in the hidden ./filmaura folder there are several prefs, some still named "mrViewer" which I thought were remnants of the old mrViewer installation. So I deleted the whole folder to have a fresh start, but mrv2 created the pref-files again:
image

I don't know it this is part of the problem?

Linux issue only: RtAudio with PulseAudio backend is not totally thread safe.

The issue shows when multiple clips are loaded and tried to be played almost simultaneously (for example when loading multiple clips command-line like mrv2 can do). The result is that the RtAudio api fails with all sort of errors (the most common being "RtApi::openStream: output device parameter value is invalid." ).

Currently, tlRender instantiates RtAudio from a thread and uses its audioSystem->getDefaultOutputDevice() function.

audioSystem::getDefaultOutputDevice() will call the following from the main thread as well as from the child thread when the audio thread is created:

size_t audioSystem::getDefaultOutputDevice() 
{
//...
            out = p.rtAudio->getDefaultOutputDevice();  // with PulseAudio this will always be 0 
            const size_t rtDeviceCount = p.rtAudio->getDeviceCount();  // this is the problem function

In RtAudio, the getDeviceCount() function is also called when the openStream call is called.

The getDeviceCount() function in rtAudio is this:

unsigned int RtApiPulse::getDeviceCount( void )
{
  collectDeviceInfo();  // we follow with this problematic function
  return rt_pa_info.dev.size();
}

Okay, I'll skip some functions, and go to the meat of the problem in RtAudio's Pulse code:

static void rt_pa_sink_info_cb(...)
{
   // This is the actual routine that fills in the rt_pa_info.dev vector.
}

static void rt_pa_context_state_callback(....)
{
    ...
    case PA_CONTEXT_READY:
      rt_pa_info.dev.clear();
      // .....
      pa_context_get_sink_info_list(context, rt_pa_sink_info_cb, NULL);
}

The problem here is that the pa_context_get_sink_info_List calls the rt_pa_sink_info_cb asynchronically, so it is not guaranteed to fill in the rt_pa_info.dev vector right away. That should be dealt with callling a reference counter. Also, RtAudio is not using the threaded calls of PulseAudio, which might also be problematic.

From the net, here's some sample code that in my opinion seems more correct than what RtAudio is using:

    lock();

    // Get default input and output devices
    pa_operation *operation = pa_context_get_server_info(m_context, serverInfoCallback, this);
    while (pa_operation_get_state(operation) == PA_OPERATION_RUNNING)
        pa_threaded_mainloop_wait(m_mainLoop);
    pa_operation_unref(operation);

    // Get output devices
    operation = pa_context_get_sink_info_list(m_context, sinkInfoCallback, this);
    while (pa_operation_get_state(operation) == PA_OPERATION_RUNNING)
        pa_threaded_mainloop_wait(m_mainLoop);
    pa_operation_unref(operation);

    // Get input devices
    operation = pa_context_get_source_info_list(m_context, sourceInfoCallback, this);
    while (pa_operation_get_state(operation) == PA_OPERATION_RUNNING)
        pa_threaded_mainloop_wait(m_mainLoop);
    pa_operation_unref(operation);

    unlock();

Compilation issue

Linux again:

[35/114] Performing update step for 'RtAudio'
FAILED: tlRender/etc/SuperBuild/RtAudio/src/RtAudio-stamp/RtAudio-update /home/steffen/mrv2/BUILD-Linux-amd64/Release/tlRender/etc/SuperBuild/RtAudio/src/RtAudio-stamp/RtAudio-update 
cd /home/steffen/mrv2/BUILD-Linux-amd64/Release/tlRender/etc/SuperBuild/RtAudio/src/RtAudio && /usr/local/bin/cmake -P /home/steffen/mrv2/BUILD-Linux-amd64/Release/tlRender/etc/SuperBuild/RtAudio/tmp/RtAudio-gitupdate.cmake
Previous HEAD position was 46b01b5 Version update for meson.build.
HEAD is now at d7f1276 cmake: fix call to string(REGEX REPLACE..
Auto-merging RtAudio.cpp
CONFLICT (content): Merge conflict in RtAudio.cpp
Index was not unstashed.
The stash entry is kept in case you need it again.
Auto-merging RtAudio.cpp
CONFLICT (content): Merge conflict in RtAudio.cpp
The stash entry is kept in case you need it again.
CMake Error at /home/steffen/mrv2/BUILD-Linux-amd64/Release/tlRender/etc/SuperBuild/RtAudio/tmp/RtAudio-gitupdate.cmake:264 (message):

Don't know if it's worth mentioning or a user error on my side.

Request for richer zoom controls and exposed window fitting options.

One thing I'm missing is control over the precise level of zoom.

Ideally I'd be able to set 25 / 50 / 75 / 100/ 125 / 150/ 200 percent zoom. In conjunction with zoom levels, it's nice to be able to choose whether the video should resize with the application window, or if the video size and position should remain locked even when resizing the application window.

UX: Width of volume slider seems too wide

When looking at the Volume slider it seems that the draggable control in it appears very wide for the width of the volume control itself, e.g. see this:

image

Even when the UI is less wide it still appears quite large:

image

I'd have expected a slider look more like the Gamma slider:

image

When the UI is less wide the gamma slider keeps the same width:

image

As such I suppose the volume slider knob is missing a maximum width (or explicit width)?


Side note:

Also visually I think it'd help if the button stands out a bit more of the control's background for all these sliders. For example the "gain" slider I had to look again a few times to spot it:

image


Tested on Windows in MRV2 0.6.4 (beta build from here)

Media Information panel opens with collapsed scroll area.

When I open the Media Information panel, the scroll area does not take up the whole height of the panel. Once I resize the application, the scroll area expands as expected.

Immediately after open

image

After resizing application window

image

Tapping Alt stops UI from updating.

Issue

Pressing the Alt key alone causes the UI to freeze until the next user interaction (mouse click or key press). Audio and Video playback continue while the UI is frozen and there don't seem to be any adverse effects or crashes.

I discovered this behavior while attempting to focus / show the top menu using the Alt key, which is the standard hotkey on Windows.

libselinux missing from tarball

Hello,
when trying to run the player form the .tar.gz of the latest release I get an error about libselinux missing:

./mrv2.sh 
$HOME/Downloads/mrv2-v0.5.2-Linux-amd64/usr/local/mrv2-v0.5.2-Linux-64/bin/mrv2: error while loading shared libraries: libselinux.so.1: cannot open shared object file: No such file or directory

When copying a libselinux from elsewhere on my computer to the lib dir in the distribution it starts successfully.

This is on Arch Linux.

Unexpected behavior switching between Fullscreen and Presentation modes.

Hello there, thank you for creating an essential and convenient media player!

I noticed that there are some small conflicts between Fullscreen and Presentation modes.

Switching from Fullscreen to Presentation mode

Current Behavior

Pressing F12 for Fullscreen then pressing F11 results in exiting Fullscreen but does not enter Presentation mode. It also results in the background color of the app turning black rather than remaining the standard dark grey.

Expected Behavior

Pressing F11 should always activate Presentation mode from Fullscreen.

In addition if I enter Fullscreen mode from Presentation mode by pressing F12, then exit Fullscreen again by pressing F12, I am no longer in Presentation mode. Ideally the state of Presentation mode should remain the same if I am toggling Fullscreen mode.

Timeline thumbnail previews make timeline very slow

It seems that scrubbing through the timeline (hold mouse down and drag) is quite laggy. It results in frame updates only every 100ms or 200ms, whereas with the Scrubbing Tool the viewport responds pretty instantaneous. I could even reproduce this behavior on for example a very low-res MP4 file. (The timeline is green and thus cached?)

Some more testing showed that the viewport playback also stutters quite a bit if during playback you move the mouse over the timeline. If you keep dragging back and forth over the timeline it seems that during that time the viewport + timeline don't update at all (until your mouse is static for a short moment and it directly plays back again)

This is resolved if you disable the checkbox for Window > Preferences > Timeline > Preview Thumbnail. Then both dragging through the timeline + moving over timeline during playback becomes real-time.

As such, there appears to be an update issue related to the timeline thumbnails where it doesn't update the UI whenever it tries to update the thumbnail.


Tested on Windows 10
Build mrv2 0.61

Unable to save MP4 movie file with H264 profile

Issue

When using File > Save > Movie or Sequence it doesn't seem be able to export H264 profile.

image

To reproduce:

  1. Try to save to hello_world.mp4
  2. Saving Options > Profile H264

Logs show:

ERROR: [save] C:/Users/User/Desktop/hello_world.mp4: Unknown error occurred

image
image


Specifications

Tested in mrv2 0.61 on Windows 10.


Additional info

Additional bug, when trying to save again afterwards the Save Dialog remembers the last filename - if that file exists then it directly highlights/selects it in the view as well. Then if you type a different name to write to it will still save to the selected entry and NOT to the manually typed name. The only workaround seems to be to clear the filename, browse to a different folder, go back into the folder and then type the name you want to write to instead.

If you write a .mp4 or .m4v file without a PROFILE selected (it's set to None in the Saving Options) then it writes out a file that mrv2 can read and playback, however when e.g. dropping them into an application like Slack the video will not play back correctly. (Likely unsupported codec?). As such, it currently seems to be impossible to write out a decent MP4 file to share with a client that works in e.g. an app like Slack they might be using.

Issue with Media Info panel

I tried to drag the Media info panel out from the side, to use it as a floating window. The whole process was a bit glitchy, and the menu bar endet up beeing hidden. Basically i now no longer can move that window around.
Screenshot 2023-04-11 094552

Adding to this, sometimes when i close and re-open mrv2 in this state, it will only open in a broken way, that displays itself as a large black rectangle on my desktop, where previously the media info panel was.
Screenshot 2023-04-11 094900

Of course, after deleting the file mrv2.prefs everything is back to normal.

Windows 7

Does this work with Win 7?

Thanks

Fix .webm video playback

Currently it plays fine in the beginning but then goes to black after, like the Top Gun clip.

Command line args help not printed to terminal on Windows

Hello,
first, thanks for your awesome work, it's a really impressive project and very useful (especially with the good OCIO support).

While searching for a potential command line flag which would let me specify a path to mrv2.prefs (to preconfigure it automatically for multiple users) I've realized that no command line help gets printed to the terminal. Not sure if it's an intended behavior or a bug, thus filing this issue.

Tested mrv2 0.3.4 on Windows 10.

  • Running mrv2.exe -h or mrv2.exe --help prints a blank line and nothing starts
  • Running mrv2.exe -v or mrv2.exe --version starts mrv2 with a log window with a message ERROR mrv2: failed to open file for reading: --version

A quick code search has revealed this, which looks like a list of command line options.

Best,
Juraj

Color space doofus needs help

Hi, I hope I'm writing for help in the right place.

I want to use mrv2 as a replacement for PDPlayer. I've got it installed and it's working beautifully.

My one problem is I have no idea how to configure it so EXR files will look the same as they do in PDPlayer.

Please help this lowly noob. Thanks very much.

Many hotkeys do not work

For me all the hotkey in the "Panel" and the "Render" category do nothing. The other categories mostly work (except for "F10" in the "Window" category, which should open the preferences window).

Export video with annotation

Currently annotations are not exported with mp4 (or any other format) export. And on Windows 11 sometimes gives color error and on consecutive saves does not save the file on a drive.

Launch Python script on startup to add custom menu entries

To allow pipeline integration with mrv2 I'd love to be able to run a Python script on startup in a way so that I can trigger some pipeline-specific customizations, like installing/connecting to a database and additionally also allow to add a menu entry for e.g. a custom Load/Open command with a PySide interface. So I would like to for example add a "pipeline" top menu bar entry in which I can define my own (Qt) menu entries.

Preferably there's either:

  • A plugin system in which I can define a Python plug-in which can be enabled/disabled by the user, which in itself can then also customize menu entries to expose custom functions. Preferably allowing e.g. an environment variable MRV2_PLUGIN_PATH to define custom locations where these plugins could be found and read from.
  • An environment variable, for example, MRV2_STARTUP_PATH that you can set to define custom startup script locations to trigger files named mrv2_startup.py through which custom logic could be implemented.

Are there any systems like this in place or are they planned? Or how could one best go about this?
I'd love to prototype an integration with open-source pipeline OpenPype / Ayon.

Changing Window options through Context Menu makes menubar entries check states wrong

Whenever you right click on the viewport to e.g. go to Viewport and check "Float on top":

image

Then the menu entry in the top menubar doesn't stay in sync with its check state:

image

So whenever e.g. "Float on top" is enabled through the context menu and it should appear checked (it's currently floating on top) then the top menu bar will show it unchecked.

Going into fullscreen mode and back out of it does interestingly enough correct the checkstate of the "Float on top" entry in the menubar.


Tested on Windows in MRV2 0.6.4 (beta build from here)

Can no longer compile on Linux

After the last few commits I can no longer compile mrv2 on Linux.

/home/steffen/mrv2/mrv2/lib/mrvFl/mrvLanguages.cpp: In function ‘void check_language(PreferencesUI*, int&)’:
/home/steffen/mrv2/mrv2/lib/mrvFl/mrvLanguages.cpp:113:32: error: ‘rootpath’ was not declared in this scope; did you mean ‘mrv::rootpath’?
  113 |             std::string root = rootpath();
      |                                ^~~~~~~~
      |                                mrv::rootpath
In file included from /home/steffen/mrv2/mrv2/lib/mrvFl/mrvLanguages.cpp:24:
/home/steffen/mrv2/mrv2/lib/mrvCore/mrvHome.h:12:17: note: ‘mrv::rootpath’ declared here
   12 |     std::string rootpath();
      |                 ^~~~~~~~

Feature request: 360 latlong media support

Hi!

The player is very nice but my studio mostly works in VR and it would be really cool if there was a mode which could reproject latlong projections as a draggable video sphere.

RV implements this as a thirdparty module (originally written and opensourced by The Mill) which adds a menu option that adds in a GLSL shader that does the projection warping from latlong to orbitable sphere. -- Here is the shader code, if it helps somebody make it for mrv2:
https://github.com/AcademySoftwareFoundation/OpenRV/blob/main/src/plugins/rv-packages/lat_long_viewer/LatLongViewer.glsl

Save Session shortcut on Windows is Meta+S, what key is that?

In File > Save > Session the shortcut is listed as Meta+S on Windows. Is this a key that appears usually on a modern keyboard?

image

The shortcut appears to be defined here

I've personally never heard of the Meta key before. According to this Wikipedia page on the Meta key it's a key that used to be found more keyboards but doesn't appear as much nowadays. I wonder whether it's the currently set to the right shortcut on Windows and something like CTRL+S might make more sense.

Shift+F hotkey does not work

The "Shift+F" hotkey is meant to toggle texture filtering when magnifying. Or at least, that is what it says when i go to the entry in Render -> Magnify Filter. However, it does not do anything when i use it - The other hotkeys in the "Render" category work fine.

That specific shortcut is also missing from the hotkey editor.

Linux Build fails

FYI build currently fails on Linux:

[3/6] Building CXX object lib/mrvPy/CMakeFiles/mrvPy.dir/Vectors.cpp.o
FAILED: lib/mrvPy/CMakeFiles/mrvPy.dir/Vectors.cpp.o 
/usr/bin/g++ -DImath_FOUND -DMRV2_PYBIND11 -DMRV2_VERSION=\"0.3.7\" -DOCIO_FOUND -DOpenColorIO_SKIP_IMPORTS -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_JPEG -DTLRENDER_OPENGL -DTLRENDER_PNG -DTLRENDER_TIFF -DTLRENDER_VERSION=\"\" -Dopentime_FOUND -Dopentimelineio_FOUND -I/home/steffen/mrv2/BUILD-Linux-amd64/Release/install/include/tlRender -I/home/steffen/mrv2/BUILD-Linux-amd64/Release/install/include/OpenEXR -I/home/steffen/mrv2/mrv2/lib -I/home/steffen/mrv2/mrv2 -I/home/steffen/mrv2/BUILD-Linux-amd64/Release/mrv2/src/mrv2-build/lib/mrvWidgets -I/home/steffen/mrv2/mrv2/../tlRender/lib -isystem /home/steffen/mrv2/BUILD-Linux-amd64/Release/install/include -isystem /home/steffen/mrv2/BUILD-Linux-amd64/Release/install/include/Imath -isystem /home/steffen/mrv2/BUILD-Linux-amd64/Release/install/include/opentimelineio/deps -isystem /usr/include/python3.10 -O3 -DNDEBUG -std=c++17   -D NOMINMAX -fvisibility=hidden -MD -MT lib/mrvPy/CMakeFiles/mrvPy.dir/Vectors.cpp.o -MF lib/mrvPy/CMakeFiles/mrvPy.dir/Vectors.cpp.o.d -o lib/mrvPy/CMakeFiles/mrvPy.dir/Vectors.cpp.o -c /home/steffen/mrv2/mrv2/lib/mrvPy/Vectors.cpp
/home/steffen/mrv2/mrv2/lib/mrvPy/Vectors.cpp: In function ‘void mrv2_vectors(pybind11::module&)’:
/home/steffen/mrv2/mrv2/lib/mrvPy/Vectors.cpp:18:18: error: ‘_’ was not declared in this scope; did you mean ‘pybind11::detail::_’?
   18 |     math.doc() = _(R"PYTHON(
      |                  ^
      |                  pybind11::detail::_
In file included from /home/steffen/mrv2/BUILD-Linux-amd64/Release/install/include/pybind11/cast.h:14,
                 from /home/steffen/mrv2/BUILD-Linux-amd64/Release/install/include/pybind11/attr.h:14,
                 from /home/steffen/mrv2/BUILD-Linux-amd64/Release/install/include/pybind11/detail/class.h:12,
                 from /home/steffen/mrv2/BUILD-Linux-amd64/Release/install/include/pybind11/pybind11.h:13,
                 from /home/steffen/mrv2/mrv2/lib/mrvPy/Vectors.cpp:7:
/home/steffen/mrv2/BUILD-Linux-amd64/Release/install/include/pybind11/detail/descr.h:134:26: note: ‘pybind11::detail::_’ declared here
  134 | constexpr descr<1, Type> _() {
      |                          ^
ninja: build stopped: subcommand failed.

Missing dependency for building on Ubuntu

I just built mrv2 myself (which is quite amazing considering I know nothing about coding ;) ).
I'm on Linux Mint 21.1 (i.e. basically a Ubuntu 22.04 under the hood) and after failing during the "./runme.sh" several times with all kinds of errors, I found out that all that was missing were the ALSA libraries.
Under RedHat they're installed under the name of "alsa-lib-devel", but under Ubuntu / Linux Mint they're missing.

apt install libalsa-ocaml-dev

helped me and the compile went smoothly. So maybe you should add this package to the dependencies.

Apart from that I'm kind of proud to be able to build Blender and mrv2 all by myself from now on. ✌🏻

[MacOS 13+] libintl.8.dylib missing when calling mrv2 via command-line

Hi @ggarra13,

Just noticed that when I call mrv2 from the command-line and try to pass an arbitrarily image sequence using /Applications/mrv2.app/Contents/Resources/bin/mrv2 '/tmp/seq_####.exr' or /Applications/mrv2.app/Contents/Resources/bin/mrv2 '/tmp/seq_%04d.exr', I get the following error message:

dyld[3242]: Library not loaded: @rpath/libintl.8.dylib
  Referenced from: <1A7CEEF9-E0FE-3758-8831-6F330C9DF7EB> /Applications/mrv2.app/Contents/Resources/bin/mrv2
  Reason: tried: '/Users/gga/code/applications/mrv2/BUILD-Darwin-amd64/Release/install/lib/libintl.8.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/gga/code/applications/mrv2/BUILD-Darwin-amd64/Release/install/lib/libintl.8.dylib' (no such file), '/usr/local/lib/libintl.8.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/lib/libintl.8.dylib' (no such file), '/Users/gga/code/applications/mrv2/BUILD-Darwin-amd64/Release/install/lib/libintl.8.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/Users/gga/code/applications/mrv2/BUILD-Darwin-amd64/Release/install/lib/libintl.8.dylib' (no such file), '/usr/local/lib/libintl.8.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/lib/libintl.8.dylib' (no such file), '/usr/local/lib/libintl.8.dylib' (no such file), '/usr/lib/libintl.8.dylib' (no such file, not in dyld cache)

Just wondering whether command-line calls are implemented yet, since calling mrv2 -h doesn't work either. Should this work out of the box (and the library is just missing) or am I doing something wrong?

Thanks a lot for mrv2,
Christian

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.