/*
 *  Copyright (c) 2014 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.
 */

#ifndef WEBRTC_COMMON_AUDIO_AUDIO_CONVERTER_H_
#define WEBRTC_COMMON_AUDIO_AUDIO_CONVERTER_H_

// TODO(ajm): Move channel buffer to common_audio.
#include "webrtc/base/constructormagic.h"
#include "webrtc/modules/audio_processing/channel_buffer.h"
#include "webrtc/system_wrappers/interface/scoped_ptr.h"
#include "webrtc/system_wrappers/interface/scoped_vector.h"

namespace webrtc {

class PushSincResampler;

// Format conversion (remixing and resampling) for audio. Only simple remixing
// conversions are supported: downmix to mono (i.e. |dst_channels| == 1) or
// upmix from mono (i.e. |src_channels == 1|).
//
// The source and destination chunks have the same duration in time; specifying
// the number of frames is equivalent to specifying the sample rates.
class AudioConverter {
 public:
  AudioConverter(int src_channels, int src_frames,
                 int dst_channels, int dst_frames);

  void Convert(const float* const* src,
               int src_channels,
               int src_frames,
               int dst_channels,
               int dst_frames,
               float* const* dest);

 private:
  const int src_channels_;
  const int src_frames_;
  const int dst_channels_;
  const int dst_frames_;
  scoped_ptr<ChannelBuffer<float>> downmix_buffer_;
  ScopedVector<PushSincResampler> resamplers_;

  DISALLOW_COPY_AND_ASSIGN(AudioConverter);
};

}  // namespace webrtc

#endif  // WEBRTC_COMMON_AUDIO_AUDIO_CONVERTER_H_
