Home | History | Annotate | Download | only in include
      1 /*
      2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 #ifndef WEBRTC_MODULES_UTILITY_INCLUDE_AUDIO_FRAME_OPERATIONS_H_
     12 #define WEBRTC_MODULES_UTILITY_INCLUDE_AUDIO_FRAME_OPERATIONS_H_
     13 
     14 #include "webrtc/typedefs.h"
     15 
     16 namespace webrtc {
     17 
     18 class AudioFrame;
     19 
     20 // TODO(andrew): consolidate this with utility.h and audio_frame_manipulator.h.
     21 // Change reference parameters to pointers. Consider using a namespace rather
     22 // than a class.
     23 class AudioFrameOperations {
     24  public:
     25   // Upmixes mono |src_audio| to stereo |dst_audio|. This is an out-of-place
     26   // operation, meaning src_audio and dst_audio must point to different
     27   // buffers. It is the caller's responsibility to ensure that |dst_audio| is
     28   // sufficiently large.
     29   static void MonoToStereo(const int16_t* src_audio, size_t samples_per_channel,
     30                            int16_t* dst_audio);
     31   // |frame.num_channels_| will be updated. This version checks for sufficient
     32   // buffer size and that |num_channels_| is mono.
     33   static int MonoToStereo(AudioFrame* frame);
     34 
     35   // Downmixes stereo |src_audio| to mono |dst_audio|. This is an in-place
     36   // operation, meaning |src_audio| and |dst_audio| may point to the same
     37   // buffer.
     38   static void StereoToMono(const int16_t* src_audio, size_t samples_per_channel,
     39                            int16_t* dst_audio);
     40   // |frame.num_channels_| will be updated. This version checks that
     41   // |num_channels_| is stereo.
     42   static int StereoToMono(AudioFrame* frame);
     43 
     44   // Swap the left and right channels of |frame|. Fails silently if |frame| is
     45   // not stereo.
     46   static void SwapStereoChannels(AudioFrame* frame);
     47 
     48   // Zeros out the audio and sets |frame.energy| to zero.
     49   static void Mute(AudioFrame& frame);
     50 
     51   static int Scale(float left, float right, AudioFrame& frame);
     52 
     53   static int ScaleWithSat(float scale, AudioFrame& frame);
     54 };
     55 
     56 }  // namespace webrtc
     57 
     58 #endif  // #ifndef WEBRTC_MODULES_UTILITY_INCLUDE_AUDIO_FRAME_OPERATIONS_H_
     59