Home | History | Annotate | Download | only in source
      1 /*
      2  *  Copyright (c) 2011 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_SOURCE_CODER_H_
     12 #define WEBRTC_MODULES_UTILITY_SOURCE_CODER_H_
     13 
     14 #include "webrtc/common_types.h"
     15 #include "webrtc/modules/audio_coding/main/interface/audio_coding_module.h"
     16 #include "webrtc/system_wrappers/interface/scoped_ptr.h"
     17 #include "webrtc/typedefs.h"
     18 
     19 namespace webrtc {
     20 class AudioFrame;
     21 
     22 class AudioCoder : public AudioPacketizationCallback
     23 {
     24 public:
     25     AudioCoder(uint32_t instanceID);
     26     ~AudioCoder();
     27 
     28     int32_t SetEncodeCodec(
     29         const CodecInst& codecInst,
     30         ACMAMRPackingFormat amrFormat = AMRBandwidthEfficient);
     31 
     32     int32_t SetDecodeCodec(
     33         const CodecInst& codecInst,
     34         ACMAMRPackingFormat amrFormat = AMRBandwidthEfficient);
     35 
     36     int32_t Decode(AudioFrame& decodedAudio, uint32_t sampFreqHz,
     37                    const int8_t* incomingPayload, int32_t payloadLength);
     38 
     39     int32_t PlayoutData(AudioFrame& decodedAudio, uint16_t& sampFreqHz);
     40 
     41     int32_t Encode(const AudioFrame& audio, int8_t* encodedData,
     42                    uint32_t& encodedLengthInBytes);
     43 
     44 protected:
     45     virtual int32_t SendData(
     46         FrameType frameType,
     47         uint8_t payloadType,
     48         uint32_t timeStamp,
     49         const uint8_t* payloadData,
     50         uint16_t payloadSize,
     51         const RTPFragmentationHeader* fragmentation) OVERRIDE;
     52 
     53 private:
     54     scoped_ptr<AudioCodingModule> _acm;
     55 
     56     CodecInst _receiveCodec;
     57 
     58     uint32_t _encodeTimestamp;
     59     int8_t*  _encodedData;
     60     uint32_t _encodedLengthInBytes;
     61 
     62     uint32_t _decodeTimestamp;
     63 };
     64 }  // namespace webrtc
     65 
     66 #endif // WEBRTC_MODULES_UTILITY_SOURCE_CODER_H_
     67