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 <QStringList> 00019 00020 class text_subtitle_t 00021 { 00022 public: 00023 text_subtitle_t(long start_, long end_) : start(start_), end(end_) {} 00024 text_subtitle_t() : start(0), end(0) {} 00025 text_subtitle_t(const text_subtitle_t &other) : 00026 start(other.start), end(other.end), 00027 textLines(other.textLines) 00028 { 00029 textLines.detach(); 00030 } 00031 00032 public: 00033 uint64_t start; 00034 uint64_t end; 00035 QStringList textLines; 00036 }; 00037 00038 typedef vector<text_subtitle_t> TextSubtitleList; 00039 00040 class TextSubtitles 00041 { 00042 public: 00043 TextSubtitles() : m_frameBasedTiming(false) 00044 { 00045 m_lastReturnedSubtitle.start = 0; 00046 m_lastReturnedSubtitle.end = 0; 00047 } 00048 00049 virtual ~TextSubtitles() {} 00050 00051 bool HasSubtitleChanged(uint64_t timecode) const; 00052 QStringList GetSubtitles(uint64_t timecode) const; 00053 00061 bool IsFrameBasedTiming(void) const 00062 { return m_frameBasedTiming; } 00063 00064 void SetFrameBasedTiming(bool frameBasedTiming) 00065 { m_frameBasedTiming = frameBasedTiming; } 00066 00067 void AddSubtitle(const text_subtitle_t& newSub); 00068 void Clear(void); 00069 00070 uint GetSubtitleCount(void) const 00071 { return m_subtitles.size(); } 00072 00073 void Lock(void) { m_lock.lock(); } 00074 void Unlock(void) { m_lock.unlock(); } 00075 00076 private: 00077 TextSubtitleList m_subtitles; 00078 mutable text_subtitle_t m_lastReturnedSubtitle; 00079 bool m_frameBasedTiming; 00080 QMutex m_lock; 00081 }; 00082 00083 class TextSubtitleParser 00084 { 00085 public: 00086 static bool LoadSubtitles(QString fileName, TextSubtitles &target); 00087 }; 00088 00089 #endif
1.6.3