#ifndef MEDIA_MOJO_COMMON_AUDIO_DATA_S16_CONVERTER_H_
#define MEDIA_MOJO_COMMON_AUDIO_DATA_S16_CONVERTER_H_
#include <memory>
#include "media/base/audio_buffer.h"
#include "media/base/audio_bus.h"
#include "media/mojo/mojom/media_types.mojom.h"
namespace media {
class ChannelMixer;
class AudioDataS16Converter {
public:
AudioDataS16Converter();
virtual ~AudioDataS16Converter();
AudioDataS16Converter(const AudioDataS16Converter&) = delete;
AudioDataS16Converter& operator=(const AudioDataS16Converter&) = delete;
mojom::AudioDataS16Ptr ConvertToAudioDataS16(
scoped_refptr<AudioBuffer> buffer,
bool is_multichannel_supported);
mojom::AudioDataS16Ptr ConvertToAudioDataS16(
std::unique_ptr<AudioBus> audio_bus,
int sample_rate,
ChannelLayout channel_layout,
bool is_multichannel_supported);
mojom::AudioDataS16Ptr ConvertToAudioDataS16(const AudioBus& audio_bus,
int sample_rate,
ChannelLayout channel_layout,
bool is_multichannel_supported);
private:
void CopyBufferToTempAudioBus(const AudioBuffer& buffer);
void ResetChannelMixerIfNeeded(int frame_count,
ChannelLayout channel_layout,
int channel_count);
std::unique_ptr<AudioBus> temp_audio_bus_;
std::unique_ptr<AudioBus> monaural_audio_bus_;
std::unique_ptr<ChannelMixer> channel_mixer_;
ChannelLayout channel_layout_ = ChannelLayout::CHANNEL_LAYOUT_NONE;
int channel_count_ = 0;
};
}
#endif