Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forums MacBidouille _ Technologies Apple _ inclure ffmpeg à un projet cocoa

Écrit par : Maconnect 20 Aug 2003, 11:45

Bonjour! Je souhaite utiliser des fonctions de http://sourceforge.net/projects/ffmpeg/. Comme il y a les sources, je souhaite les intégrer à un projet cocoa et utiliser directement les fonctions au lieu de compiler ffmpeg puis utiliser des NSTasks (plus lent, pas pratique,...)

On m'a dit qu'il fallait changer le nom de la fonction "main" pour que ça marche.

Voici ce que j'ai réussi à faire:
--------------------------------------------------------------
•Ajouté les sources ffmpeg à mon projet. C'est-à-dire que j'ai fait un drag'n'drop de:
-les 3 fichiers ".h" (berrno.h,...) qui sont dans le dossier principal, et les 2 fichiers ".c" (ffmpeg.c et ffserver.c)
-le dossier "libavcodec"
-le dossier "libavformat"
-le dosier "vhook"

•J'ai compilé. Mais: erreur dans "ff.server.c": le fichier "<sys/poll.h>" n'existe pas alors qu'il est "includé". Je supprimer ffserver.c de mon projet

•Je compile, mais là il faut ajouter ceci:
-"#include <math.h>" dans un des fichiers (sais plus lequel)
-"#include <string.h>" et "#include <stdio.h>" dans "a52dec.c"

•Je compile, et ça demande le fichier "libac3/ac3.h" qui effectivement n'existe pas. En plus j'ai 138errors et 115warnings
--------------------------------------------------------------

Quelqu'un a-t-il déjà fait la manip' ? un p'tit coup de pouce serait le bienvenu...

D'avance, merci!
jap.gif

Écrit par : Maconnect 20 Aug 2003, 13:50

heu... j'y connais pas grand chose... Faut-il compiler les library ("libavformat et "libavcodec") puis seulement les inclure au projet?

EDIT: j'ai réussi à compiler "libavcodec":

CODE
cd ~/Desktop/ffmpeg

./configure

cd ~/Desktop/ffmpeg/libavcodec

make
Tout est ok. Par contre, impossible de compiler "libavformat":
QUOTE
cc: cannot specify -o with -c or -S and multiple compilations
make: *** [utils.o] Error 1


EDIT2:
bon j'ai ajouté la library compilée a un projet vide, ensuite je met "common.h" et "avcodec.h"
Ensuite il faut mettre les headers des formats qui nous intéressent? (ex: "mpegaudio.h"?) ça se complique pour appeler les fonction...
Par sécurité, j'ajoute tous les headers de "libavcodec"...

EDIT3:
c'est vraiment pas facile tout ça. Le seul exemple que j'aie trouvé c'est celui du codec QT pour les DIVX, qui n'est pas très parlant.
Je n'arrive pas a compiler "vhook" et "libavformats" qui sont nécessaires si on veut utiliser la fonction "main" (plus simple). Sinon faut faire appel directement aux fonctions, et là c'est pas gagné sad.gif

EDIT4:
j'ai réussi a compiler "libavformats":
CODE
cd /ffmpeg

./configure --prefix=/usr

cd /ffmpeg/libavformats

make

Par contre impossible de compiler "vhook"

Écrit par : Maconnect 20 Aug 2003, 21:07

alors voici le résultat de mes recherches, peut-être cela servira-t-il pour quelqu'un plus tard...

Il faut mettre ceci dans les Linker Settings (dans PB:Target:linker settings:other mach-o...)

QUOTE
-ldl -flat_namespace -read_only_relocs suppress

Et en suite, le seul moyen que j'aie trouvé pour linké la library "libgcc.a" c'est de la glisser-déposer dans le projet. Elle se trouve ici:
/usr/lib/gcc/darwin/3.1/libgcc.a

Et ensuite quand on compile, ça marche
Ouf, plusieurs heures pour ce résultat!! :fou: :fou: :fou:

Note: j'ai toujours pas réussi à compiler "vhook". Donc seules les 2 autres libraries sont ajoutées à mon projet

Écrit par : syno 9 Nov 2006, 13:30

Hello,

me voici 3 ans plus tard confronté à la librairie libavcodec.

