| // Copyright 2019 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROMECAST_MEDIA_API_AUDIO_PROVIDER_H_ |
| #define CHROMECAST_MEDIA_API_AUDIO_PROVIDER_H_ |
| |
| #include <cstdint> |
| |
| namespace chromecast { |
| namespace media { |
| |
| // Abstract interface for classes that provide audio data. |
| class AudioProvider { |
| public: |
| // Fills in |channel_data| with up to |num_frames| frames of audio. |
| // The |playout_timestamp| indicates when the first sample of the filled audio |
| // is expected to play out. Returns the number of frames actually filled; |
| // implementations should try to fill as much audio as possible. |
| virtual int FillFrames(int num_frames, |
| int64_t playout_timestamp, |
| float* const* channel_data) = 0; |
| |
| // Returns the number of audio channels and the sample rate of the provider. |
| // Used for DCHECKing only; all callers of a provider must use the same |
| // channel count and sample rate as the provider. |
| virtual size_t num_channels() const = 0; |
| virtual int sample_rate() const = 0; |
| |
| protected: |
| virtual ~AudioProvider() = default; |
| }; |
| |
| } // namespace media |
| } // namespace chromecast |
| |
| #endif // CHROMECAST_MEDIA_API_AUDIO_PROVIDER_H_ |