ffmpeg: Attempt to fix RootPath on some linux distributions (#2292)
* fix ffmpeg lib path
* Check if ffmpeg isn't found
* Move code to FFmpegContext
* Call it in static constructor
* revert static instance
* rollback
* lazy initialization
* Revert "lazy initialization"
This reverts commit f675d26a5d
.
This commit is contained in:
parent
c316c059ef
commit
7b8ad1c36c
2 changed files with 36 additions and 4 deletions
|
@ -1,6 +1,8 @@
|
||||||
using FFmpeg.AutoGen;
|
using FFmpeg.AutoGen;
|
||||||
using Ryujinx.Common.Logging;
|
using Ryujinx.Common.Logging;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace Ryujinx.Graphics.Nvdec.H264
|
namespace Ryujinx.Graphics.Nvdec.H264
|
||||||
|
@ -28,6 +30,40 @@ namespace Ryujinx.Graphics.Nvdec.H264
|
||||||
_packet = ffmpeg.av_packet_alloc();
|
_packet = ffmpeg.av_packet_alloc();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static FFmpegContext()
|
||||||
|
{
|
||||||
|
SetRootPath();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void SetRootPath()
|
||||||
|
{
|
||||||
|
if (OperatingSystem.IsLinux())
|
||||||
|
{
|
||||||
|
// Configure FFmpeg search path
|
||||||
|
Process lddProcess = Process.Start(new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = "/bin/sh",
|
||||||
|
Arguments = "-c \"ldd $(which ffmpeg 2>/dev/null) | grep libavfilter\" 2>/dev/null",
|
||||||
|
UseShellExecute = false,
|
||||||
|
RedirectStandardOutput = true
|
||||||
|
});
|
||||||
|
|
||||||
|
string lddOutput = lddProcess.StandardOutput.ReadToEnd();
|
||||||
|
|
||||||
|
lddProcess.WaitForExit();
|
||||||
|
lddProcess.Close();
|
||||||
|
|
||||||
|
if (lddOutput.Contains(" => "))
|
||||||
|
{
|
||||||
|
ffmpeg.RootPath = Path.GetDirectoryName(lddOutput.Split(" => ")[1]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Logger.Error?.PrintMsg(LogClass.FFmpeg, "FFmpeg wasn't found. Make sure that you have it installed and up to date.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void Log(void* p0, int level, string format, byte* vl)
|
private void Log(void* p0, int level, string format, byte* vl)
|
||||||
{
|
{
|
||||||
if (level > ffmpeg.av_log_get_level())
|
if (level > ffmpeg.av_log_get_level())
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
using ARMeilleure.Translation.PTC;
|
using ARMeilleure.Translation.PTC;
|
||||||
using FFmpeg.AutoGen;
|
|
||||||
using Gtk;
|
using Gtk;
|
||||||
using Ryujinx.Common.Configuration;
|
using Ryujinx.Common.Configuration;
|
||||||
using Ryujinx.Common.GraphicsDriver;
|
using Ryujinx.Common.GraphicsDriver;
|
||||||
|
@ -78,9 +77,6 @@ namespace Ryujinx
|
||||||
if (OperatingSystem.IsLinux())
|
if (OperatingSystem.IsLinux())
|
||||||
{
|
{
|
||||||
XInitThreads();
|
XInitThreads();
|
||||||
|
|
||||||
// Configure FFmpeg search path
|
|
||||||
ffmpeg.RootPath = "/lib";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
string systemPath = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine);
|
string systemPath = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine);
|
||||||
|
|
Loading…
Reference in a new issue