Mon but est d'utiliser certaines fonctions de cette librairie pour tester quelques codecs vidéos.
Je compile ainsi la librairie ainsi que libavutil et libavformat, fournies avec le package ffmpeg. La compilation par le terminal génère libvavutil.a, libavcodec.a et libavformat.a.

Je crée donc une nouvelle application dans Xcode et ajoute les trois librairies statiques correspondantes dans le projet. Dans un premier temps, le main contient uniquement une seule fonction de la librairie libavcodec, afin de m'assurer que tout fonctionne bien. Pourtant la compilation génère l'erreur suivante:

Processing /Users/etudiants/test13/build/test13.build/Debug/test13.build/Objects-normal/ppc/libavcodec.ab
libavcodec.a(bitstream.o) has local relocation entries in non-writable section (__TEXT,__text)
Command /usr/bin/gcc-4.0 failed with exit code 1

J'avoue ne pas saisir d'où vient le problème (pourtant le main contient l'inclusion du header correspondant)

Merci pour votre aide

Syno


Écrit par : chombier 9 Nov 2006, 13:39

CITATION(syno @ 9 Nov 2006, 13:30) [snapback]1971909[/snapback]

Processing /Users/etudiants/test13/build/test13.build/Debug/test13.build/Objects-normal/ppc/libavcodec.ab
libavcodec.a(bitstream.o) has local relocation entries in non-writable section (__TEXT,__text)
Command /usr/bin/gcc-4.0 failed with exit code 1

J'avoue ne pas saisir d'où vient le problème (pourtant le main contient l'inclusion du header correspondant)

Merci pour votre aide

Syno

Comment as-tu compilé tes librairies ffmpeg ?
Il manque peut-être l'option -fPIC

Écrit par : syno 9 Nov 2006, 13:48

Voici les commandes exécutées à partir du dossier ffmpeg:

./configure
make
sudo make install

Écrit par : syno 9 Nov 2006, 14:19

Où faut-il insérer cette option de compilation?
J'ai testé après le make mais l'option de compilation est inconnue...

Écrit par : chombier 9 Nov 2006, 15:09

Tu peux faire ./configure CFLAGS=-fPIC ./configure --extra-cflags=-fPIC

Mais en fait, cette option n'est pas nécessaire dans une librairie statique (.a), et elle est par défaut activée dans gcc donc cela ne devrait pas gêner.
Ceci dit, je viens de récupérer les sources de ffmpeg, ça compile, et je vois dans les arguments passés à cc une option "-mdynamic-no-pic" qui justement désactive le mode PIC.

Écrit par : syno 9 Nov 2006, 15:27

Une erreur survient lors de la configuration avec cette option:

Creating config.mak and config.h...
mv: config.h: set owner/group (was: 502/0): Operation not permitted

Est-ce normal?


j'ai ajouté la commande sudo, la compilation de la lib a réussi.

Par contre cela n'a rien changé au niveau de la compilation de mon programme.

Mon but futur est de compiler le code source example "apiexample.c" fournit dans le package ffmpeg.

Écrit par : chombier 9 Nov 2006, 15:28

Je n'ai pas eu cette erreur !?
quelle version de ffmpeg as-tu récupéré ?
J'ai pour ma part pris la dernière version dispo via svn:

CODE
$ svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg

Mais bon de toutes façons, cela ne change rien, j'ai comme warning lors du make:
CODE
warning: -mdynamic-no-pic overrides -fpic or -fPIC

Écrit par : chombier 9 Nov 2006, 15:57

Peut-être une autre piste: essaies de cocher l'option "Generate Position Dependant Code" dans les options de ton projet Xcode.

Écrit par : syno 9 Nov 2006, 16:14

Toujours rien!!

De ton côté as-tu essayé de créer un projet et d'utiliser cette librairie?

Écrit par : chombier 9 Nov 2006, 16:29

Je viens de tester avec une appli carbon qui appelle juste avcodec_init(), aucun problème ici.
Tu as la dernière version de Xcode ?

Écrit par : syno 9 Nov 2006, 20:37

Oui j'ai la dernière version de Xcode.

Voici le détail de ma procédure:

-téléchargement de la dernière version de ffmpeg via svn
-compilation et installation de ffmep (à partir du dossier ffmpeg):
./configure
make
sudo make install
-Ceci génère les trois librairies suivantes:
libvavutil.a
libavcodec.a
libavformat.a
-J'ouvre alors une nouvelle application Carbon C
-Je modifie le main.c en lui ajoutant la fonction avcodec_init() et en spécifiant le header correspondant (#include 'avcodec.h')
-Je glisse alors les trois librairies.a dans le projet à partir de leur dossier respectif
-Je spécifie encore dans les builder settings/header path le chemin d'accès du dossier contenant le .h utilisé

Voilà, et après ceci la compilation échoue avec l'erreur décrite auparavant.

La partie que je ne maîtrise pas concerne l'insertion de la librairie. Faut-il vraiment inclure les .a dans le projet? Faut il lui spécifier un chemin d'accès pour ces librairies?Si oui où?

De ton côté, quel est ta façon de procéder?


Écrit par : chombier 9 Nov 2006, 20:44

CITATION(syno @ 9 Nov 2006, 20:37) [snapback]1972562[/snapback]

La partie que je ne maîtrise pas concerne l'insertion de la librairie. Faut-il vraiment inclure les .a dans le projet? Faut il lui spécifier un chemin d'accès pour ces librairies?Si oui où?

De ton côté, quel est ta façon de procéder?

Quasiment pareil, si ce n'est que j'ai ajouté les librairies en passant par les options du projet.
Dans Header Search Path: /usr/local/include -> dans le main: #include <ffmpeg/avcodec.h>
Dans Library Search Path: /usr/local/lib
Dans Other Link Flags: -lavcodec -lavformat -lavutil

Écrit par : syno 9 Nov 2006, 21:06

Merci pour les infos, j'essaierai tout ça demain.

Par contre pourrais-tu m'en dire un peu plus sur les flags? Je ne connais pas ces notions.

Écrit par : chombier 9 Nov 2006, 21:13

Ce sont les options standard de gcc, ou plutôt de ld. Il faut que tu lises la man page de ld ("man ld" dans le terminal). Pour rechercher une expression dans une man page, tu peux te servir de "/" comme dans vi.

CODE
-lx    This  option  is  an abbreviation for the library name `libx.a',
       where x is a string.  If -dynamic is specified the  abbreviation
       for  the  library  name is first search as `libx.dylib' and then
       `libx.a' is searched for.  ld searches for  libraries  first  in
       any  directories specified with -L options, then in any directo-
       ries specified in the colon separated set of paths in the  envi-
       ronment  variable LD_LIBRARY_PATH, then the standard directories
       /lib, /usr/lib, and /usr/local/lib.  A library is searched  when
       its name is encountered, so the placement of the -l flag is sig-
       nificant.  If string x is of the form x.o,  then  that  file  is
       searched for in the same places, but without prepending `lib' or
       appending `.a' or `.dylib' to the filename.


Écrit par : syno 10 Nov 2006, 08:57

J'ai tout essayé mais toujours la même erreur.....???????!!!!!!!

Écrit par : syno 10 Nov 2006, 10:49

EUREKA!!!!
Après trois jours d'intenses recherches, je me rends compte qu'il suffisait de décocher l'option "Build/Allow Zero Link".

Si qqn en sait un peu plus sur cette option.....

Encore merci, Chombier pour ton dévouement.

Syno

Écrit par : chombier 10 Nov 2006, 11:47

Content que tu t'en sois sorti ! smile.gif

L'option ZeroLink permet de gagner du temps lors du build de la version Debug. L'édition de liens n'est pas effectuée dans la phase de build, mais lors de l'exécution via Xcode.

Écrit par : syno 10 Nov 2006, 11:50

Par contre est-il normal que le build échoue en mode release???

Écrit par : chombier 10 Nov 2006, 11:51

Euh... non. Quelle erreur as-tu ?

Écrit par : syno 13 Nov 2006, 09:33

Voici l'erreur que j'obtiens lors de la compilation(et trois warning):

Building target “VideoCodec” of project “VideoCodec” with configuration “Release” — (1 error, 3 warnings)
cd /Volumes/Divers/Jean_Mabillard/Projet_Master/Codec/Projet/VideoCodec
/usr/bin/g++-4.0 -o /Volumes/Divers/Jean_Mabillard/Projet_Master/Codec/Projet/VideoCodec/build/VideoCodec.build/Release/VideoCodec.build/Objects-normal/i386/VideoCodec\ Release -L/Volumes/Divers/Jean_Mabillard/Projet_Master/Codec/Projet/VideoCodec/build/Release -L/usr/local/lib -F/Volumes/Divers/Jean_Mabillard/Projet_Master/Codec/Projet/VideoCodec/build/Release -filelist /Volumes/Divers/Jean_Mabillard/Projet_Master/Codec/Projet/VideoCodec/build/VideoCodec.build/Release/VideoCodec.build/Objects-normal/i386/VideoCodec\ Release.LinkFileList -framework Carbon -lavcodec -lavformat -lavutil -arch i386 -Wl,-Y,1455 -mmacosx-version-min=10.4 -Wl,-dead_strip -no_dead_strip_inits_and_terms -isysroot /Developer/SDKs/MacOSX10.4u.sdk
/usr/bin/ld: warning /usr/local/lib/libavcodec.a archive's cputype (18, architecture ppc) does not match cputype (7) for specified -arch flag: i386 (can't load from it)
/usr/bin/ld: warning /usr/local/lib/libavformat.a archive's cputype (18, architecture ppc) does not match cputype (7) for specified -arch flag: i386 (can't load from it)
/usr/bin/ld: warning /usr/local/lib/libavutil.a archive's cputype (18, architecture ppc) does not match cputype (7) for specified -arch flag: i386 (can't load from it)
/usr/bin/ld: Undefined symbols:
_avcodec_init
/Volumes/Divers/Jean_Mabillard/Projet_Master/Codec/Projet/VideoCodec/build/VideoCodec.build/Release/VideoCodec.build/Objects-normal/i386/main.o reference to undefined _avcodec_init
collect2: ld returned 1 exit status
/usr/bin/ld: warning /usr/local/lib/libavcodec.a archive's cputype (18, architecture ppc) does not match cputype (7) for specified -arch flag: i386 (can't load from it)
/usr/bin/ld: warning /usr/local/lib/libavformat.a archive's cputype (18, architecture ppc) does not match cputype (7) for specified -arch flag: i386 (can't load from it)
/usr/bin/ld: warning /usr/local/lib/libavutil.a archive's cputype (18, architecture ppc) does not match cputype (7) for specified -arch flag: i386 (can't load from it)
/usr/bin/ld: Undefined symbols:
_avcodec_init
/Volumes/Divers/Jean_Mabillard/Projet_Master/Codec/Projet/VideoCodec/build/VideoCodec.build/Release/VideoCodec.build/Objects-normal/i386/main.o reference to undefined _avcodec_init
collect2: ld returned 1 exit status
Build failed (1 error, 3 warnings)

