1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * Use of this source code is governed by a BSD-style license 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * that can be found in the LICENSE file in the root of the source 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * tree. An additional intellectual property rights grant can be found 79c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod * in the file PATENTS. All contributing project authors may 8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * be found in the AUTHORS file in the root of the source tree. 9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <assert.h> 12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "webrtc/modules/audio_coding/neteq/tools/rtp_generator.h" 14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectnamespace webrtc { 16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectnamespace test { 17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectuint32_t RtpGenerator::GetRtpHeader(uint8_t payload_type, 19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project size_t payload_length_samples, 20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project WebRtcRTPHeader* rtp_header) { 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project assert(rtp_header); 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if (!rtp_header) { 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return 0; 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project rtp_header->header.sequenceNumber = seq_number_++; 26727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease rtp_header->header.timestamp = timestamp_; 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project timestamp_ += static_cast<uint32_t>(payload_length_samples); 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project rtp_header->header.payloadType = payload_type; 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project rtp_header->header.markerBit = false; 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project rtp_header->header.ssrc = ssrc_; 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project rtp_header->header.numCSRCs = 0; 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project rtp_header->frameType = kAudioFrameSpeech; 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project uint32_t this_send_time = next_send_time_ms_; 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project assert(samples_per_ms_ > 0); 36727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease next_send_time_ms_ += ((1.0 + drift_factor_) * payload_length_samples) / 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project samples_per_ms_; 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return this_send_time; 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project} 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectvoid RtpGenerator::set_drift_factor(double factor) { 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if (factor > -1.0) { 43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project drift_factor_ = factor; 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project} 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectuint32_t TimestampJumpRtpGenerator::GetRtpHeader(uint8_t payload_type, 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project size_t payload_length_samples, 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project WebRtcRTPHeader* rtp_header) { 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project uint32_t ret = RtpGenerator::GetRtpHeader( 51aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner payload_type, payload_length_samples, rtp_header); 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if (timestamp_ - static_cast<uint32_t>(payload_length_samples) <= 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project jump_from_timestamp_ && 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project timestamp_ > jump_from_timestamp_) { 55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project // We just moved across the |jump_from_timestamp_| timestamp. Do the jump. 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project timestamp_ = jump_to_timestamp_; 57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return ret; 59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project} 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project} // namespace test 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project} // namespace webrtc 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project