Receiver bit-exactness test for AudioCoding Module
This CL introduces a bit-exactness test for the receive-side of the AudioCoding Module. The main part of the test is done in the helper class AcmReceiveTest. The test is executed from the test fixture AcmReceiverBitExactness. The test inserts packets from a pre-encoded RTP file. The output is summed up into a checksum, which is verified versus a reference at the end of the test. Alternatively, if the flag --generate_output is given, the output is written to a file for subjective verification. R=kwiberg@webrtc.org Review URL: https://webrtc-codereview.appspot.com/13769004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@6549 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@ -41,6 +41,23 @@ class AudioSink {
|
||||
DISALLOW_COPY_AND_ASSIGN(AudioSink);
|
||||
};
|
||||
|
||||
// Forks the output audio to two AudioSink objects.
|
||||
class AudioSinkFork : public AudioSink {
|
||||
public:
|
||||
AudioSinkFork(AudioSink* left, AudioSink* right)
|
||||
: left_sink_(left), right_sink_(right) {}
|
||||
|
||||
virtual bool WriteArray(const int16_t* audio, size_t num_samples) OVERRIDE {
|
||||
return left_sink_->WriteArray(audio, num_samples) &&
|
||||
right_sink_->WriteArray(audio, num_samples);
|
||||
}
|
||||
|
||||
private:
|
||||
AudioSink* left_sink_;
|
||||
AudioSink* right_sink_;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(AudioSinkFork);
|
||||
};
|
||||
} // namespace test
|
||||
} // namespace webrtc
|
||||
#endif // WEBRTC_MODULES_AUDIO_CODING_NETEQ_TOOLS_AUDIO_SINK_H_
|
||||
|
||||
@ -11,7 +11,10 @@
|
||||
#ifndef WEBRTC_MODULES_AUDIO_CODING_NETEQ_TOOLS_PACKET_SOURCE_H_
|
||||
#define WEBRTC_MODULES_AUDIO_CODING_NETEQ_TOOLS_PACKET_SOURCE_H_
|
||||
|
||||
#include <bitset>
|
||||
|
||||
#include "webrtc/base/constructormagic.h"
|
||||
#include "webrtc/typedefs.h"
|
||||
|
||||
namespace webrtc {
|
||||
namespace test {
|
||||
@ -28,6 +31,13 @@ class PacketSource {
|
||||
// depleted, or if an error occurred.
|
||||
virtual Packet* NextPacket() = 0;
|
||||
|
||||
virtual void FilterOutPayloadType(uint8_t payload_type) {
|
||||
filter_.set(payload_type, true);
|
||||
}
|
||||
|
||||
protected:
|
||||
std::bitset<128> filter_; // Payload type is 7 bits in the RFC.
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(PacketSource);
|
||||
};
|
||||
|
||||
@ -92,6 +92,10 @@ Packet* RtpFileSource::NextPacket() {
|
||||
assert(false);
|
||||
return NULL;
|
||||
}
|
||||
if (filter_.test(packet->header().payloadType)) {
|
||||
// This payload type should be filtered out. Continue to the next packet.
|
||||
continue;
|
||||
}
|
||||
return packet.release();
|
||||
}
|
||||
return NULL;
|
||||
|
||||
Reference in New Issue
Block a user