00001 // -*- Mode: c++ -*- 00007 #ifndef TEXT_SUBTITLE_PARSER_H 00008 #define TEXT_SUBTITLE_PARSER_H 00009 00010 // POSIX headers 00011 #include <stdint.h> 00012 00013 // C++ headers 00014 #include <vector> 00015 using namespace std; 00016 00017 // Qt headers 00018 #include <qstring.h> 00019 #include <qstringlist.h> 00020 #include <qdeepcopy.h> 00021 00022 class text_subtitle_t 00023 { 00024 public: 00025 text_subtitle_t(long start_, long end_) : start(start_), end(end_) {} 00026 text_subtitle_t() : start(0), end(0) {} 00027 text_subtitle_t(const text_subtitle_t &other) : 00028 start(other.start), end(other.end), 00029 textLines(QDeepCopy<QStringList>(other.textLines)) {} 00030 00031 public: 00032 uint64_t start; 00033 uint64_t end; 00034 QStringList textLines; 00035 }; 00036 00037 typedef vector<text_subtitle_t> TextSubtitleList; 00038 00039 class TextSubtitles 00040 { 00041 public: 00042 TextSubtitles() : m_frameBasedTiming(false) {} 00043 00044 virtual ~TextSubtitles() {} 00045 00046 bool HasSubtitleChanged(uint64_t timecode) const; 00047 QStringList GetSubtitles(uint64_t timecode) const; 00048 00056 bool IsFrameBasedTiming(void) const 00057 { return m_frameBasedTiming; } 00058 00059 void SetFrameBasedTiming(bool frameBasedTiming) 00060 { m_frameBasedTiming = frameBasedTiming; } 00061 00062 void AddSubtitle(const text_subtitle_t& newSub); 00063 void Clear(void); 00064 00065 uint GetSubtitleCount(void) const 00066 { return m_subtitles.size(); } 00067 00068 private: 00069 TextSubtitleList m_subtitles; 00070 mutable text_subtitle_t m_lastReturnedSubtitle; 00071 bool m_frameBasedTiming; 00072 }; 00073 00074 class TextSubtitleParser 00075 { 00076 public: 00077 static bool LoadSubtitles(QString fileName, TextSubtitles &target); 00078 }; 00079 00080 #endif
1.5.5