first commit
This commit is contained in:
114
project/fm_viewer/fav/SubtitleProcessor.h
Normal file
114
project/fm_viewer/fav/SubtitleProcessor.h
Normal file
@@ -0,0 +1,114 @@
|
||||
/******************************************************************************
|
||||
QtAV: Multimedia framework based on Qt and FFmpeg
|
||||
Copyright (C) 2012-2016 Wang Bin <wbsecg1@gmail.com>
|
||||
|
||||
* This file is part of QtAV (from 2014)
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef QTAV_SUBTITLEPROCESSOR_H
|
||||
#define QTAV_SUBTITLEPROCESSOR_H
|
||||
|
||||
#include <QtCore/QList>
|
||||
#include <QtGui/QImage>
|
||||
#include "_fav_constants.h"
|
||||
#include "Subtitle.h>
|
||||
|
||||
namespace FAV {
|
||||
#if !(DO_NOT_USE_SUBTITLE)
|
||||
typedef QString SubtitleProcessorId;
|
||||
class Q_AV_PRIVATE_EXPORT SubtitleProcessor
|
||||
{
|
||||
public:
|
||||
SubtitleProcessor();
|
||||
virtual ~SubtitleProcessor() {}
|
||||
virtual SubtitleProcessorId id() const = 0;
|
||||
virtual QString name() const = 0;
|
||||
/*!
|
||||
* \brief supportedTypes
|
||||
* \return a list of supported suffixes. e.g. [ "ass", "ssa", "srt" ]
|
||||
* used to find subtitle files with given suffixes
|
||||
*/
|
||||
virtual QStringList supportedTypes() const = 0;
|
||||
/*!
|
||||
* \brief process
|
||||
* process subtitle from QIODevice.
|
||||
* \param dev dev is open and you don't have to close it
|
||||
* \return false if failed or does not supports iodevice, e.g. does not support sequential device
|
||||
*/
|
||||
virtual bool process(QIODevice* dev) = 0;
|
||||
/*!
|
||||
* \brief process
|
||||
* default behavior is calling process(QFile*)
|
||||
* \param path
|
||||
* \return false if failed or does not support file
|
||||
*/
|
||||
virtual bool process(const QString& path);
|
||||
/*!
|
||||
* \brief timestamps
|
||||
* call this after process(). SubtitleFrame.text must be set
|
||||
* \return
|
||||
*/
|
||||
|
||||
virtual QList<SubtitleFrame> frames() const = 0;
|
||||
virtual bool canRender() const { return false;}
|
||||
// return false if not supported
|
||||
virtual bool processHeader(const QByteArray& codec, const QByteArray& data) {
|
||||
Q_UNUSED(codec);
|
||||
Q_UNUSED(data);
|
||||
return false;
|
||||
}
|
||||
// return timestamp, insert it to Subtitle's internal linkedlist. can be invalid if only support renderering
|
||||
virtual SubtitleFrame processLine(const QByteArray& data, qreal pts = -1, qreal duration = 0) = 0;
|
||||
virtual QString getText(qreal pts) const = 0;
|
||||
// default null image
|
||||
virtual QImage getImage(qreal pts, QRect* boundingRect = 0);
|
||||
virtual SubImageSet getSubImages(qreal pts, QRect* boundingRect = 0);
|
||||
void setFrameSize(int width, int height);
|
||||
QSize frameSize() const;
|
||||
int frameWidth() const;
|
||||
int frameHeight() const;
|
||||
|
||||
// font properties: libass only now
|
||||
virtual void setFontFile(const QString& file) {Q_UNUSED(file);}
|
||||
virtual void setFontsDir(const QString& dir) {Q_UNUSED(dir);}
|
||||
virtual void setFontFileForced(bool force) {Q_UNUSED(force);}
|
||||
public:
|
||||
static void registerAll();
|
||||
template<class C> static bool Register(SubtitleProcessorId id, const char* name) { return Register(id, create<C>, name);}
|
||||
static SubtitleProcessor* create(SubtitleProcessorId id);
|
||||
static SubtitleProcessor* create(const char* name = "FFmpeg");
|
||||
/*!
|
||||
* \brief next
|
||||
* \param id NULL to get the first id address
|
||||
* \return address of id or NULL if not found/end
|
||||
*/
|
||||
static SubtitleProcessorId* next(SubtitleProcessorId* id = 0);
|
||||
static const char* name(SubtitleProcessorId id);
|
||||
static SubtitleProcessorId id(const char* name);
|
||||
private:
|
||||
template<class C> static SubtitleProcessor* create() { return new C();}
|
||||
typedef SubtitleProcessor* (*SubtitleProcessorCreator)();
|
||||
static bool Register(SubtitleProcessorId id, SubtitleProcessorCreator, const char *name);
|
||||
protected:
|
||||
// default do nothing
|
||||
virtual void onFrameSizeChanged(int width, int height);
|
||||
private:
|
||||
int m_width, m_height;
|
||||
};
|
||||
#endif // #if !(DO_NOT_USE_SUBTITLE)
|
||||
} //namespace FAV
|
||||
#endif // QTAV_SUBTITLEPROCESSOR_H
|
||||
Reference in New Issue
Block a user