Ejemplo n.º 1
0
        private static IOrderedEnumerable <OverlayData.RaceEvent> GetInterestingRaceEvents(IEnumerable <OverlayData.RaceEvent> raceEvents)
        {
            TraceInfo.WriteLine("Highlight Edits: Total Duration Target: {0}", HighlightVideoDuration);

            double totalTime, incidentsRatio, restartsRatio, battlesRatio;
            var    firstAndLastLapRaceEvents = GetAllFirstAndLastLapEvents(raceEvents, out totalTime);

            var incidentRaceEvents = GetAllRaceEvents(raceEvents, InterestState.Incident, 1.8, 0, out incidentsRatio);
            var restartRaceEvents  = GetAllRaceEvents(raceEvents, InterestState.Restart, 1.0, 0, out restartsRatio);
            var battleRaceEvents   = GetAllRaceEvents(raceEvents, InterestState.Battle, 1.4, 15, out battlesRatio);

            battleRaceEvents = NormaliseBattleEvents(battleRaceEvents, Settings.Default.BattleStickyPeriod.TotalSeconds);

            var totalRatio = incidentsRatio + restartsRatio + battlesRatio;

            var incidentPercentage = incidentsRatio / totalRatio;
            var restartPercentage  = restartsRatio / totalRatio;
            var battlePercentage   = battlesRatio / totalRatio;

            var incidentsEdited = ExtractEditedEvents(totalTime, incidentPercentage, incidentRaceEvents, InterestState.Incident, byPosition: true);
            var restartsEdited  = ExtractEditedEvents(totalTime, restartPercentage, restartRaceEvents, InterestState.Restart);
            var battlessEdited  = ExtractEditedEvents(totalTime, battlePercentage, battleRaceEvents, InterestState.Battle);

            var editedEvents = firstAndLastLapRaceEvents.Concat(incidentsEdited).Concat(restartsEdited).Concat(battlessEdited).OrderBy(re => re.StartTime);

            TraceInfo.WriteLine("Highlight Edits: Expected duration of highlight video: {0}", editedEvents.Sum(re => re.Duration).Seconds());

            return(editedEvents);
        }
        OverlayData.Driver[] LatestRunningOrder(DataSample data, TimeSpan relativeTime)
        {
            var drivers = data.Telemetry.Cars.Where(c => !c.Details.IsPaceCar).Select(c => new OverlayData.Driver
            {
                UserName     = c.Details.UserName,
                CarNumber    = c.Details.CarNumberDisplay,
                Position     = c.Position,
                CarIdx       = c.CarIdx,
                PitStopCount = c.PitStopCount
            })
                          .OrderBy(c => c.Position)
                          .ToArray();

            if (lastDrivers != null)
            {
                foreach (var d in drivers.OrderBy(d => d.Position))
                {
                    var lastPosition = lastDrivers.FirstOrDefault(lp => lp.CarIdx == d.CarIdx);
                    if (lastPosition != null && lastPosition.Position != d.Position)
                    {
                        var position = d.Position != null?d.Position.Value.ToString() : "";

                        var indicator = d.Position != null?d.Position.Value.Ordinal() : "";

                        var msg = "{0} in {1}{2}".F(d.UserName, position, indicator);
                        TraceInfo.WriteLine("{0} {1}", data.Telemetry.SessionTimeSpan, msg);
                        commentaryMessages.Add(msg, relativeTime.TotalSeconds);
                    }
                }
            }

            lastDrivers = drivers;

            return(drivers);
        }
        void UpdateBattleCamera(DataSample data)
        {
            if (data.Telemetry.SessionTimeSpan <= cameraChangeTime)
            {
                return;
            }

            cameraChangeTime = data.Telemetry.SessionTimeSpan + this.battleCameraChangePeriod;

            var otherCar = ChangeCarForCamera(data, battleFollower);

            var cameraSet = otherCar == null ? new [] { CameraAngle.LookingInfrontOfCar, CameraAngle.LookingAtCar } : new [] { CameraAngle.LookingInfrontOfCar, CameraAngle.LookingBehindCar, CameraAngle.LookingAtCar };

            camera         = cameraControl.FindACamera(cameraSet, adjustedCamera, 2);
            adjustedCamera = null;

            if (camera.CameraAngle == CameraAngle.LookingBehindCar)
            {
                TraceInfo.WriteLine("{0} Changing to forward car, with reverse camera", data.Telemetry.SessionTimeSpan);
                car = otherCar;
            }
            else
            {
                car = battleFollower;
            }
            TraceInfo.WriteLine("{0} Changing camera to driver: {1}; camera: {2}", data.Telemetry.SessionTimeSpan, car.UserName, camera.CameraName);
            cameraControl.CameraOnDriver(car.CarNumberRaw, camera.CameraNumber);
        }