Écrit par : chombier 13 Nov 2006, 11:02

CITATION(syno @ 13 Nov 2006, 09:33) [snapback]1977503[/snapback]

Voici l'erreur que j'obtiens lors de la compilation(et trois warning):

/usr/bin/ld: Undefined symbols:
_avcodec_init
reference to undefined _avcodec_init
collect2: ld returned 1 exit status
/usr/bin/ld: warning /usr/local/lib/libavcodec.a archive's cputype (18, architecture ppc) does not match cputype (7) for specified -arch flag: i386 (can't load from it)
/usr/bin/ld: warning /usr/local/lib/libavformat.a archive's cputype (18, architecture ppc) does not match cputype (7) for specified -arch flag: i386 (can't load from it)
/usr/bin/ld: warning /usr/local/lib/libavutil.a archive's cputype (18, architecture ppc) does not match cputype (7) for specified -arch flag: i386 (can't load from it)
/usr/bin/ld: Undefined symbols:
_avcodec_init

J'ai eu le même problème, bien que j'aie choisi comme architecture PPC uniquement dans le projet Xcode, il essayait tout de même de générer la version x86.
J'ai résolu ça en éditant le fichier du projet manuellement: Contrôle clic sur le paquet xcodeproj, afficher le contenu du paquet, editer le fichier project.pbxproj, et supprimer tout ce qui concerne x86 dans les architectures (variables "ARCHS").

