Forum Programmation.c FFMPEG Libavcodec

Posté par (page perso) . Licence CC by-sa
6
27
oct.
2014

Bonjour à tous,

Je suis le mainteneur d'une petite distrib (basée sur Xubuntu 14.04) permettant de réaliser des bornes d'arcades avec mame et retroarch. Elle fonctionne pas trop mal et simplifie grandement la configuration.
Comme interface utilisateur j'utilise cabrio-fe cependant il s'agit d'une version que j'ai remanié afin d'apporter de nouvelles fonctionnalités et quelques corrections de problèmes gênants (le projet est plus ou moins à l'abandon), toutefois « ma » version comporte un bug vidéo plutôt gênant.
Malheureusement je ne suis pas développeur de profession et le problème atteint mes limites de compréhension :

Tout d'abord une petite vidéo pour voir à quoi ça ressemble ici. Vous avez donc une interface permettant de sélectionner son type d'émulateur et de jeu, l'affichage permet la lecture d'une courte vidéo extraite du jeu (avi,mp4,flv) ou à défaut une simple image.

Voici mon souci :

Avec libavcodec53 les vidéos sont fluides et le son correcte, malheureusement la librairie est totalement obsolète et ça me demande une bidouille ignoble sur la distrib pour fonctionner.

Libavcodec54 - librairie par défaut sur la 14.04 - les vidéos sont fluides mais je n'ai plus de son

Libavcodec55 je ne peux plus compiler

error: 'AVCODEC_MAX_AUDIO_FRAME_SIZE' undeclared here (not in a function)
#define AUDIO_BUFFER_SIZE ((AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2)
^
video.c:44:29: note: in expansion of macro 'AUDIO_BUFFER_SIZE'
static uint8_t audio_buffer[AUDIO_BUFFER_SIZE];

Si quelqu'un ayant de l’expérience avec FFMPEG en C pouvait me filer un coup de main je lui en serais reconnaissant (et mes utilisateurs aussi).

L'iso pour tester Livemamecab avec libavcodec53 (Attention, nécessite une carte vidéo compatible opengl sinon ça rame)
github du frontend (lien direct sur la partie boguées permettant de lire des vidéos)
github du projet Livemamecab complet

Merci d'avance

  • # FFmpeg vs Libav

    Posté par (page perso) . Évalué à 5.

    Pour la version Libavcodec54, as tu un message d'erreur ou un warning par rapport au son ?

    Sinon, quelle version de libavcoded utilises tu ? Celle qui vient avec le projet ffmpeg, ou celle qui vient avec libav (fork de ffmpeg) ?

    Il existe des incompatibilités entre les deux. Ce serait intéressant de le savoir pour diagnostiquer au mieux le soucis (et potentiellement, cela peut être la source de l'erreur de compilation).

    • [^] # Re: FFmpeg vs Libav

      Posté par (page perso) . Évalué à 2.

      Non rien du tout pas de message d'erreur, oui il s'agit bien de Libav ce sont les paquets Ubuntu standards de la distrib.

      Pour la version 55 j'ai vu ça sur le net https://github.com/chelyaev/ffmpeg-tutorial/issues/13
      ```

      • [^] # Re: FFmpeg vs Libav

        Posté par (page perso) . Évalué à 2.

        J'ajoute que le problème avec la 55 me gène moins pour l'instant (il ne s'agit pas de la librairie par défaut), mais dans le future …

        Merci de t'intéresser à mon problème

        • [^] # Re: FFmpeg vs Libav

          Posté par (page perso) . Évalué à 3.

          Je suis en train de télécharger tout ça :)

          Sinon, as-tu testé le conseil donné dans le lien pour la v55, à savoir définir directement la valeur de la constante ?

          • [^] # Re: FFmpeg vs Libav

            Posté par (page perso) . Évalué à 2.

            Non pas encore, comme indiqué la 55 n'etait pas ma priorité.

            • [^] # Re: FFmpeg vs Libav

              Posté par (page perso) . Évalué à 2.

              J'ai eu le temps de jeter un coup d'oeil rapide. Je n'ai pas trouvé la solution (malheureusement), mais une possibilité : j'ai vu qu'il y avait un changement d'API et que c'est suite à ce changement que cela merdouille.

              L'ancienne API est marquée comme depréciée et est encore dispo dans la v54. Cela pourrait être un palliatif temporaire que de rester sur l'ancienne API…

        • [^] # Re: FFmpeg vs Libav

          Posté par (page perso) . Évalué à 3. Dernière modification le 28/10/14 à 20:10.

          Pour info, bug audio reproduit sous Gentoo avec la v54 !

          Donc c'est bien lié à la lib a priori, et non à un éventuel patch de la distribution.

          • [^] # Re: FFmpeg vs Libav

            Posté par (page perso) . Évalué à 2.

            OK merci, ça confirme mon code doit être erroné quelque part, ça ne me surprend pas c'est pas mal du "bricolage".

            • [^] # Re: FFmpeg vs Libav

              Posté par (page perso) . Évalué à 3.

              Une piste pour toi : ligne 182 de cabrio/video.c
              Tu passes l'adresse de la variable "packet" qui doit contenir des informations (notamment le buffer contenant les données sonores et la taille), mais il n'est pas initialisé.

              J'ai essayé de le faire vaguement de mon côté, mais il faut que je me plonge plus dans le code. Je n'obtiens que des erreurs de segmentation :p

              • [^] # Re: FFmpeg vs Libav

                Posté par (page perso) . Évalué à 1.

                Et bien j’espère que tu vas trouver quelque chose, de mon côté je n'ai plus d'efferalgan …

                • [^] # Re: FFmpeg vs Libav

                  Posté par (page perso) . Évalué à 2.

                  Je pense que je suis sur la bonne piste !

                  Le manque de son vient du fait que le buffer "buffer" passé en paramètre reste intact. Il faut y mettre les informations décodées.

                  Malheureusement, il semblerait que le format attendu par la SDL soit des entiers 16 bits signés. Le codec renvoie des flottants. Bref, il faut faire une conversion. Je suis en train de le faire, mais le résultat n'est pas encore probant. Mais ça marchouille un peu on va dire ;)

                  • [^] # Re: FFmpeg vs Libav

                    Posté par (page perso) . Évalué à 2.

                    J'ai réussi ;)

                    Contact moi sur f.dorin chez free POINT fr. Je pourrais te fournir un patch (incomplet, mais il fonctionne pour les deux vidéos présentes)

  • # Raspberry

    Posté par (page perso) . Évalué à 3.

    Sinon, question subsidiaire : ça marcherait sur un raspberry ? :)

    • [^] # Re: Raspberry

      Posté par (page perso) . Évalué à 3.

      Pour cela il faudrait convertir le code opengl en opengl es, aucune idée du boulot que ça demande.
      Mais il y a un paquet de gens qui aimeraient :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.