text: /*
   *  Copyright (c) 2016 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_MODULES_RTP_RTCP_SOURCE_RTP_HEADER_EXTENSIONS_H_
  #define WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_HEADER_EXTENSIONS_H_
  
  #include "webrtc/base/basictypes.h"
  #include "webrtc/call.h"
  #include "webrtc/common_video/rotation.h"
  #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
  
  namespace webrtc {
  
  class AbsoluteSendTime {
   public:
    static constexpr RTPExtensionType kId = kRtpExtensionAbsoluteSendTime;
    static constexpr uint8_t kValueSizeBytes = 3;
    static const char* kName;
    static bool IsSupportedFor(MediaType type);
    static bool Parse(const uint8_t* data, uint32_t* time_ms);
    static bool Write(uint8_t* data, int64_t time_ms);
  };
  
  class AudioLevel {
   public:
    static constexpr RTPExtensionType kId = kRtpExtensionAudioLevel;
    static constexpr uint8_t kValueSizeBytes = 1;
    static const char* kName;
    static bool IsSupportedFor(MediaType type);
    static bool Parse(const uint8_t* data,
                      bool* voice_activity,
                      uint8_t* audio_level);
    static bool Write(uint8_t* data, bool voice_activity, uint8_t audio_level);
  };
  
  class TransmissionOffset {
   public:
    static constexpr RTPExtensionType kId = kRtpExtensionTransmissionTimeOffset;
    static constexpr uint8_t kValueSizeBytes = 3;
    static const char* kName;
    static bool IsSupportedFor(MediaType type);
    static bool Parse(const uint8_t* data, int32_t* time_ms);
    static bool Write(uint8_t* data, int64_t time_ms);
  };
  
  class TransportSequenceNumber {
   public:
    static constexpr RTPExtensionType kId = kRtpExtensionTransportSequenceNumber;
    static constexpr uint8_t kValueSizeBytes = 2;
    static const char* kName;
    static bool IsSupportedFor(MediaType type);
    static bool Parse(const uint8_t* data, uint16_t* value);
    static bool Write(uint8_t* data, uint16_t value);
  };
  
  class VideoOrientation {
   public:
    static constexpr RTPExtensionType kId = kRtpExtensionVideoRotation;
    static constexpr uint8_t kValueSizeBytes = 1;
    static const char* kName;
    static bool IsSupportedFor(MediaType type);
    static bool Parse(const uint8_t* data, VideoRotation* value);
    static bool Write(uint8_t* data, VideoRotation value);
    static bool Parse(const uint8_t* data, uint8_t* value);
    static bool Write(uint8_t* data, uint8_t value);
  };
  
  }  // namespace webrtc
  #endif  // WEBRTC_MODULES_RTP_RTCP_SOURCE_RTP_HEADER_EXTENSIONS_H_
  