Écrit par : syno 17 Nov 2006, 09:18

Voici un nouveau problème que je peine à résoudre.
Si j'appelle la fonction avcodec_init(), tout se passe bien. Par contre lors de l'appel de la fonction avcodec_register_all(), le message d'erreur suivant apparaît:

Building target “VideoCodec” of project “VideoCodec” with configuration “Debug” — (1 error)
cd /Volumes/Divers/Jean_Mabillard/Projet_Master/Codec/Projet/VideoCodec
/usr/bin/g++-4.0 -o /Volumes/Divers/Jean_Mabillard/Projet_Master/Codec/Projet/VideoCodec/build/Debug/VideoCodec\ Debug.app/Contents/MacOS/VideoCodec\ Debug -L/Volumes/Divers/Jean_Mabillard/Projet_Master/Codec/Projet/VideoCodec/build/Debug -L/usr/local/lib -F/Volumes/Divers/Jean_Mabillard/Projet_Master/Codec/Projet/VideoCodec/build/Debug -filelist /Volumes/Divers/Jean_Mabillard/Projet_Master/Codec/Projet/VideoCodec/build/VideoCodec.build/Debug/VideoCodec.build/Objects-normal/ppc/VideoCodec\ Debug.LinkFileList -framework Carbon -lavcodec -lavformat -lavutil -arch ppc -Wl,-Y,1455 -mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk
/usr/bin/ld: Undefined symbols:
_uncompress
_inflate
_inflateEnd
_inflateInit_
_inflateReset
_inflateSync
_deflate
_deflateEnd
_deflateInit_
_deflateReset
_crc32
_deflateInit2_
/usr/local/lib/libavcodec.a(cscd.o) reference to undefined _uncompress
/usr/local/lib/libavcodec.a(flashsv.o) reference to undefined _inflate
/usr/local/lib/libavcodec.a(flashsv.o) reference to undefined _inflateEnd
/usr/local/lib/libavcodec.a(flashsv.o) reference to undefined _inflateInit_
/usr/local/lib/libavcodec.a(flashsv.o) reference to undefined _inflateReset
/usr/local/lib/libavcodec.a(flashsv.o) reference to undefined _inflateSync
/usr/local/lib/libavcodec.a(lcl.o) reference to undefined _deflate
/usr/local/lib/libavcodec.a(lcl.o) reference to undefined _deflateEnd
/usr/local/lib/libavcodec.a(lcl.o) reference to undefined _deflateInit_
/usr/local/lib/libavcodec.a(lcl.o) reference to undefined _deflateReset
/usr/local/lib/libavcodec.a(lcl.o) reference to undefined _inflate
/usr/local/lib/libavcodec.a(lcl.o) reference to undefined _inflateEnd
/usr/local/lib/libavcodec.a(lcl.o) reference to undefined _inflateInit_
/usr/local/lib/libavcodec.a(lcl.o) reference to undefined _inflateReset
/usr/local/lib/libavcodec.a(png.o) reference to undefined _crc32
/usr/local/lib/libavcodec.a(png.o) reference to undefined _deflate
/usr/local/lib/libavcodec.a(png.o) reference to undefined _deflateEnd
/usr/local/lib/libavcodec.a(png.o) reference to undefined _deflateInit2_
/usr/local/lib/libavcodec.a(png.o) reference to undefined _inflate
/usr/local/lib/libavcodec.a(png.o) reference to undefined _inflateEnd
/usr/local/lib/libavcodec.a(png.o) reference to undefined _inflateInit_
/usr/local/lib/libavcodec.a(tiff.o) reference to undefined _uncompress
/usr/local/lib/libavcodec.a(tscc.o) reference to undefined _inflate
/usr/local/lib/libavcodec.a(tscc.o) reference to undefined _inflateEnd
/usr/local/lib/libavcodec.a(tscc.o) reference to undefined _inflateInit_
/usr/local/lib/libavcodec.a(tscc.o) reference to undefined _inflateReset
/usr/local/lib/libavcodec.a(zmbv.o) reference to undefined _inflate
/usr/local/lib/libavcodec.a(zmbv.o) reference to undefined _inflateEnd
/usr/local/lib/libavcodec.a(zmbv.o) reference to undefined _inflateInit_
/usr/local/lib/libavcodec.a(zmbv.o) reference to undefined _inflateReset
collect2: ld returned 1 exit status
/usr/bin/ld: Undefined symbols:
_uncompress
_inflate
_inflateEnd
_inflateInit_
_inflateReset
_inflateSync
_deflate
_deflateEnd
_deflateInit_
_deflateReset
_crc32
_deflateInit2_
/usr/local/lib/libavcodec.a(cscd.o) reference to undefined _uncompress
/usr/local/lib/libavcodec.a(flashsv.o) reference to undefined _inflate
/usr/local/lib/libavcodec.a(flashsv.o) reference to undefined _inflateEnd
/usr/local/lib/libavcodec.a(flashsv.o) reference to undefined _inflateInit_
/usr/local/lib/libavcodec.a(flashsv.o) reference to undefined _inflateReset
/usr/local/lib/libavcodec.a(flashsv.o) reference to undefined _inflateSync
/usr/local/lib/libavcodec.a(lcl.o) reference to undefined _deflate
/usr/local/lib/libavcodec.a(lcl.o) reference to undefined _deflateEnd
/usr/local/lib/libavcodec.a(lcl.o) reference to undefined _deflateInit_
/usr/local/lib/libavcodec.a(lcl.o) reference to undefined _deflateReset
/usr/local/lib/libavcodec.a(lcl.o) reference to undefined _inflate
/usr/local/lib/libavcodec.a(lcl.o) reference to undefined _inflateEnd
/usr/local/lib/libavcodec.a(lcl.o) reference to undefined _inflateInit_
/usr/local/lib/libavcodec.a(lcl.o) reference to undefined _inflateReset
/usr/local/lib/libavcodec.a(png.o) reference to undefined _crc32
/usr/local/lib/libavcodec.a(png.o) reference to undefined _deflate
/usr/local/lib/libavcodec.a(png.o) reference to undefined _deflateEnd
/usr/local/lib/libavcodec.a(png.o) reference to undefined _deflateInit2_
/usr/local/lib/libavcodec.a(png.o) reference to undefined _inflate
/usr/local/lib/libavcodec.a(png.o) reference to undefined _inflateEnd
/usr/local/lib/libavcodec.a(png.o) reference to undefined _inflateInit_
/usr/local/lib/libavcodec.a(tiff.o) reference to undefined _uncompress
/usr/local/lib/libavcodec.a(tscc.o) reference to undefined _inflate
/usr/local/lib/libavcodec.a(tscc.o) reference to undefined _inflateEnd
/usr/local/lib/libavcodec.a(tscc.o) reference to undefined _inflateInit_
/usr/local/lib/libavcodec.a(tscc.o) reference to undefined _inflateReset
/usr/local/lib/libavcodec.a(zmbv.o) reference to undefined _inflate
/usr/local/lib/libavcodec.a(zmbv.o) reference to undefined _inflateEnd
/usr/local/lib/libavcodec.a(zmbv.o) reference to undefined _inflateInit_
/usr/local/lib/libavcodec.a(zmbv.o) reference to undefined _inflateReset
collect2: ld returned 1 exit status

