/* * Copyright (c) 2022 Taner Sener * * This file is part of FFmpegKit. * * FFmpegKit is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * FFmpegKit is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General License for more details. * * You should have received a copy of the GNU Lesser General License * along with FFmpegKit. If not, see . */ #include "Packages.h" #include "config.h" #include #include std::string ffmpegkit::Packages::getPackageName() { std::shared_ptr> enabledLibrarySet = getExternalLibraries(); #define contains_ext_lib(element) enabledLibrarySet->find(element) != enabledLibrarySet->end() bool speex = contains_ext_lib("speex"); bool fribidi = contains_ext_lib("fribidi"); bool gnutls = contains_ext_lib("gnutls"); bool xvid = contains_ext_lib("xvid"); bool min = false; bool minGpl = false; bool https = false; bool httpsGpl = false; bool audio = false; bool video = false; bool full = false; bool fullGpl = false; if (speex && fribidi) { if (xvid) { fullGpl = true; } else { full = true; } } else if (speex) { audio = true; } else if (fribidi) { video = true; } else if (xvid) { if (gnutls) { httpsGpl = true; } else { minGpl = true; } } else { if (gnutls) { https = true; } else { min = true; } } if (fullGpl) { if (contains_ext_lib("dav1d") && contains_ext_lib("fontconfig") && contains_ext_lib("freetype") && contains_ext_lib("fribidi") && contains_ext_lib("gmp") && contains_ext_lib("gnutls") && contains_ext_lib("kvazaar") && contains_ext_lib("mp3lame") && contains_ext_lib("libass") && contains_ext_lib("iconv") && contains_ext_lib("libilbc") && contains_ext_lib("libtheora") && contains_ext_lib("libvidstab") && contains_ext_lib("libvorbis") && contains_ext_lib("libvpx") && contains_ext_lib("libwebp") && contains_ext_lib("libxml2") && contains_ext_lib("opencore-amr") && contains_ext_lib("opus") && contains_ext_lib("shine") && contains_ext_lib("snappy") && contains_ext_lib("soxr") && contains_ext_lib("speex") && contains_ext_lib("twolame") && contains_ext_lib("x264") && contains_ext_lib("x265") && contains_ext_lib("xvid")) { return "full-gpl"; } else { return "custom"; } } if (full) { if (contains_ext_lib("dav1d") && contains_ext_lib("fontconfig") && contains_ext_lib("freetype") && contains_ext_lib("fribidi") && contains_ext_lib("gmp") && contains_ext_lib("gnutls") && contains_ext_lib("kvazaar") && contains_ext_lib("mp3lame") && contains_ext_lib("libass") && contains_ext_lib("iconv") && contains_ext_lib("libilbc") && contains_ext_lib("libtheora") && contains_ext_lib("libvorbis") && contains_ext_lib("libvpx") && contains_ext_lib("libwebp") && contains_ext_lib("libxml2") && contains_ext_lib("opencore-amr") && contains_ext_lib("opus") && contains_ext_lib("shine") && contains_ext_lib("snappy") && contains_ext_lib("soxr") && contains_ext_lib("speex") && contains_ext_lib("twolame")) { return "full"; } else { return "custom"; } } if (video) { if (contains_ext_lib("dav1d") && contains_ext_lib("fontconfig") && contains_ext_lib("freetype") && contains_ext_lib("fribidi") && contains_ext_lib("kvazaar") && contains_ext_lib("libass") && contains_ext_lib("iconv") && contains_ext_lib("libtheora") && contains_ext_lib("libvpx") && contains_ext_lib("libwebp") && contains_ext_lib("snappy")) { return "video"; } else { return "custom"; } } if (audio) { if (contains_ext_lib("mp3lame") && contains_ext_lib("libilbc") && contains_ext_lib("libvorbis") && contains_ext_lib("opencore-amr") && contains_ext_lib("opus") && contains_ext_lib("shine") && contains_ext_lib("soxr") && contains_ext_lib("speex") && contains_ext_lib("twolame")) { return "audio"; } else { return "custom"; } } if (httpsGpl) { if (contains_ext_lib("gmp") && contains_ext_lib("gnutls") && contains_ext_lib("libvidstab") && contains_ext_lib("x264") && contains_ext_lib("x265") && contains_ext_lib("xvid")) { return "https-gpl"; } else { return "custom"; } } if (https) { if (contains_ext_lib("gmp") && contains_ext_lib("gnutls")) { return "https"; } else { return "custom"; } } if (minGpl) { if (contains_ext_lib("libvidstab") && contains_ext_lib("x264") && contains_ext_lib("x265") && contains_ext_lib("xvid")) { return "min-gpl"; } else { return "custom"; } } return "min"; } std::shared_ptr> ffmpegkit::Packages::getExternalLibraries() { const std::set supportedExternalLibraries{ "dav1d", "fontconfig", "freetype", "fribidi", "gmp", "gnutls", "kvazaar", "mp3lame", "libaom", "libass", "iconv", "libilbc", "libtheora", "libvidstab", "libvorbis", "libvpx", "libwebp", "libxml2", "opencore-amr", "openh264", "opus", "rubberband", "sdl2", "shine", "snappy", "soxr", "speex", "tesseract", "twolame", "x264", "x265", "xvid"}; std::string buildConfiguration(FFMPEG_CONFIGURATION); char libraryName1[50]; char libraryName2[50]; std::shared_ptr> enabledLibrarySet = std::make_shared>(); std::for_each(supportedExternalLibraries.cbegin(), supportedExternalLibraries.cend(), [&](const char* supportedExternalLibrary) { sprintf(libraryName1, "enable-%s", supportedExternalLibrary); sprintf(libraryName2, "enable-lib%s", supportedExternalLibrary); if (buildConfiguration.find(libraryName1) != std::string::npos || buildConfiguration.find(libraryName2) != std::string::npos) { enabledLibrarySet->insert(supportedExternalLibrary); } }); return enabledLibrarySet; }