Home | History | Annotate | Download | only in audio
      1 // Copyright (c) 2013 The Chromium 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 CHROMEOS_AUDIO_AUDIO_DEVICE_H_
      6 #define CHROMEOS_AUDIO_AUDIO_DEVICE_H_
      7 
      8 #include <map>
      9 #include <string>
     10 #include <vector>
     11 
     12 #include "base/basictypes.h"
     13 #include "chromeos/chromeos_export.h"
     14 #include "chromeos/dbus/audio_node.h"
     15 
     16 namespace chromeos {
     17 
     18 // Ordered from the highest priority to the lowest.
     19 enum AudioDeviceType {
     20   AUDIO_TYPE_HEADPHONE,
     21   AUDIO_TYPE_MIC,
     22   AUDIO_TYPE_USB,
     23   AUDIO_TYPE_BLUETOOTH,
     24   AUDIO_TYPE_HDMI,
     25   AUDIO_TYPE_INTERNAL_SPEAKER,
     26   AUDIO_TYPE_INTERNAL_MIC,
     27   AUDIO_TYPE_OTHER,
     28 };
     29 
     30 struct CHROMEOS_EXPORT AudioDevice {
     31   bool is_input;
     32   uint64 id;
     33   std::string display_name;
     34   std::string device_name;
     35   AudioDeviceType type;
     36   uint8 priority;
     37   bool active;
     38   uint64 plugged_time;
     39 
     40   AudioDevice();
     41   explicit AudioDevice(const AudioNode& node);
     42   std::string ToString() const;
     43 };
     44 
     45 typedef std::vector<AudioDevice> AudioDeviceList;
     46 typedef std::map<uint64, AudioDevice> AudioDeviceMap;
     47 
     48 struct AudioDeviceCompare {
     49   // Rules used to discern which device is higher,
     50   // 1.) Device Type:
     51   //       [Headphones/USB/Bluetooh > HDMI > Internal Speakers]
     52   //       [External Mic/USB Mic/Bluetooth > Internal Mic]
     53   // 2.) Device Plugged in Time:
     54   //       [Later > Earlier]
     55   bool operator()(const chromeos::AudioDevice& a,
     56                   const chromeos::AudioDevice& b) const {
     57     if (a.priority < b.priority) {
     58       return true;
     59     } else if (b.priority < a.priority) {
     60       return false;
     61     } else if (a.plugged_time < b.plugged_time) {
     62       return true;
     63     } else {
     64       return false;
     65     }
     66   }
     67 };
     68 
     69 }  // namespace chromeos
     70 
     71 #endif  // CHROMEOS_AUDIO_AUDIO_DEVICE_H_
     72