Écrit par : chombier 17 Nov 2006, 10:57

Il manque zlib, essaie d'ajouter "-lz" dans Other Link Flags.

Écrit par : syno 17 Nov 2006, 11:45

Cette option ne fonctionne pas chez moi. Par contre j'ai ajouté la librairie dynamique libz.dylib.1.1.4 dans mon projet et la compilation fonctionne. Par contre l'erreur suivante apparaît dans la console:

[Session started at 2006-11-17 11:41:56 +0100.]
dyld: Library not loaded: ../../bin/mac/libz.dylib.1.1.4
Referenced from: /Volumes/Divers/Jean_Mabillard/Projet_Master/Codec/Projet/VideoCodec/build/Debug/VideoCodec Debug.app/Contents/MacOS/VideoCodec Debug
Reason: image not found

VideoCodec has exited due to signal 5 (SIGTRAP).

Écrit par : chombier 17 Nov 2006, 11:51

CITATION(syno @ 17 Nov 2006, 11:45) [snapback]1983972[/snapback]

Cette option ne fonctionne pas chez moi.

Tu n'as pas de fichier /usr/lib/libz.dylib ? huh.gif

Écrit par : syno 17 Nov 2006, 14:24

Si, le fichier existe. J'ai ajouté libz.dylib au projet mais la même erreur survient????

