/*
 *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

// This utility will portably force the volume of the default microphone to max.

#include <stdio.h>

#include "modules/audio_device/include/audio_device.h"

using webrtc::AudioDeviceModule;

#if defined(_WIN32)
#define DEFAULT_INPUT_DEVICE (AudioDeviceModule::kDefaultCommunicationDevice)
#else
#define DEFAULT_INPUT_DEVICE (0)
#endif

int main(int /*argc*/, char* /*argv*/ []) {
  // Create and initialize the ADM.
  rtc::scoped_refptr<AudioDeviceModule> adm(
      AudioDeviceModule::Create(AudioDeviceModule::kPlatformDefaultAudio));
  if (!adm.get()) {
    fprintf(stderr, "Failed to create Audio Device Module.\n");
    return 1;
  }
  if (adm->Init() != 0) {
    fprintf(stderr, "Failed to initialize Audio Device Module.\n");
    return 1;
  }
  if (adm->SetRecordingDevice(DEFAULT_INPUT_DEVICE) != 0) {
    fprintf(stderr, "Failed to set the default input device.\n");
    return 1;
  }
  if (adm->InitMicrophone() != 0) {
    fprintf(stderr, "Failed to to initialize the microphone.\n");
    return 1;
  }

  // Set mic volume to max.
  uint32_t max_vol = 0;
  if (adm->MaxMicrophoneVolume(&max_vol) != 0) {
    fprintf(stderr, "Failed to get max volume.\n");
    return 1;
  }
  if (adm->SetMicrophoneVolume(max_vol) != 0) {
    fprintf(stderr, "Failed to set mic volume.\n");
    return 1;
  }

  return 0;
}
