Assemblage et Installation des Filtres LAV : Du Code Source au Composant Exécutable

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.

Étiquettes: LAV-Filters FFmpeg DirectShow VisualStudio libbluray

Publié le 19 octobre à 23h01