Écrit par : chombier 17 Nov 2006, 14:34

Il n'est pas normal que tu ne puisses pas te servir de l'option "-lz"
Que répond la commande suivante dans le terminal:

CODE
$ locate /usr/lib/libz.dylib

Écrit par : syno 17 Nov 2006, 15:03

Ok tout roule, il suffisait d'ajouter le chemin d'accès de la librairie.....


Merci pour l'aide

Au fait, sais-tu à quoi sert exactement cette librairie zlib?

Écrit par : chombier 17 Nov 2006, 16:46

http://www.zlib.org.

Écrit par : syno 24 Nov 2006, 14:03

Nouveau problème de compilation sous Xcode:

Ayant réussi à compiler l'exemple proposé avec le package ffmpeg (apiexample), je souhaite à présent importer celui dans un autre programme (SeeSaw Code proposé sur le site de PortVideo: http://www.iua.upf.es/mtg/reacTable/?portvideo).

Mais voilà, en configurant le projet SeeSaw de la même façon que pour l'exemple apiexample, je me trouve confronté au problème suivant:

main.c:44:21: error: avcodec.h: No such file or directory

J'essaie avec "ffmpeg/avcodec.h" et là l'include passe mais par contre la fonction avcodec_register_all() n'est plus reconnue:

SeeSaw-v0_1_0/build/seeSaw.build/Development/seeSaw.build/Objects-normal/ppc/seeSaw.LinkFileList -framework Cocoa -framework GLUT -framework OpenGL -framework QuickTime -framework Carbon -arch ppc -prebind -Wl,-Y,1455
/usr/bin/ld: warning prebinding disabled because of undefined symbols
/usr/bin/ld: Undefined symbols:
_avcodec_register_all
SeeSaw-v0_1_0/build/seeSaw.build/Development/seeSaw.build/Objects-normal/ppc/main.o reference to undefined _avcodec_register_all
collect2: ld returned 1 exit status


