aboutsummaryrefslogtreecommitdiff
path: root/include/FileAnalyzer.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/FileAnalyzer.hpp')
-rw-r--r--include/FileAnalyzer.hpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/include/FileAnalyzer.hpp b/include/FileAnalyzer.hpp
new file mode 100644
index 0000000..be0cc25
--- /dev/null
+++ b/include/FileAnalyzer.hpp
@@ -0,0 +1,57 @@
+#pragma once
+
+#include <stddef.h>
+#include <optional>
+#include <string>
+
+namespace QuickMedia {
+ struct Dimensions {
+ int width;
+ int height;
+ };
+
+ enum class ContentType {
+ UNKNOWN,
+ VIDEO_AVI,
+ VIDEO_MP4,
+ VIDEO_WEBM,
+ AUDIO_BASIC,
+ AUDIO_AIFF,
+ AUDIO_MPEG,
+ AUDIO_MIDI,
+ AUDIO_WAVE,
+ AUDIO_FLAC,
+ AUDIO_OPUS,
+ IMAGE_JPEG,
+ IMAGE_PNG,
+ IMAGE_GIF,
+ IMAGE_BMP,
+ IMAGE_WEBP
+ };
+
+ bool is_content_type_video(ContentType content_type);
+ bool is_content_type_audio(ContentType content_type);
+ bool is_content_type_image(ContentType content_type);
+ const char* content_type_to_string(ContentType content_type);
+
+ bool video_get_first_frame(const char *filepath, const char *destination_path);
+
+ class FileAnalyzer {
+ public:
+ FileAnalyzer();
+ bool load_file(const char *filepath);
+ ContentType get_content_type() const;
+ size_t get_file_size() const;
+ std::optional<Dimensions> get_dimensions() const;
+ std::optional<double> get_duration_seconds() const;
+ private:
+ FileAnalyzer(FileAnalyzer&) = delete;
+ FileAnalyzer& operator=(FileAnalyzer&) = delete;
+ private:
+ ContentType content_type;
+ size_t file_size;
+ std::optional<Dimensions> dimensions;
+ std::optional<double> duration_seconds;
+ bool loaded;
+ };
+} \ No newline at end of file