forked from Green-Sky/tomato
add simple reframer tests (no errors found)
This commit is contained in:
parent
acbc1552eb
commit
84c48d7f5a
@ -169,3 +169,18 @@ target_link_libraries(tomato PUBLIC
|
|||||||
|
|
||||||
set_target_properties(tomato PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
set_target_properties(tomato PROPERTIES POSITION_INDEPENDENT_CODE ON)
|
||||||
|
|
||||||
|
########################################
|
||||||
|
|
||||||
|
add_executable(test_frame_stream2_pop_reframer EXCLUDE_FROM_ALL
|
||||||
|
./frame_streams/frame_stream2.hpp
|
||||||
|
./frame_streams/audio_stream2.hpp
|
||||||
|
./frame_streams/locked_frame_stream.hpp
|
||||||
|
./frame_streams/multi_source.hpp
|
||||||
|
|
||||||
|
./frame_streams/test_pop_reframer.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(test_frame_stream2_pop_reframer
|
||||||
|
solanaceae_util
|
||||||
|
)
|
||||||
|
|
||||||
|
161
src/frame_streams/test_pop_reframer.cpp
Normal file
161
src/frame_streams/test_pop_reframer.cpp
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include "./audio_stream_pop_reframer.hpp"
|
||||||
|
#include "./locked_frame_stream.hpp"
|
||||||
|
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
{ // pump perfect
|
||||||
|
AudioStreamPopReFramer<LockedFrameStream2<AudioFrame2>> stream;
|
||||||
|
stream._frame_length_ms = 10;
|
||||||
|
|
||||||
|
AudioFrame2 f1 {
|
||||||
|
48'000,
|
||||||
|
1,
|
||||||
|
{},
|
||||||
|
};
|
||||||
|
f1.buffer = std::vector<int16_t>(
|
||||||
|
// perfect size
|
||||||
|
stream._frame_length_ms * f1.sample_rate * f1.channels / 1000,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
|
||||||
|
{ // fill with sequential value
|
||||||
|
int16_t seq = 0;
|
||||||
|
for (auto& v : std::get<std::vector<int16_t>>(f1.buffer)) {
|
||||||
|
v = seq++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stream.push(f1);
|
||||||
|
|
||||||
|
auto ret_opt = stream.pop();
|
||||||
|
assert(ret_opt);
|
||||||
|
|
||||||
|
auto& ret = ret_opt.value();
|
||||||
|
assert(ret.sample_rate == f1.sample_rate);
|
||||||
|
assert(ret.channels == f1.channels);
|
||||||
|
assert(ret.getSpan().size == f1.getSpan().size);
|
||||||
|
{
|
||||||
|
int16_t seq = 0;
|
||||||
|
for (const auto v : ret.getSpan()) {
|
||||||
|
assert(v == seq++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{ // pump half
|
||||||
|
AudioStreamPopReFramer<LockedFrameStream2<AudioFrame2>> stream;
|
||||||
|
stream._frame_length_ms = 10;
|
||||||
|
|
||||||
|
AudioFrame2 f1 {
|
||||||
|
48'000,
|
||||||
|
1,
|
||||||
|
{},
|
||||||
|
};
|
||||||
|
f1.buffer = std::vector<int16_t>(
|
||||||
|
// perfect size
|
||||||
|
(stream._frame_length_ms * f1.sample_rate * f1.channels / 1000) / 2,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
AudioFrame2 f2 {
|
||||||
|
48'000,
|
||||||
|
1,
|
||||||
|
{},
|
||||||
|
};
|
||||||
|
f2.buffer = std::vector<int16_t>(
|
||||||
|
// perfect size
|
||||||
|
(stream._frame_length_ms * f1.sample_rate * f1.channels / 1000) / 2,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
|
||||||
|
{ // fill with sequential value
|
||||||
|
int16_t seq = 0;
|
||||||
|
for (auto& v : std::get<std::vector<int16_t>>(f1.buffer)) {
|
||||||
|
v = seq++;
|
||||||
|
}
|
||||||
|
for (auto& v : std::get<std::vector<int16_t>>(f2.buffer)) {
|
||||||
|
v = seq++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stream.push(f1);
|
||||||
|
|
||||||
|
{
|
||||||
|
auto ret_opt = stream.pop();
|
||||||
|
assert(!ret_opt);
|
||||||
|
}
|
||||||
|
|
||||||
|
// push the other half
|
||||||
|
stream.push(f2);
|
||||||
|
|
||||||
|
auto ret_opt = stream.pop();
|
||||||
|
assert(ret_opt);
|
||||||
|
|
||||||
|
auto& ret = ret_opt.value();
|
||||||
|
assert(ret.sample_rate == f1.sample_rate);
|
||||||
|
assert(ret.channels == f1.channels);
|
||||||
|
assert(ret.getSpan().size == stream._frame_length_ms * f1.sample_rate * f1.channels / 1000);
|
||||||
|
{
|
||||||
|
int16_t seq = 0;
|
||||||
|
for (const auto v : ret.getSpan()) {
|
||||||
|
assert(v == seq++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{ // pump double
|
||||||
|
AudioStreamPopReFramer<LockedFrameStream2<AudioFrame2>> stream;
|
||||||
|
stream._frame_length_ms = 20;
|
||||||
|
|
||||||
|
AudioFrame2 f1 {
|
||||||
|
48'000,
|
||||||
|
2,
|
||||||
|
{},
|
||||||
|
};
|
||||||
|
f1.buffer = std::vector<int16_t>(
|
||||||
|
// perfect size
|
||||||
|
(stream._frame_length_ms * f1.sample_rate * f1.channels / 1000) * 2,
|
||||||
|
0
|
||||||
|
);
|
||||||
|
{ // fill with sequential value
|
||||||
|
int16_t seq = 0;
|
||||||
|
for (auto& v : std::get<std::vector<int16_t>>(f1.buffer)) {
|
||||||
|
v = seq++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stream.push(f1);
|
||||||
|
|
||||||
|
// pop 2x
|
||||||
|
int16_t seq = 0;
|
||||||
|
{
|
||||||
|
auto ret_opt = stream.pop();
|
||||||
|
assert(ret_opt);
|
||||||
|
|
||||||
|
auto& ret = ret_opt.value();
|
||||||
|
assert(ret.sample_rate == f1.sample_rate);
|
||||||
|
assert(ret.channels == f1.channels);
|
||||||
|
assert(ret.getSpan().size == stream._frame_length_ms * f1.sample_rate * f1.channels / 1000);
|
||||||
|
for (const auto v : ret.getSpan()) {
|
||||||
|
assert(v == seq++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
auto ret_opt = stream.pop();
|
||||||
|
assert(ret_opt);
|
||||||
|
|
||||||
|
auto& ret = ret_opt.value();
|
||||||
|
assert(ret.sample_rate == f1.sample_rate);
|
||||||
|
assert(ret.channels == f1.channels);
|
||||||
|
assert(ret.getSpan().size == stream._frame_length_ms * f1.sample_rate * f1.channels / 1000);
|
||||||
|
for (const auto v : ret.getSpan()) {
|
||||||
|
assert(v == seq++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user