J'avoue ne plus comprendre, j'ai pourtant ajouté les options de linkage??????

Écrit par : syno 24 Nov 2006, 14:32

Ok, l'erreur est identifiée:

Il s'agit d'ajouter les options de compilation non pas via Project/Edit Project Settings mais plutôt en cliquant droit sur l'icône du projet dans la cible ("target") puis get info. Ceci permet d'ajouter les settings pour tous les modes alors que l'autre façon de procéder agit seulement pour le mode en cours (ex: deployement).

Écrit par : syno 14 Dec 2006, 15:01

Je souhaite à présent convertir mon programme en c++. Je rappelle que celui-ci se fonde sur le projet seesaw (http://www.cse.unsw.edu.au/~danielh/seeSaw/), augmenté de quelques fonctions de la librairie ffmpeg.

Je crée donc un nouveau projet de type Carbon C++ Standard Application ainsi que trois nouveaux fichiers sources (et leur header correspondant), dans lesquels j'inclus le code présent dans les fichiers correspondants de seesaw:

videoWindow.cpp
vdigGrab.cpp
SSUtility.cpp

Je modifie alors quelques lignes de codes afin qu'elles soient compatibles en C++ et modifie le main.cp en ajoutant le code du main.c de seesaw. J'ajoute encore les frameworks nécessaires.

Jusque là tout va bien, la compilation fonctionne.

Par contre, lorsque j'inclus le header "avcodec.h" (en veillant à spécifier le chemin d'accès lors de la compilation), 6 erreurs apparaissent:

/usr/local/include/ffmpeg/avcodec.h:249: error: using typedef-name 'CodecType' after 'enum'
/Developer/SDKs/MacOSX10.3.9.sdk/System/Library/Frameworks/QuickTime.framework/Headers/ImageCompression.h:291: error: 'CodecType' has a previous declaration here
/usr/local/include/ffmpeg/avcodec.h:945: error: using typedef-name 'CodecType' after 'enum'
/Developer/SDKs/MacOSX10.3.9.sdk/System/Library/Frameworks/QuickTime.framework/Headers/ImageCompression.h:291: error: 'CodecType' has a previous declaration here
/usr/local/include/ffmpeg/avcodec.h:2067: error: using typedef-name 'CodecType' after 'enum'
/Developer/SDKs/MacOSX10.3.9.sdk/System/Library/Frameworks/QuickTime.framework/Headers/ImageCompression.h:291: error: 'CodecType' has a previous declaration here

