Esempio n. 1
0
    bool context_linux::update()
    {
        XEvent event;

        do {
            XNextEvent(dpy, &event);
            switch (event.type) {
                case KeyPress:
                {
                    KeySym keysym;
                    XKeyEvent *kevent;
                    char buffer[1];
                    /* It is necessary to convert the keycode to a
                     * keysym before checking if it is an escape */
                    kevent = (XKeyEvent *) & event;
                    if ((XLookupString((XKeyEvent *) & event, buffer, 1, &keysym, NULL) == 1)
                            && (keysym == (KeySym) XK_Escape))
                        exit(0);
                    break;
                }
                case ButtonPress:
                    XButtonEvent *buttonevt;
                    buttonevt = (XButtonEvent *) & event;
                    break;
                case ConfigureNotify:
                    glViewport(0, 0, event.xconfigure.width,
                            event.xconfigure.height);
                    /* fall through... */
                case Expose:
                    break;
                default:
                    break;
            }
        } while (XPending(dpy)); /* loop to compress events */

        // update animation state
        // spawn new layers
        // go through layers and cleanup

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        
        
        if (save_to_video) appendVideoFrame();
        glXSwapBuffers(dpy, win);

        return true;
    }
Esempio n. 2
0
void UBQuickTimeFile::run()
{
    EnterMoviesOnThread(kCSAcceptThreadSafeComponentsOnlyMode);

    mSouldStopCompression = false;
    mPendingFrames = 0;

    createCompressionSession();

    mCompressionSessionRunning = true;
    emit compressionSessionStarted();

    while(!mSouldStopCompression)
    {
        frameQueueMutex.lock();
        //qDebug() << "run .... wait" << QTime::currentTime();

        frameBufferNotEmpty.wait(&UBQuickTimeFile::frameQueueMutex);

        //qDebug() << "awakend ..." << QTime::currentTime();
        if (!frameQueue.isEmpty())
        {
            QQueue<VideoFrame> localQueue = frameQueue;
            frameQueue.clear();

            frameQueueMutex.unlock();

            while (!localQueue.isEmpty())
            {
                VideoFrame frame = localQueue.dequeue();
                appendVideoFrame(frame.buffer, frame.timestamp);
            }
        }
        else
        {
            frameQueueMutex.unlock();
        }
    }

    flushPendingFrames();
}