Ejemplo n.º 4
0
        public void MoveToFrame(int frameNumber, ReplayPositionMode mode = ReplayPositionMode.Begin)
        {
            DataSample data = null;

            Wait();

            TraceInfo.WriteLine("Moving to frame {0} with mode {1}", frameNumber, mode);

            SendMessage(BroadcastMessage.ReplaySetPlayPosition, (short)mode, frameNumber);

            Wait();

            if (mode == ReplayPositionMode.Begin)
            {
                data = WaitAndVerify(d => Math.Abs(d.Telemetry.ReplayFrameNum - frameNumber) > 32, 6000);
            }

            Wait();

            if (data != null)
            {
                frameNumber = data.Telemetry.ReplayFrameNum;
            }

            TraceInfo.WriteLine("Moved to frame {0}", frameNumber);
        }
Ejemplo n.º 5
0
        public void Process(DataSample data)
        {
            if (data.Telemetry.CamCar.TrackSurface == TrackLocation.InPitStall ||
                data.Telemetry.CamCar.TrackSurface == TrackLocation.NotInWorld ||
                data.Telemetry.CamCar.TrackSurface == TrackLocation.AproachingPits)
            {
                TraceInfo.WriteLine("{0} Ignoring incident in the pits on lap {1}", data.Telemetry.SessionTimeSpan, data.Telemetry.RaceLaps);
                return;
            }

            var i = new Incident
            {
                LapNumber        = data.Telemetry.RaceLaps,
                Car              = data.Telemetry.CamCar.Details,
                StartSessionTime = data.Telemetry.SessionTimeSpan - 1.Seconds(),
                EndSessionTime   = data.Telemetry.SessionTimeSpan + 8.Seconds()
            };

            var lastIncidentForCar = incidents.LastOrDefault(li => li.Car.CarIdx == i.Car.CarIdx);

            if (lastIncidentForCar == null || lastIncidentForCar.EndSessionTime + 15.Seconds() < i.StartSessionTime)
            {
                AddIncident(i);
            }

            else
            {
                ExtendIncident(lastIncidentForCar, i.EndSessionTime);
            }
        }
Ejemplo n.º 6
0
        internal static void MoveToFile(string filename)
        {
            if (logFile == null)
            {
                throw new Exception("Attempt to rename non-existing log file to {0}".F(filename));
            }

            TraceInfo.WriteLine("Renaming logging to file {0}", filename);

            WaitToQueueEmpty(logFile);

            Trace.Listeners.Remove(logFile);
            logFile.Dispose();

            var retryCount = 2;

            while (retryCount > 0)
            {
                try {
                    File.Move(logFile.FileName, filename);
                    retryCount = 0;
                } catch (IOException) {
                    retryCount--;
                    Thread.Sleep(1000);
                }
            }

            logFile = new LogListener(filename);
            Trace.Listeners.Add(logFile);
        }
