first commit
This commit is contained in:
94
project/fm_viewer/fav/AVOutput.h
Normal file
94
project/fm_viewer/fav/AVOutput.h
Normal file
@@ -0,0 +1,94 @@
|
||||
/******************************************************************************
|
||||
QtAV: Multimedia framework based on Qt and FFmpeg
|
||||
Copyright (C) 2012-2016 Wang Bin <wbsecg1@gmail.com>
|
||||
|
||||
* This file is part of QtAV
|
||||
|
||||
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 QAV_AVOUTPUT_H
|
||||
#define QAV_AVOUTPUT_H
|
||||
|
||||
#include <QtCore/QByteArray>
|
||||
#include "_fav_constants.h"
|
||||
|
||||
/*!
|
||||
* TODO: add api id(), name(), detail()
|
||||
*/
|
||||
|
||||
namespace FAV {
|
||||
|
||||
class AVDecoder;
|
||||
class AVOutputPrivate;
|
||||
class Filter;
|
||||
class Statistics;
|
||||
class OutputSet;
|
||||
class Q_AV_EXPORT AVOutput
|
||||
{
|
||||
DPTR_DECLARE_PRIVATE(AVOutput)
|
||||
public:
|
||||
AVOutput();
|
||||
virtual ~AVOutput();
|
||||
bool isAvailable() const;
|
||||
|
||||
//void addSource(AVPlayer* player); //call player.addVideoRenderer(this)
|
||||
//void removeSource(AVPlayer* player);
|
||||
//Demuxer thread automatically paused because packets will be full
|
||||
//only pause the renderering, the thread going on. If all outputs are paused, then pause the thread(OutputSet.tryPause)
|
||||
//TODO: what about audio's pause api?
|
||||
void pause(bool p); //processEvents when waiting?
|
||||
bool isPaused() const;
|
||||
QList<Filter*>& filters();
|
||||
/*!
|
||||
* \brief installFilter
|
||||
* Insert a filter at position 'index' of current filter list.
|
||||
* If the filter is already installed, it will move to the correct index.
|
||||
* \param index A nagative index == size() + index. If index >= size(), append at last
|
||||
* \return false if already installed
|
||||
*/
|
||||
bool installFilter(Filter *filter, int index = 0x7fffffff);
|
||||
bool uninstallFilter(Filter *filter);
|
||||
protected:
|
||||
AVOutput(AVOutputPrivate& d);
|
||||
/*
|
||||
* If the pause state is true setted by pause(true), then block the thread and wait for pause state changed, i.e. pause(false)
|
||||
* and return true. Otherwise, return false immediatly.
|
||||
*/
|
||||
Q_DECL_DEPRECATED bool tryPause(); //move to OutputSet
|
||||
//TODO: we need an active set
|
||||
void addOutputSet(OutputSet *set);
|
||||
void removeOutputSet(OutputSet *set);
|
||||
void attach(OutputSet *set); //add this to set
|
||||
void detach(OutputSet *set = 0); //detatch from (all, if 0) output set(s)
|
||||
// for thread safe
|
||||
void hanlePendingTasks();
|
||||
|
||||
DPTR_DECLARE(AVOutput)
|
||||
|
||||
private:
|
||||
// for proxy VideoOutput
|
||||
virtual void setStatistics(Statistics* statistics); //called by friend AVPlayer
|
||||
virtual bool onInstallFilter(Filter *filter, int index);
|
||||
virtual bool onUninstallFilter(Filter *filter);
|
||||
// only called in handlePaintEvent. But filters may change. so required by proxy to update it's filters
|
||||
virtual bool onHanlePendingTasks(); //return true: proxy update filters
|
||||
friend class AVPlayer;
|
||||
friend class OutputSet;
|
||||
friend class VideoOutput;
|
||||
};
|
||||
|
||||
} //namespace FAV
|
||||
#endif //QAV_AVOUTPUT_H
|
||||
Reference in New Issue
Block a user