On Tue, 21 Nov 2023 18:05:22 +0100 (CET), Michael Van Canneyt via lazarus <lazarus@lists.lazarus-ide.org> wrote:
> > >On Tue, 21 Nov 2023, Bo Berglund via lazarus wrote: > >Where did you find paslibvlc ? I found it here years ago: https://prog.olsztyn.pl/paslibvlc/ And the first commit to my video tool in svn using it was done in May 2019... > >The one I maintain is part of FPC and is in fpc/packages/libvlc. Yes and a few days ago I found it to be a part of fpc/lazarus and that made me try to see if I could find all the stuff I have used in paslibvlc also here so I could just exchange the player and modify the calls. Makes much more sense to use a package that is in effect maintained than one that is stale on the net. >> >> I have tried replacing PasLibVlc with LclVlc shipped with Lazarus but I am >> missing a couple of items that I use during playback (varying play speed and >> audio shift for lipsync), which PasLibVlc does expose. > >It should not be difficult to add those properties to lclvlc If one knows how it is done internally I guess it is doable but for me not... But I can trace what I use backwards into PasLibVlc and see where it finally ends up. So: --------- Delay audio ------------------------ I call the audio delay like this: procedure TfrmMain.btnShiftAudioClick(Sender: TObject); //For testing purposes, delay audio by value from speAudio var SyncCmd: string; begin vlcPlayer.SetAudioDelay(speAudio.Value * 1000); end; which calls this inside PasLibVlc: procedure TPasLibVlcPlayer.SetAudioDelay(delay: Int64); begin if not Assigned(p_mi) then exit; libvlc_audio_set_delay(p_mi, delay); end; and this is where it ends up: (** * Set current audio delay. The audio delay will be reset to zero each time the media changes. * * param p_mi media player * param i_delay the audio delay (microseconds) * return 0 on success, -1 on error * version LibVLC 1.1.1 or later *) var libvlc_audio_set_delay : function( p_mi : libvlc_media_player_t_ptr; i_delay : Int64 ) : Integer; cdecl; ------------- Set video speed ----------------------- To set the speed this is what I use in my code: procedure TfrmMain.btnFFClick(Sender: TObject); begin vlcPlayer.SetPlayRate(speSpeed.Value); end; It goes here: procedure TPasLibVlcPlayer.SetPlayRate(rate: Integer); begin if (p_mi = NIL) then exit; if (rate < 1) then exit; if (rate > 1000) then exit; libvlc_media_player_set_rate(p_mi, rate / 100); end; And it winds up here: (** * Set movie play rate * * param p_mi the Media Player * param rate movie play rate to set * return -1 if an error was detected, 0 otherwise (but even then, it might * not actually work depending on the underlying media protocol) *) var libvlc_media_player_set_rate : function( p_mi : libvlc_media_player_t_ptr; rate : Single // float ) : Integer; cdecl; >> >> What are the requirements for the executable's environment for it to find the >> libvlc files? > >Notmally nothing. > >> >> And is it necessary for them to be there for the building process only or for >> the end user's execution too? > >libvlc is loaded dynamically, you can specify the name. Well, for lclvlc there are no problems because it finds the lib on the platforms I have tested it. Both RPi4 versions (32 and 64 bit) and Windows10. > >Michael. Thanks again! Nice to communicate with someone "in the know" for once! -- Bo Berglund Developer in Sweden -- _______________________________________________ lazarus mailing list lazarus@lists.lazarus-ide.org https://lists.lazarus-ide.org/listinfo/lazarus