Ejemplo n.º 7
0
        public void _AnalyseRace(Action onComplete)
        {
            var hwnd = Win32.Messages.FindWindow(null, "iRacing.com Simulator");

            Win32.Messages.ShowWindow(hwnd, Win32.Messages.SW_SHOWNORMAL);
            Win32.Messages.SetForegroundWindow(hwnd);
            Thread.Sleep(Settings.Default.PeriodWaitForIRacingSwitch);

            var data = iRacing.GetDataFeed()
                       .WithCorrectedPercentages()
                       .AtSpeed(16)
                       .RaceOnly()
                       .First(d => d.Telemetry.SessionState == SessionState.Racing);

            raceStartFrameNumber = data.Telemetry.ReplayFrameNum - (60 * 20);

            if (raceStartFrameNumber < 0)
            {
                TraceInfo.WriteLine("Unable to start capturing at 20 seconds prior to race start.  Starting at start of replay file.");
                raceStartFrameNumber = 0;
            }

            TraceDebug.WriteLine(data.Telemetry.ToString());

            AnalyseIncidents();                                                         //Analyse incidents
            AnalyseRaceSituations(new iRacingConnection().GetBufferedDataFeed());       //Analyse race situation (all) by playing out replay at 16x speed.

            onComplete();
        }
        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();
            }
        }
Ejemplo n.º 9
0
        void TranscodeVideoTest(string filename)
        {
            using (MFSystem.Start())
            {
                var details = VideoAttributes.TestFor(filename);

                TraceInfo.WriteLine("Frame Rate: {0}, Frame Size: {1}x{2}, Video: {3} @ {4}Mbs, Audio: {5}, {6}Khz @ {7}Kbs, ".F
                                        (details.FrameRate,
                                        details.FrameSize.Width,
                                        details.FrameSize.Height,
                                        details.VideoEncoding,
                                        details.BitRate == 0 ? "-- " : details.BitRate.ToString(),
                                        details.AudioEncoding,
                                        details.AudioSamplesPerSecond / 1000,
                                        details.AudioAverageBytesPerSecond / 1000));

                TraceInfo.WriteLine("Begining video re-encoding.");

                details.Transcoder.ProcessVideo((readers, saveToSink) =>
                {
                    readers.First().SourceReader.Samples(AVOperations.FadeIn(saveToSink));
                });

                TraceInfo.WriteLine("Video converted.  Review the video file {0} to confirm it looks OK.", details.Transcoder.DestinationFile);
                TraceInfo.WriteLine("Success!");
            }
        }
Ejemplo n.º 10
0
        static void Main()
        {
            if (!Settings.Default.NewSettings)
            {
                CopyFromOldSettings(Settings.Default);
            }
            else
            {
                MakePortable(Settings.Default);
            }


            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.ThreadException += Application_ThreadException;
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
            if (AwsKeys.HaveKeys)
            {
                using (var awsLogListener = new AwsLogListener())
                {
                    Trace.Listeners.Add(awsLogListener);
                    TraceInfo.WriteLine("Application Start");
                    Application.Run(new Main());
                    TraceInfo.WriteLine("Application End");
                }
            }
            else
            {
                Application.Run(new Main());
            }
        }
Ejemplo n.º 11
0
        public void Process(DataSample data, TimeSpan relativeTime)
        {
            var camDriver = CreateCamDriver(data, relativeTime);

            if (camDriver != null)
            {
                if (lastCamDriver == null ||
                    lastCamDriver.UserName != camDriver.CurrentDriver.UserName ||
                    lastCamDriver.Position != camDriver.CurrentDriver.Position)
                {
                    var position = camDriver.CurrentDriver.Position != null?camDriver.CurrentDriver.Position.Value.ToString() : "";

                    var indicator = camDriver.CurrentDriver.Position != null?camDriver.CurrentDriver.Position.Value.Ordinal() : "";

                    TraceInfo.WriteLine("{0} Camera on {1} {2} in position {3}{4}",
                                        data.Telemetry.SessionTimeSpan,
                                        camDriver.CurrentDriver.UserName,
                                        camDriver.CurrentDriver.CarNumber,
                                        position, indicator);

                    lastCamDriver = camDriver.CurrentDriver;
                }
                overlayData.CamDrivers.Add(camDriver);
            }
        }
