| /* | 
 |  *  Copyright (c) 2011 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_VOICE_ENGINE_VOE_EXTERNAL_MEDIA_H | 
 | #define WEBRTC_VOICE_ENGINE_VOE_EXTERNAL_MEDIA_H | 
 |  | 
 | #include "webrtc/common_types.h" | 
 |  | 
 | namespace webrtc { | 
 |  | 
 | class VoiceEngine; | 
 | class AudioFrame; | 
 |  | 
 | class WEBRTC_DLLEXPORT VoEMediaProcess { | 
 |  public: | 
 |   // The VoiceEngine user should override the Process() method in a | 
 |   // derived class. Process() will be called when audio is ready to | 
 |   // be processed. The audio can be accessed in several different modes | 
 |   // given by the |type| parameter. The function should modify the | 
 |   // original data and ensure that it is copied back to the |audio10ms| | 
 |   // array. The number of samples in the frame cannot be changed. | 
 |   // The sampling frequency will depend upon the codec used. | 
 |   // If |isStereo| is true, audio10ms will contain 16-bit PCM data | 
 |   // samples in interleaved stereo format (L0,R0,L1,R1,...). | 
 |   virtual void Process(int channel, | 
 |                        ProcessingTypes type, | 
 |                        int16_t audio10ms[], | 
 |                        size_t length, | 
 |                        int samplingFreq, | 
 |                        bool isStereo) = 0; | 
 |  | 
 |  protected: | 
 |   virtual ~VoEMediaProcess() {} | 
 | }; | 
 |  | 
 | class WEBRTC_DLLEXPORT VoEExternalMedia { | 
 |  public: | 
 |   // Factory for the VoEExternalMedia sub-API. Increases an internal | 
 |   // reference counter if successful. Returns NULL if the API is not | 
 |   // supported or if construction fails. | 
 |   static VoEExternalMedia* GetInterface(VoiceEngine* voiceEngine); | 
 |  | 
 |   // Releases the VoEExternalMedia sub-API and decreases an internal | 
 |   // reference counter. Returns the new reference count. This value should | 
 |   // be zero for all sub-API:s before the VoiceEngine object can be safely | 
 |   // deleted. | 
 |   virtual int Release() = 0; | 
 |  | 
 |   // Installs a VoEMediaProcess derived instance and activates external | 
 |   // media for the specified |channel| and |type|. | 
 |   virtual int RegisterExternalMediaProcessing( | 
 |       int channel, | 
 |       ProcessingTypes type, | 
 |       VoEMediaProcess& processObject) = 0; | 
 |  | 
 |   // Removes the VoEMediaProcess derived instance and deactivates external | 
 |   // media for the specified |channel| and |type|. | 
 |   virtual int DeRegisterExternalMediaProcessing(int channel, | 
 |                                                 ProcessingTypes type) = 0; | 
 |  | 
 |   // Pulls an audio frame from the specified |channel| for external mixing. | 
 |   // If the |desired_sample_rate_hz| is 0, the signal will be returned with | 
 |   // its native frequency, otherwise it will be resampled. Valid frequencies | 
 |   // are 16, 22, 32, 44 or 48 kHz. | 
 |   virtual int GetAudioFrame(int channel, | 
 |                             int desired_sample_rate_hz, | 
 |                             AudioFrame* frame) = 0; | 
 |  | 
 |   // Sets the state of external mixing. Cannot be changed during playback. | 
 |   virtual int SetExternalMixing(int channel, bool enable) = 0; | 
 |  | 
 |  protected: | 
 |   VoEExternalMedia() {} | 
 |   virtual ~VoEExternalMedia() {} | 
 | }; | 
 |  | 
 | }  // namespace webrtc | 
 |  | 
 | #endif  //  WEBRTC_VOICE_ENGINE_VOE_EXTERNAL_MEDIA_H |