Aperçu de la Procédure de Construction
Ce manuel technique expose la procédure complète pour assembler et déployer le paquet de filtres multimédia LAV Filters. Le processus implique la préparation de l'environnement de développement, la gestion des bibliothèques dépendantes, la compilation via Microsoft Visual Studio et enfin l'intégration système des composants enregistrés.
L'accent est mis sur les exigences logicielles spécifiques (IDE, SDK Windows) ainsi que sur la récupération et la compilation des forks personnalisés de FFmpeg et libbluray. La structure du projet solution et les configurations nécessaires pour une intégration transparente dans un pipeline DirectShow sont également abordées.
Configuration de l'Environnement de Développement
La réussite de l'assemblage repose sur des outils logiciels précis. LAV Filters nécessite une chaîne d'outils moderne pour garantir la compatibilité avec les dernières APIs Windows.
Outils Nécessaires
| Outil | Versions Requises | Remarques |
|---|---|---|
| IDE | Visual Studio 2019 ou ultérieur | Versions antérieures non garanties |
| SDK Windows | Compatibilité IDE | Doit inclure le kit DirectShow |
| Toolchain | v142 minimum | Matching avec VS 2019 par défaut |
Les fichiers projets (.vcxproj) et solutions (.sln) sont optimisés pour les environnements récents. Bien que des tentatives puissent réussir avec des versions plus anciennes, le support officiel se limite aux outils listés ci-dessus.
Gestion des Bibliothèques Dépendantes
Le projet dépend fortement de versions modifiées de bibliothèques critiques. Ces dépôts ne sont pas les releases standard mais des branches maintenues spécifiquement pour ce besoin.
Dépôt FFmpeg Personnalisé
Il est impératif de cloner le dépôt spécifique plutôt que la branche master officielle pour éviter les conflits :
git clone https://gitea.1f0.de/LAV/FFmpeg.git ffmpeg
Ce dossier sera installé sous la racine du projet. Des scripts de construction permettent d'optimiser le build pour GCC/MinGW ou pour MSVC.
Bibliothèque libbluray Modifiée
Similaire à FFmpeg, cette librairie doit être récupérée depuis le dépôt dédié :
git clone https://gitea.1f0.de/LAV/libbluray.git libbluray
Elle requiert généralement une compilation via des fichiers projets natives pour respecter les conventions Windows.
Référentiel des Dépendances Tiers
Un répertoire thirdparty centralise les bibliothèques externes organisationnées par architecture (32 bits vs 64 bits).
| Bibliothèque | Version Suggérée | Rôle Technique |
|---|---|---|
| DAV1D | 1.3.0+ | Décodeur Vidéo AV1 |
| GMP | 6.3.0 | Arithmétique Grande Précision |
| NETTLE | 3.9.1 | Logiciel Cryptographique |
| GNUTLS | 3.7.10 | Sécurité TLS/SSL |
| OPENCORE-AMR | 0.1.6 | Audio AMR Codec |
| SPEEX | 1.2.1 | Codec Vocal |
| LIBXML2 | 2.11.5 | Analyseur XML |
Paramétrage des Variables d'Environnement
Avant d'invoquer les commandes de construction, l'environnement shell doit pointer vers les bibliothèques compilées précédemment.
# Ajout des chemins pkg-config
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:${PWD}/thirdparty/64/lib/pkgconfig"
# Définition des macros système
export CFLAGS="-D_WIN32_WINNT=0x0600 -DWINVER=0x0600"
La sélection entre architectures x86 et x64 impacte significativement les paramètres d'optimisation et les dossiers de sortie.
| Paramètre | x86 (32-bit) | x64 (64-bit) |
|---|---|---|
| Chemin Sortie | thirdparty/32 | thirdparty/64 |
| Options CPU | -cpu=i686 | --enable-cross-compile |
| Optimisations SSE | -mmmx -msse -msse2 | -fno-omit-frame-pointer |
Construction de FFmpeg pour le Projet
Deux scripts principaux orchestrent la génération de FFmpeg. L'utilisation correcte est cruciale pour éviter les erreurs de linking.
Script GCC (Linux/MinGW)
Utilisez ce fichier lorsque l'environnement de target est Unix-like.
#!/bin/bash
# Configuration cible
TARGET_PLATFORM=win32
CLEAN_STATE=true
# Flags de compilation optimisés
BUILD_OPTS="
--enable-shared \
--disable-static \
--enable-gpl \
--enable-d3d11va \
--enable-dxva2 \
--disable-demuxer=matroska \
--enable-filter=scale,yadif,bwdif \
--enable-zlib \
--build-suffix=-lav
"
echo "Début du build FFmpeg sur ${TARGET_PLATFORM}"
./configure $BUILD_OPTS --arch=${TARGET_PLATFORM}
Script MSVC (Windows Native)
Ce script s'exécute via MSYS2 ou Cygwin pour appeler les outils de compilation Microsoft.
#!/bin/sh
CIBLE_ARCH=x64
MODE_DEBUG=true
# Flags spécifiques au compilateur MSVC
CPP_FLAGS="-D_WIN32_WINNT=0x0600 -I../thirdparty/${CIBLE_ARCH}/include/"
LINK_FLAGS="-NODEFAULTLIB:libcmt"
if [ "$MODE_DEBUG" = true ]; then
CPP_FLAGS="${CPP_FLAGS} -MDd"
else
CPP_FLAGS="${CPP_FLAGS} -MD"
fi
# Logique de configuration suivie...
Analyse des Paramètres Critiques
--enable-shared: Génère les DLL nécessaires au runtime.--disable-static: Réduit l'emprise mémoire finale.--build-suffix=-lav: Identifie distinctement les binaires produits.--disable-demuxer=matroska: Préserve le module MKV propriétaire du projet.
Assemblage du Projet Principal Visual Studio
Une fois les dépendances en place, la solution principale peut être traitée. L'architecture suit une logique modulaire séparant les fonctionnalités audio, vidéo et démultiplexage.
Structure de la Solution
| Composant | Type de Build | Fonctionnalité Principale |
|---|---|---|
| LAVSplitter | .ax (DLL) | Séparation du flux média |
| LAVAudio | .ax (DLL) | Décodeur Audio |
| LAVVideo | .ax (DLL) | Décodeur Vidéo |
| baseclasses | .lib | Support DirectShow Standard |
Propriétés de Plateforme (platform.props)
Les propriétés globales définissent la version de la toolchain et la plateforme cible.
<PropertyGroup Label="Setup">
<PlatformToolset>v143</PlatformToolset>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
<UseOfMfc>Default</UseOfMfc>
</PropertyGroup>
Gestion des Entrées/Sorties (common.props)
Ce fichier contrôle où les objets intermédiaires et les résultats finaux seront placés.
<PropertyGroup Condition="$([MSBuild]::IsDebuggable())">
<OutDir>$(SolutionDir)bin_$(PlatformName)d\</OutDir>
<IntDir>obj_d\</IntDir>
</PropertyGroup>
<PropertyGroup Condition="$(![MSBuild]::IsDebuggable())">
<OutDir>$(SolutionDir)bin_$(PlatformName)\</OutDir>
</PropertyGroup>
Liens entre Projets
Chaque projet référencé doit avoir son propre identifiant GUID déclaré explicitement pour éviter les conflits lors de l'importation.
<ItemGroup>
<ProjectReference Include="..\common\baseclasses\baseclasses.vcxproj">
<Project>{GUID-CODE-HERE}</Project>
</ProjectReference>
</ItemGroup>
Configuraton des Macros Préprocesseur
La différence entre une build Debug et Release se reflète aussi dans les définitions préprocesseur.
| Mode | Définitions Actives | Description |
|---|---|---|
| Debug | _DEBUG, _USRDLL | Traces activées, export DLL |
| Release | NDEBUG, _WINDOWS | Optimisations appliquées |
Automatisation du Post-Build
Pour faciliter la maintenance, des tâches post-build copient automatiquement les fichiers générés vers le répertoire cible principal.
<Target Name="AfterBuild">
<Copy SourceFiles="$(TargetPath)"
DestinationFolder="$(OutputPath)"
OverwriteReadOnlyFiles="true"/>
</Target>
Cette étape assure que les bibliothèques .dll et .sys sont accessibles immédiatement après la compilation sans intervention manuelle supplémentaire.