Miam-Player  0.8.0
A nice music player
SubtitleProcessor.h
Go to the documentation of this file.
1 /******************************************************************************
2  QtAV: Multimedia framework based on Qt and FFmpeg
3  Copyright (C) 2012-2016 Wang Bin <wbsecg1@gmail.com>
4 
5 * This file is part of QtAV (from 2014)
6 
7  This library is free software; you can redistribute it and/or
8  modify it under the terms of the GNU Lesser General Public
9  License as published by the Free Software Foundation; either
10  version 2.1 of the License, or (at your option) any later version.
11 
12  This library is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  Lesser General Public License for more details.
16 
17  You should have received a copy of the GNU Lesser General Public
18  License along with this library; if not, write to the Free Software
19  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 ******************************************************************************/
21 
22 #ifndef QTAV_SUBTITLEPROCESSOR_H
23 #define QTAV_SUBTITLEPROCESSOR_H
24 
25 #include <QtCore/QList>
26 #include <QtGui/QImage>
27 #include <QtAV/QtAV_Global.h>
28 #include <QtAV/Subtitle.h>
29 
30 namespace QtAV {
31 
32 typedef QString SubtitleProcessorId;
34 {
35 public:
37  virtual ~SubtitleProcessor() {}
38  virtual SubtitleProcessorId id() const = 0;
39  virtual QString name() const = 0;
45  virtual QStringList supportedTypes() const = 0;
52  virtual bool process(QIODevice* dev) = 0;
59  virtual bool process(const QString& path);
65  virtual QList<SubtitleFrame> frames() const = 0;
66  virtual bool canRender() const { return false;}
67  // return false if not supported
68  virtual bool processHeader(const QByteArray& codec, const QByteArray& data) {
69  Q_UNUSED(codec);
70  Q_UNUSED(data);
71  return false;
72  }
73  // return timestamp, insert it to Subtitle's internal linkedlist. can be invalid if only support renderering
74  virtual SubtitleFrame processLine(const QByteArray& data, qreal pts = -1, qreal duration = 0) = 0;
75  virtual QString getText(qreal pts) const = 0;
76  // default null image
77  virtual QImage getImage(qreal pts, QRect* boundingRect = 0);
78  virtual SubImageSet getSubImages(qreal pts, QRect* boundingRect = 0);
79  void setFrameSize(int width, int height);
80  QSize frameSize() const;
81  int frameWidth() const;
82  int frameHeight() const;
83 
84  // font properties: libass only now
85  virtual void setFontFile(const QString& file) {Q_UNUSED(file);}
86  virtual void setFontsDir(const QString& dir) {Q_UNUSED(dir);}
87  virtual void setFontFileForced(bool force) {Q_UNUSED(force);}
88 public:
89  static void registerAll();
90  template<class C> static bool Register(SubtitleProcessorId id, const char* name) { return Register(id, create<C>, name);}
91  static SubtitleProcessor* create(SubtitleProcessorId id);
92  static SubtitleProcessor* create(const char* name = "FFmpeg");
98  static SubtitleProcessorId* next(SubtitleProcessorId* id = 0);
99  static const char* name(SubtitleProcessorId id);
100  static SubtitleProcessorId id(const char* name);
101 private:
102  template<class C> static SubtitleProcessor* create() { return new C();}
103  typedef SubtitleProcessor* (*SubtitleProcessorCreator)();
104  static bool Register(SubtitleProcessorId id, SubtitleProcessorCreator, const char *name);
105 protected:
106  // default do nothing
107  virtual void onFrameSizeChanged(int width, int height);
108 private:
109  int m_width, m_height;
110 };
111 
112 } //namespace QtAV
113 #endif // QTAV_SUBTITLEPROCESSOR_H
Definition: Subtitle.h:32
static bool Register(SubtitleProcessorId id, const char *name)
Definition: SubtitleProcessor.h:90
Definition: SubtitleProcessor.h:33
virtual void setFontFileForced(bool force)
Definition: SubtitleProcessor.h:87
#define Q_AV_PRIVATE_EXPORT
Definition: QtAV_Global.h:43
virtual ~SubtitleProcessor()
Definition: SubtitleProcessor.h:37
virtual bool canRender() const
Definition: SubtitleProcessor.h:66
QString SubtitleProcessorId
Definition: SubtitleProcessor.h:32
virtual bool processHeader(const QByteArray &codec, const QByteArray &data)
Definition: SubtitleProcessor.h:68
Definition: SubImage.h:45
virtual void setFontsDir(const QString &dir)
Definition: SubtitleProcessor.h:86
AudioOutput ao; ao.setAudioFormat(fmt); ao.open(); while (has_data) { data = read_data(ao->bufferSize...
Definition: AudioDecoder.h:31
virtual void setFontFile(const QString &file)
Definition: SubtitleProcessor.h:85