X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;ds=sidebyside;f=fake_capture.cpp;h=fbcfeddbf14bffc9b020a41772db44eb0e629561;hb=f52e96f82313de98a8766572fdbd2745fcda1ec5;hp=961700eb54158a2b9245059d89f384620dac1f32;hpb=e0837a17b5a497476d67237c768836e51f8a4ce7;p=bmusb diff --git a/fake_capture.cpp b/fake_capture.cpp index 961700e..fbcfedd 100644 --- a/fake_capture.cpp +++ b/fake_capture.cpp @@ -13,6 +13,7 @@ #if __SSE2__ #include #endif +#include #include #include "bmusb/bmusb.h" @@ -26,6 +27,7 @@ constexpr uint8_t cbs[NUM_COLORS] = { 90, 54, 240, 128 }; constexpr uint8_t crs[NUM_COLORS] = { 240, 34, 110, 128 }; using namespace std; +using namespace std::chrono; namespace bmusb { namespace { @@ -255,23 +257,25 @@ void FakeCapture::producer_thread_func() memset4(video_frame.data, ycbcr, width * height / 2); } video_frame.len = width * height * 2; + video_frame.received_timestamp = steady_clock::now(); } AudioFormat audio_format; audio_format.bits_per_sample = 32; - audio_format.num_channels = 2; + audio_format.num_channels = 8; FrameAllocator::Frame audio_frame = audio_frame_allocator->alloc_frame(); if (audio_frame.data != nullptr) { const unsigned num_stereo_samples = audio_sample_frequency / fps; - assert(audio_frame.size >= 2 * sizeof(int32_t) * num_stereo_samples); - audio_frame.len = 2 * sizeof(int32_t) * num_stereo_samples; + assert(audio_frame.size >= audio_format.num_channels * sizeof(int32_t) * num_stereo_samples); + audio_frame.len = audio_format.num_channels * sizeof(int32_t) * num_stereo_samples; + audio_frame.received_timestamp = steady_clock::now(); if (audio_sin == 0.0f) { // Silence. memset(audio_frame.data, 0, audio_frame.len); } else { - make_tone((int32_t *)audio_frame.data, num_stereo_samples); + make_tone((int32_t *)audio_frame.data, num_stereo_samples, audio_format.num_channels); } } @@ -284,14 +288,15 @@ void FakeCapture::producer_thread_func() } } -void FakeCapture::make_tone(int32_t *out, unsigned num_stereo_samples) +void FakeCapture::make_tone(int32_t *out, unsigned num_stereo_samples, unsigned num_channels) { int32_t *ptr = out; float r = audio_real, i = audio_imag; for (unsigned sample_num = 0; sample_num < num_stereo_samples; ++sample_num) { int32_t s = lrintf(r); - *ptr++ = s; - *ptr++ = s; + for (unsigned i = 0; i < num_channels; ++i) { + *ptr++ = s; + } // Rotate the phaser by one sample. float new_r = r * audio_cos - i * audio_sin;