]> git.sesse.net Git - mlt/commitdiff
Use the new ResourcePool Movit functionality.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Fri, 17 Jan 2014 21:34:14 +0000 (22:34 +0100)
committerDan Dennedy <dan@dennedy.org>
Sun, 26 Jan 2014 19:59:31 +0000 (11:59 -0800)
src/modules/opengl/filter_glsl_manager.cpp
src/modules/opengl/filter_glsl_manager.h
src/modules/opengl/filter_movit_convert.cpp
src/modules/opengl/mlt_movit_input.cpp
src/modules/opengl/mlt_movit_input.h

index e9924de0b4da55bc1c0172768ec7b3c51be49d5d..19831177ecec5880b9c2a83d39d326766f25716c 100644 (file)
@@ -24,6 +24,7 @@
 #include <movit/init.h>
 #include <movit/util.h>
 #include <movit/effect_chain.h>
+#include <movit/resource_pool.h>
 #include "mlt_movit_input.h"
 #include "mlt_flip_effect.h"
 #include <mlt++/MltEvent.h>
@@ -50,6 +51,7 @@ void dec_ref_and_delete(GlslManager *p)
 
 GlslManager::GlslManager()
        : Mlt::Filter( mlt_filter_new() )
+       , resource_pool(new ResourcePool())
        , pbo(0)
        , initEvent(0)
        , closeEvent(0)
@@ -85,6 +87,7 @@ GlslManager::~GlslManager()
                GLsync sync = (GLsync) syncs_to_delete.pop_front();
                glDeleteSync( sync );
        }
+       delete resource_pool;
 }
 
 void GlslManager::add_ref(mlt_properties properties)
index 496e1922688bce6ddf4cfe13bdb550064b279865..673c52c96973756043d7eb1951dc021a203758f4 100644 (file)
@@ -69,6 +69,7 @@ typedef struct glsl_pbo_s *glsl_pbo;
 class Effect;
 class EffectChain;
 class MltInput;
+class ResourcePool;
 
 struct GlslChain
 {
@@ -99,6 +100,8 @@ public:
        glsl_pbo get_pbo(int size);
        void cleanupContext();
 
+       ResourcePool* get_resource_pool() { return resource_pool; }
+
        static void set_chain(mlt_service, GlslChain*);
        static GlslChain* get_chain(mlt_service);
 
@@ -127,6 +130,7 @@ private:
        static void onClose( mlt_properties owner, GlslManager* filter );
        static void onServiceChanged( mlt_properties owner, mlt_service service );
        static void onPropertyChanged( mlt_properties owner, mlt_service service, const char* property );
+       ResourcePool* resource_pool;
        Mlt::Deque fbo_list;
        Mlt::Deque texture_list;
        Mlt::Deque syncs_to_delete;
index dab3eae41dca83887bb4be161939091be89b7715..8595173e8d5a3702822f64c1d749795b6240ebb5 100644 (file)
@@ -213,7 +213,11 @@ static void finalize_movit_chain( mlt_service leaf_service, mlt_frame frame )
                mlt_log_debug( leaf_service, "=== CREATING NEW CHAIN (old chain=%p, leaf=%p, fingerprint=%s) ===\n", chain, leaf_service, new_fingerprint.c_str() );
                mlt_profile profile = mlt_service_profile( leaf_service );
                chain = new GlslChain;
-               chain->effect_chain = new EffectChain( profile->display_aspect_num, profile->display_aspect_den );
+               chain->effect_chain = new EffectChain(
+                       profile->display_aspect_num,
+                       profile->display_aspect_den,
+                       GlslManager::get_instance()->get_resource_pool()
+               );
                chain->fingerprint = new_fingerprint;
 
                build_movit_chain( leaf_service, frame, chain );
index 4339ac30e88a3f4db3e2b19d47244f057bdd2339..a75fe1ffdd5798ca422e590452083de100050515 100644 (file)
@@ -26,6 +26,7 @@ MltInput::MltInput(unsigned width, unsigned height)
        , needs_mipmaps(false)
        , input(0)
        , isRGB(true)
+       , m_chain(NULL)
 {
        register_int("output_linear_gamma", &output_linear_gamma);
        register_int("needs_mipmaps", &needs_mipmaps);
@@ -62,6 +63,7 @@ void MltInput::finalize()
        bool ok = input->set_int("output_linear_gamma", output_linear_gamma);
        ok |= input->set_int("needs_mipmaps", needs_mipmaps);
        assert(ok);
+       input->inform_added(m_chain);
        input->finalize();
 }
 
index bbeac078af3ffa67aa4f388f7045a066c7e180c2..d7f64c55b2bbcdcb73f41dddba3a9524909a1cc6 100644 (file)
@@ -35,6 +35,7 @@ public:
        Effect::AlphaHandling alpha_handling() const;
        std::string output_fragment_shader();
        void set_gl_state(GLuint glsl_program_num, const std::string& prefix, unsigned *sampler_num);
+       void inform_added(EffectChain *chain) { m_chain = chain; }
 
        // Input ovverrides
        void finalize();
@@ -55,6 +56,7 @@ private:
        Input *input;
        bool isRGB;
        YCbCrFormat m_ycbcr_format;
+       EffectChain *m_chain;
 };
 
 #endif // MLT_MOVIT_INPUT_H