Example #1
0
 public void Render(IAudioOutput input, IAudioOutput output)
 {
     if (!Process(input, output))
     {
         AudioHelpers.CopySample(input.Sample, output.Sample, true);
     }
 }
Example #2
0
 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);
     }
 }
Example #3
0
        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);
        }
Example #4
0
            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);
            }
Example #5
0
            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);
 }