From ef16ce0f0ff59da147eaee14a7570f924eff5cb1 Mon Sep 17 00:00:00 2001 From: wang-bin Date: Fri, 27 Sep 2013 18:49:44 +0800 Subject: [PATCH] filter.installTo implemention --- src/Filter.cpp | 19 +++++++++++++++++++ src/FilterManager.cpp | 4 ++-- src/QtAV/FilterManager.h | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/Filter.cpp b/src/Filter.cpp index 68960cf5..9e80ea2b 100644 --- a/src/Filter.cpp +++ b/src/Filter.cpp @@ -23,6 +23,8 @@ #include "private/Filter_p.h" #include "QtAV/Statistics.h" #include "QtAV/FilterManager.h" +#include "QtAV/AVOutput.h" +#include "QtAV/AVPlayer.h" namespace QtAV { @@ -96,4 +98,21 @@ FilterContext::Type Filter::contextType() const return FilterContext::None; } +/*TODO: move to AVOutput.cpp to reduce dependency?*/ +bool Filter::installTo(AVOutput *output) +{ + return output->installFilter(this); +} + +/*TODO: move to AVPlayer.cpp to reduce dependency?*/ +bool Filter::installTo(AVPlayer *player, int thread) +{ + return player->installFilter(this, thread); +} + +bool Filter::uninstall() +{ + return FilterManager::instance().uninstallFilter(this); +} + } //namespace QtAV diff --git a/src/FilterManager.cpp b/src/FilterManager.cpp index 514b7e75..12d3877e 100644 --- a/src/FilterManager.cpp +++ b/src/FilterManager.cpp @@ -130,7 +130,7 @@ bool FilterManager::uninstallFilter(Filter *filter) * because the filter will never used in old target */ - d.filter_out_map.erase(it); + d.filter_out_map.erase(it); //use unregister()? out->uninstallFilter(filter); //post an uninstall task to active player's AVThread return true; } @@ -142,7 +142,7 @@ bool FilterManager::uninstallFilter(Filter *filter) * because the filter will never used in old target */ - d.filter_player_map.erase(it2); + d.filter_player_map.erase(it2); //use unregister()? player->uninstallFilter(filter); //post an uninstall task to active player's AVThread return true; } diff --git a/src/QtAV/FilterManager.h b/src/QtAV/FilterManager.h index d315ea0f..15dbe819 100644 --- a/src/QtAV/FilterManager.h +++ b/src/QtAV/FilterManager.h @@ -43,6 +43,7 @@ public: bool unregisterFilter(Filter *filter); // async. release filter until filter is removed from it's target.filters bool releaseFilter(Filter *filter); + bool uninstallFilter(Filter *filter); signals: // invoked in UninstallFilterTask in AVThread. void uninstallInTargetDone(Filter *filter); @@ -53,7 +54,6 @@ private slots: private: //convenient function to uninstall the filter. used by releaseFilter - bool uninstallFilter(Filter *filter); bool releaseFilterNow(Filter *filter); FilterManager(); ~FilterManager();