IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Piloter FFMpeg avec un Gamepad sur Raspberry-Pi


Sujet :

C

  1. #1
    Membre expert

    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 3 583
    Points
    3 583
    Par défaut Piloter FFMpeg avec un Gamepad sur Raspberry-Pi
    Bonjour à tous,

    J'ai récupéré le GIT du FFMpeg et j'ai tenté d'ajouter un pilotage du Gamepad, mais sans succès. Le code compile très bien, et s'exécute sur RPI sans problème, mais le gamepad ne provoque aucun évènement.

    Le lien vers le Github : https://github.com/FFmpeg/FFmpeg

    Si il y avait moyen de pilote la lecture du média avec le gamepad, ce serait cool....
    "La révolution informatique fait gagner un temps fou aux hommes, mais ils le passent avec leur ordinateur !"

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Qu'est-ce qui bloque ?
    Arrives-tu à lire le gamepad ? Reçois-tu des évènements ?
    Sais-tu utiliser l'API FFMpeg ? Qu'est-ce qui t'empêche de brancher les évènements d'un gamepad sur cette API ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre expert

    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 3 583
    Points
    3 583
    Par défaut
    J'ai modifié le code source du fichier ffplay.c (dossier fftools), en y intégrant dans la méthode "event_loop" l'API de la SDL pour la gestion des gamepads. Mais le gamepads ne réagit pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    /* handle an event sent by the GUI */
    static void event_loop(VideoState *cur_stream)
    {
        int action;
        SDL_GameController *ControllerHandles[2];
        int MaxJoysticks = SDL_NumJoysticks();
        int ControllerIndex = 0;
        for(int JoystickIndex=0; JoystickIndex < MaxJoysticks; ++JoystickIndex)
        {
            if (!SDL_IsGameController(JoystickIndex))
            {
                continue;
            }
            if (ControllerIndex >= 2)
            {
                break;
            }
            ControllerHandles[ControllerIndex] = SDL_GameControllerOpen(JoystickIndex);
            ControllerIndex++;
        }    
     
        SDL_Event event;
        double incr, pos, frac;
     
        for (;;) {
            double x;
            refresh_loop_wait_event(cur_stream, &event);
            SDL_GameControllerUpdate();
            action = 0;
     
            /**
             * Pour le controller 
             */
            for (int ControllerIndex = 0;
                 ControllerIndex < 1;
                 ++ControllerIndex)
            {
                if(ControllerHandles[ControllerIndex] != 0 && SDL_GameControllerGetAttached(ControllerHandles[ControllerIndex]))
                {
                    // NOTE: We have a controller with index ControllerIndex.
                    Uint8 Up = SDL_GameControllerGetButton(ControllerHandles[ControllerIndex], SDL_CONTROLLER_BUTTON_DPAD_UP);
                    Uint8 Down = SDL_GameControllerGetButton(ControllerHandles[ControllerIndex], SDL_CONTROLLER_BUTTON_DPAD_DOWN);
                    Uint8 Start = SDL_GameControllerGetButton(ControllerHandles[ControllerIndex], SDL_CONTROLLER_BUTTON_START);
                    Uint8 Back = SDL_GameControllerGetButton(ControllerHandles[ControllerIndex], SDL_CONTROLLER_BUTTON_BACK);
     
                     // Pause - Play
                    if(Start == 1){
                        toggle_pause(cur_stream);
                    }
     
                    // Quit player
                    if(Back == 1){
                        do_exit(cur_stream);
                    }
                }
                else
                {
                    // TODO: This controller is not plugged in.
                    printf("No controller plugged! \n");
                }
            }
     
    ...
     
        }
    }
    "La révolution informatique fait gagner un temps fou aux hommes, mais ils le passent avec leur ordinateur !"

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Est-ce que tu reçois quelconque évènement ou rien du tout quand tu utilises le gamepad ?
    Je pense pas que ton code pour ouvrir un controller soit utile. Ni tout le reste en fait.
    event_loop est un équivalent de SDL_PollEvent, tu devrais juste avoir à ajouter un case pour SDL_ControllerButtonEvent ou SDL_JoyButtonEvent.
    https://wiki.libsdl.org/SDL_ControllerAxisEvent
    https://wiki.libsdl.org/SDL_ControllerButtonEvent
    https://wiki.libsdl.org/SDL_ControllerDeviceEvent
    Si non, essaye d'autres évènements liés au controller ou joystick (selon quel gamepad tu utilises, mais ce sera probablement Controller et non Joystick).
    https://wiki.libsdl.org/SDL_Event
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre expert

    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 3 583
    Points
    3 583
    Par défaut
    Je vais tenter tes recommandations. C'est comme la pêche à la lampe, à un moment, à force de chercher, on trouve
    "La révolution informatique fait gagner un temps fou aux hommes, mais ils le passent avec leur ordinateur !"

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je suis étonné de la méthode (enfin, plus précisément, je n'aurais pas attaqué le problème comme ça). Déjà, pourquoi FFMPEG et non pas un lecteur avec graphisme comme SMPlayer/MPV/MPlayer ?
    Car qui dit graphisme, dit déjà une interaction avec l'interface utilisateur/le gestionnaire de fenêtre et donc, grande disposition pour gérer une nouvelle entrée utilisateur.
    De plus, je n'aurais pas spécialement attaqué un tel lecteur et j'aurais plutôt juste fait un script/programme qui lit les données du gamepad et qui envoie des événements au lecteur (une sorte de conversion gamepad -> événement plus classique).
    Mais c'est simplement mon avis face à la problématique, toutes les solutions sont bonnes
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre expert

    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 3 583
    Points
    3 583
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Bonjour,

    Je suis étonné de la méthode (enfin, plus précisément, je n'aurais pas attaqué le problème comme ça). Déjà, pourquoi FFMPEG et non pas un lecteur avec graphisme comme SMPlayer/MPV/MPlayer ?
    FFMpeg se pilote très bien avec le clavier. Je n'ai pas besoin d'interface graphique, je lance la vidéo en plein écran. Je développe une interface TV pour mon RPI que je pilote complète au gamepad. L'interface TV est développée en HTML5 et se connecte en web socket à un micro server développé en Python. Ce micro server me permet d'avoir accès à des fonctions impossible a avoir par Chromium (exécuter une appli externe, rebooter/éteindre le RPI...).

    Donc, quand je lance une vidéo, je demande au serveur Python d'exécuter FFMpeg en plein écran avec la vidéo que je souhaite. C'est là que j'ai besoin du pilotage par gamepad, pour faire pause/play, avancer/reculer et quitter pour revenir sur l'interface TV.

    Sinon, il y a bien VLC qui propose un pilotage par appel de commande, mais sur la version RPI, c'est pas encore implémenté.
    "La révolution informatique fait gagner un temps fou aux hommes, mais ils le passent avec leur ordinateur !"

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Btw, pour faire fonctionner les gamepad avec la SDL il faut passer le flag SDL_INIT_GAMECONTROLLER à SDL_Init.
    Flag logiquement manquant dans le code de base, donc il faut l'ajouter.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

Discussions similaires

  1. Utiliser " add_event_detect " avec bus I2C sur raspberry PI
    Par danardui dans le forum Raspberry Pi
    Réponses: 2
    Dernier message: 03/12/2017, 19h56
  2. [Python 3.X] Utiliser " add_event_detect " avec bus I2C sur raspberry PI
    Par danardui dans le forum Général Python
    Réponses: 0
    Dernier message: 02/12/2017, 22h59
  3. Help!! Probleme avec les dates sur SQL SERVER
    Par Nadaa dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 03/08/2006, 16h55
  4. Problémes mémoire avec le bde sur des bases paradox
    Par Keke des Iles dans le forum Bases de données
    Réponses: 2
    Dernier message: 27/05/2004, 16h55
  5. Problem avec les *.AVI sur les panels
    Par NaDiA_SoFt dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/08/2003, 22h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo