public static void Apply(string name, string gameDataFile, int videoBitRate, string destFile, bool highlights, Action <long, long> progressReporter, CancellationToken token) { var domain = AppDomain.CreateDomain(name, null, new AppDomainSetup()); try { var hostArgs = new TranscodeAndOverlayArguments(progressReporter, () => token.IsCancellationRequested); var arg = (TranscodeAndOverlayArguments)domain.CreateInstanceFromAndUnwrap( typeof(TranscodeAndOverlayArguments).Assembly.Location, typeof(TranscodeAndOverlayArguments).FullName, false, BindingFlags.CreateInstance, null, new object[] { gameDataFile, videoBitRate, destFile, highlights, (Action <long, long>)hostArgs.ProgressReporter, (Func <bool>)hostArgs.IsAborted, hostArgs.LogRepeater, Settings.Default.PluginName }, null, null); arg.Apply(); } catch (Exception e) { TraceError.WriteLine(e.Message); TraceError.WriteLine(e.StackTrace); throw e; } finally { AppDomain.Unload(domain); } }
private void CaptureNewFileNames(object sender, ElapsedEventArgs e) { try { var guessedFileName = Directory.GetFiles(workingFolder, "*.avi") .Concat(Directory.GetFiles(workingFolder, "*.mp4")) .Select(fn => new { FileName = fn, CreationTime = File.GetCreationTime(fn) }) .Where(f => f.CreationTime >= started) .OrderByDescending(f => f.CreationTime) .FirstOrDefault(); if (guessedFileName != null && !captureFileNames.Any(c => c.FileName == guessedFileName.FileName)) { TraceInfo.WriteLine("Found video file {0}", guessedFileName.FileName); captureFileNames.Add(new CapturedVideoFile { FileName = guessedFileName.FileName }); } } catch (Exception ee) { TraceError.WriteLine(ee.Message); TraceError.WriteLine(ee.StackTrace); } finally { if (timer != null) timer.Start(); } }
public void Process(DataSample data, TimeSpan relativeTime) { try { var cameraGroupName = ""; var cameraName = ""; var cameraGroup = data.SessionData.CameraInfo.Groups.FirstOrDefault(g => g.GroupNum == data.Telemetry.CamGroupNumber); if (cameraGroup != null) { cameraGroupName = cameraGroup.GroupName; var camera = cameraGroup.Cameras.FirstOrDefault(c => c.CameraNum == data.Telemetry.CamCameraNumber); if (camera != null) { cameraName = camera.CameraName; } } TraceDebug.WriteLine("{0} Camera: Driver: {1}, GroupNumber: {2}, Number: {3}, State: {4}, GroupName: {5}, Name: {6}", data.Telemetry.SessionTimeSpan, data.Telemetry.CamCar.Details.Driver.UserName, data.Telemetry.CamGroupNumber, data.Telemetry.CamCameraNumber, data.Telemetry.CamCameraState, cameraGroupName, cameraName); } catch (Exception e) { TraceError.WriteLine(e.Message); TraceError.WriteLine(e.StackTrace); } }
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { var ex = e.ExceptionObject as Exception; if (ex != null) { TraceError.WriteLine(ex.Message); TraceError.WriteLine(ex.StackTrace); } else { Trace.WriteLine("An unknown error occured. {0}, {1}".F(e.ExceptionObject.GetType().Name, e.ExceptionObject.ToString())); } }
void RunTest(string filename, SynchronizationContext context) { try { TranscodeVideoTest(filename); } catch (Exception e) { TraceError.WriteLine(e.Message); TraceError.WriteLine(e.StackTrace); } finally { context.Post(ignored => testVideoCaptureButton.Enabled = true, null); } }
void Process(Transcoder transcoder, bool highlights, Action <long, long> monitorProgress, Func <bool> isAborted) { try { TraceInfo.WriteLineIf(highlights, "Transcoding highlights to {0}", transcoder.DestinationFile); TraceInfo.WriteLineIf(!highlights, "Transcoding full replay to {0}", transcoder.DestinationFile); transcoder.ProcessVideo((readers, saveToSink) => { var writeToSink = monitorProgress == null ? saveToSink : MonitorProgress(saveToSink); var fadeSegments = AVOperations.FadeIn(AVOperations.FadeOut(writeToSink)); var edits = highlights ? ApplyEdits(writeToSink) : writeToSink; var mainBodyOverlays = AVOperations.Overlay(applyRaceDataOverlay, edits); var introOverlay = AVOperations.Overlay(applyIntroOverlay, fadeSegments); var sourceReaderExtra = readers.FirstOrDefault(r => ((CapturedVideoFile)r.State).isIntroVideo); if (sourceReaderExtra != null) { var introSourceReader = sourceReaderExtra.SourceReader; var mainReaders = AVOperations.Combine(readers.Skip(1).Select(r => r.SourceReader).ToArray(), Settings.Default.VideoSplitGap); totalDuration += introSourceReader.Duration + mainReaders.Duration; AVOperations.StartConcat(introSourceReader, introOverlay, AVOperations.Concat(mainReaders, mainBodyOverlays, isAborted), isAborted); } else { var mainReaders = AVOperations.Combine(readers.Select(r => r.SourceReader).ToArray(), Settings.Default.VideoSplitGap); totalDuration += mainReaders.Duration; AVOperations.Concat(mainReaders, mainBodyOverlays, isAborted)(0, 0); } }); TraceInfo.WriteLineIf(highlights, "Done Transcoding highlights to {0}", transcoder.DestinationFile); TraceInfo.WriteLineIf(!highlights, "Done Transcoding full replay to {0}", transcoder.DestinationFile); } catch (Exception e) { TraceError.WriteLine(e.Message); TraceError.WriteLine(e.StackTrace); throw e; } }
public IRacingReplay InTheBackground(Action <string> onComplete) { requestAbort = false; var context = SynchronizationContext.Current; cancellationTokenSource = new CancellationTokenSource(); token = cancellationTokenSource.Token; backgrounTask = new Task(() => { try { foreach (var action in actions) { action(); if (token.IsCancellationRequested) { break; } } context.Post(() => onComplete(null)); } catch (Exception e) { TraceError.WriteLine(e.Message); TraceError.WriteLine(e.StackTrace); TraceInfo.WriteLine("Process aborted"); var message = e.InnerException != null ? e.InnerException.Message : e.Message; context.Post(() => onComplete("There was an error - details in Log Messages\n{0}".F(message))); } finally { backgrounTask = null; actions = new List <Action>(); } }); backgrounTask.Start(); return(this); }
SessionData ReadSessionInfo(iRSDKHeader header) { if (header.sessionInfoUpdate == sessionLastInfoUpdate) { return(lastSessionInfo); } sessionLastInfoUpdate = header.sessionInfoUpdate; Trace.WriteLine("New Session data retrieved from iRacing. {0}".F(sessionLastInfoUpdate), "DEBUG"); var t = Task.Factory.StartNew(() => { try { var sessionInfoData = new byte[header.sessionInfoLen]; accessor.ReadArray <byte>(header.sessionInfoOffset, sessionInfoData, 0, header.sessionInfoLen); var sessionInfoString = System.Text.Encoding.Default.GetString(sessionInfoData); var length = sessionInfoString.IndexOf('\0'); if (length == -1) { lastSessionInfo = null; return; } sessionInfoString = sessionInfoString.Substring(0, sessionInfoString.IndexOf('\0')); Trace.WriteLine(sessionInfoString, "DEBUG"); lastSessionInfo = DeserialiseSessionInfo(sessionInfoString, header.sessionInfoUpdate); } catch (Exception e) { TraceError.WriteLine(e.Message); TraceError.WriteLine(e.StackTrace); } }); if (lastSessionInfo == null) { t.Wait(); } return(lastSessionInfo); }
public static void Apply(string gameDataFile, int videoBitRate, string destFile, bool highlights, Action <long, long> progressReporter, Func <bool> isAborted, string pluginName) { try { var leaderBoard = new LeaderBoard { OverlayData = OverlayData.FromFile(gameDataFile), PluginName = pluginName }; var transcoder = new Transcoder { VideoFiles = leaderBoard.OverlayData.VideoFiles.ToSourceReaderExtra(), DestinationFile = destFile, VideoBitRate = videoBitRate }; new TranscodeAndOverlay(leaderBoard, progressReporter).Process(transcoder, highlights, progressReporter, isAborted); } catch (Exception e) { TraceError.WriteLine(e.Message); TraceError.WriteLine(e.StackTrace); throw e; } }
void RunTest(string workingFolder, SynchronizationContext context) { try { TraceInfo.WriteLine("Switching to iRacing ...."); var hwnd = Win32.Messages.FindWindow(null, "iRacing.com Simulator"); Win32.Messages.ShowWindow(hwnd, Win32.Messages.SW_SHOWNORMAL); Win32.Messages.SetForegroundWindow(hwnd); Thread.Sleep(2000); TraceInfo.WriteLine("Begining Test...."); var videoCapture = new VideoCapture(); TraceInfo.WriteLine("Broadcasting keypress ALT+F9 to activate your video capture software"); videoCapture.Activate(workingFolder); TraceInfo.WriteLine("Expecting video file to be written in folder: {0}", workingFolder); TraceInfo.WriteLine("Waiting for 5 seconds"); for (var i = 5; i >= 0; i--) { Thread.Sleep(1.Seconds()); TraceInfo.WriteLine("{0} Seconds...", i); } TraceInfo.WriteLine("Broadcasting keypress ALT+F9 to deactivate your video capture software"); var filenames = videoCapture.Deactivate(); TraceInfo.WriteLine("Minimising iRacing"); AltTabBackToApp(); if (filenames.Count == 0) { TraceInfo.WriteLine("\nFailure - Did not find any video files"); return; } if (filenames.Count != 1) { TraceInfo.WriteLine("\nFailure - Found more than 1 video file!"); return; } var filename = filenames[0]; if (filename != null) { TraceInfo.WriteLine(""); TraceInfo.WriteLine("Found your video file {0}.", filename); TranscodeVideoTest(filename.FileName); } else { TraceInfo.WriteLine(""); TraceInfo.WriteLine("Failure!"); } } catch (Exception e) { TraceError.WriteLine(e.Message); TraceError.WriteLine(e.StackTrace); } finally { context.Post(ignored => testVideoCaptureButton.Enabled = true, null); } }
async void Main_Load(object sender, EventArgs e) { changeVersionButton.Visible = File.Exists(Settings.Default.MainExecPath); Settings.Default.SettingChanging += Default_SettingChanging; iracingEvents.NewSessionData += iracingEvents_NewSessionData; iracingEvents.Connected += iracingEvents_Connected; iracingEvents.Disconnected += iracingEvents_Disconnected; iracingEvents.StartListening(); workingFolderTextBox.Text = Settings.Default.WorkingFolder; logMessagges = new LogMessages(); Trace.Listeners.Add(new MyListener(logMessagges.TraceMessage)); LogListener.ToFile(GetDefaultLogFileName()); AwsLogListener.SetPhaseGeneral(); new Task(LogSystemInformation).Start(); fileWatchTimer = new System.Windows.Forms.Timer(); fileWatchTimer.Interval = 10; fileWatchTimer.Tick += (s, a) => OnGameDataFileChanged(); fileWatchTimer.Start(); videoBitRate.Text = Settings.Default.videoBitRate.ToString(); sourceVideoTextBox.Text = Settings.Default.lastVideoFile; BeginProcessButton.Enabled = false; iRacingProcess = new IRacingReplay() .WhenIRacingStarts(() => { BeginProcessButton.Enabled = true; workingFolderTextBox_TextChanged(null, null); ProcessErrorMessageLabel.Visible = false; WaitingForIRacingLabel.Visible = false; }) .InTheBackground(errorMessage => { }); try { var items = await GitHubAccess.GetVersions("vipoo", "iRacingReplayOverlay.net"); var currentVersionItem = items.FirstOrDefault(r => r.VersionStamp == AboutBox1.AssemblyVersion); var isNewVersionAvailable = false; if (currentVersionItem.VersionStamp == null) { isNewVersionAvailable = true; } else { var isPreRelease = currentVersionItem.Prerelease; var latestVersion = items.OrderByDescending(r => new Version(r.VersionStamp)).Where(r => r.Prerelease == isPreRelease).First(); isNewVersionAvailable = new Version(latestVersion.VersionStamp) > AboutBox1.AssemblyVersionStamp; } if (isNewVersionAvailable) { newVersionMessage.Visible = true; } } catch (Exception ee) { TraceError.WriteLine(ee.Message); TraceError.WriteLine(ee.StackTrace); } }
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) { MessageBox.Show("An error occured. Details have been logged.\n\n{0}".F(e.Exception.Message), "Error"); TraceError.WriteLine(e.Exception.Message); TraceError.WriteLine(e.Exception.StackTrace); }
void Listen() { var isConnected = false; var isDisconnected = true; var lastSessionInfoUpdate = -1; var periodCount = this.period; var lastTimeStamp = DateTime.Now; try { foreach (var d in instance.GetDataFeed(logging: false)) { if (requestCancel) { return; } if (!isConnected && d.IsConnected) { isConnected = true; isDisconnected = false; connected.Invoke(); } if (!isDisconnected && !d.IsConnected) { isConnected = false; isDisconnected = true; disconnected.Invoke(); } if (period >= (DateTime.Now - lastTimeStamp)) { continue; } lastTimeStamp = DateTime.Now; if (d.IsConnected) { newData.Invoke(d); } if (d.IsConnected && d.SessionData.InfoUpdate != lastSessionInfoUpdate) { lastSessionInfoUpdate = d.SessionData.InfoUpdate; newSessionData.Invoke(d); } } } catch (Exception e) { TraceError.WriteLine(e.Message); TraceError.WriteLine(e.StackTrace); } finally { backListener = null; } }