Ejemplo n.º 12
0
        private void button1_Click(object sender, EventArgs e)
        {
            Settings.Default.SendUsageData = this.sendUsageData.Checked;
            Settings.Default.Save();


            TraceInfo.WriteLine(Settings.Default.SendUsageData ? "User has accepted usage data submission" : "user has declined usage data submission");
            this.Close();
        }
Ejemplo n.º 13
0
 void AddIncident(Incident incident)
 {
     incidents.Add(incident);
     TraceInfo.WriteLine("Noting incident for driver {0} starting on lap {1} from {2}",
                         incident.Car.UserName,
                         incident.LapNumber,
                         incident.StartSessionTime,
                         incident.EndSessionTime);
 }
Ejemplo n.º 14
0
        static List <OverlayData.RaceEvent> ExtractEditedEvents(
            double totalTime,
            double percentage,
            List <OverlayData.RaceEvent> raceEvents,
            InterestState interest,
            bool byPosition = false)
        {
            TraceInfo.WriteLine("Extracting {0} from a total set of {1}", interest, raceEvents.Count);

            if (raceEvents.Count <= 2)
            {
                return(raceEvents);
            }

            var duration       = 0d;
            var targetDuration = totalTime * percentage;

            var orderedRaceEvents = raceEvents.OrderBy(r => r.StartTime).ToList();
            var firstEvent        = orderedRaceEvents.First();
            var lastEvent         = orderedRaceEvents.Last();

            var searchRaceEvents = new List <_RaceEvent>();

            searchRaceEvents.Add(new _RaceEvent {
                RaceEvent = firstEvent, Level = 0
            });
            searchRaceEvents.Add(new _RaceEvent {
                RaceEvent = lastEvent, Level = 0
            });

            var result = new List <OverlayData.RaceEvent>();

            if (byPosition)
            {
                foreach (var p in raceEvents.OrderBy(r => r.Position).Select(r => r.Position).Distinct())
                {
                    TraceInfo.WriteLine("Scanning for {0}s for position {1}", interest, p);
                    duration = ExtractUptoTargetDuration(raceEvents.Where(r => r.Position == p).ToList(), duration, targetDuration, firstEvent, lastEvent, searchRaceEvents, result);
                }
            }
            else
            {
                TraceInfo.WriteLine("Scanning for {0}s", interest);
                duration = ExtractUptoTargetDuration(raceEvents, duration, targetDuration, firstEvent, lastEvent, searchRaceEvents, result);
            }

            foreach (var r in result.OrderBy(x => x.StartTime))
            {
                TraceInfo.WriteLine("Highlight edit {0} @ position {4}: {1} - {2}, duration: {3}", r.Interest, r.StartTime.Seconds(), r.EndTime.Seconds(), r.Duration.Seconds(), r.Position);
            }

            TraceInfo.WriteLine("Highlight Edits: {0}.  Target Duration: {1}, Percentage: {2:00}%, Resolved Duration: {3}",
                                interest.ToString(), targetDuration.Seconds(), (int)(percentage * 100), duration.Seconds());

            return(result);
        }
Ejemplo n.º 15
0
        static void ExtendIncident(Incident incident, TimeSpan endSessionTime)
        {
            incident.EndSessionTime = endSessionTime;

            TraceInfo.WriteLine("Extending end time for incident driver: {0}, start lap: {1}, start time: {2}, end time: {3}",
                                incident.Car.UserName,
                                incident.LapNumber,
                                incident.StartSessionTime,
                                incident.EndSessionTime);
        }
Ejemplo n.º 16
0
        void SwitchToIncident(DataSample data)
        {
            pitBoxStartTime = 0;

            var incidentCar = nextIncident.Current.Car;

            TraceInfo.WriteLine("{0} Showing incident with {1} starting from {2}", data.Telemetry.SessionTimeSpan, incidentCar.UserName, nextIncident.Current.StartSessionTime);

            cameraControl.CameraOnDriver(incidentCar.CarNumberRaw, cameraControl.IncidentCameraNumber);
        }
