| Index: chromecast/public/media/audio_post_processor_shlib.h
|
| diff --git a/chromecast/public/media/audio_post_processor_shlib.h b/chromecast/public/media/audio_post_processor_shlib.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0a0ef124bdeea53a5559d282c5780c9e2bd5b0ea
|
| --- /dev/null
|
| +++ b/chromecast/public/media/audio_post_processor_shlib.h
|
| @@ -0,0 +1,66 @@
|
| +// Copyright 2017 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CHROMECAST_PUBLIC_MEDIA_AUDIO_POST_PROCESSOR_SHLIB_H_
|
| +#define CHROMECAST_PUBLIC_MEDIA_AUDIO_POST_PROCESSOR_SHLIB_H_
|
| +
|
| +#include <string>
|
| +
|
| +#include "chromecast_export.h"
|
| +
|
| +namespace chromecast {
|
| +namespace media {
|
| +class AudioPostProcessor;
|
| +} // namespace media
|
| +} // namespace chromecast
|
| +
|
| +// Creates an AudioPostProcessor.
|
| +// This is applicable only to Alsa CMA backend.
|
| +// Please refer to
|
| +// chromecast/media/cma/backend/alsa/post_processors/governor_shlib.cc
|
| +// as an example, but OEM's implementations should not have any
|
| +// Chromium dependencies.
|
| +// Called from StreamMixerAlsa when shared objects are listed in
|
| +// /etc/cast_audio.json
|
| +extern "C" CHROMECAST_EXPORT chromecast::media::AudioPostProcessor*
|
| +AudioPostProcessorShlib_Create(const std::string& config, int channels);
|
| +
|
| +namespace chromecast {
|
| +namespace media {
|
| +
|
| +// Interface for AudioPostProcessors used for applying DSP in StreamMixerAlsa.
|
| +class AudioPostProcessor {
|
| + public:
|
| + // Updates the sample rate of the processor.
|
| + // Returns |false| if the processor cannot support |sample_rate|
|
| + // Returning false will result in crashing cast_shell.
|
| + virtual bool SetSampleRate(int sample_rate) = 0;
|
| +
|
| + // Processes audio frames from |data|, overwriting contents.
|
| + // |data| will always be 32-bit interleaved float.
|
| + // Always provides |frames| frames of data back (may output 0’s)
|
| + // |volume| is the current attenuation level of the stream.
|
| + // AudioPostProcessor should assume that it has already been applied.
|
| + // Returns the current rendering delay of the filter in frames,
|
| + // or negative if an error occurred during processing.
|
| + // If an error occurred during processing, |data| should be unchanged.
|
| + virtual int ProcessFrames(uint8_t* data, int frames, float volume) = 0;
|
| +
|
| + // Returns the number of frames of silence it will take for the
|
| + // processor to come to rest.
|
| + // This may be the actual number of frames stored,
|
| + // or may be calculated from internal resonators or similar.
|
| + // When inputs are paused, at least this |GetRingingTimeInFrames()| of
|
| + // silence will be passed through the processor.
|
| + // This is not expected to be real-time;
|
| + // It should only change when SetSampleRate is called.
|
| + virtual int GetRingingTimeInFrames() = 0;
|
| +
|
| + virtual ~AudioPostProcessor() = default;
|
| +};
|
| +
|
| +} // namespace media
|
| +} // namespace chromecast
|
| +
|
| +#endif // CHROMECAST_PUBLIC_MEDIA_AUDIO_POST_PROCESSOR_SHLIB_H_
|
|
|