From d9cb6885ab741ba69a966109cb05e26692143ce0 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Fri, 2 Oct 2020 16:27:59 +0200 Subject: Matrix: add video/regular file upload --- include/FileAnalyzer.hpp | 57 ++++++++++++++++++++++++++++++++++++++++++++++++ include/Path.hpp | 14 +++++++++--- 2 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 include/FileAnalyzer.hpp (limited to 'include') 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 +#include +#include + +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 get_dimensions() const; + std::optional get_duration_seconds() const; + private: + FileAnalyzer(FileAnalyzer&) = delete; + FileAnalyzer& operator=(FileAnalyzer&) = delete; + private: + ContentType content_type; + size_t file_size; + std::optional dimensions; + std::optional duration_seconds; + bool loaded; + }; +} \ No newline at end of file diff --git a/include/Path.hpp b/include/Path.hpp index bdc31c1..95a5d23 100644 --- a/include/Path.hpp +++ b/include/Path.hpp @@ -26,12 +26,20 @@ namespace QuickMedia { return *this; } + const char* filename() const { + size_t index = data.rfind('/'); + if(index == std::string::npos) + return "/"; + return data.c_str() + index + 1; + } + // Returns empty string if no extension const char* ext() const { + size_t slash_index = data.rfind('/'); size_t index = data.rfind('.'); - if(index == std::string::npos) - return ""; - return data.c_str() + index; + if(index != std::string::npos && (slash_index == std::string::npos || index > slash_index)) + return data.c_str() + index; + return ""; } std::string data; -- cgit v1.2.3