Ejemplo n.º 17
0
 void UpdateCameraIfOvertake(DataSample data)
 {
     if (BattlersHaveSwappedPositions(data))
     {
         battleEndTime = data.Telemetry.SessionTimeSpan + this.battleStickyPeriod;
         TraceInfo.WriteLine("{0} {1} has overtaken {2}", data.Telemetry.SessionTimeSpan, battleFollower.UserName, battleLeader.UserName);
         SwitchToBattle(data, battleLeader);
         editMarker.WithOvertake();
     }
 }
Ejemplo n.º 18
0
        public void Redirect(DataSample data)
        {
            if (car == null)
            {
                return;
            }

            TraceInfo.WriteLine("{0} Changing camera back to driver: {1}; camera: {2}; within {3}", data.Telemetry.SessionTimeSpan, car.UserName, camera.CameraName, battleGap);
            cameraControl.CameraOnDriver(car.CarNumberRaw, camera.CameraNumber);
        }
Ejemplo n.º 19
0
        void SwitchToFinishingDrivers(DataSample data)
        {
            var session = data.SessionData.SessionInfo.Sessions[data.Telemetry.SessionNum];

            if (lastFinisherCarIdx != -1 && !data.Telemetry.Cars[lastFinisherCarIdx].HasSeenCheckeredFlag)
            {
                timeOfFinisher = DateTime.Now.AddSeconds(2.0 * Settings.AppliedTimingFactor);
                return;
            }

            if (timeOfFinisher > DateTime.Now)
            {
                return;
            }

            Car nextFinisher;

            if (!data.Telemetry.LeaderHasFinished)
            {
                nextFinisher = data.Telemetry.Cars
                               .OrderBy(c => c.Position)
                               .Where(c => c.Details.Driver != null)
                               .Where(c => c.HasData)
                               .First();
            }
            else
            {
                nextFinisher = data.Telemetry.Cars
                               .Where(c => c.TotalDistance > 0)
                               .Where(c => !c.HasSeenCheckeredFlag)
                               .Where(c => !c.Details.IsPaceCar)
                               .Where(c => c.HasData)
                               .Where(c => c.Details.Driver != null)
                               .Where(c => c.TrackSurface == TrackLocation.OnTrack)
                               .OrderByDescending(c => c.DistancePercentage)
                               .ThenBy(c => c.OfficialPostion == 0 ? int.MaxValue : c.OfficialPostion)
                               .FirstOrDefault();
            }

            if (nextFinisher == null)
            {
                Trace.WriteLine("{0} Found no more finishers.".F(data.Telemetry.SessionTimeSpan), "DEBUG");
                return;
            }

            Trace.WriteLine("{0} Found {1} in position {2}".F(data.Telemetry.SessionTimeSpan, nextFinisher.Details.UserName, nextFinisher.Position), "DEBUG");

            timeOfFinisher     = DateTime.Now;
            lastFinisherCarIdx = nextFinisher.CarIdx;

            TraceInfo.WriteLine("{0} Switching camera to {1} as they cross finishing line in position {2}", data.Telemetry.SessionTimeSpan, nextFinisher.Details.UserName, nextFinisher.Position);

            cameraControl.CameraOnDriver(nextFinisher.Details.CarNumberRaw, cameraControl.LastLapCameraNumber);
        }
Ejemplo n.º 20
0
        void WatchForNextIncident(DataSample data)
        {
            TraceInfo.WriteLine("{0} Finishing incident from {1}", data.Telemetry.SessionTimeSpan, nextIncident.Current.StartSessionTime);

            nextIncident.MoveNext();

            if (nextIncident.Current != null)
            {
                TraceInfo.WriteLine("{0} (Move) Next incident at {1}", data.Telemetry.SessionTimeSpan, nextIncident.Current.StartSessionTime);
            }
        }
