public void Render(IAudioOutput input, IAudioOutput output) { if (!Process(input, output)) { AudioHelpers.CopySample(input.Sample, output.Sample, true); } }
protected override void Render(IList <IAudioOutput> inputs) { if (inputs.Count != 1) { throw new ArgumentException("Incorrect number of inputs."); } if (!Process(inputs.First(), Output)) { AudioHelpers.CopySample(inputs.First().Sample, Output.Sample, true); } }
public override bool Process() { var stats = Player.Stats.Details; if (stats == null) { return(false); } if (stats.ActualSourceVideoIntervalUsec < 1e-8) { return(false); // audio only - no need to reclock } var refclk = stats.RefClockDeviation; if (refclk > 10 || refclk < -10) // no data { return(false); } const int oneSecond = 1000000; var videoHz = oneSecond / stats.ActualSourceVideoIntervalUsec; var displayHz = oneSecond / stats.DisplayRefreshIntervalUsec; var ratio = displayHz / videoHz; if (ratio > (100 + MAX_PERCENT_ADJUST) / 100 || ratio < (100 - MAX_PERCENT_ADJUST) / 100) { return(false); } var input = Audio.Input; var output = Audio.Output; // passthrough from input to output AudioHelpers.CopySample(input, output, true); // Use of 0.999999 is to allow a tiny amount of measurement error in displayHz // This allows us to adjust refclk to just a fraction under the displayHz var adjust = ratio * (0.999999 - refclk); long start, end; output.GetTime(out start, out end); long endDelta = end - start; start = (long)(start * adjust); output.SetTime(start, endDelta); return(true); }
protected override bool Process(IAudioOutput input, IAudioOutput output) { if (!CalculateRatio(input)) { m_SampleIndex = -8 * RATIO_ADJUST_INTERVAL; m_Ratio = 1; return(false); } // Passthrough from input to output AudioHelpers.CopySample(input.Sample, output.Sample, true); PerformReclock(output); return(true); }
protected sealed override bool Process(IAudioOutput input, IAudioOutput output) { if (input.Format.IsBitStreaming()) { return(false); } // WARNING: We assume input and output formats are the same // passthrough from input to output AudioHelpers.CopySample(input.Sample, output.Sample, false); IntPtr samples; input.Sample.GetPointer(out samples); var format = input.Format; var bytesPerSample = format.wBitsPerSample / 8; var length = input.Sample.GetActualDataLength() / bytesPerSample; var channels = format.nChannels; var sampleFormat = format.SampleFormat(); return(Process(input, sampleFormat, samples, channels, length, output.Sample)); }
protected override void OutputResult(IAudioOutput result) { AudioHelpers.CopySample(result.Sample, m_Audio.Output, true); }