Skip to content

Commit 93c939f

Browse files
gh-217 Add broken code for review
1 parent 1d77b2c commit 93c939f

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed

src/tests/roc_pipeline/test_receiver_source.cpp

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
#include "test_helpers/control_writer.h"
1212
#include "test_helpers/frame_reader.h"
13+
#include "test_helpers/packet_sender.h"
1314
#include "test_helpers/packet_writer.h"
1415

1516
#include "roc_address/interface.h"
@@ -21,6 +22,10 @@
2122
#include "roc_pipeline/receiver_source.h"
2223
#include "roc_rtp/format_map.h"
2324

25+
#include "roc_fec/composer.h"
26+
#include "roc_fec/headers.h"
27+
#include "roc_fec/writer.h"
28+
2429
namespace roc {
2530
namespace pipeline {
2631

@@ -57,6 +62,11 @@ packet::PacketFactory packet_factory(arena);
5762

5863
rtp::FormatMap format_map(arena);
5964

65+
fec::Composer<fec::LDPC_Source_PayloadID, fec::Source, fec::Footer>
66+
ldpc_source_composer(&rtp_composer);
67+
fec::Composer<fec::LDPC_Repair_PayloadID, fec::Repair, fec::Header>
68+
ldpc_repair_composer(NULL);
69+
6070
ReceiverSlot* create_slot(ReceiverSource& source) {
6171
ReceiverSlot* slot = source.create_slot();
6272
CHECK(slot);
@@ -1744,6 +1754,93 @@ IGNORE_TEST(receiver_source, timestamp_mapping_remixing) {
17441754
CHECK(first_ts);
17451755
}
17461756

1757+
packet::PacketPtr fill_one_packet(size_t sn,
1758+
size_t fec_payload_size = 193,
1759+
packet::IComposer* composer = NULL) {
1760+
CHECK(fec_payload_size > sizeof(rtp::Header));
1761+
const size_t rtp_payload_size = fec_payload_size - sizeof(rtp::Header);
1762+
1763+
packet::PacketPtr pp = packet_factory.new_packet();
1764+
CHECK(pp);
1765+
1766+
core::Slice<uint8_t> bp = byte_buffer_factory.new_buffer();
1767+
CHECK(bp);
1768+
1769+
if (!composer) {
1770+
composer = &ldpc_source_composer;
1771+
}
1772+
CHECK(composer->prepare(*pp, bp, rtp_payload_size));
1773+
1774+
pp->set_data(bp);
1775+
1776+
UNSIGNED_LONGS_EQUAL(rtp_payload_size, pp->rtp()->payload.size());
1777+
UNSIGNED_LONGS_EQUAL(fec_payload_size, pp->fec()->payload.size());
1778+
1779+
pp->add_flags(packet::Packet::FlagAudio);
1780+
1781+
pp->rtp()->source = 555;
1782+
pp->rtp()->payload_type = rtp::PayloadType_L16_Stereo;
1783+
pp->rtp()->seqnum = packet::seqnum_t(sn);
1784+
pp->rtp()->stream_timestamp = packet::stream_timestamp_t(sn * 10);
1785+
1786+
for (size_t i = 0; i < rtp_payload_size; i++) {
1787+
pp->rtp()->payload.data()[i] = uint8_t(sn + i);
1788+
}
1789+
1790+
return pp;
1791+
}
1792+
1793+
TEST(receiver_source, packet_buffer) {
1794+
packet::PacketPtr source_packets[20];
1795+
1796+
enum { Rate = SampleRate, Chans = Chans_Stereo, MaxPackets = 10 };
1797+
1798+
init(Rate, Chans, Rate, Chans);
1799+
1800+
ReceiverConfig config = make_config();
1801+
config.default_session.prebuf_len = 0;
1802+
ReceiverSource receiver(config, format_map, packet_factory, byte_buffer_factory,
1803+
sample_buffer_factory, arena);
1804+
CHECK(receiver.is_valid());
1805+
1806+
ReceiverSlot* slot = create_slot(receiver);
1807+
CHECK(slot);
1808+
1809+
packet::IWriter* endpoint1_writer =
1810+
create_endpoint(slot, address::Iface_AudioSource, proto1);
1811+
CHECK(endpoint1_writer);
1812+
1813+
fec::WriterConfig writerConfig;
1814+
fec::CodecConfig codecConfig;
1815+
codecConfig.scheme = packet::FEC_LDPC_Staircase;
1816+
1817+
// setup encoder
1818+
core::ScopedPtr<fec::IBlockEncoder> encoder(
1819+
fec::CodecMap::instance().new_encoder(codecConfig, byte_buffer_factory, arena),
1820+
arena);
1821+
CHECK(encoder);
1822+
1823+
// setup fec writer
1824+
fec::Writer fec_writer(writerConfig, packet::FEC_LDPC_Staircase, *encoder,
1825+
*endpoint1_writer, ldpc_source_composer, ldpc_repair_composer,
1826+
packet_factory, byte_buffer_factory, arena);
1827+
CHECK(fec_writer.is_valid());
1828+
1829+
test::PacketWriter packet_writer(arena, fec_writer, ldpc_source_composer, format_map,
1830+
packet_factory, byte_buffer_factory, PayloadType_Ch2,
1831+
src1, dst1);
1832+
1833+
// setup reader
1834+
test::FrameReader frame_reader(receiver, sample_buffer_factory);
1835+
1836+
packet_writer.write_packets(writerConfig.n_source_packets, SamplesPerPacket,
1837+
output_sample_spec);
1838+
1839+
receiver.refresh(frame_reader.refresh_ts());
1840+
frame_reader.read_zero_samples(SamplesPerFrame, output_sample_spec);
1841+
UNSIGNED_LONGS_EQUAL(0, receiver.num_sessions());
1842+
}
1843+
17471844
TEST(receiver_source, metrics_sessions) {
17481845
enum { Rate = SampleRate, Chans = Chans_Stereo, MaxSess = 10 };
17491846

0 commit comments

Comments
 (0)