Ejemplo n.º 21
0
        void NoteNewFastestLap(DataSample data, TimeSpan relativeTime)
        {
            if (timeToNoteFastestLap == null)
            {
                timeToNoteFastestLap = data.Telemetry.SessionTime + 20;
            }

            lastFastestLap = data.Telemetry.FastestLap;

            TraceInfo.WriteLine("{0} Driver {1} recorded a new fast lap of {2:0.00}", data.Telemetry.SessionTimeSpan, lastFastestLap.Driver.UserName, lastFastestLap.Time.TotalSeconds);
        }
 static void PopulateCarIdxPitStopCount(Telemetry last, Telemetry telemetry, int[] carIdxPitStopCount)
 {
     for (var i = 0; i < telemetry.CarIdxTrackSurface.Length; i++)
     {
         if (last.CarIdxTrackSurface[i] != TrackLocation.InPitStall && telemetry.CarIdxTrackSurface[i] == TrackLocation.InPitStall)
         {
             carIdxPitStopCount[i] += 1;
             TraceInfo.WriteLine("{0} Driver {1} has pitted {2} times", telemetry.SessionTimeSpan, telemetry.Cars[i].Details.UserName, carIdxPitStopCount[i]);
         }
     }
 }
        private static void SendKeyStroke_PauseResume()
        {
            TraceInfo.WriteLine("Sending key event to start/stopp recording ALT+F9");

            Keyboard.keybd_event(Keyboard.VK_MENU, 0, 0, UIntPtr.Zero);
            System.Threading.Thread.Sleep(700);
            Keyboard.keybd_event(Keyboard.VK_F10, 0, 0, UIntPtr.Zero);
            System.Threading.Thread.Sleep(700);
            Keyboard.keybd_event(Keyboard.VK_F10, 0, Keyboard.KEYEVENTF_KEYUP, UIntPtr.Zero);
            System.Threading.Thread.Sleep(700);
            Keyboard.keybd_event(Keyboard.VK_MENU, 0, Keyboard.KEYEVENTF_KEYUP, UIntPtr.Zero);
        }
Ejemplo n.º 24
0
        private static void SendKeyStroke()
        {
            TraceInfo.WriteLine("Sending key event ALT+F9");

            Keyboard.keybd_event(Keyboard.VK_MENU, 0, 0, UIntPtr.Zero);
            System.Threading.Thread.Sleep(700);
            Keyboard.keybd_event(Keyboard.VK_F9, 0, 0, UIntPtr.Zero);
            System.Threading.Thread.Sleep(700);
            Keyboard.keybd_event(Keyboard.VK_F9, 0, Keyboard.KEYEVENTF_KEYUP, UIntPtr.Zero);
            System.Threading.Thread.Sleep(700);
            Keyboard.keybd_event(Keyboard.VK_MENU, 0, Keyboard.KEYEVENTF_KEYUP, UIntPtr.Zero);
        }
Ejemplo n.º 25
0
        public RuleIncident(CameraControl cameraControl, RemovalEdits removalEdits, Incidents incidents, int limitDownTo)
        {
            this.editMarker    = removalEdits.For(InterestState.Incident);
            this.cameraControl = cameraControl;
            this.limitDownTo   = limitDownTo;

            nextIncident = incidents.GetEnumerator();
            nextIncident.MoveNext();
            if (nextIncident.Current != null)
            {
                TraceInfo.WriteLine("First incident at {0}", nextIncident.Current.StartSessionTime);
            }
        }
Ejemplo n.º 26
0
        static List <OverlayData.RaceEvent> GetAllFirstAndLastLapEvents(IEnumerable <OverlayData.RaceEvent> raceEvents, out double totalTime)
        {
            var firstAndLastLapRaceEvents = raceEvents
                                            .Where(re => re.Interest == InterestState.FirstLap || re.Interest == InterestState.LastLap)
                                            .ToList();
            var firstAndLastLapDuration = firstAndLastLapRaceEvents.Sum(re => re.Duration);

            totalTime = HighlightVideoDuration.TotalSeconds - firstAndLastLapDuration;

            TraceInfo.WriteLine("Highlight Edits: First & last laps.  Duration: {0}. Remaining: {1}", firstAndLastLapDuration.Seconds(), totalTime.Seconds());

            return(firstAndLastLapRaceEvents);
        }
