private void StartConvThread_Click(object sender, EventArgs e) { Settings.Interrupt = false; if (File.Exists(Data.MIDIToLoad)) { if (IntPtr.Size == 4) { FileInfo MIDISizeCheck = new System.IO.FileInfo(Data.MIDIToLoad); if (MIDISizeCheck.Length >= 1073741824) { MessageBox.Show("The MIDI is too big.\n\nConsider using the 64-bit release.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } CheckFFMpegFirst(); SaveMovieTo.InitialDirectory = Properties.Settings.Default.LastExportFolder; SaveMovieTo.FileName = String.Format("{0}.mov", Path.GetFileNameWithoutExtension(Data.MIDIToLoad)); if (SaveMovieTo.ShowDialog() == DialogResult.OK) { Data.MovieOutput = SaveMovieTo.FileName; Properties.Settings.Default.LastExportFolder = Path.GetDirectoryName(SaveMovieTo.FileName); Properties.Settings.Default.Save(); try { FrameConverter.RunWorkerAsync(); } catch { MessageBox.Show("The generator is busy.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } else { MessageBox.Show("Invalid MIDI file.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// <see cref="sws_getCachedContext(SwsContext*, int, int, AVPixelFormat, int, int, AVPixelFormat, int, SwsFilter*, SwsFilter*, double*)"/> /// <see cref="sws_scale(SwsContext*, byte*[], int[], int, int, byte*[], int[])"/> /// </summary> public static IEnumerable <Frame> ConvertFrames(this CodecContext c, IEnumerable <Frame> sourceFrames, ScaleFlag flags = ScaleFlag.Bilinear) { using var destFrame = c.CreateFrame(); int pts = 0; if (c.Codec.Type == MediaType.Video) { using var frameConverter = new FrameConverter(); foreach (var sourceFrame in sourceFrames) { frameConverter.ConvertFrame(sourceFrame, destFrame, flags); destFrame.Pts = pts++; yield return(destFrame); } } else if (c.Codec.Type == MediaType.Audio) { using var frameConverter = new SampleConverter(); foreach (var sourceFrame in sourceFrames) { frameConverter.ConvertFrame(destFrame, sourceFrame); destFrame.Pts = pts += c.FrameSize; yield return(destFrame); } } }
private static void WriteImageTo(Frame frame, FormatContext fc) { Codec codec = Codec.FindEncoder(fc.OutputFormat.VideoCodec); var mediaStream = new MediaStream(fc); using CodecContext codecContext = new CodecContext(codec) { PixelFormat = codec.PixelFormats.First(), Width = frame.Width, Height = frame.Height, TimeBase = new MediaRational(1, 25), Flags = fc.OutputFormat.Flags.HasFlag(FormatOutputFlag.Globalheader) ? CodecFlag.GlobalHeader : CodecFlag.None, }; codecContext.Open(codec); mediaStream.Codecpar.CopyFrom(codecContext); if ((PixelFormat)frame.Format == codecContext.PixelFormat) { WriteAction(frame, fc, codecContext); } else { using var tempFrame = Frame.CreateWritableVideo(frame.Width, frame.Height, codecContext.PixelFormat); using var frameConverter = new FrameConverter(); frameConverter.ConvertFrame(frame, tempFrame); WriteAction(tempFrame, fc, codecContext); } }
void fallUnderGravity() { moveDirection.y -= gravity * (1 + FrameConverter.convertFrameRate(airborneFramesTime) / floatingCoeficient) * Time.deltaTime; if (moveDirection.y < -limitFallSpeed) { moveDirection.y = -limitFallSpeed; } }
bool isFalling(float y) { if (moveDirection.y - gravity * (1 + FrameConverter.convertFrameRate(airborneFramesTime) / floatingCoeficient) * Time.deltaTime < 0) { return(true); } else { return(false); } }
public static void OutputAsPhaseSpace(string inputFile, string outputFile, decimal offset) { using (TrcReader reader = new TrcReader(inputFile)) { using (PhaseSpaceDataWriter writer = new PhaseSpaceDataWriter(outputFile)) { decimal ratio = 1 / decimal.Parse(reader.Header.DataRate); while (!reader.EndOfStream) { TrcFrame trc = reader.ReadFrame(); trc = trc.TrimUnnamed(reader.Header); PhaseSpaceFrame motion = FrameConverter.GetMotionFrame(trc); motion.Time = offset + ratio * writer.Frames; writer.WriteFrame(motion); } } } }