Je comprends donc qu'il y a une ambiguïté avec "CodecType", qui est déclaré deux fois:
- dans la librairie ffmpeg (avcodec.h)
- dans la librairie quicktime (ImageCompression.h)

Comment éviter cette erreur sans modifier avcodec.h (qui impliquerait une recompilation laborieuse de ffmpeg)?????

Ce qui m'échappe c'est que cette erreur n'apparaît pas dans mon programme initiale (cad en incluant avcodec.h au main.c de seesaw code), alors que la configuration me semble identique....

Écrit par : syno 20 Dec 2006, 08:47

Ok problème résolu, voici la solution:

Modifier la variable présente dans avcodec.h ainsi que dans toute la librairie de ffmpeg et recompiler le tout.....

Écrit par : bigadel 25 Mar 2008, 16:54

J'essaye de compiler un simple code qui utilise ffmpeg avec cette ligne de commande :

CODE
g++ -o avcodec_sample avcodec_sample.cpp -lavformat -lavcodec -lz


et j'obtiens :

CODE
avcodec_sample.cpp:20:21: error: avcodec.h: No such file or directory
avcodec_sample.cpp:21:22: error: avformat.h: No such file or directory


Je ne sais pas comment inclure la librairie ffmpeg au variable d'environnement,
je fais tout par le terminal


Merci d'avance wink.gif

Écrit par : Vin's 25 Mar 2008, 20:25

Essaye de rajouter

CODE
-I/usr/local/include/ffmpeg/
(i majuscule)
à ta ligne de commande, pour que les headers soient trouvés.


Écrit par : bigadel 26 Mar 2008, 10:48

CITATION(Vin's @ 25 Mar 2008, 15:25) [snapback]2612387[/snapback]

Essaye de rajouter
CODE
-I/usr/local/include/ffmpeg/
(i majuscule)
à ta ligne de commande, pour que les headers soient trouvés.



Merci, ça compile mais avec des erreurs :

CODE
/usr/local/include/ffmpeg/avformat.h:66: error: integer constant is too large for 'long' type
/usr/local/include/ffmpeg/avformat.h:67: error: integer constant is too large for 'long' type
/usr/local/include/ffmpeg/avcodec.h:2463: warning: attribute ignored in declaration of 'struct ImgReSampleContext'
/usr/local/include/ffmpeg/avcodec.h:2463: warning: attribute for 'struct ImgReSampleContext' must follow the 'struct' keyword
/usr/local/include/ffmpeg/avcodec.h:2468: warning: 'ImgReSampleContext' is deprecated (declared at /usr/local/include/ffmpeg/avcodec.h:2465)
/usr/local/include/ffmpeg/avcodec.h:2475: warning: 'ImgReSampleContext' is deprecated (declared at /usr/local/include/ffmpeg/avcodec.h:2465)
/usr/local/include/ffmpeg/avcodec.h:2479: warning: 'ImgReSampleContext' is deprecated (declared at /usr/local/include/ffmpeg/avcodec.h:2465)
/usr/local/include/ffmpeg/avcodec.h:2481: warning: 'ImgReSampleContext' is deprecated (declared at /usr/local/include/ffmpeg/avcodec.h:2465)
/usr/local/include/ffmpeg/avformat.h: In function 'void av_init_packet(AVPacket*)':
/usr/local/include/ffmpeg/avformat.h:66: error: 'INT64_C' was not declared in this scope
/usr/local/include/ffmpeg/avformat.h: At global scope:
/usr/local/include/ffmpeg/avformat.h:285: warning: 'AVFrac' is deprecated (declared at /usr/local/include/ffmpeg/avformat.h:118)


Et je ne suis pas certains de toutes les comprendre sad.gif
Merci encore

Écrit par : lilouk 29 Apr 2008, 14:12

salut à tous,

j'ai une autre question toujours autour de ffmpeg.

Est-il possible d'intégrer ffplay dans une application ou bien en embedded ?

Merci par avance

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)