@@ -2108,6 +2108,62 @@ TEST(receiver_source, timestamp_mapping_remixing) {
2108
2108
CHECK (first_ts);
2109
2109
}
2110
2110
2111
+ TEST (receiver_source, packet_buffer) {
2112
+ enum { Rate = SampleRate, Chans = Chans_Stereo, MaxPackets = 10 };
2113
+
2114
+ init (Rate, Chans, Rate, Chans);
2115
+
2116
+ ReceiverConfig config = make_config ();
2117
+ config.default_session .prebuf_len = 0 ;
2118
+ ReceiverSource receiver (config, format_map, packet_factory, byte_buffer_factory,
2119
+ sample_buffer_factory, arena);
2120
+ CHECK (receiver.is_valid ());
2121
+
2122
+ ReceiverSlot* slot = create_slot (receiver);
2123
+ CHECK (slot);
2124
+
2125
+ packet::Queue queue;
2126
+ packet::Queue source_queue;
2127
+ packet::Queue repair_queue;
2128
+
2129
+ packet::IWriter* source_endpoint_writer =
2130
+ create_endpoint (slot, address::Iface_AudioSource, address::Proto_RTP_RS8M_Source);
2131
+ CHECK (source_endpoint_writer);
2132
+
2133
+ packet::IWriter* repair_endpoint_writer =
2134
+ create_endpoint (slot, address::Iface_AudioRepair, address::Proto_RS8M_Repair);
2135
+ CHECK (repair_endpoint_writer);
2136
+
2137
+ fec::WriterConfig fec_config;
2138
+
2139
+ test::PacketWriter packet_writer (
2140
+ arena, queue, queue, format_map, packet_factory, byte_buffer_factory, src1, dst1,
2141
+ dst2, PayloadType_Ch2, packet::FEC_ReedSolomon_M8, fec_config);
2142
+
2143
+ // setup reader
2144
+ test::FrameReader frame_reader (receiver, sample_buffer_factory);
2145
+
2146
+ packet_writer.write_packets (fec_config.n_source_packets , SamplesPerPacket,
2147
+ output_sample_spec);
2148
+
2149
+ for (int i = 0 ; i < ManyPackets; ++i) {
2150
+ packet::PacketPtr pp;
2151
+ UNSIGNED_LONGS_EQUAL (status::StatusOK, queue.read (pp));
2152
+ CHECK (pp);
2153
+
2154
+ if (pp->flags () & packet::Packet::FlagAudio) {
2155
+ UNSIGNED_LONGS_EQUAL (status::StatusOK, source_queue.write (pp));
2156
+ }
2157
+ if (pp->flags () & packet::Packet::FlagRepair) {
2158
+ UNSIGNED_LONGS_EQUAL (status::StatusOK, repair_queue.write (pp));
2159
+ }
2160
+ }
2161
+
2162
+ receiver.refresh (frame_reader.refresh_ts ());
2163
+ frame_reader.read_nonzero_samples (SamplesPerFrame, output_sample_spec);
2164
+ UNSIGNED_LONGS_EQUAL (1 , receiver.num_sessions ());
2165
+ }
2166
+
2111
2167
// Check receiver metrics for multiple remote participants (senders).
2112
2168
TEST (receiver_source, metrics_participants) {
2113
2169
enum { Rate = SampleRate, Chans = Chans_Stereo, MaxParties = 10 };
0 commit comments