@@ -2108,6 +2108,62 @@ TEST(receiver_source, timestamp_mapping_remixing) {
21082108 CHECK (first_ts);
21092109}
21102110
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+
21112167// Check receiver metrics for multiple remote participants (senders).
21122168TEST (receiver_source, metrics_participants) {
21132169 enum { Rate = SampleRate, Chans = Chans_Stereo, MaxParties = 10 };
0 commit comments