private static SpectrumVideoSource WrapSource(SpectrumVideoCanvasConfig config) { if (!SpectrumVideoSource.OpenSource(config.source, out SpectrumVideoSource source)) { throw new Exception("Source file is incorrectly configured for " + config.label); } return(source); }
public SpectrumVideoCanvas(SpectrumVideoSource source, SpectrumVideoCanvasConfig config, IOutputProvider outputProvider) { //Set width = config.video_output.width; label = config.label; decimation = config.baseband.decimation; frameRate = config.video_output.frameRate; this.outputProvider = outputProvider; this.source = source; //Create IQ decimator and oscilator oscillator = new Oscillator(SampleRate, config.baseband.freqOffset); decimator = new ComplexDecimator(SampleRate, DecimatedSampleRate, config.baseband.decimation, config.baseband.decimationAttenuation, DecimatedSampleRate * config.baseband.decimationTransitionRatio); //Create all audio resources foreach (var o in config.audio_outputs) { AddResource(new AudioResource(o, this)); } //Create all components components = new SpectrumVideoComponent[config.components.Count]; componentOffsets = new int[config.components.Count]; for (int i = 0; i < components.Length; i++) { components[i] = ComponentFactory.MakeComponent(this, config.components[i]); } //Get the image dimensions by calculating the total height height = 0; for (int i = 0; i < components.Length; i++) { componentOffsets[i] = height * ImageWidth; height += components[i].Height; } //Create misc videoOutput = outputProvider.GetVideoOutput(config.video_output.filename, ImageWidth, ImageHeight, config.video_output.frameRate, BufferSize); frameBuffer = UnsafeBuffer.Create(ImageWidth * ImageHeight, out frameBufferPtr); buffer = UnsafeBuffer.Create(BufferSize, out bufferPtr); textGenerator = FontStore.CreateRenderer(ImageWidth, ImageHeight); //Fill the entire canvas with black for (int i = 0; i < ImageWidth * ImageHeight; i++) { frameBufferPtr[i] = new UnsafeColor(0, 0, 0); } //Init all components for (int i = 0; i < components.Length; i++) { components[i].Init(); components[i].InitFrame(frameBufferPtr + componentOffsets[i]); } }
public CanvasEditor(SpectrumVideoCanvasConfig config) { this.config = config; InitializeComponent(); //Bind canvasPreview.OnCanvasPreviewSizeChanged += CanvasPreview_OnCanvasPreviewSizeChanged; //Link ConfigureList(componentList, config.components); ConfigureList(demodList, config.audio_outputs); }
private void PreviewWorker() { SpectrumVideoCanvas canvas = null; int frames = 0; Stopwatch timer = new Stopwatch(); while (previewRunning) { //If the config is not yet set, abort if (config == null) { Thread.Sleep(100); continue; } //Process try { //Update preview if needed if (previewInvalidated) { //Dispose of old bits canvas?.Dispose(); //Create new canvas statusString = "Creating..."; canvas = new SpectrumVideoCanvas(source, config, this); //Set flag timer.Restart(); frames = 0; previewInvalidated = false; } //If the canvas has no components, stop if (config.components.Count == 0) { statusString = "No components! Add one in the \"components\" section."; Thread.Sleep(100); continue; } //Tick canvas if (!canvas.TickFrame()) { source.PositionSamples = 0; //Reached end. Rewind } frames++; //Create status double timeSinceStart = timer.Elapsed.TotalSeconds; double progress = (double)frames / canvas.TotalFrames; statusString = $"{imageWidth}x{imageHeight}, {(frames / timeSinceStart).ToString("0.00")} FPS, {((frames / timeSinceStart) / imageFrameRate).ToString("0.00")}x, {SpectrumVideoUtils.FormatTime((long)(timeSinceStart / progress))} estimated time"; } catch (Exception ex) { //Notify of the error MessageBox.Show($"There's a problem with the canvas using the settings you've given: {ex.Message}\n\nThis error was thrown {ex.StackTrace}", "Canvas Problem", MessageBoxButtons.OK, MessageBoxIcon.Error); statusString = "Error with the canvas settings"; //Set flags previewError = true; config = null; } } //Stop canvas?.Dispose(); Dispose(); }
public void InvalidateCanvas(SpectrumVideoCanvasConfig config) { this.config = config; previewInvalidated = true; previewError = false; }
public SpectrumVideoCanvas(SpectrumVideoCanvasConfig config, IOutputProvider outputProvider) : this(WrapSource(config), config, outputProvider) { }
public SpectrumVideoCanvasMultithread(SpectrumVideoCanvasConfig config, IOutputProvider outputProvider) : base(config, outputProvider) { }