Application(int &argc, char **argv) : QApplication(argc, argv) { QDir dir(applicationDirPath()); dir.cd("lib"); dir.cd("qt5"); addLibraryPath(dir.absolutePath()); setOrganizationName("Meltytech"); setOrganizationDomain("meltytech.com"); setApplicationName("Shotcut"); setApplicationVersion(SHOTCUT_VERSION); setAttribute(Qt::AA_UseHighDpiPixmaps); setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); #if defined(Q_OS_MAC) setAttribute(Qt::AA_DontShowIconsInMenus); #endif #if defined(Q_OS_WIN) if (Settings.playerGPU()) { QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL); } else if (Settings.drawMethod() >= Qt::AA_UseDesktopOpenGL && Settings.drawMethod() <= Qt::AA_UseSoftwareOpenGL) { QCoreApplication::setAttribute(Qt::ApplicationAttribute(Settings.drawMethod())); } #endif // Startup logging. dir = QStandardPaths::standardLocations(QStandardPaths::DataLocation).first(); if (!dir.exists()) dir.mkpath(dir.path()); const QString logFileName = dir.filePath("shotcut-log.txt"); QFile::remove(logFileName); FileAppender* fileAppender = new FileAppender(logFileName); fileAppender->setFormat("[%-7l] <%C> %m\n"); Logger::registerAppender(fileAppender); #ifndef NDEBUG // Only log to console in dev debug builds. ConsoleAppender* consoleAppender = new ConsoleAppender(); consoleAppender->setFormat(fileAppender->format()); Logger::registerAppender(consoleAppender); mlt_log_set_level(MLT_LOG_VERBOSE); #else mlt_log_set_level(MLT_LOG_INFO); #endif mlt_log_set_callback(mlt_log_handler); // Log some basic info. LOG_INFO() << "Starting Shotcut version" << SHOTCUT_VERSION; #if defined (Q_OS_WIN) LOG_INFO() << "Windows version" << QSysInfo::windowsVersion(); #elif defined(Q_OS_MAC) LOG_INFO() << "OS X version" << QSysInfo::macVersion(); #else LOG_INFO() << "Linux version"; #endif LOG_INFO() << "number of logical cores =" << QThread::idealThreadCount(); LOG_INFO() << "locale =" << QLocale(); LOG_INFO() << "install dir =" << applicationDirPath(); // Load translations QString locale = Settings.language(); dir = applicationDirPath(); #if defined(Q_OS_MAC) dir.cdUp(); dir.cd("Resources"); dir.cd("translations"); #elif defined(Q_OS_WIN) dir.cd("share"); dir.cd("translations"); #else dir.cdUp(); dir.cd("share"); dir.cd("shotcut"); dir.cd("translations"); #endif if (locale.startsWith("pt_")) locale = "pt"; if (qtTranslator.load("qt_" + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) installTranslator(&qtTranslator); else if (qtTranslator.load("qt_" + locale, dir.absolutePath())) installTranslator(&qtTranslator); if (qtBaseTranslator.load("qtbase_" + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) installTranslator(&qtBaseTranslator); else if (qtBaseTranslator.load("qtbase_" + locale, dir.absolutePath())) installTranslator(&qtBaseTranslator); if (shotcutTranslator.load("shotcut_" + Settings.language(), dir.absolutePath())) installTranslator(&shotcutTranslator); QCommandLineParser parser; parser.addHelpOption(); parser.addVersionOption(); QCommandLineOption fullscreenOption("fullscreen", QCoreApplication::translate("main", "Fill the screen with the Shotcut window.")); parser.addOption(fullscreenOption); QCommandLineOption gpuOption("gpu", QCoreApplication::translate("main", "Use GPU processing.")); parser.addOption(gpuOption); parser.addPositionalArgument("resource", QCoreApplication::translate("main", "A file to open.")); parser.process(arguments()); isFullScreen = parser.isSet(fullscreenOption); if (parser.isSet(gpuOption)) Settings.setPlayerGPU(true); if (!parser.positionalArguments().isEmpty()) resourceArg = parser.positionalArguments().first(); }
Application(int &argc, char **argv) : QApplication(argc, argv) { QDir dir(applicationDirPath()); #ifdef Q_OS_MAC dir.cdUp(); dir.cd("PlugIns"); dir.cd("qt"); #else dir.cd("lib"); dir.cd("qt5"); #endif addLibraryPath(dir.absolutePath()); setOrganizationName("Meltytech"); #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) setOrganizationDomain("shotcut.org"); setDesktopFileName("org.shotcut.Shotcut"); #else setOrganizationDomain("meltytech.com"); #endif setApplicationName("Shotcut"); setApplicationVersion(SHOTCUT_VERSION); setAttribute(Qt::AA_UseHighDpiPixmaps); setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); #if defined(Q_OS_MAC) setAttribute(Qt::AA_DontShowIconsInMenus); #endif // Process command line options. QCommandLineParser parser; parser.addHelpOption(); parser.addVersionOption(); #ifndef Q_OS_WIN QCommandLineOption fullscreenOption("fullscreen", QCoreApplication::translate("main", "Fill the screen with the Shotcut window.")); parser.addOption(fullscreenOption); #endif QCommandLineOption noupgradeOption("noupgrade", QCoreApplication::translate("main", "Hide upgrade prompt and menu item.")); parser.addOption(noupgradeOption); QCommandLineOption gpuOption("gpu", QCoreApplication::translate("main", "Use GPU processing.")); parser.addOption(gpuOption); QCommandLineOption clearRecentOption("clear-recent", QCoreApplication::translate("main", "Clear Recent on Exit")); parser.addOption(clearRecentOption); QCommandLineOption appDataOption("appdata", QCoreApplication::translate("main", "The directory for app configuration and data."), QCoreApplication::translate("main", "directory")); parser.addOption(appDataOption); QCommandLineOption scaleOption("QT_SCALE_FACTOR", QCoreApplication::translate("main", "The scale factor for a high-DPI screen"), QCoreApplication::translate("main", "number")); parser.addOption(scaleOption); scaleOption = QCommandLineOption("QT_SCREEN_SCALE_FACTORS", QCoreApplication::translate("main", "A semicolon-separated list of scale factors for each screen"), QCoreApplication::translate("main", "list")); parser.addOption(scaleOption); parser.addPositionalArgument("[FILE]...", QCoreApplication::translate("main", "Zero or more files or folders to open")); parser.process(arguments()); #ifdef Q_OS_WIN isFullScreen = false; #else isFullScreen = parser.isSet(fullscreenOption); #endif setProperty("noupgrade", parser.isSet(noupgradeOption)); setProperty("clearRecent", parser.isSet(clearRecentOption)); if (!parser.value(appDataOption).isEmpty()) { appDirArg = parser.value(appDataOption); ShotcutSettings::setAppDataForSession(appDirArg); } if (parser.isSet(gpuOption)) Settings.setPlayerGPU(true); if (!parser.positionalArguments().isEmpty()) resourceArg = parser.positionalArguments(); // Startup logging. dir = Settings.appDataLocation(); if (!dir.exists()) dir.mkpath(dir.path()); const QString logFileName = dir.filePath("shotcut-log.txt"); QFile::remove(logFileName); FileAppender* fileAppender = new FileAppender(logFileName); fileAppender->setFormat("[%{type:-7}] <%{function}> %{message}\n"); cuteLogger->registerAppender(fileAppender); #ifndef NDEBUG // Only log to console in dev debug builds. ConsoleAppender* consoleAppender = new ConsoleAppender(); consoleAppender->setFormat(fileAppender->format()); cuteLogger->registerAppender(consoleAppender); mlt_log_set_level(MLT_LOG_VERBOSE); #else mlt_log_set_level(MLT_LOG_INFO); #endif mlt_log_set_callback(mlt_log_handler); cuteLogger->logToGlobalInstance("qml", true); // Log some basic info. LOG_INFO() << "Starting Shotcut version" << SHOTCUT_VERSION; #if defined (Q_OS_WIN) LOG_INFO() << "Windows version" << QSysInfo::windowsVersion(); #elif defined(Q_OS_MAC) LOG_INFO() << "macOS version" << QSysInfo::macVersion(); #else LOG_INFO() << "Linux version"; #endif LOG_INFO() << "number of logical cores =" << QThread::idealThreadCount(); LOG_INFO() << "locale =" << QLocale(); LOG_INFO() << "install dir =" << applicationDirPath(); LOG_INFO() << "device pixel ratio =" << devicePixelRatio(); Settings.log(); #if defined(Q_OS_WIN) if (Settings.playerGPU()) { QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL); } else if (Settings.drawMethod() >= Qt::AA_UseDesktopOpenGL && Settings.drawMethod() <= Qt::AA_UseSoftwareOpenGL) { QCoreApplication::setAttribute(Qt::ApplicationAttribute(Settings.drawMethod())); } #endif // Load translations QString locale = Settings.language(); dir = applicationDirPath(); #if defined(Q_OS_MAC) dir.cdUp(); dir.cd("Resources"); dir.cd("translations"); #elif defined(Q_OS_WIN) dir.cd("share"); dir.cd("translations"); #else dir.cdUp(); dir.cd("share"); dir.cd("shotcut"); dir.cd("translations"); #endif if (locale.startsWith("pt_")) locale = "pt"; else if (locale.startsWith("en_")) locale = "en"; if (qtTranslator.load("qt_" + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) installTranslator(&qtTranslator); else if (qtTranslator.load("qt_" + locale, dir.absolutePath())) installTranslator(&qtTranslator); if (qtBaseTranslator.load("qtbase_" + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) installTranslator(&qtBaseTranslator); else if (qtBaseTranslator.load("qtbase_" + locale, dir.absolutePath())) installTranslator(&qtBaseTranslator); if (shotcutTranslator.load("shotcut_" + Settings.language(), dir.absolutePath())) installTranslator(&shotcutTranslator); }
static jboolean FactoryInit(JNIEnv* env,jclass clazz, jobjectArray plugins, jstring jlogTag, jint jlogLevel, jstring jfilesRoot, jobject assetMgr) { pthread_mutex_lock(&g_repository_lock); if ( g_repository ) { pthread_mutex_unlock(&g_repository_lock); return true; } { const char* logTag = (*env)->GetStringUTFChars(env, jlogTag, NULL); snprintf(mltLogTag, sizeof(mltLogTag), "%s", logTag); mltLogLevel = MLT_LOG_INFO; switch (jlogLevel) { case ANDROID_LOG_VERBOSE: mltLogLevel = MLT_LOG_VERBOSE; break; case ANDROID_LOG_DEBUG: mltLogLevel = MLT_LOG_DEBUG; break; case ANDROID_LOG_INFO: mltLogLevel = MLT_LOG_INFO; break; case ANDROID_LOG_WARN: mltLogLevel = MLT_LOG_WARNING; break; case ANDROID_LOG_ERROR: mltLogLevel = MLT_LOG_ERROR; break; case ANDROID_LOG_FATAL: mltLogLevel = MLT_LOG_FATAL; break; } mlt_log_set_callback(MltLogCallback); mlt_log_set_level(mltLogLevel); } { AAssetManager* mgr = AAssetManager_fromJava(env, assetMgr); const char* filesRoot = (*env)->GetStringUTFChars(env,jfilesRoot, NULL); char err[1024]; mlt_android_check_data(mgr, filesRoot, err, sizeof(err)); } int count = 0, ess_count = 0, i = 0; if ( plugins == NULL ) { return JNI_FALSE; } count = (*env)->GetArrayLength(env, plugins), ess_count = 0; if ( count == 0 ) { return JNI_FALSE; } for ( i = 0; i < count; i++ ) { jstring ck_plugin = (*env)->GetObjectArrayElement(env, plugins, i); if ( ck_plugin ) ess_count++; } if (ess_count == 0 ) { return JNI_FALSE; } { const char** plugin_names = (const char**)malloc(ess_count * sizeof(char*)); const char** pp = plugin_names; for ( i=0; i<count; i++ ) { jstring ck_plugin = (*env)->GetObjectArrayElement(env, plugins, i); if ( !ck_plugin ) continue; *pp = (*env)->GetStringUTFChars(env, ck_plugin, NULL); pp++; } g_repository = mlt_factory_init2(plugin_names, ess_count); free(plugin_names); } pthread_mutex_unlock(&g_repository_lock); return JNI_TRUE; }
Application(int &argc, char **argv) : QApplication(argc, argv) { QDir dir(applicationDirPath()); dir.cd("lib"); dir.cd("qt5"); addLibraryPath(dir.absolutePath()); setOrganizationName("Meltytech"); setOrganizationDomain("meltytech.com"); setApplicationName("Shotcut"); setApplicationVersion(SHOTCUT_VERSION); setAttribute(Qt::AA_UseHighDpiPixmaps); #if defined(Q_OS_MAC) setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); setAttribute(Qt::AA_DontShowIconsInMenus); #endif // Startup logging. dir = QStandardPaths::standardLocations(QStandardPaths::DataLocation).first(); if (!dir.exists()) dir.mkpath(dir.path()); const QString logFileName = dir.filePath("shotcut-log.txt"); QFile::remove(logFileName); FileAppender* fileAppender = new FileAppender(logFileName); fileAppender->setFormat("[%-7l] <%C> %m\n"); Logger::registerAppender(fileAppender); #ifndef NDEBUG // Only log to console in dev debug builds. ConsoleAppender* consoleAppender = new ConsoleAppender(); consoleAppender->setFormat(fileAppender->format()); Logger::registerAppender(consoleAppender); mlt_log_set_level(MLT_LOG_VERBOSE); #else mlt_log_set_level(MLT_LOG_INFO); #endif mlt_log_set_callback(mlt_log_handler); // Log some basic info. LOG_INFO() << "Starting Shotcut version" << SHOTCUT_VERSION; #if defined (Q_OS_WIN) LOG_INFO() << "Windows version" << QSysInfo::windowsVersion(); #elif defined(Q_OS_MAC) LOG_INFO() << "OS X version" << QSysInfo::macVersion(); #else LOG_INFO() << "Linux version"; #endif LOG_INFO() << "number of logical cores =" << QThread::idealThreadCount(); LOG_INFO() << "locale =" << QLocale(); LOG_INFO() << "install dir =" << applicationDirPath(); // Load translations const QString locale = Settings.language(); QLocale::setDefault(QLocale(locale)); dir = applicationDirPath(); #if defined(Q_OS_MAC) dir.cdUp(); dir.cd("Resources"); dir.cd("translations"); #elif defined(Q_OS_WIN) dir.cd("share"); dir.cd("translations"); #else dir.cdUp(); dir.cd("share"); dir.cd("shotcut"); dir.cd("translations"); #endif if (qtTranslator.load("qt_" + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) installTranslator(&qtTranslator); else if (qtTranslator.load("qt_" + locale, dir.absolutePath())) installTranslator(&qtTranslator); if (qtBaseTranslator.load("qtbase_" + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) installTranslator(&qtBaseTranslator); else if (qtBaseTranslator.load("qtbase_" + locale, dir.absolutePath())) installTranslator(&qtBaseTranslator); if (shotcutTranslator.load("shotcut_" + locale, dir.absolutePath())) installTranslator(&shotcutTranslator); if (argc > 1) resourceArg = QString::fromUtf8(argv[1]); }