1 /** 2 mkvpropedit -- utility for editing properties of existing Matroska files 3 4 Distributed under the GPL v2 5 see the file COPYING for details 6 or visit https://www.gnu.org/licenses/old-licenses/gpl-2.0.html 7 8 \file 9 10 \author Written by Moritz Bunkus <moritz@bunkus.org>. 11 */ 12 13 #pragma once 14 15 #include "common/common_pch.h" 16 17 #include <ebml/EbmlElement.h> 18 #include <matroska/KaxInfo.h> 19 #include <matroska/KaxInfoData.h> 20 #include <matroska/KaxTracks.h> 21 #include <matroska/KaxTrackAudio.h> 22 #include <matroska/KaxTrackEntryData.h> 23 #include <matroska/KaxTrackVideo.h> 24 25 #include "common/ebml.h" 26 #include "common/translation.h" 27 28 class property_element_c { 29 public: 30 enum ebml_type_e { EBMLT_SKIP, EBMLT_BOOL, EBMLT_BINARY, EBMLT_FLOAT, EBMLT_INT, EBMLT_UINT, EBMLT_STRING, EBMLT_USTRING, EBMLT_DATE }; 31 32 std::string m_name; 33 translatable_string_c m_title, m_description; 34 35 EbmlCallbacks const *m_callbacks, *m_sub_master_callbacks, *m_sub_sub_master_callbacks, *m_sub_sub_sub_master_callbacks; 36 37 unsigned int m_bit_length; 38 ebml_type_e m_type; 39 40 property_element_c(); 41 property_element_c(std::string name, EbmlCallbacks const &callbacks, translatable_string_c title, translatable_string_c description, 42 EbmlCallbacks const &sub_master_callbacks, EbmlCallbacks const *sub_sub_master_callbacks = nullptr, EbmlCallbacks const *sub_sub_sub_master_callbacks = nullptr); 43 44 bool is_valid() const; 45 46 private: 47 void derive_type(); 48 49 private: // static 50 static std::map<uint32_t, std::vector<property_element_c> > s_properties; 51 static std::map<uint32_t, std::vector<property_element_c> > s_composed_properties; 52 53 public: // static 54 static void init_tables(); 55 static std::vector<property_element_c> &get_table_for(const EbmlCallbacks &master_callbacks, const EbmlCallbacks *sub_master_callbacks = nullptr, bool full_table = false); 56 }; 57 using property_element_cptr = std::shared_ptr<property_element_c>; 58