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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif

    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
    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....

  2. #2
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    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 extrêmement actif

    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
    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");
                }
            }
     
    ...
     
        }
    }

  4. #4
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    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 extrêmement actif

    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
    Par défaut
    Je vais tenter tes recommandations. C'est comme la pêche à la lampe, à un moment, à force de chercher, on trouve

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 059
    Billets dans le blog
    142
    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.

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