ffmpeg - Projekt Fehler
-
Da der erste Thread etwas unglücklich verlaufen ist -> welches auf meine pers. Formulierung der Frage zurückzuführen ist. Ein neuer Versuch.
Das nachfolgende Projekt benötigt ffmpeg welches geladen und gelinkt wurde:
Code
https://github.com/arpu/adscanner
Dev Vers. ffmpeg:
http://ffmpeg.zeranoe.com/builds/Das Projekt soll kompiliert werden, die Header wurden nachfolgend geändert (nach Ordnerstruktur der ffmpeg geladenen dev Version)
extern "C"{ #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libswscale/swscale.h> }Die nachfolgenden Anweisungen für die Makros wurden ebenfalls hinzugefügt für UINT:
extern "C"{ #ifdef __cplusplus #define __STDC_CONSTANT_MACROS #ifdef _STDINT_H #undef _STDINT_H #endif # include <stdint.h> #endif } # include <stdio.h> #ifndef INT64_C #define INT64_C(c) (c ## LL) #define UINT64_C(c) (c ## ULL) #endifNichtsdestotrotz tretten die nachfolgenden Fehler auf. Meiner Ansicht ist die repository fehlerhaft. Kann jemand evtl. das Projekt kompilieren? Danke!
Gruß
[code]1>c:\users\pc\documents\visual studio 2008\projects\ffmpeg-20150124-git-1f13348-win32-dev\include\libavutil\common.h(205) : error C3861: "UINT64_C": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.h(94) : warning C4244: 'return': Konvertierung von 'double' in 'int64_t', möglicher Datenverlust
\adscanner-master\src\ffmpeg_movie.h(95) : warning C4244: 'return': Konvertierung von 'double' in 'int64_t', möglicher Datenverlust
\adscanner-master\src\ffmpeg_movie.h(96) : error C3861: "UINT64_C": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.h(96) : error C3861: "UINT64_C": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ad_main.cpp(197) : warning C4244: 'Argument': Konvertierung von 'int64_t' in 'const UINT', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(205) : warning C4244: 'Argument': Konvertierung von 'int64_t' in 'const UINT', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(242) : warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'
\adscanner-master\src\ad_main.cpp(734) : warning C4244: 'Initialisierung': Konvertierung von 'const uint64_t' in 'const int', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(740) : warning C4244: '=': Konvertierung von 'double' in 'float', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(805) : warning C4244: 'Argument': Konvertierung von 'double' in 'const float', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(805) : warning C4244: 'Argument': Konvertierung von 'double' in 'const float', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(805) : warning C4244: '=': Konvertierung von 'uint64_t' in 'UINT', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(832) : warning C4244: 'Argument': Konvertierung von 'double' in 'const float', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(832) : warning C4244: 'Argument': Konvertierung von 'double' in 'const float', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(832) : warning C4244: 'Initialisierung': Konvertierung von 'uint64_t' in 'UINT', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(833) : warning C4244: 'Initialisierung': Konvertierung von 'int64_t' in 'UINT', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(846) : warning C4244: 'Argument': Konvertierung von 'int64_t' in 'const int', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(850) : warning C4244: 'Initialisierung': Konvertierung von 'int64_t' in 'UINT', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(901) : warning C4244: 'Argument': Konvertierung von 'double' in 'const float', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(901) : warning C4244: 'Argument': Konvertierung von 'double' in 'const float', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(909) : warning C4244: 'Argument': Konvertierung von 'double' in 'const uint64_t', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(916) : warning C4244: 'Argument': Konvertierung von 'double' in 'const float', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(916) : warning C4244: 'Argument': Konvertierung von 'double' in 'const float', möglicher Datenverlust
\adscanner-master\src\ad_main.cpp(944) : warning C4244: 'Argument': Konvertierung von 'double' in 'const uint64_t', möglicher Datenverlust
1>ffmpeg_movie.cpp
\visual studio 2008\projects\ffmpeg-20150124-git-1f13348-win32-dev\include\libavutil\common.h(205) : error C3861: "UINT64_C": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.h(94) : warning C4244: 'return': Konvertierung von 'double' in 'int64_t', möglicher Datenverlust
\adscanner-master\src\ffmpeg_movie.h(95) : warning C4244: 'return': Konvertierung von 'double' in 'int64_t', möglicher Datenverlust
\adscanner-master\src\ffmpeg_movie.h(96) : error C3861: "UINT64_C": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.h(96) : error C3861: "UINT64_C": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(50) : error C3861: "av_open_input_file": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(52) : error C3861: "av_find_stream_info": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(54) : error C3861: "dump_format": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(61) : error C2065: 'CODEC_TYPE_VIDEO': nichtdeklarierter Bezeichner
\adscanner-master\src\ffmpeg_movie.cpp(67) : error C2065: 'CODEC_TYPE_AUDIO': nichtdeklarierter Bezeichner
\adscanner-master\src\ffmpeg_movie.cpp(86) : error C3861: "avcodec_open": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(91) : error C3861: "avcodec_open": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(151) : warning C4172: Adresse einer lokalen Variablen oder eines temporären Werts wird zurückgegeben
\adscanner-master\src\ffmpeg_movie.cpp(173) : error C3861: "av_close_input_file": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(180) : error C3861: "url_fclose": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(195) : error C3861: "UINT64_C": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(195) : error C3861: "UINT64_C": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(208) : error C3861: "UINT64_C": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(208) : error C3861: "UINT64_C": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(221) : error C3861: "avcodec_decode_audio2": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(266) : error C3861: "avcodec_decode_video": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(303) : error C3861: "avcodec_alloc_context": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(304) : error C3861: "avcodec_open": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(310) : error C2039: 'encode': Ist kein Element von 'AVCodec'
1> \visual studio 2008\projects\ffmpeg-20150124-git-1f13348-win32-dev\include\libavcodec\avcodec.h(3177): Siehe Deklaration von 'AVCodec'
\adscanner-master\src\ffmpeg_movie.cpp(350) : error C2065: 'CodecID': nichtdeklarierter Bezeichner
\adscanner-master\src\ffmpeg_movie.cpp(350) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'id'
\adscanner-master\src\ffmpeg_movie.cpp(350) : error C2065: 'id': nichtdeklarierter Bezeichner
\adscanner-master\src\ffmpeg_movie.cpp(358) : warning C4018: '<': Konflikt zwischen 'signed' und 'unsigned'
\adscanner-master\src\ffmpeg_movie.cpp(362) : error C2065: 'id': nichtdeklarierter Bezeichner
\adscanner-master\src\ffmpeg_movie.cpp(366) : error C2065: 'id': nichtdeklarierter Bezeichner
\adscanner-master\src\ffmpeg_movie.cpp(370) : error C2065: 'id': nichtdeklarierter Bezeichner
\adscanner-master\src\ffmpeg_movie.cpp(374) : error C2065: 'id': nichtdeklarierter Bezeichner
\adscanner-master\src\ffmpeg_movie.cpp(380) : error C2664: 'avpicture_get_size': Konvertierung des Parameters 1 von 'int' in 'AVPixelFormat' nicht möglich
1> Konvertierung in einen Enumerationstypen erfordert explizite Typumwandlung (static_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat)
\adscanner-master\src\ffmpeg_movie.cpp(383) : error C2065: 'id': nichtdeklarierter Bezeichner
\adscanner-master\src\ffmpeg_movie.cpp(389) : error C3861: "avcodec_alloc_context": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(390) : error C3861: "avcodec_open": Bezeichner wurde nicht gefunden.
\adscanner-master\src\ffmpeg_movie.cpp(400) : error C2664: 'avpicture_get_size': Konvertierung des Parameters 1 von 'int' in 'AVPixelFormat' nicht möglich
1> Konvertierung in einen Enumerationstypen erfordert explizite Typumwandlung (static_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat)
\adscanner-master\src\ffmpeg_movie.cpp(403) : error C2664: 'avpicture_fill': Konvertierung des Parameters 3 von 'int' in 'AVPixelFormat' nicht möglich
1> Konvertierung in einen Enumerationstypen erfordert explizite Typumwandlung (static_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat)
\adscanner-master\src\ffmpeg_movie.cpp(409) : error C2664: 'sws_getContext': Konvertierung des Parameters 3 von 'int' in 'AVPixelFormat' nicht möglich
-
UINT - Fehler bitte nicht beachten! Ausversehen alte kompl. Vers. ohne Präprozessor Anweisungen eingefügt!
-
Wirklich niemand?
-
KeineAhnung43 schrieb:
Wirklich niemand?
Dein zweiter Beitrag erweckt den Eindruck, du hättest das Problem bereits gelöst. Außerdem: Riesig lange Fehlermeldung, wenn doch schon der erste Fehler reichen würde. Daher vermutlich die geringe Resonanz.
Zur Frage:
Fangen wir mal ganz am Anfang an, denn da geht's schon gleich komisch los:KeineAhnung43 schrieb:
Das Projekt soll kompiliert werden, die Header wurden nachfolgend geändert (nach Ordnerstruktur der ffmpeg geladenen dev Version)
extern "C"{ #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libswscale/swscale.h> }Das sieht ja erst einmal nach Unsinn aus, aber da ich die Bibliotheken und dein Projekt nicht kenne, will nicht ausschließen, dass das so richtig sein könnte. Daher:
- Warum meinst du, hier
extern "C"zu brauchen?extern "C"dient dazu, C++-Funktionen von C aus nutzen zu können und umgekehrt. Ich kann hier nicht erkennen, wozu dies gut sein sollte. Zumal das doch die Header der Bibliothek sind, nicht deine eigenen, oder? - Wieso denkst du, diese Art,
extern "C"zu nutzen, könne funktionieren? Du kannst schließlich nicht einen x-beliebigen Header mitextern "C"umschließen und erwarten, dass das funktioniert*. Und falls der eingebundene Header doch darauf ausgelegt sein sollte, stellt sich doch die Frage, wieso dasextern "C"nicht im Header selbst steht.
Weiter habe ich jetzt gar nicht geguckt, ich muss erst verstehen, wozu obiger Code da sein soll.
*: Überhaupt sind nur die wenigsten Header darauf ausgelegt, auch nur von irgendetwas umschlossen zu sein. Und ganz gewiss nicht von
extern "C".
- Warum meinst du, hier
-
Ich war dann doch mal so fleißig, die Libraries zu googeln. Und tatsächlich sind diese Header in der Lage von
extern "C"umschlossen zu werden und dies ist auch die empfohlene Methode, wenn man gegen die binary distribution linken möchte. Du scheinst aber damit beschäftigt zu sein, diese Binaries selber zu bauen, oder? Das passt doch irgendwie nicht zusammen. Außerdem gibt es ja ziemlich viel in den FFMPEG-FAQ zum Thema bauen der Library, speziell bauen der Library unter Windows und noch spezieller bauen der Library mittels älterer Visual Studio Versionen. An welcher Stelle des dort beschriebenen Prozesses treten diese Fehler auf? Du folgst doch den dort beschriebenen Anweisungen, oder?
-
Vielen Dank SeppJ für die Mühe!!!!
Ich glaube das hängt damit zusammen das die repository alt ist.
http://ffmpeg.org/doxygen/trunk/index.html
Die Funktionen die die Fehler erzeugen gibt es in ffmpeg überhaupt nicht.Bsp: von avcodec_open gibt es nur eine avcodec_open2() Version.
Kann das sein?