Parcourir la source

Remove message capacity

rexim il y a 5 ans
Parent
commit
2b6664e319
6 fichiers modifiés avec 19 ajouts et 16 suppressions
  1. 0 2
      src/vodus.cpp
  2. 2 2
      src/vodus_main.cpp
  3. 14 8
      src/vodus_message.cpp
  4. 2 2
      src/vodus_video_params.cpp
  5. 1 1
      src/vodus_video_params.hpp
  6. 0 1
      video.conf

+ 0 - 2
src/vodus.cpp

@@ -30,8 +30,6 @@ using namespace aids;
 #include <smmintrin.h>
 #endif // VODUS_SSE
 
-const size_t VODUS_MESSAGES_CAPACITY = 1024;
-
 // PLEASE READ THIS --> https://en.wikipedia.org/wiki/Single_Compilation_Unit
 #include "./vodus_error.cpp"
 #include "./vodus_queue.cpp"

+ 2 - 2
src/vodus_main.cpp

@@ -143,9 +143,9 @@ int main(int argc, char *argv[])
         abort();
     }
 
-    Message *messages = new Message[VODUS_MESSAGES_CAPACITY];
+    Message *messages = nullptr;
+    size_t messages_size = parse_messages_from_string_view(input.unwrap, &messages, params);
     defer(delete[] messages);
-    size_t messages_size = parse_messages_from_string_view(input.unwrap, messages, params);
 
     Encoder encoder = {};
     switch (params.output_type) {

+ 14 - 8
src/vodus_message.cpp

@@ -202,19 +202,25 @@ String_View chop_nickname(String_View *input)
     return input->chop_by_delim('>');
 }
 
-size_t parse_messages_from_string_view(String_View input, Message *messages, Video_Params params)
+size_t parse_messages_from_string_view(String_View input, Message **messages, Video_Params params)
 {
+    size_t expected_messages_size = input.count_chars('\n') + 1;
+    if (params.messages_limit.has_value) {
+        expected_messages_size = min(expected_messages_size, params.messages_limit.unwrap);
+    }
+
+    *messages = new Message[expected_messages_size];
+
     size_t messages_size = 0;
-    while (input.count > 0) {
-        assert(messages_size < VODUS_MESSAGES_CAPACITY);
+    while (input.count > 0 && messages_size < expected_messages_size) {
         String_View message = input.chop_by_delim('\n');
-        messages[messages_size].timestamp = (int) chop_timestamp(&message);
-        messages[messages_size].nickname = chop_nickname(&message);
-        messages[messages_size].message = message.trim();
+        (*messages)[messages_size].timestamp = (int) chop_timestamp(&message);
+        (*messages)[messages_size].nickname = chop_nickname(&message);
+        (*messages)[messages_size].message = message.trim();
         messages_size++;
     }
-    messages_size = min(messages_size, params.messages_limit);
-    std::sort(messages, messages + messages_size,
+
+    std::sort(*messages, *messages + messages_size,
               [](const Message &m1, const Message &m2) {
                   return m1.timestamp < m2.timestamp;
               });

+ 2 - 2
src/vodus_video_params.cpp

@@ -50,7 +50,7 @@ Video_Params default_video_params() {
     params.text_color        = {200, 200, 200, 255};
     params.bitrate           = 400'000;
     params.font              = ""_sv;
-    params.messages_limit     = VODUS_MESSAGES_CAPACITY;
+    params.messages_limit    = {};
     return params;
 }
 
@@ -142,7 +142,7 @@ void patch_video_params_from_flag(Video_Params *params, String_View flag, String
     } else if (flag == "font"_sv) {
         params->font = value;
     } else if (flag == "messages_limit"_sv || flag == "messages-limit"_sv) {
-        params->messages_limit = parse_integer_flag<size_t>(flag, value);
+        params->messages_limit = {true, parse_integer_flag<size_t>(flag, value)};
     } else if (flag == "output_type"_sv || flag == "output-type"_sv) {
         if (value == "video"_sv) {
             params->output_type = Output_Type::Video;

+ 1 - 1
src/vodus_video_params.hpp

@@ -19,7 +19,7 @@ struct Video_Params
     Pixel32 text_color;
     int bitrate;
     String_View font;
-    size_t messages_limit;
+    Maybe<size_t> messages_limit;
 };
 
 void print1(FILE *stream, Video_Params params);

+ 0 - 1
video.conf

@@ -3,5 +3,4 @@ font_size = 46
 fps = 30
 width = 704
 height = 576
-messages_limit = 20
 bitrate = 6000000