From 481b8cf04a7aa332fdca5606e30dd77287d9f5ce Mon Sep 17 00:00:00 2001
From: Irreq <irreq@protonmail.com>
Date: Sun, 9 Jun 2024 13:53:29 +0200
Subject: [PATCH] Documented main

---
 src/beamformer.cpp | 74 +++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 66 insertions(+), 8 deletions(-)

diff --git a/src/beamformer.cpp b/src/beamformer.cpp
index b7f3a0d..11d4329 100644
--- a/src/beamformer.cpp
+++ b/src/beamformer.cpp
@@ -1,11 +1,16 @@
-#include "antenna.h"
+
 #include "config.h"
+
+#include "antenna.h"
 #include "delay.h"
 #include "pipeline.h"
 #include "ring_buffer.h"
 
+
+#if AUDIO 
 #include "RtAudio.h"
-#include "config.h"
+#endif
+
 #include <Eigen/Dense>
 #include <cmath>
 #include <cstdlib>
@@ -15,15 +20,23 @@
 #include <opencv2/opencv.hpp>
 #include <signal.h>
 #include <thread>
-// using namespace std;
+
 using namespace Eigen;
 using namespace cv;
-#define CAMERA 1
 
 #define VALID_SENSOR(i) ((128 <= i) && (128 + 64 > i))
 
 bool canPlot = false;
 
+/**
+ * @brief Calculate delays for different angles beforehand 
+ *
+ * @param flat_delays delays to use 
+ * @param antenna antenna structure 
+ * @param fov field of view 
+ * @param resolution_x width resolution 
+ * @param resolution_y height resolution
+ */
 void compute_scanning_window(float *flat_delays, const Antenna &antenna,
                              float fov, int resolution_x, int resolution_y) {
 
@@ -90,6 +103,15 @@ void compute_scanning_window2(float *flat_delays, const Antenna &antenna,
   // return delays;
 }
 
+/**
+ * @brief Convert multiple input streams into single level by delay  
+ *
+ * @param t_id [TODO:parameter]
+ * @param task pool partition 
+ * @param flat_delays delays to use 
+ * @param rb ring buffer to use 
+ * @return power level
+ */
 float miso(int t_id, int task, float *flat_delays, ring_buffer &rb) {
   float out[N_SAMPLES] = {0.0};
   for (int s = 0; s < N_SENSORS; s++) {
@@ -117,10 +139,22 @@ float miso(int t_id, int task, float *flat_delays, ring_buffer &rb) {
 }
 Mat noiseMatrix(Y_RES, X_RES, CV_8UC1);
 
+
+
+// If Audio playback when streaming 
+#if AUDIO
+
 RtAudio audio;
 int play = 1;
 std::thread *producer;
 std::vector<float> audioBuffer(N_SAMPLES * 2, 0.0);
+
+
+/**
+ * @brief Producer for audio on pipeline 
+ *
+ * @param pipeline Pipeline
+ */
 void audio_producer(Pipeline &pipeline) {
 
   ring_buffer &rb = pipeline.getRingBuffer();
@@ -163,6 +197,17 @@ void audio_producer(Pipeline &pipeline) {
   }
 }
 
+/**
+ * @brief Callback for audio stream 
+ *
+ * @param outputBuffer Speaker buffer 
+ * @param inputBuffer empty (Required by RtAudio API)
+ * @param nBufferFrames number of frames to fill 
+ * @param streamTime duration 
+ * @param status status 
+ * @param userData the incoming data
+ * @return OK
+ */
 int audioCallback(void *outputBuffer, void *inputBuffer,
                   unsigned int nBufferFrames, double streamTime,
                   RtAudioStreamStatus status, void *userData) {
@@ -173,7 +218,7 @@ int audioCallback(void *outputBuffer, void *inputBuffer,
     if (!play) {
       *buffer++ = audioBuffer[i];
     } else {
-      cout << "UNderflow" << endl;
+      cout << "Underflow" << endl;
       *buffer++ = 0.0;
     }
   }
@@ -183,6 +228,12 @@ int audioCallback(void *outputBuffer, void *inputBuffer,
   return 0;
 }
 
+/**
+ * @brief Initiate Audio player for Pipeline 
+ *
+ * @param pipeline the pipeline to follow 
+ * @return status
+ */
 int init_audio_playback(Pipeline &pipeline) {
   if (audio.getDeviceCount() < 1) {
     std::cout << "No audio devices found!" << std::endl;
@@ -222,6 +273,8 @@ void stop_audio_playback() {
   audio.closeStream();
 }
 
+#endif
+
 void naive_seeker(Pipeline &pipeline) {
 
   Antenna antenna = create_antenna(Position(0, 0, 0), COLUMNS, ROWS, DISTANCE);
@@ -429,7 +482,9 @@ int main() {
 
   noiseMatrix.setTo(Scalar(0));
 
-  // init_audio_playback(pipeline);
+  #if AUDIO 
+  init_audio_playback(pipeline);
+  #endif
 
 #if CAMERA
   cv::VideoCapture cap(CAMERA_PATH); // Open the default camera (change the
@@ -523,7 +578,10 @@ int main() {
   //
 
   pipeline.disconnect();
-  // stop_audio_playback();
+
+  #if AUDIO
+  stop_audio_playback();
+  #endif
   destroyAllWindows();
-  // worker.join();
+  worker.join();
 }
-- 
GitLab