Delphi 10.4 PasLibVlc - libvlc_log_set(...) - jak odczytać informację z logów

0

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.

1

Napisz może do autora tego wrapera, Robert Jędrzejczyk e-mail: [email protected]

0

@PrzemysławWiśniewski: ok, dzięki. Już sobie poradziłem. Robiłem błąd nie alokując pamięci na bufor zwrotny z funkckji wvsprintfA dostępnej w module Winapi.Windows

1 użytkowników online, w tym zalogowanych: 0, gości: 1