12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef MEDIA_AUDIO_CRAS_AUDIO_MANAGER_CRAS_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MEDIA_AUDIO_CRAS_AUDIO_MANAGER_CRAS_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <cras_types.h>
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/compiler_specific.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "media/audio/audio_manager_base.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace media {
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MEDIA_EXPORT AudioManagerCras : public AudioManagerBase {
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  AudioManagerCras(AudioLogFactory* audio_log_factory);
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // AudioManager implementation.
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool HasAudioOutputDevices() OVERRIDE;
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool HasAudioInputDevices() OVERRIDE;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ShowAudioInputSettings() OVERRIDE;
26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void GetAudioInputDeviceNames(
27d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      AudioDeviceNames* device_names) OVERRIDE;
28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual void GetAudioOutputDeviceNames(
29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      AudioDeviceNames* device_names) OVERRIDE;
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual AudioParameters GetInputStreamParameters(
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::string& device_id) OVERRIDE;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // AudioManagerBase implementation.
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual AudioOutputStream* MakeLinearOutputStream(
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const AudioParameters& params) OVERRIDE;
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual AudioOutputStream* MakeLowLatencyOutputStream(
37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      const AudioParameters& params,
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& device_id) OVERRIDE;
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual AudioInputStream* MakeLinearInputStream(
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const AudioParameters& params, const std::string& device_id) OVERRIDE;
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual AudioInputStream* MakeLowLatencyInputStream(
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const AudioParameters& params, const std::string& device_id) OVERRIDE;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  static snd_pcm_format_t BitsToFormat(int bits_per_sample);
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~AudioManagerCras();
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual AudioParameters GetPreferredOutputStreamParameters(
5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      const std::string& output_device_id,
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const AudioParameters& input_params) OVERRIDE;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Called by MakeLinearOutputStream and MakeLowLatencyOutputStream.
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AudioOutputStream* MakeOutputStream(const AudioParameters& params);
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Called by MakeLinearInputStream and MakeLowLatencyInputStream.
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AudioInputStream* MakeInputStream(const AudioParameters& params,
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                    const std::string& device_id);
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AudioManagerCras);
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace media
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // MEDIA_AUDIO_CRAS_AUDIO_MANAGER_CRAS_H_
67