]> git.sesse.net Git - nageru/commitdiff
Clean up the surface stuff in Mixer, now that we have Qt/epoxy interop working.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 4 Oct 2015 22:52:23 +0000 (00:52 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 4 Oct 2015 22:52:23 +0000 (00:52 +0200)
glwidget.cpp
mixer.cpp
mixer.h

index b754ddcf29c68f55ca2c912b92967927a130a75d..8949d089fb7b9a2ef7e6cea4dfc8c2d7f24094bc 100644 (file)
@@ -38,12 +38,7 @@ void GLWidget::initializeGL()
        printf("egl context=%p\n", eglGetCurrentContext());
        //printf("threads: %p %p\n", QThread::currentThread(), qGuiApp->thread());
 
-       QSurfaceFormat fmt = QGLFormat::toSurfaceFormat(format());
-       QSurface *surface = create_surface(fmt);
-       QSurface *surface2 = create_surface(fmt);
-       QSurface *surface3 = create_surface(fmt);
-       QSurface *surface4 = create_surface(fmt);
-       global_mixer = new Mixer(surface, surface2, surface3, surface4);
+       global_mixer = new Mixer(QGLFormat::toSurfaceFormat(format()));
        global_mixer->set_frame_ready_fallback([this]{
                QMetaObject::invokeMethod(this, "update", Qt::AutoConnection);
        });
index 83f0b1540a9bfb84f2d8825fe0fd5157eaca9f79..a68114b767d781d96f3bf4be164134532a0e8fdf 100644 (file)
--- a/mixer.cpp
+++ b/mixer.cpp
@@ -50,8 +50,9 @@ using namespace std::placeholders;
 
 Mixer *global_mixer = nullptr;
 
-Mixer::Mixer(QSurface *surface1, QSurface *surface2, QSurface *surface3, QSurface *surface4)
-       : surface1(surface1), surface2(surface2), surface3(surface3), surface4(surface4)
+Mixer::Mixer(const QSurfaceFormat &format)
+       : mixer_surface(create_surface(format)),
+         h264_encoder_surface(create_surface(format))
 {
        CHECK(init_movit(MOVIT_SHADER_DIR, MOVIT_DEBUG_OFF));
        check_error();
@@ -99,7 +100,7 @@ Mixer::Mixer(QSurface *surface1, QSurface *surface2, QSurface *surface3, QSurfac
        chain->set_output_origin(OUTPUT_ORIGIN_TOP_LEFT);
        chain->finalize();
 
-       h264_encoder.reset(new H264Encoder(surface2, WIDTH, HEIGHT, "test.mp4"));
+       h264_encoder.reset(new H264Encoder(h264_encoder_surface, WIDTH, HEIGHT, "test.mp4"));
 
        printf("Configuring first card...\n");
        cards[0].usb = new BMUSBCapture(0x1edb, 0xbd3b);  // 0xbd4f
@@ -107,6 +108,10 @@ Mixer::Mixer(QSurface *surface1, QSurface *surface2, QSurface *surface3, QSurfac
        cards[0].frame_allocator.reset(new PBOFrameAllocator(1280 * 750 * 2 + 44));
        cards[0].usb->set_video_frame_allocator(cards[0].frame_allocator.get());
        cards[0].usb->configure_card();
+       cards[0].surface = create_surface(format);
+#if NUM_CARDS == 2
+       cards[1].surface = create_surface(format);
+#endif
 
        if (NUM_CARDS == 2) {
                printf("Configuring second card...\n");
@@ -266,14 +271,9 @@ void Mixer::place_rectangle(Effect *resample_effect, Effect *padding_effect, flo
        
 void Mixer::thread_func()
 {
-       cards[0].surface = surface3;
-#if NUM_CARDS == 2
-       cards[1].surface = surface4;
-#endif
-
        eglBindAPI(EGL_OPENGL_API);
        QOpenGLContext *context = create_context();
-       if (!make_current(context, surface1)) {
+       if (!make_current(context, mixer_surface)) {
                printf("oops\n");
                exit(1);
        }
diff --git a/mixer.h b/mixer.h
index 901b269cf6a5a47f4b46192df049d559545dcb23..a04bafe6e2753559f2f483e6f9750d0d9a0d5445 100644 (file)
--- a/mixer.h
+++ b/mixer.h
@@ -19,13 +19,12 @@ namespace movit {
 class YCbCrInput;
 }
 class QOpenGLContext;
-class QSurface;
+class QSurfaceFormat;
 
 class Mixer {
 public:
-       // The surfaces are used for offscreen destinations for OpenGL contexts we need.
-       // TODO: Figure out something slightly more generic.
-       Mixer(QSurface *surface1, QSurface *surface2, QSurface *surface3, QSurface *surface4);
+       // The surface format is used for offscreen destinations for OpenGL contexts we need.
+       Mixer(const QSurfaceFormat &format);
        ~Mixer();
        void start();
        void quit();
@@ -55,7 +54,7 @@ private:
        void thread_func();
        void subsample_chroma(GLuint src_tex, GLuint dst_dst);
 
-       QSurface *surface1, *surface2, *surface3, *surface4;
+       QSurface *mixer_surface, *h264_encoder_surface;
        std::unique_ptr<movit::EffectChain> chain;
        movit::ResourcePool *resource_pool;  // Owned by <chain>.
        GLuint cbcr_program_num;  // Owned by <resource_pool>.