Moving src/webrtc into src/.
In order to eliminate the WebRTC Subtree mirror in Chromium, WebRTC is moving the content of the src/webrtc directory up to the src/ directory. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true TBR=tommi@webrtc.org Bug: chromium:611808 Change-Id: Iac59c5b51b950f174119565bac87955a7994bc38 Reviewed-on: https://webrtc-review.googlesource.com/1560 Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org> Reviewed-by: Henrik Kjellander <kjellander@webrtc.org> Cr-Commit-Position: refs/heads/master@{#19845}
This commit is contained in:
committed by
Commit Bot
parent
6674846b4a
commit
bb547203bf
129
modules/video_coding/test/stream_generator.cc
Normal file
129
modules/video_coding/test/stream_generator.cc
Normal file
@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Copyright (c) 2013 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.
|
||||
*/
|
||||
|
||||
#include "webrtc/modules/video_coding/test/stream_generator.h"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <list>
|
||||
|
||||
#include "webrtc/modules/video_coding/packet.h"
|
||||
#include "webrtc/system_wrappers/include/clock.h"
|
||||
#include "webrtc/test/gtest.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
StreamGenerator::StreamGenerator(uint16_t start_seq_num, int64_t current_time)
|
||||
: packets_(), sequence_number_(start_seq_num), start_time_(current_time) {}
|
||||
|
||||
void StreamGenerator::Init(uint16_t start_seq_num, int64_t current_time) {
|
||||
packets_.clear();
|
||||
sequence_number_ = start_seq_num;
|
||||
start_time_ = current_time;
|
||||
memset(packet_buffer_, 0, sizeof(packet_buffer_));
|
||||
}
|
||||
|
||||
void StreamGenerator::GenerateFrame(FrameType type,
|
||||
int num_media_packets,
|
||||
int num_empty_packets,
|
||||
int64_t time_ms) {
|
||||
uint32_t timestamp = 90 * (time_ms - start_time_);
|
||||
for (int i = 0; i < num_media_packets; ++i) {
|
||||
const int packet_size =
|
||||
(kFrameSize + num_media_packets / 2) / num_media_packets;
|
||||
bool marker_bit = (i == num_media_packets - 1);
|
||||
packets_.push_back(GeneratePacket(sequence_number_, timestamp, packet_size,
|
||||
(i == 0), marker_bit, type));
|
||||
++sequence_number_;
|
||||
}
|
||||
for (int i = 0; i < num_empty_packets; ++i) {
|
||||
packets_.push_back(GeneratePacket(sequence_number_, timestamp, 0, false,
|
||||
false, kEmptyFrame));
|
||||
++sequence_number_;
|
||||
}
|
||||
}
|
||||
|
||||
VCMPacket StreamGenerator::GeneratePacket(uint16_t sequence_number,
|
||||
uint32_t timestamp,
|
||||
unsigned int size,
|
||||
bool first_packet,
|
||||
bool marker_bit,
|
||||
FrameType type) {
|
||||
EXPECT_LT(size, kMaxPacketSize);
|
||||
VCMPacket packet;
|
||||
packet.seqNum = sequence_number;
|
||||
packet.timestamp = timestamp;
|
||||
packet.frameType = type;
|
||||
packet.is_first_packet_in_frame = first_packet;
|
||||
packet.markerBit = marker_bit;
|
||||
packet.sizeBytes = size;
|
||||
packet.dataPtr = packet_buffer_;
|
||||
if (packet.is_first_packet_in_frame)
|
||||
packet.completeNALU = kNaluStart;
|
||||
else if (packet.markerBit)
|
||||
packet.completeNALU = kNaluEnd;
|
||||
else
|
||||
packet.completeNALU = kNaluIncomplete;
|
||||
return packet;
|
||||
}
|
||||
|
||||
bool StreamGenerator::PopPacket(VCMPacket* packet, int index) {
|
||||
std::list<VCMPacket>::iterator it = GetPacketIterator(index);
|
||||
if (it == packets_.end())
|
||||
return false;
|
||||
if (packet)
|
||||
*packet = (*it);
|
||||
packets_.erase(it);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool StreamGenerator::GetPacket(VCMPacket* packet, int index) {
|
||||
std::list<VCMPacket>::iterator it = GetPacketIterator(index);
|
||||
if (it == packets_.end())
|
||||
return false;
|
||||
if (packet)
|
||||
*packet = (*it);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool StreamGenerator::NextPacket(VCMPacket* packet) {
|
||||
if (packets_.empty())
|
||||
return false;
|
||||
if (packet != NULL)
|
||||
*packet = packets_.front();
|
||||
packets_.pop_front();
|
||||
return true;
|
||||
}
|
||||
|
||||
void StreamGenerator::DropLastPacket() {
|
||||
packets_.pop_back();
|
||||
}
|
||||
|
||||
uint16_t StreamGenerator::NextSequenceNumber() const {
|
||||
if (packets_.empty())
|
||||
return sequence_number_;
|
||||
return packets_.front().seqNum;
|
||||
}
|
||||
|
||||
int StreamGenerator::PacketsRemaining() const {
|
||||
return packets_.size();
|
||||
}
|
||||
|
||||
std::list<VCMPacket>::iterator StreamGenerator::GetPacketIterator(int index) {
|
||||
std::list<VCMPacket>::iterator it = packets_.begin();
|
||||
for (int i = 0; i < index; ++i) {
|
||||
++it;
|
||||
if (it == packets_.end())
|
||||
break;
|
||||
}
|
||||
return it;
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
72
modules/video_coding/test/stream_generator.h
Normal file
72
modules/video_coding/test/stream_generator.h
Normal file
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright (c) 2013 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_VIDEO_CODING_TEST_STREAM_GENERATOR_H_
|
||||
#define WEBRTC_MODULES_VIDEO_CODING_TEST_STREAM_GENERATOR_H_
|
||||
|
||||
#include <list>
|
||||
|
||||
#include "webrtc/modules/video_coding/packet.h"
|
||||
#include "webrtc/rtc_base/constructormagic.h"
|
||||
#include "webrtc/typedefs.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
const unsigned int kDefaultBitrateKbps = 1000;
|
||||
const unsigned int kDefaultFrameRate = 25;
|
||||
const unsigned int kMaxPacketSize = 1500;
|
||||
const unsigned int kFrameSize =
|
||||
(kDefaultBitrateKbps + kDefaultFrameRate * 4) / (kDefaultFrameRate * 8);
|
||||
const int kDefaultFramePeriodMs = 1000 / kDefaultFrameRate;
|
||||
|
||||
class StreamGenerator {
|
||||
public:
|
||||
StreamGenerator(uint16_t start_seq_num, int64_t current_time);
|
||||
void Init(uint16_t start_seq_num, int64_t current_time);
|
||||
|
||||
// |time_ms| denotes the timestamp you want to put on the frame, and the unit
|
||||
// is millisecond. GenerateFrame will translate |time_ms| into a 90kHz
|
||||
// timestamp and put it on the frame.
|
||||
void GenerateFrame(FrameType type,
|
||||
int num_media_packets,
|
||||
int num_empty_packets,
|
||||
int64_t time_ms);
|
||||
|
||||
bool PopPacket(VCMPacket* packet, int index);
|
||||
void DropLastPacket();
|
||||
|
||||
bool GetPacket(VCMPacket* packet, int index);
|
||||
|
||||
bool NextPacket(VCMPacket* packet);
|
||||
|
||||
uint16_t NextSequenceNumber() const;
|
||||
|
||||
int PacketsRemaining() const;
|
||||
|
||||
private:
|
||||
VCMPacket GeneratePacket(uint16_t sequence_number,
|
||||
uint32_t timestamp,
|
||||
unsigned int size,
|
||||
bool first_packet,
|
||||
bool marker_bit,
|
||||
FrameType type);
|
||||
|
||||
std::list<VCMPacket>::iterator GetPacketIterator(int index);
|
||||
|
||||
std::list<VCMPacket> packets_;
|
||||
uint16_t sequence_number_;
|
||||
int64_t start_time_;
|
||||
uint8_t packet_buffer_[kMaxPacketSize];
|
||||
|
||||
RTC_DISALLOW_COPY_AND_ASSIGN(StreamGenerator);
|
||||
};
|
||||
|
||||
} // namespace webrtc
|
||||
|
||||
#endif // WEBRTC_MODULES_VIDEO_CODING_TEST_STREAM_GENERATOR_H_
|
||||
33
modules/video_coding/test/test_util.h
Normal file
33
modules/video_coding/test/test_util.h
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (c) 2012 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_VIDEO_CODING_TEST_TEST_UTIL_H_
|
||||
#define WEBRTC_MODULES_VIDEO_CODING_TEST_TEST_UTIL_H_
|
||||
|
||||
#include "webrtc/system_wrappers/include/event_wrapper.h"
|
||||
|
||||
class NullEventFactory : public webrtc::EventFactory {
|
||||
public:
|
||||
virtual ~NullEventFactory() {}
|
||||
|
||||
webrtc::EventWrapper* CreateEvent() override { return new NullEvent; }
|
||||
private:
|
||||
// Private class to avoid more dependencies on it in tests.
|
||||
class NullEvent : public webrtc::EventWrapper {
|
||||
public:
|
||||
~NullEvent() override {}
|
||||
bool Set() override { return true; }
|
||||
webrtc::EventTypeWrapper Wait(unsigned long max_time) override { // NOLINT
|
||||
return webrtc::kEventTimeout;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
#endif // WEBRTC_MODULES_VIDEO_CODING_TEST_TEST_UTIL_H_
|
||||
Reference in New Issue
Block a user