Ejemplo n.º 27
0
        public static List <VideoEdit> GetRaceEdits(this IEnumerable <OverlayData.RaceEvent> raceEvents)
        {
            var edits = raceEvents._GetRaceEdits().ToList();

            foreach (var e in edits)
            {
                TraceInfo.WriteLine("Editing from {0} to {1}. Duration {2}", e.StartTimeSpan, e.EndTimeSpan, e.Duration);
            }

            TraceInfo.WriteLine("Total Edits time {0}", edits.Sum(e => e.Duration).Seconds());

            return(edits);
        }
        void TranscodeVideoTest(string filename)
        {
            List <int> supportedAudioBitRates = new List <int>();

            using (MFSystem.Start())
            {
                var details = VideoAttributes.TestFor(filename);

                TraceInfo.WriteLine("Frame Rate: {0}, Frame Size: {1}x{2}, Video: {3} @ {4}Mbs, Audio: {5}, {6}Khz @ {7}Kbs, ".F
                                        (details.FrameRate,
                                        details.FrameSize.Width,
                                        details.FrameSize.Height,
                                        details.VideoEncoding,
                                        details.BitRate == 0 ? "-- " : details.BitRate.ToString(),
                                        details.AudioEncoding,
                                        details.AudioSamplesPerSecond / 1000,
                                        details.AudioAverageBytesPerSecond / 1000));

                TraceInfo.WriteLine("Begining video re-encoding.");

                details.Transcoder.ProcessVideo((readers, saveToSink) =>
                {
                    int lastSecond = 0;
                    var fn         = AVOperations.FadeIn(saveToSink);

                    readers.First().SourceReader.Samples(sample => {
                        if (sample.Stream.CurrentMediaType.IsVideo && sample.Sample != null)
                        {
                            var s = (int)sample.Sample.SampleTime.FromNanoToSeconds();
                            if (s != lastSecond)
                            {
                                TraceInfo.WriteLine("Converted: {0} seconds", s);
                            }
                            lastSecond = s;

                            if (s > 10)
                            {
                                return(false);
                            }
                        }

                        return(fn(sample));
                    });
                });

                TraceInfo.WriteLine("Video converted.  Review the video file {0} to confirm it looks OK.", details.Transcoder.DestinationFile);
                TraceInfo.WriteLine("Success!");
            }
        }
Ejemplo n.º 29
0
        void AddEvent(InterestState interest, DataSample d, TimeSpan t)
        {
            raceEvents.Add(new OverlayData.RaceEvent
            {
                Interest     = interest,
                StartTime    = lastStartTime.TotalSeconds,
                EndTime      = t.TotalSeconds,
                WithOvertake = withOvertake,
                Position     = position
            });
            lastStartTime = t;

            TraceInfo.WriteLine("{0} Stopping {1}{2}", d.Telemetry.SessionTimeSpan, interest.ToString(), withOvertake ? " - with Overtake" : "");
            withOvertake = false;
        }
        void MarkResultFlashCardStart(DataSample data, TimeSpan relativeTime, SessionData._SessionInfo._Sessions session, int i)
        {
            if (!data.LastSample.Telemetry.Cars[i].HasSeenCheckeredFlag || overlayData.TimeForOutroOverlay != null)
            {
                return;
            }

            var position = (int)session.ResultsPositions.First(r => r.CarIdx == i).Position;

            if (position == Settings.Default.ResultsFlashCardPosition)
            {
                overlayData.TimeForOutroOverlay = relativeTime.TotalSeconds;
                TraceInfo.WriteLine("{0} Mark show results flash card.", data.Telemetry.SessionTimeSpan);
            }
        }