The SDL forums have moved to discourse.libsdl.org.
This is just a read-only archive of the previous forums, to keep old links working.


SDL Forum Index
SDL
Simple Directmedia Layer Forums
rendering text over video
EStefano


Joined: 07 May 2016
Posts: 4
Hello folks,

I've got a small SDL2-based program which renders YUV video at up to 30 frames per second, which is working smoothly. I am now trying to render some text info over the video, like frame number or video quality figures (PSNR or whatever). I've followed the Lazy Foo production tutorial on TTF (http://lazyfoo.net/SDL_tutorials/lesson07/) and I've managed to make it work, but the text is blinking and seem it can't keep up with the video. I'm not sure if I'm doing something wrong or is just a limitation.

The skeleton of the code is the following:

Code:


    // the renderer
    if (NULL == (renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_PRESENTVSYNC|SDL_RENDERER_ACCELERATED)))
        error(ESDL, "Failed to create renderer: %s\n", SDL_GetError());

    // the video
    if (NULL == (video = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_IYUV, SDL_TEXTUREACCESS_STREAMING, p->width, p->height)))
        error(ESDL, "Failed to create texture: %s\n", SDL_GetError());

    // the text
    surface = TTF_RenderText_Solid(font, "blended", color);
    text = SDL_CreateTextureFromSurface(renderer, surface);


    for ( frame = 0; frame <= last_frame; frame++)
    {
        ...

        if (display_info)
        {
           // render text
           SDL_RenderCopy(renderer, text, NULL, &text_rect);
           SDL_RenderPresent(renderer);
       }

        ...

        // render video
        SDL_RenderCopy(renderer, video, NULL, &video_rect);
        SDL_RenderPresent(renderer);

       ...
     }


Any suggestions?

Thanks
Rang


Joined: 05 Jun 2015
Posts: 13
I think you must do something like this steps:
1) Clear (or not, if you fill all target rect) rendering target.
2) Render video frame.
3) Render text (info or what you want).

Maybe you clear render target after rendering text? Or variable "display_info" changes its value on different frames? That's why it blinking.
EStefano


Joined: 07 May 2016
Posts: 4
Indeed. This solved the blinking

Code:


        ...

        // render video
        SDL_RenderCopy(renderer, video, NULL, &video_rect);
 
        if (display_info)
        {
           // render text
           SDL_RenderCopy(renderer, text, NULL, &text_rect);
       }

       SDL_RenderPresent(renderer);


Thanks Rang