Witam,
Próbuję napisać sobie odtwarzacz w Delphi 10.4.2 Sydney Community Edition bazujący na LibVLC (vlc-4.0.0-dev-win64 z https://artifacts.videolan.org/vlc/nightly-win64/).
Używam do tego wrapera PasLibVlc_3.0.7 z : https://prog.olsztyn.pl/paslibvlc/
Jak do tej pory udało mi się napisać prosty odtwarzacz strumieni TV naziemnej DVB-T/T2, nawet działa.
Ale mam problem z odczytywaniem logów z libvlc w moim programe, konkretnie chodzi o funkcję libvlc_log_set oraz callback odczytujący informację.
Funkcje te są zadeklarowane tak:
var
libvlc_log_set : procedure(
p_instance : libvlc_instance_t_ptr;
cb : libvlc_log_cb_t;
data : Pointer); cdecl;
oraz
type
TVaPtrListPtr = ^Pointer;
type
libvlc_log_cb_t = procedure(
data : Pointer;
level : libvlc_log_level_t;
const ctx : libvlc_log_t_ptr;
const fmt : PAnsiChar;
args : TVaPtrListPtr); cdecl;
Z ustawieniem libvlc_log_set i podpięciem libvlc_log_cb_t nie mam problemu.
Nie bardzo umiem w Delphi przekonwertować parametry const fmt i args tak aby odczytać pełną informację (sformatowany string).
Pisząc taki program w Qt c++ do konwersji używam vasprintf jak zdefiniowane w załączniku:
compat.zip
W źródłach (vlc-4.0.0-dev-win64) libvlc.h funkcje libvlc_log_set oraz ibvlc_log_cb_t są zdefiniowane następująco:
LIBVLC_API void libvlc_log_set( libvlc_instance_t *p_instance,
libvlc_log_cb cb, void *data );
oraz:
typedef void (*libvlc_log_cb)(void *data, int level, const libvlc_log_t *ctx,
const char *fmt, va_list args);
Czy mogę prosić o pomoc w przerobieniu funkcji z załączników na kod w Delphi/Pascal?
Jeżeli w Delhi są gotowe funkcje do realizacji takiego zadania, bardzo proszę o nakierowanie mnie na właściwe rozwiązanie.