61 lines
2.8 KiB
YAML
61 lines
2.8 KiB
YAML
---
|
|
Log of things tried:
|
|
|
|
- c2nim on vlc/src/include/vlc/vlc.h
|
|
Failed to generate any meaningful.
|
|
|
|
- c2n on vlc/src/include/vlc/libvlc.h
|
|
Memory usage exploded (24+ GB)
|
|
|
|
- Next will be to write a libvlc.nim by hand.
|
|
|
|
This worked. However, ran into a problem running. Link to VLC library was
|
|
working with libvlc.dll and libvlccore.dll in the same directory as
|
|
wdiwtlt.exe, but libvlc_new always returned NULL (unable to initialize VLC
|
|
instance).
|
|
|
|
This led me down a rabbit-hole of compiling VLC from source to be able to
|
|
add debug statements to the initialization logic. Follwed this guide
|
|
"https://wiki.videolan.org/Win32Compile/" to cross-compile for Windows from
|
|
Ubuntu (WSL2).
|
|
|
|
Notably, the chromecast plugin fails to compile. Initially it was because
|
|
the code present in the VLC contrib folder was missing .inc files
|
|
(specifically port_def.inc). Ubuntu has these libraries (need to install
|
|
protobuf dev package) underneath /usr/include/google, but after symlinking
|
|
that into the include path for g++, there were still compilation errors. As
|
|
best I can tell, the version of Mingw64 present doesn't support the win32
|
|
threading primitives required by the chromecast plugin. Rather than debug,
|
|
I disabled the chromecast plugin when building the contrib packages using
|
|
"../extras/package/win32/configure.sh \
|
|
--host=$VLC_HOST_TRIPLET \
|
|
--enable-chromecast=false \
|
|
--build=x86_64-pc-linux-gnu"
|
|
|
|
After disabling chromecast I was able to build VLC. To get the DLLs I
|
|
needed, I used the `package-win-common` build target.
|
|
|
|
Ultimately, the cause of libvlc failing to initialize an instance was the
|
|
lack of plugins. VLC needs more than just the libvlc and libvlccore DLLs.
|
|
It needs to know the location of its plugins. Ultimately I decided it was
|
|
easier to relocate the wdiwtlt.exe binary to the same folder as the vlc.exe
|
|
binary (with plugin subfolders, DLLs besides, etc.) and run from there.
|
|
After doing this, wdiwtlt was able to initialize and use the libvlc
|
|
instance, playing audio.
|
|
|
|
Where Am I:
|
|
- Implementing WdiwtltLibrary (core media management):
|
|
- Implemented the clean function
|
|
- TODO: implement media scanning using vlc to parse tags
|
|
|
|
- Implementing WdiwtltDb based on JSON-formatted persistence of the in-memory
|
|
object graph. Still corresponds highly to the original WDIWTLT database
|
|
schema. Eventually I may want to migrate to SQLite for the persistence and
|
|
in-memory acccess, but I would want to add support for SQLite to fiber_orm
|
|
|
|
TOOD:
|
|
- Implement media scanning in WdiwtltLibrary usng libvlc to parse tags.
|
|
- Implement a simple version of the TUI, prompt-based, writing responses to
|
|
stdout. No fancy redraws yet, just typical shell back and forth.
|
|
- Implement a more robust TUI using illwill directly or using nimwave
|