Forum > Graphics

LibVLC , SDL

(1/3) > >>

carmeloconny:
Ciao a tutti. Qualcuno di voi sa se è stato tradotto in Pascal, questo esempio di codice scritto in C, di utilizzo delle libreria SDL nel LibVLC ?

https://wiki.videolan.org/LibVLC_SampleCode_SDL/

Io ho provato a scrivere sul forum ufficiale della VLC senza risposta. In rete non ho trovato un esempio completo scritto in Pascal.
Sto utilizzando PasLibVLC che è la libreria LibVLC tradotta in pascal per lazarus e delphi con due componenti grafici. Purtroppo ho bisogno di fare il rendering del video riprodotto in un formato diverso dall'originale. Nell'esempio del link sopra, è descritto come fare, solo che è in linguaggio C, ho provato a tradurlo ma senza risultati utili.

nomorelogic:
il problema è quindi fare la conversione o la riproduzione con le librerie di vlc?

carmeloconny:
entrambi. Leggere un file video, convertirlo ad una risoluzione fissa es. 720x576 e riprodurlo. SDL, se non ho capito male serve a sfruttare la GPU anziché la CPU.

nomorelogic:
in passato (un paio di anni fa) ho usato con successo questa libreria
https://sourceforge.net/projects/paslibvlc/

controllando h ovisto che l'ultimo aggiornamento è a luglio 2014: ti consiglio di dargli un'occhiata

carmeloconny:
Grz, in effetti sto usando questa libreria:

http://prog.olsztyn.pl/paslibvlc/

non è altro che la traduzione in pascal con due componenti visual di LibVLC. Purtroppo non sono implementate tutte le funzioni, in particolare a me servono le seguiti:
libvlc_video_set_format      e       libvlc_video_set_callbacks 

https://www.videolan.org/developers/vlc/doc/doxygen/html/group__libvlc__media__player.html#ga6518394e05d458731c11c86edb23f4cc

Nell'esempio che ho citato nel primo post:
https://wiki.videolan.org/LibVLC_SampleCode_SDL/
mi sono perso nel tradurre la parte di codice dove si dichiarano le seguenti funzioni:

--- Citazione ---static void *lock(void *data, void **p_pixels) {

    struct context *c = (context *)data;

    int pitch;
    SDL_LockMutex(c->mutex);
    SDL_LockTexture(c->texture, NULL, p_pixels, &pitch);

    return NULL; // Picture identifier, not needed here.
}

--- Termina citazione ---

-----------

--- Citazione ---static void unlock(void *data, void *id, void *const *p_pixels) {

    struct context *c = (context *)data;

    uint16_t *pixels = (uint16_t *)*p_pixels;

    // We can also render stuff.
    int x, y;
    for(y = 10; y < 40; y++) {
        for(x = 10; x < 40; x++) {
            if(x < 13 || y < 13 || x > 36 || y > 36) {
                pixels[y * VIDEOWIDTH + x] = 0xffff;
            } else {
                // RV16 = 5+6+5 pixels per color, BGR.
                pixels[y * VIDEOWIDTH + x] = 0x02ff;
            }
        }
    }

    SDL_UnlockTexture(c->texture);
    SDL_UnlockMutex(c->mutex);
}

--- Termina citazione ---
-----------

--- Citazione ---static void display(void *data, void *id) {

    struct context *c = (context *)data;

    SDL_Rect rect;
    rect.w = VIDEOWIDTH;
    rect.h = VIDEOHEIGHT;
    rect.x = (int)((1. + .5 * sin(0.03 * c->n)) * (WIDTH - VIDEOWIDTH) / 2);
    rect.y = (int)((1. + .5 * cos(0.03 * c->n)) * (HEIGHT - VIDEOHEIGHT) / 2);

    SDL_SetRenderDrawColor(c->renderer, 0, 80, 0, 255);
    SDL_RenderClear(c->renderer);
    SDL_RenderCopy(c->renderer, c->texture, NULL, &rect);
    SDL_RenderPresent(c->renderer);
}

--- Termina citazione ---
Ho provato a tradurle in pascal, ma sbaglio sicuramente nella dichiarazione delle variabili.
Se qualcuno mi traducesse queste funzioni, penso di potercela fare ad andare avanti.

Navigazione

[0] Indice dei post

[#] Pagina successiva

Vai alla versione completa