Move code to FFmpegContext

This commit is contained in:
Ac_K 2021-05-20 01:10:46 +02:00
parent d73ac20488
commit a2c57de204
2 changed files with 33 additions and 25 deletions

View file

@ -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
@ -14,6 +16,8 @@ namespace Ryujinx.Graphics.Nvdec.H264
public FFmpegContext() public FFmpegContext()
{ {
SetRootPath();
_logFunc = Log; _logFunc = Log;
// Redirect log output // Redirect log output
@ -28,6 +32,35 @@ namespace Ryujinx.Graphics.Nvdec.H264
_packet = ffmpeg.av_packet_alloc(); _packet = ffmpeg.av_packet_alloc();
} }
private 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())

View file

@ -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;
@ -12,7 +11,6 @@ using Ryujinx.Ui;
using Ryujinx.Ui.Widgets; using Ryujinx.Ui.Widgets;
using SixLabors.ImageSharp.Formats.Jpeg; using SixLabors.ImageSharp.Formats.Jpeg;
using System; using System;
using System.Diagnostics;
using System.IO; using System.IO;
using System.Reflection; using System.Reflection;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
@ -79,29 +77,6 @@ namespace Ryujinx
if (OperatingSystem.IsLinux()) if (OperatingSystem.IsLinux())
{ {
XInitThreads(); XInitThreads();
// Configure FFmpeg search path
Process lddProcess = Process.Start(new ProcessStartInfo
{
FileName = "/bin/sh",
Arguments = "-c \"ldd $(which ffmpeg) | grep libavfilter\"",
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.");
}
} }
string systemPath = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine); string systemPath = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine);