AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Acinerella [Ver. 1.4] FFMpeg Wrapper
Thema durchsuchen
Ansicht
Themen-Optionen

Acinerella [Ver. 1.4] FFMpeg Wrapper

Ein Thema von igel457 · begonnen am 18. Jul 2008 · letzter Beitrag vom 23. Jan 2016
Antwort Antwort
Seite 2 von 3     12 3      
ekke

Registriert seit: 14. Nov 2009
18 Beiträge
 
#1

AW: Acinerella [Ver. 1.4] FFMpeg Wrapper

  Alt 15. Jun 2010, 17:05
Hallo,
nach intensivem Testen glaube ich, dass die Bibliothek ein Speicherleck hat. Wird die Funktions ac_open zyklisch Aufgerufen sieht man im Taskmanager aber auch mit sysinternals Process Explorer das immer mehr Speicher genommen wird.
Die Speicher wird nicht über die deklarierten Funktionen "malloc" "realloc" geholt. Ich glaube das Ganze Problem entsteht im "probe" Bereich.
Irgendwelche Ideen?
Gruß Ekkehard
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Acinerella [Ver. 1.4] FFMpeg Wrapper

  Alt 15. Jun 2010, 18:44
Hallo,

ich bastle gerade am Linux Support meiner Audio Bibliothek und bin in diesem Zuge außerdem dabei Acinerella dort ebenfalls mit allen Formaten zum laufen zu kriegen, weshalb ich nochmals einige Änderungen durchgeführt habe: Z.B. ist der externe Speichermanager vorerst rausgeflogen, weil hierdurch nicht der 16-Byte Align und Padding am Ende eingehalten wurde.

Ich werde im Zuge meiner Änderungen valgrind's memcheck auf das Problem ansetzen und mitteilen ob mir irgendetwas aufgefallen ist. U.u. ist es ein Windows-Spezifisches Problem oder ein Problem mit dem verwendeten ffmpeg-checkout.

Grüße,
Andreas
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
tferl

Registriert seit: 5. Okt 2006
Ort: SBK
5 Beiträge
 
Delphi 7 Professional
 
#3

AW: Acinerella [Ver. 1.4] FFMpeg Wrapper

  Alt 13. Aug 2010, 13:57
Hallo Zusammen,

zunächst einmal Vielen Dank für dieses geniale Projekt.

Mit der Thematik selbst habe ich mich bislang noch nie beschäftigt und konnte Dank der schlanken übersichtlichen Bibliothek dennoch in kürzester Zeit ein Programm basteln, welches mir eine Thumbnail-Übersicht des gewählten Video-Clips erstellt.
Es funktioniert prima, jedoch möchte ich im nächsten Schritt den ganzen Prozess beschleunigen, indem ich mich "springend" durch den Stream bewege.

Dazu müsste ich die Funktion ac_seek() verwenden.

<ZITAT>
{Seeks to the given target position in the file. The seek funtion is not able to seek a single audio/video stream
but seeks the whole file forward. The deocder parameter is only used as an timecode reference.
The parameter "dir" specifies the seek direction: 0 for forward, -1 for backward.
The target_pos paremeter is in milliseconds. Returns 1 if the functions succeded.}
function ac_seek(pDecoder: PAc_decoder; dir: integer; target_pos: int64): integer; cdecl; external ac_dll;
</ZITAT>

Offen gestanden verstehe ich die Erklärung nicht.

Bedeutet der Aufruf ac_seek(Ac_decoder, 0 , 1000 ) , dass ich mich um 1000ms vorwärts bewege ?

Vielen Dank
thomas
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Acinerella [Ver. 1.4] FFMpeg Wrapper

  Alt 14. Aug 2010, 16:14
Die Funktion arbeitet nur mit absoluten Werten (wäre er relativ hätte ich ihn vermutlich timecode_offs genannt). Der DIR Parameter wird von FFMpeg benötigt, da FFMpeg unter Umständen nicht weiß, wo sich der Stream aktuell befindet und somit wissen muss, ob es nun vorwärts oder rückwärts suchen soll.

Mit dem Kommentar am Anfang meine ich nur, dass nicht getrennt in Audio-/Video-Streams gesucht werden kann, sondern nur jeweils in einem einzelnen, obwohl man einen einzelnen Dekoder für einen Teilstream angibt. Zum Suchen wird jedoch der Timecode, der im angegebenen Teilstream steckt, verwendet.

Ich hoffe, ich habe alle Klarheiten nun beseitigt
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
tferl

Registriert seit: 5. Okt 2006
Ort: SBK
5 Beiträge
 
Delphi 7 Professional
 
#5

AW: Acinerella [Ver. 1.4] FFMpeg Wrapper

  Alt 16. Aug 2010, 12:26
Hallo Andreas,

vielen Dank für Deine schnelle Antwort.

Stimmt - hätte ich mit etwas überlegen selbst herausfinden können.
Das man im Audio- und Videostream nicht getrennt "navigieren" kann sehe ich
für meinen Zweck nicht als Nachteil.

Zusammegefasst bedeutet dies, dass ich beim Funktionsaufruf ac_seek(ACDecoder, 0 , 10000);
an die Position 10 Sekunden ab Clipbeginn springe ???

Wenn ich das so probiere, liefert mir der folgende Aufruf
ac_read_package(AC_instance) ein NIL zurück.
(Der Clip ist natürlich länger als 10 Sekunden)


Ich bitte um Nachsicht für meine Unbeholfenheit, aber wie schon gesagt
das Thema ist absolut neu für mich....

Viele Grüße
thomas
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Acinerella [Ver. 1.4] FFMpeg Wrapper

  Alt 16. Aug 2010, 12:42
Ja, die Annahme ist korrekt Nur wenn du bereits 10 Sekunden abgespielt hast, musst du -1 als zweiten Parameter übergeben.

Leider ist das springen in Videos eine kniffelige Angelegenheit und ob und wie gut es funktioniert hängt vor allem vom Containerformat ab - und auch FFMpeg ist leider nicht perfekt.

Um das Springen im Video zu ermöglichen musst du auf jeden Fall eine "Seek"-Callback-Prozedur an die ac_open Routine übergeben.

Beim Abspielen von Audio, wofür ich Acinerella persönlich am meisten einsetze funktioniert das Suchen jedoch meistens einwandfrei (außer für FLAC Dateien ohne OGG-Container).

Andreas
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Acinerella [Ver. 1.1] FFMpeg Wrapper

  Alt 16. Okt 2008, 18:20
Ich bekomme keine acinerella.so erzeugen.
Ich bin in src verzeichnis gegangen und habe make aufgerufen von der Console.
Er gibt Fehler:
Zitat:
gcc -c -fPIC acinerella.c
In file included from acinerella.c:19:
acinerella.h:168: error: expected declaration specifiers or ‘...’ before ‘*’ token
acinerella.h:168: error: ‘__cdecl’ declared as function returning a function
acinerella.h:172: error: expected declaration specifiers or ‘...’ before ‘*’ token
acinerella.h:172: error: ‘__cdecl’ declared as function returning a function
acinerella.h:172: error: redefinition of typedef ‘__cdecl’
acinerella.h:168: error: previous declaration of ‘__cdecl’ was here
acinerella.h:174: error: expected declaration specifiers or ‘...’ before ‘*’ token
acinerella.h:174: error: ‘__cdecl’ declared as function returning a function
acinerella.h:174: error: redefinition of typedef ‘__cdecl’
acinerella.h:172: error: previous declaration of ‘__cdecl’ was here
acinerella.h:175: error: expected declaration specifiers or ‘...’ before ‘*’ token
acinerella.h:175: error: ‘__cdecl’ declared as function returning a function
acinerella.h:175: error: redefinition of typedef ‘__cdecl’
acinerella.h:174: error: previous declaration of ‘__cdecl’ was here
acinerella.h:176: error: expected declaration specifiers or ‘...’ before ‘*’ token
acinerella.h:176: error: ‘__cdecl’ declared as function returning a function
acinerella.h:176: error: redefinition of typedef ‘__cdecl’
acinerella.h:175: error: previous declaration of ‘__cdecl’ was here
acinerella.h:179: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_mem_mgr’
acinerella.h:182: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_init’
acinerella.h:183: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_free’
acinerella.h:193: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_open’
acinerella.h:200: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_close’
acinerella.h:203: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_get_stream_info’
acinerella.h:206: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_read_package’
acinerella.h:208: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_free_package’
acinerella.h:212: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_create_decoder’
acinerella.h:214: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_free_decoder’
acinerella.h:217: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_decode_package’
acinerella.c:35: error: expected specifier-qualifier-list before ‘ac_openclose_callback’
acinerella.c: In function ‘unique_protocol_name’:
acinerella.c:106: warning: incompatible implicit declaration of built-in function ‘strcpy’
acinerella.c: At top level:
acinerella.c:133: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘mgr_malloc’
acinerella.c:134: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘mgr_realloc’
acinerella.c:135: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘mgr_free’
acinerella.c:137: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_mem_mgr’
acinerella.c:147: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_init’
acinerella.c:160: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_free’
acinerella.c: In function ‘file_open’:
acinerella.c:177: error: ‘ac_data’ has no member named ‘open_proc’
acinerella.c:178: error: ‘ac_data’ has no member named ‘open_proc’
acinerella.c: In function ‘file_read’:
acinerella.c:187: error: ‘ac_data’ has no member named ‘read_proc’
acinerella.c:188: error: ‘ac_data’ has no member named ‘read_proc’
acinerella.c: In function ‘file_close’:
acinerella.c:197: error: ‘ac_data’ has no member named ‘close_proc’
acinerella.c:198: error: ‘ac_data’ has no member named ‘close_proc’
acinerella.c: At top level:
acinerella.c:204: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_open’
acinerella.c:257: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_close’
acinerella.c:264: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_get_stream_info’
acinerella.c:341: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_read_package’
acinerella.c:364: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_free_package’
acinerella.c:461: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_create_decoder’
acinerella.c: In function ‘ac_decode_video_package’:
acinerella.c:484: warning: ‘img_convert’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:2514)
acinerella.c: In function ‘ac_decode_audio_package’:
acinerella.c:522: warning: assignment makes pointer from integer without a cast
acinerella.c: At top level:
acinerella.c:535: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_decode_package’
acinerella.c:574: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘ac_free_decoder’
make: *** [acinerella] Fehler 1
Ich wollte deine LIB mal unter Linux ausprobieren. Weil da suche ich noch eine Möglichkeit unter Lazarus zuverlässig Videos und sowas abzuspielen ! TV Geht auch ? Toll !
ich wollte erstmal eine Linux LIb erzeugen bevor ich deinen Player ausprobieren kann.
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Acinerella [Ver. 1.1] FFMpeg Wrapper

  Alt 16. Okt 2008, 18:43
Ändere mal folgendes:
Vorher
Code:
#ifdef _WIN32
#define CALL_CONVT __cdecl
#else
#define CALL_CONVT __cdecl
#endif
Nachher
Code:
#ifdef _WIN32
#define CALL_CONVT __cdecl
#else
#define CALL_CONVT
#endif
Allerdings ist das (leider) nicht das einzige Problem. Viele Linux-Distributionen vertreiben Versionen von FFMpeg, die die alte img_convert nicht mehr an Bord hat, bzw. diese nicht mehr exportieren. Abhilfe schafft hier entweder das manuelle Kompilieren der FFMpeg oder das Warten auf eine der nächsten Acinerella-Versionen, denn ich denke dass Andreas diese Funktion ersetzen wird.
Solltest du einen Fehler beim Kompilieren der test.c erhalten, der besagt, dass O_BINARY nicht gefunden wurde, so musst du außerdem
folgendes in die test.c einfügen:
Code:
#ifndef WIN32
#define O_BINARY 0
#endif
Der "Fehler" rührt daher, dass es unter Linux eben keinen unterschied zwischen dem binären und "textuellen"(komisches Wort, nennt man das so?) Öffnen von Dateien gibt, unter Windows allerdings schon. Daher braucht man die Konstante unter Linux/Unix nicht und wird schlichtweg nicht definiert. Durch das Setzen auf 0 sollte es auch bei Oder-Verknüpfungen von diesen O_-Konstanten zu keinerlei Problemen kommen.

Viel Glück.
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
mimi

Registriert seit: 1. Dez 2002
Ort: Oldenburg(Oldenburg)
2.008 Beiträge
 
FreePascal / Lazarus
 
#9

Re: Acinerella [Ver. 1.1] FFMpeg Wrapper

  Alt 16. Okt 2008, 18:51
jetzt bekomme ich folgende Fehler:
Zitat:
gcc -c -fPIC acinerella.c
acinerella.c: In function ‘unique_protocol_name’:
acinerella.c:106: warning: incompatible implicit declaration of built-in function ‘strcpy’
acinerella.c: In function ‘ac_open’:
acinerella.c:239: warning: incompatible implicit declaration of built-in function ‘strcpy’
acinerella.c:240: warning: incompatible implicit declaration of built-in function ‘strcat’
acinerella.c: In function ‘ac_decode_video_package’:
acinerella.c:484: warning: ‘img_convert’ is deprecated (declared at /usr/local/include/libavcodec/avcodec.h:2514)
gcc -shared -o acinerella.dll acinerella.o -lavformat -lavcodec -lavutil -lm -lws2_32
/usr/bin/ld: cannot find -lws2_32
collect2: ld returned 1 exit status
make: *** [acinerella] Fehler 1
Zitat:
Der "Fehler" rührt daher, dass es unter Linux eben keinen unterschied zwischen dem binären und "textuellen"(komisches Wort, nennt man das so?) Öffnen von Dateien gibt,
Was genau meinst du damit ? Meinst du damit das Linux nicht auf die Endung achtet sondern auf den Inhalt ?
oder was genau meinst du damit ?
Michael Springwald
MFG
Michael Springwald,
Bitte nur Deutsche Links angeben Danke (benutzte überwiegend Lazarus)
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Acinerella [Ver. 1.1] FFMpeg Wrapper

  Alt 17. Okt 2008, 00:33
Hi,

bis das läuft ist wohl noch mehr zu tun.
Für die Warnungen musst du noch #include <string.h> hinzufügen, das ist ein kleiner Bug der aber in der aktuellen Version behoben sein sollte. Das mit der img_convert hatte ich ja bereits erwähnt, da bastelt Andreas dran.
Das letzte Problem ist ein Problem der Makefile, bishher ist es offenbar noch nicht gelungen eine Plattformabhänge Kompilierung hinzubekommen. Wenn du dir die Makefile mal anschaust, wirst du feststellen das es zwei befehle gibt, einen für Linux, einen für Windows. Du musst nur den richtigen ausführen. Das heißt, ich glaube in der im Moment offiziellen Version gibt es das noch nicht. Ersetz mal das in der Makfeile angegebene durch folgendes:
gcc -shared -o libacinerella.so acinerella.o -lavformat -lavcodec -lavutil -lm -lswscale

Zitat:
Was genau meinst du damit ? Meinst du damit das Linux nicht auf die Endung achtet sondern auf den Inhalt ?
oder was genau meinst du damit ?
Nein. Ich glaube O_TEXT unter Windows würde bis zum ersten 0-Zeichen lesen, und danach die Datei als fertig gelesen betrachten, da es so vorgesehen ist. Unter Unix wird immer bis EOF gelesen, egal ob Binär oder Text, da gibt es unter Unix keinen unterschied. Vielleicht spielt auch noch CR+LF eine Rolle.
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz