e402c32ab3a00a71c79bfce42286244ebfc55a31
[platform/framework/web/crosswalk-tizen.git] /
1 // Copyright (c) 2014 The Samsung Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef MEDIA_AUDIO_TIZEN_CAPI_AUDIO_INPUT_H_
6 #define MEDIA_AUDIO_TIZEN_CAPI_AUDIO_INPUT_H_
7
8 #include <audio_io.h>
9 #include <string>
10
11 #include "base/memory/weak_ptr.h"
12 #include "base/threading/thread.h"
13 #include "base/time/time.h"
14 #include "media/audio/agc_audio_stream.h"
15 #include "media/audio/audio_device_name.h"
16 #include "media/audio/audio_io.h"
17 #include "media/audio/tizen/capi_util.h"
18 #include "media/base/audio_block_fifo.h"
19 #include "media/base/audio_parameters.h"
20
21 namespace media {
22
23 class AudioManagerCapi;
24
25 class CapiAudioInputStream final : public AgcAudioStream<AudioInputStream> {
26  public:
27   CapiAudioInputStream(AudioManagerCapi* audio_manager,
28                        const std::string& device_name,
29                        const AudioParameters& params);
30
31   ~CapiAudioInputStream() override;
32
33   bool Open() override;
34   void Start(AudioInputCallback* callback) override;
35   void Stop() override;
36   void Close() override;
37   double GetMaxVolume() override;
38   void SetVolume(double volume) override;
39   double GetVolume() override;
40   bool IsMuted();
41   void OnAudioIOData(const AudioBus* audio_bus,
42                      uint32_t hardware_delay_bytes,
43                      double normalized_volume);
44  private:
45   static void AudioStreamReadCB(audio_in_h handle,
46                                 size_t nbytes,
47                                 void* user_data);
48   void ReadAudioData();
49
50   AudioManagerCapi* audio_manager_;
51   AudioInputCallback* callback_;
52   std::string device_name_;
53   AudioParameters params_;
54   double volume_;
55   media::InternalState state_;
56   base::Thread audio_worker_;
57   audio_in_h device_;
58
59   // Holds the data from the OS.
60   AudioBlockFifo fifo_;
61
62   DISALLOW_COPY_AND_ASSIGN(CapiAudioInputStream);
63 };
64
65 }  // namespace media
66
67 #endif  // MEDIA_AUDIO_TIZEN_CAPI_AUDIO_INPUT_H_