diff --git a/mrv2/docs/HISTORY.md b/mrv2/docs/HISTORY.md index 571100920..4128d28c0 100644 --- a/mrv2/docs/HISTORY.md +++ b/mrv2/docs/HISTORY.md @@ -26,13 +26,30 @@ v1.0.9 - Fixed a bug in session loading when there was no Input Color Space specified in the image, which got introduced in v1.0.8. - Made pen size be able to be 1 pixel making the cursor one line only. -- Made Prores_ks (FFmpeg's native encoder) match Apple's Prores one at - 4444p10le. +- Made prores_ks (FFmpeg's native encoder) match Apple's ProRes one at + 4444p10le. It is now possible to take ProRes4444 encoded files to video + editors. - Upgraded to FFmpeg v6.1.1. -- Fixed Darby's BT2020 (Ultra HD) coefficients, which I think were wrong. - Improved rotation speed of movies from cell phones, by doing it in OpenGL with metadata instead of with a C++ function. - Added Creation, Modified Date and Disk Space to Media Info Panel. +- Removed Frame information from Start/End Time in Image Tab of Media Info + Panel. +- Made Start/End Time in Image Tab of Media Info Panel not use scientific + notation for seconds. +- Fixed changing frame rate from the Timeline toolbar not updating the FPS + indicator in the Image Tab of the Media Info Panel. +- Improved the performance of Media Info Panel when playing a sequence and + the Image tab was closed. +- Removed Default Speed information from Video Tab and moved it to Image Tab. +- Improved colors of deactivated enums showing too dark to read the black + text by default. +- It is now possible to use OpenColorIO's built-in configs. That is, those + stating with ocio://. +- Added a Choice menu in Preferences->OCIO to select any of the three built-in + OCIO configs. +- Set ocio default config to the built-in: + ocio://default v1.0.8 diff --git a/mrv2/lib/mrvFl/mrvLanguages.cpp b/mrv2/lib/mrvFl/mrvLanguages.cpp index 948ccda01..1f4fb58bb 100644 --- a/mrv2/lib/mrvFl/mrvLanguages.cpp +++ b/mrv2/lib/mrvFl/mrvLanguages.cpp @@ -255,7 +255,7 @@ namespace mrv } if (!language || strncmp(language, langcode, 2) != 0) { - setenv("LANGUAGE", langcode, 1) + setenv("LANGUAGE", langcode, 1); win32_execv(); exit(0); } diff --git a/mrv2/lib/mrvFl/mrvOCIO.cpp b/mrv2/lib/mrvFl/mrvOCIO.cpp index 0a8763865..937a54469 100644 --- a/mrv2/lib/mrvFl/mrvOCIO.cpp +++ b/mrv2/lib/mrvFl/mrvOCIO.cpp @@ -12,6 +12,8 @@ namespace mrv { namespace image { + std::string ocioDefault = "ocio://default"; + std::string ocioIcs() { auto uiICS = App::ui->uiICS; diff --git a/mrv2/lib/mrvFl/mrvOCIO.h b/mrv2/lib/mrvFl/mrvOCIO.h index f3acc4b19..a873bb7b7 100644 --- a/mrv2/lib/mrvFl/mrvOCIO.h +++ b/mrv2/lib/mrvFl/mrvOCIO.h @@ -10,6 +10,8 @@ namespace mrv { namespace image { + extern std::string ocioDefault; + int ocioIcsIndex(const std::string&); std::string ocioIcs(); void setOcioIcs(const std::string&); diff --git a/mrv2/lib/mrvFl/mrvPreferences.cpp b/mrv2/lib/mrvFl/mrvPreferences.cpp index 3aab10c3a..d5174be74 100644 --- a/mrv2/lib/mrvFl/mrvPreferences.cpp +++ b/mrv2/lib/mrvFl/mrvPreferences.cpp @@ -530,36 +530,21 @@ namespace mrv #ifdef TLRENDER_OCIO // Check OCIO variable first, then saved prefs and finally if nothing, // use this default. - std::string ocioDefault = - root + "/ocio/cg-config/cg-config-v1.0.0_aces-v1.3_ocio-v2.1.ocio"; static std::string old_ocio; - const char* var = getenv("OCIO"); + const char* var = fl_getenv("OCIO"); if (!var || strlen(var) == 0) { ocio.get("config", tmpS, "", 2048); if (strlen(tmpS) != 0) { - if (file::isReadable(tmpS)) + if (image::ocioDefault != tmpS) { mrvLOG_INFO( "ocio", _("Setting OCIO config from preferences.") - << std::endl); - uiPrefs->uiPrefsOCIOConfig->value(tmpS); - var = uiPrefs->uiPrefsOCIOConfig->value(); - } - else - { - std::string root = tmpS; - if (root.find("mrv2") != std::string::npos) - { - mrvLOG_INFO( - "ocio", _("Setting OCIO config to default.") - << std::endl); - uiPrefs->uiPrefsOCIOConfig->value(ocioDefault.c_str()); - var = uiPrefs->uiPrefsOCIOConfig->value(); - } + << std::endl); + setOcioConfig(tmpS); } } } @@ -568,15 +553,14 @@ namespace mrv mrvLOG_INFO( "ocio", _("Setting OCIO config from OCIO " "environment variable.") - << std::endl); - uiPrefs->uiPrefsOCIOConfig->value(var); + << std::endl); + setOcioConfig(var); } + var = uiPrefs->uiPrefsOCIOConfig->value(); if (!var || strlen(var) == 0 || resetSettings) { - mrvLOG_INFO( - "ocio", _("Setting OCIO config to default.") << std::endl); - uiPrefs->uiPrefsOCIOConfig->value(ocioDefault.c_str()); + setOcioConfig(image::ocioDefault); } ocio.get("use_active_views", tmp, 1); @@ -1900,32 +1884,57 @@ namespace mrv ////////////////////////////////////////////////////// // OCIO ///////////////////////////////////////////////////// - void Preferences::OCIO(ViewerUI* ui) + void Preferences::setOcioConfig(std::string configName) { -#ifdef TLRENDER_OCIO - PreferencesUI* uiPrefs = ui->uiPrefs; + static std::string oldConfigName; + static const char* kModule = "ocio"; - static std::string old_ocio; - const char* var = uiPrefs->uiPrefsOCIOConfig->value(); - if (var && strlen(var) > 0) - { + if (oldConfigName == configName) + return; - if (old_ocio != var) + PreferencesUI* uiPrefs = App::ui->uiPrefs; + if (configName.substr(0, 7) != "ocio://") + { + if (file::isReadable(configName)) { - old_ocio = var; - mrvLOG_INFO("ocio", _("OCIO config is now:") << std::endl); - mrvLOG_INFO("ocio", var << std::endl); + LOG_INFO(_("OCIO config is now:")); } - - std::string parsed = expandVariables(var, "%", '%'); - parsed = expandVariables(parsed, "${", '}'); - if (old_ocio != parsed) + else { - mrvLOG_INFO("ocio", _("Expanded OCIO config to:") << std::endl); - mrvLOG_INFO("ocio", parsed << std::endl); + std::string msg = + tl::string::Format( + _("OCIO file \"{0}\" not found or not readable.")) + .arg(configName); + LOG_ERROR(msg); + LOG_INFO(_("Setting OCIO config to default:")); + configName = image::ocioDefault; } + } + else if (configName == image::ocioDefault) + { + LOG_INFO(_("Setting OCIO config to default:")); + configName = image::ocioDefault; + } + else + { + LOG_INFO(_("Setting OCIO config to built-in:")); + } + + LOG_INFO(configName); + uiPrefs->uiPrefsOCIOConfig->value(configName.c_str()); + oldConfigName = configName; + } + + void Preferences::OCIO(ViewerUI* ui) + { +#ifdef TLRENDER_OCIO + PreferencesUI* uiPrefs = ui->uiPrefs; - uiPrefs->uiPrefsOCIOConfig->value(var); + static std::string old_ocio; + const char* var = uiPrefs->uiPrefsOCIOConfig->value(); + if (var && strlen(var) > 0) + { + setOcioConfig(var); // First, remove all additional defaults if any from pulldown // menu @@ -1936,8 +1945,8 @@ namespace mrv try { - - config = OCIO::Config::CreateFromFile(parsed.c_str()); + const char* configName = uiPrefs->uiPrefsOCIOConfig->value(); + config = OCIO::Config::CreateFromFile(configName); uiPrefs->uiPrefsOCIOConfig->tooltip(config->getDescription()); diff --git a/mrv2/lib/mrvFl/mrvPreferences.h b/mrv2/lib/mrvFl/mrvPreferences.h index 2b2385cb9..e45564101 100644 --- a/mrv2/lib/mrvFl/mrvPreferences.h +++ b/mrv2/lib/mrvFl/mrvPreferences.h @@ -47,6 +47,8 @@ namespace mrv protected: static bool set_transforms(); + static void setOcioConfig(std::string config); + public: static ColorSchemes schemes; static bool native_file_chooser; diff --git a/mrv2/lib/mrvFl/mrvSession.cpp b/mrv2/lib/mrvFl/mrvSession.cpp index bd9feedb1..d9c3ed685 100644 --- a/mrv2/lib/mrvFl/mrvSession.cpp +++ b/mrv2/lib/mrvFl/mrvSession.cpp @@ -211,9 +211,12 @@ namespace mrv std::string config = ui->uiPrefs->uiPrefsOCIOConfig->value(); - file::Path path(config); - config = getRelativePath(path, fileName).get(); - + if (config.substr(0, 7) != "ocio://") + { + file::Path path(config); + config = getRelativePath(path, fileName).get(); + } + int ics = ui->uiICS->value(); int view = ui->OCIOView->value(); int layer = ui->uiColorChannel->value(); @@ -494,10 +497,17 @@ namespace mrv j = session["ocio"]; std::string config = j["config"]; - replace_path(config); + if (config.substr(0, 7) != "ocio://") + { + replace_path(config); - if (file::isReadable(config)) + if (file::isReadable(config)) + ui->uiPrefs->uiPrefsOCIOConfig->value(config.c_str()); + } + else + { ui->uiPrefs->uiPrefsOCIOConfig->value(config.c_str()); + } Preferences::OCIO(ui); diff --git a/mrv2/lib/mrvFl/mrvTimelinePlayer.cpp b/mrv2/lib/mrvFl/mrvTimelinePlayer.cpp index a055fae5c..29ecf28a9 100644 --- a/mrv2/lib/mrvFl/mrvTimelinePlayer.cpp +++ b/mrv2/lib/mrvFl/mrvTimelinePlayer.cpp @@ -324,6 +324,9 @@ namespace mrv pushMessage("setSpeed", value); _p->player->setSpeed(value); + + if (panel::imageInfoPanel) + panel::imageInfoPanel->refresh(); } void TimelinePlayer::setPlayback(timeline::Playback value) diff --git a/mrv2/lib/mrvPanels/mrvImageInfoPanel.cpp b/mrv2/lib/mrvPanels/mrvImageInfoPanel.cpp index 3a09934d3..7caf3051c 100644 --- a/mrv2/lib/mrvPanels/mrvImageInfoPanel.cpp +++ b/mrv2/lib/mrvPanels/mrvImageInfoPanel.cpp @@ -1223,11 +1223,6 @@ namespace mrv widget->labelcolor(FL_BLACK); widget->textsize(12); widget->textcolor(FL_BLACK); - for (size_t i = 0; i < num; ++i) - { - widget->add(_(options[i])); - } - widget->value(unsigned(content)); widget->labelsize(kLabelSize); widget->copy_label(_(options[content])); if (tooltip) @@ -1238,11 +1233,16 @@ namespace mrv if (!editable) { - widget->deactivate(); + //widget->deactivate(); widget->box(FL_FLAT_BOX); } else { + for (size_t i = 0; i < num; ++i) + { + widget->add(_(options[i])); + } + widget->value(unsigned(content)); if (callback) widget->callback(callback, this); } @@ -1389,7 +1389,7 @@ namespace mrv std::string text; double seconds = content.to_seconds(); - snprintf(buf, 128, _("%.3g seconds "), seconds); + snprintf(buf, 128, _("%.3f seconds "), seconds); text += buf; text += content.to_timecode(); @@ -1695,111 +1695,135 @@ namespace mrv const auto tplayer = player->player(); if (!tplayer) return; - + const auto& info = tplayer->getIOInfo(); + unsigned num_video_streams = info.video.size(); + // @todo: tlRender does not handle multiple audio tracks + unsigned num_audio_streams = info.audio.isValid(); + // @todo: tlRender does not handle subtitle tracks + unsigned num_subtitle_streams = 0; - const auto& path = player->path(); - const auto& directory = path.getDirectory(); + if (m_image->is_open()) + { + const auto& path = player->path(); + const auto& directory = path.getDirectory(); - const auto& audioPath = player->audioPath(); - const otime::RationalTime& time = player->currentTime(); + const auto& audioPath = player->audioPath(); + const otime::RationalTime& time = player->currentTime(); - const auto& fullname = createStringFromPathAndTime(path, time); + const auto& fullname = createStringFromPathAndTime(path, time); - add_text( - _("Directory"), _("Directory where clip resides"), directory); + add_text( + _("Directory"), _("Directory where clip resides"), directory); - add_text(_("Filename"), _("Filename of the clip"), fullname); + add_text(_("Filename"), _("Filename of the clip"), fullname); - if (!audioPath.isEmpty() && path != audioPath) - { - add_text( - _("Audio Directory"), - _("Directory where audio clip resides"), - audioPath.getDirectory()); + if (!audioPath.isEmpty() && path != audioPath) + { + add_text( + _("Audio Directory"), + _("Directory where audio clip resides"), + audioPath.getDirectory()); - add_text( - _("Audio Filename"), _("Filename of the audio clip"), - audioPath.get(-1, tl::file::PathType::FileName)); - } + add_text( + _("Audio Filename"), _("Filename of the audio clip"), + audioPath.get(-1, tl::file::PathType::FileName)); + } - ++group; + ++group; + + add_int( + _("Video Streams"), _("Number of video streams in file"), + num_video_streams); + add_int( + _("Audio Streams"), _("Number of audio streams in file"), + num_audio_streams); + // add_int( _("Subtitle Streams"), + // _("Number of subtitle streams in file"), + // num_subtitle_streams ); + + const auto& range = player->timeRange(); + const auto& startTime = range.start_time(); + const auto& endTime = range.end_time_inclusive(); + add_time( + _("Start Time"), _("Beginning frame of clip"), startTime, + false); + add_time(_("End Time"), _("Ending frame of clip"), endTime, false); + + const otime::TimeRange& iorange = player->inOutRange(); + int64_t first = iorange.start_time().to_frames(); + int64_t last = iorange.end_time_inclusive().to_frames(); + + add_int( + _("First Frame"), _("First frame of clip - User selected"), + (int)first, true, true, (Fl_Callback*)change_first_frame_cb, + first, last); + add_int( + _("Last Frame"), _("Last frame of clip - User selected"), + (int)last, true, true, (Fl_Callback*)change_last_frame_cb, 2, + last); + + + const char* name = ""; + double fps = player->defaultSpeed(); + + if (is_equal(fps, 29.97)) + name = "(NTSC)"; + else if (is_equal(fps, 30.0)) + name = "(60hz HDTV)"; + else if (is_equal(fps, 25.0)) + name = "(PAL)"; + else if (is_equal(fps, 24.0)) + name = "(Film)"; + else if (is_equal(fps, 50.0)) + name = _("(PAL Fields)"); + else if (is_equal(fps, 59.940059)) + name = _("(NTSC Fields)"); + + snprintf(buf, 256, "%g %s", fps, name); - DBGM1("m_curr=" << m_curr); + add_text( + _("Default Speed"), + _("Default Speed in Frames per Second"), buf); + + fps = player->speed(); + add_float( + _("Current Speed"), + _("Current Speed (Frames Per Second)"), fps, + true, true, (Fl_Callback*)change_fps_cb, 1.0f, 60.0f, + FL_WHEN_CHANGED); - unsigned num_video_streams = info.video.size(); - // @todo: tlRender does not handle multiple audio tracks - unsigned num_audio_streams = info.audio.isValid(); - // @todo: tlRender does not handle subtitle tracks - unsigned num_subtitle_streams = 0; + ++group; - add_int( - _("Video Streams"), _("Number of video streams in file"), - num_video_streams); - add_int( - _("Audio Streams"), _("Number of audio streams in file"), - num_audio_streams); - // add_int( _("Subtitle Streams"), - // _("Number of subtitle streams in file"), - // num_subtitle_streams ); - - const auto& range = player->timeRange(); - const auto& startTime = range.start_time(); - const auto& endTime = range.end_time_inclusive(); - add_time( - _("Start Time"), _("Beginning frame of clip"), startTime, - false); - add_time(_("End Time"), _("Ending frame of clip"), endTime, false); - - const otime::TimeRange& iorange = player->inOutRange(); - int64_t first = iorange.start_time().to_frames(); - int64_t last = iorange.end_time_inclusive().to_frames(); - - add_int( - _("First Frame"), _("First frame of clip - User selected"), - (int)first, true, true, (Fl_Callback*)change_first_frame_cb, - first, last); - add_int( - _("Last Frame"), _("Last frame of clip - User selected"), - (int)last, true, true, (Fl_Callback*)change_last_frame_cb, 2, - last); - - float fps = player->speed(); - add_float( - _("Current Speed"), _("Current Speed (Frames Per Second)"), fps, - true, true, (Fl_Callback*)change_fps_cb, 1.0f, 60.0f, - FL_WHEN_CHANGED); - - ++group; - - struct stat file_stat; - const std::string& filename = directory + fullname; + struct stat file_stat; + const std::string& filename = directory + fullname; - if (stat(filename.c_str(), &file_stat) == 0) - { - // Get file size - std::uintmax_t filesize = fs::file_size(filename); - add_memory(_("Disk space"), _("Disk space"), filesize ); + if (stat(filename.c_str(), &file_stat) == 0) + { + // Get file size + std::uintmax_t filesize = fs::file_size(filename); + add_memory(_("Disk space"), _("Disk space"), filesize ); - // Retrieve last modification time - time_t mod_time = file_stat.st_mtime; - time_t creation_time = file_stat.st_ctime; + // Retrieve last modification time + time_t mod_time = file_stat.st_mtime; + time_t creation_time = file_stat.st_ctime; - // Format time according to current locale - strftime(buf, sizeof(buf), "%c", localtime(&creation_time)); - add_text(_("Creation Date"), _("Creation date of file"), - buf); + // Format time according to current locale + strftime(buf, sizeof(buf), "%c", localtime(&creation_time)); + add_text(_("Creation Date"), _("Creation date of file"), + buf); - // Format time according to current locale - strftime(buf, sizeof(buf), "%c", localtime(&mod_time)); - add_text(_("Modified Date"), _("Last modified date of file"), - buf); - } + // Format time according to current locale + strftime(buf, sizeof(buf), "%c", localtime(&mod_time)); + add_text(_("Modified Date"), _("Last modified date of file"), + buf); + } - ++group; + ++group; + } m_image->show(); - + const auto view = _p->ui->uiView; const auto& videoData = view->getVideoData(); @@ -1878,12 +1902,12 @@ namespace mrv const char* name = _("Unknown"); int num = sizeof(kAspectRatioNames) / sizeof(AspectName); constexpr double fuzz = 0.001; - for (int i = 0; i < num; ++i) + for (int j = 0; j < num; ++j) { if (mrv::is_equal( - aspect_ratio, kAspectRatioNames[i].ratio, fuzz)) + aspect_ratio, kAspectRatioNames[j].ratio, fuzz)) { - name = _(kAspectRatioNames[i].name); + name = _(kAspectRatioNames[j].name); break; } } @@ -1944,28 +1968,6 @@ namespace mrv _("Image Channels"), _("Number of channels in clip"), channelCount, false); - name = ""; - double fps = player->defaultSpeed(); - - if (is_equal(fps, 29.97)) - name = "(NTSC)"; - else if (is_equal(fps, 30.0)) - name = "(60hz HDTV)"; - else if (is_equal(fps, 25.0)) - name = "(PAL)"; - else if (is_equal(fps, 24.0)) - name = "(Film)"; - else if (is_equal(fps, 50.0)) - name = _("(PAL Fields)"); - else if (is_equal(fps, 59.940059)) - name = _("(NTSC Fields)"); - - snprintf(buf, 256, "%g %s", fps, name); - - add_text( - _("Default Speed"), - _("Default Speed in Frames per Second"), buf); - std::vector< std::string > yuvCoeffs = tl::image::getYUVCoefficientsLabels(); add_enum( diff --git a/mrv2/lib/mrvUI/mrvMenus.cpp b/mrv2/lib/mrvUI/mrvMenus.cpp index d35a20d70..7c6091726 100644 --- a/mrv2/lib/mrvUI/mrvMenus.cpp +++ b/mrv2/lib/mrvUI/mrvMenus.cpp @@ -66,14 +66,12 @@ namespace mrv char buf[256]; const auto model = ui->app->filesModel(); - const auto& files = model->observeFiles()->get(); - size_t numFiles = files.size(); + const size_t numFiles = model->observeFiles()->getSize(); menu->clear(); int idx; - DBG3; menu->add( _("File/Open/Movie or Sequence"), kOpenImage.hotkey(), (Fl_Callback*)open_cb, ui); @@ -995,6 +993,7 @@ namespace mrv const int aIndex = model->observeAIndex()->get(); if (numFiles > 0 && aIndex >= 0 && aIndex < numFiles) { + const auto& files = model->observeFiles()->get(); std::string fileName = files[aIndex]->path.get(-1); const std::regex& regex = version_regex(ui, false); @@ -1291,7 +1290,6 @@ namespace mrv #endif menu->redraw(); - DBG3; } } // namespace mrv diff --git a/mrv2/lib/mrvWidgets/mrvColorInfo.cpp b/mrv2/lib/mrvWidgets/mrvColorInfo.cpp index dd5444cb6..e373e0ae0 100644 --- a/mrv2/lib/mrvWidgets/mrvColorInfo.cpp +++ b/mrv2/lib/mrvWidgets/mrvColorInfo.cpp @@ -214,8 +214,8 @@ namespace mrv tooltip(_("Mark an area in the image with SHIFT + the left mouse " "button")); - Fl_Group* g = new Fl_Group(X + 8, Y + 10, 32, 32); - dcol = new ColorWidget(X + 8, Y + 10, 32, 32); + Fl_Group* g = new Fl_Group(X + 4, Y + 10, 32, 32); + dcol = new ColorWidget(X + 4, Y + 10, 32, 32); g->resizable(0); g->end(); diff --git a/mrv2/lib/mrvWidgets/mrvPreferencesUI.fl b/mrv2/lib/mrvWidgets/mrvPreferencesUI.fl index 7cac455ee..54fd04c1c 100644 --- a/mrv2/lib/mrvWidgets/mrvPreferencesUI.fl +++ b/mrv2/lib/mrvWidgets/mrvPreferencesUI.fl @@ -3,8 +3,8 @@ version 1.0400 i18n_type 1 i18n_include {} i18n_conditional {} -i18n_gnu_function gettext -i18n_gnu_static_function gettext_noop +i18n_gnu_function _ +i18n_gnu_static_function _ header_name {.h} code_name {.cxx} decl {\#include } {public global @@ -164,7 +164,7 @@ If you try to open several mrv2s with different images, all these images will be } } Fl_Group {} { - label {View Window} open + label {View Window} xywh {288 35 555 349} box EMBOSSED_BOX align 5 hide } { Fl_Group {} { @@ -916,16 +916,50 @@ v->uiPrefsFPS->value( g );} } } Fl_Group {} { - label OCIO - xywh {293 34 542 362} box EMBOSSED_BOX align 5 hide + label OCIO open + xywh {293 34 542 362} box EMBOSSED_BOX align 5 } { Fl_Group {} {open - xywh {303 113 523 204} + xywh {302 93 523 168} } { Fl_Input uiPrefsOCIOConfig { label {OCIO Config File} user_data main user_data_type {ViewerUI*} - tooltip {This is the path to your config.ocio file. It can be set with the environment variable OCIO, which takes precedence over any saved setting.} xywh {388 180 305 30} color 20 align 1 when 11 textcolor 56 + tooltip {This is the path to your config.ocio file. It can be set with the environment variable OCIO, which takes precedence over any saved setting.} xywh {312 180 435 31} color 20 align 1 when 11 textcolor 56 + } + Fl_Choice {} { + label {Built-in Configs} + user_data this user_data_type {PreferencesUI*} + callback {const Fl_Menu_Item* item = o->mvalue(); +if (!item || !item->label()) return; + +const std::string entry = item->label(); +if (entry == _("Default")) +{ + v->uiPrefsOCIOConfig->value("ocio://default"); +} +else if (entry == _("CG")) +{ + v->uiPrefsOCIOConfig->value("ocio://cg-config-v1.0.0_aces-v1.3_ocio-v2.1"); +} +else if (entry == _("Studio")) +{ + v->uiPrefsOCIOConfig->value("ocio://studio-config-v1.0.0_aces-v1.3_ocio-v2.1"); +}} open selected + xywh {477 99 119 32} down_box BORDER_BOX + } { + MenuItem {} { + label Default user_data_type {void*} + xywh {20 20 100 20} + } + MenuItem {} { + label CG user_data_type {void*} + xywh {10 10 100 20} + } + MenuItem {} { + label Studio user_data_type {void*} + xywh {0 0 100 20} + } } Fl_Button {} { label Pick @@ -936,7 +970,7 @@ if ( r.empty() ) return; unsetenv( "OCIO" ); uiPrefs->uiPrefsOCIOConfig->value( r.c_str() );} - tooltip {Pick a config.ocio file from disk.} xywh {693 180 55 31} + tooltip {Pick a config.ocio file from disk.} xywh {751 180 55 31} } } } @@ -1324,13 +1358,13 @@ v->uiOCIO_Look->do_callback();} } Fl_Group {} { label Errors open - xywh {303 39 532 362} box EMBOSSED_BOX align 5 + xywh {303 39 532 362} box EMBOSSED_BOX align 5 hide } { Fl_Group {} {open xywh {341 39 446 313} } { Fl_Choice uiPrefsRaiseLogWindowOnFFmpegError { - label {On FFmpeg Error} open selected + label {On FFmpeg Error} open tooltip {Adjusts how Log Window behaves in case of an FFmpeg error.} xywh {493 128 255 25} down_box BORDER_BOX align 132 textcolor 32 class {mrv::Choice} } { diff --git a/mrv2/po/es.po b/mrv2/po/es.po index 63c1f8a5e..8749d549d 100644 --- a/mrv2/po/es.po +++ b/mrv2/po/es.po @@ -2327,7 +2327,7 @@ msgid "Unknown bit depth" msgstr "Profundid de bits desconocida" msgid "Depth" -msgstr "Profudidas" +msgstr "Profundidad" msgid "Bit depth of clip" msgstr "Profundidad en bits" diff --git a/tlRender b/tlRender index 44dcd6620..9245ef07f 160000 --- a/tlRender +++ b/tlRender @@ -1 +1 @@ -Subproject commit 44dcd66205e9662e89277e01d83c10db98836f24 +Subproject commit 9245ef07f7642d5781c790b800ea189cf0964035