• audio_policy.conf说明(翻译)


    自己记着当笔记,水平有限,仅供参考

    #
    # Audio policy configuration for generic device builds (goldfish audio HAL - emulator)
    #这是模拟器的Audio policy配置
    #
    
    # Global configuration section: lists input and output devices always present on the device
    # as well as the output device selected by default.
    # Devices are designated by a string that corresponds to the enum in audio.h
    
    #全局配置部分:列出了设备上总是存在的输入输出设备,它也是系统默认选择的输出设备
    #这里的输入输出设备必须是audio.h中列出的枚举类型
    
    global_configuration {
      attached_output_devices AUDIO_DEVICE_OUT_SPEAKER
      default_output_device AUDIO_DEVICE_OUT_SPEAKER
      attached_input_devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_REMOTE_SUBMIX
    }
    
    # audio hardware module section: contains descriptors for all audio hw modules present on the
    # device. Each hw module node is named after the corresponding hw module library base name.
    # For instance, "primary" corresponds to audio.primary.<device>.so.
    # The "primary" module is mandatory and must include at least one output with
    # AUDIO_OUTPUT_FLAG_PRIMARY flag.
    # Each module descriptor contains one or more output profile descriptors and zero or more
    # input profile descriptors. Each profile lists all the parameters supported by a given output
    # or input stream category.
    # The "channel_masks", "formats", "devices" and "flags" are specified using strings corresponding
    # to enums in audio.h and audio_policy.h. They are concatenated by use of "|" without space or "
    ".
    
    #audio hardware module部分:包含了对设备上的所有的audio hw modules的descriptors,每一个hw module节点
    #的名字都与相应的so库名称相对应,例如:"primary"对应audio.primary.<device>.so。其中"primary"module是
    #必须的,而且它必须包含一个含AUDIO_OUTPUT_FLAG_PRIMARY标志的output,每一个module的descriptor必须至少
    #包含一个output配置descriptor和大于等于0个的input配置descriptor,每一个配置都描述了输入输出流类型支持
    #的参数,其中的 "channel_masks""formats""devices""flags"必须为audio.h、audio_policy.h中定义的枚
    #举值,它们可以通过|连接,但不能包含空格和"
    "。
    audio_hw_modules {
      primary {
        outputs {
          primary {
            sampling_rates 44100
            channel_masks AUDIO_CHANNEL_OUT_STEREO
            formats AUDIO_FORMAT_PCM_16_BIT
            devices AUDIO_DEVICE_OUT_SPEAKER
            flags AUDIO_OUTPUT_FLAG_PRIMARY
          }
        }
        inputs {
          primary {
            sampling_rates 8000|16000
            channel_masks AUDIO_CHANNEL_IN_MONO
            formats AUDIO_FORMAT_PCM_16_BIT
            devices AUDIO_DEVICE_IN_BUILTIN_MIC
          }
        }
      }
      r_submix {
        outputs {
          submix {
            sampling_rates 48000
            channel_masks AUDIO_CHANNEL_OUT_STEREO
            formats AUDIO_FORMAT_PCM_16_BIT
            devices AUDIO_DEVICE_OUT_REMOTE_SUBMIX
          }
        }
        inputs {
          submix {
            sampling_rates 48000
            channel_masks AUDIO_CHANNEL_IN_STEREO
            formats AUDIO_FORMAT_PCM_16_BIT
            devices AUDIO_DEVICE_IN_REMOTE_SUBMIX
          }
        }
      }
    }

     另外,存储各个audio_hw_module的结构体如下:

            class HwModule {
            public:
                        HwModule(const char *name);
                        ~HwModule();
    
                void dump(int fd);
    
                const char *const mName; // base name of the audio HW module (primary, a2dp ...)
                audio_module_handle_t mHandle;
                Vector <IOProfile *> mOutputProfiles; // output profiles exposed by this module
                Vector <IOProfile *> mInputProfiles;  // input profiles exposed by this module
            };
    
            // the IOProfile class describes the capabilities of an output or input stream.
            // It is currently assumed that all combination of listed parameters are supported.
            // It is used by the policy manager to determine if an output or input is suitable for
            // a given use case,  open/close it accordingly and connect/disconnect audio tracks
            // to/from it.
            class IOProfile
            {
            public:
                IOProfile(HwModule *module);
                ~IOProfile();
    
                bool isCompatibleProfile(audio_devices_t device,
                                         uint32_t samplingRate,
                                         uint32_t format,
                                         uint32_t channelMask,
                                         audio_output_flags_t flags) const;
    
                void dump(int fd);
    
                // by convention, "0' in the first entry in mSamplingRates, mChannelMasks or mFormats
                // indicates the supported parameters should be read from the output stream
                // after it is opened for the first time
                Vector <uint32_t> mSamplingRates; // supported sampling rates
                Vector <audio_channel_mask_t> mChannelMasks; // supported channel masks
                Vector <audio_format_t> mFormats; // supported audio formats
                audio_devices_t mSupportedDevices; // supported devices (devices this output can be
                                                   // routed to)
                audio_output_flags_t mFlags; // attribute flags (e.g primary output,
                                                    // direct output...). For outputs only.
                HwModule *mModule;                     // audio HW module exposing this I/O stream
            };

     在AudioPolicyManagerBase类对象的mHwModules中保存了这些读取的配置。

  • 相关阅读:
    云端开发,云端部署
    Chrome下的Page Speed使用
    Linux的到来
    NoSQL 之 Morphia 操作 MongoDB
    qTip2
    在.NET下使用Task Parallel Library提高程序性能
    WCF REST系列文章汇总
    Google工具pagespeed使用教程
    从零开始系统深入学习android
    如何优化一个网站使之提高访问速度
  • 原文地址:https://www.cnblogs.com/albert1017/p/3940010.html
Copyright © 2020-2023  润新知