Génération de flux vidéo H264 permettant un décodage - SoC

Transcription

Génération de flux vidéo H264 permettant un décodage - SoC
Projet M1 SESI
Année 2013-2014
Génération de flux vidéo H.264 permettant un décodage à mémoire bornée
CONTEXTE :
Le travail se situe dans le contexte d'une collaboration avec l'équipe AOSTE située à l'INRIA Rocquencourt.
Dans ce cadre, pour fournir des études de cas variées, nous sommes en train de reécrire une application de
décodage de flux vidéo H.264 [1] déjà existante [2]. Cette application a été réécrite, par l'équipe ALSOC, en
forme de graphe de tâches parallèles [3]. Cette modélisation a plusieurs caractéristiques qui complexifient
l’analyse de performances (notamment de temps d’exécution) : Les tâches accèdent à une mémoire partagée
globale servant à stocker les images déjà décodées, ils se synchronisent à l’aide de spinlocks à grain fin (niveau
macroblock), alors que le parallélisme du code est du niveau « slice ».
Notre but est d'utiliser une technique de parallélisation facilitant l’analyse temporelle, mais sans affecter les
performances. Ainsi, nous passerons à une modélisation de type flot de données sans utilisation de mémoires
partagées globales, où les synchronisations sont associées exclusivement aux flots de données. L’expression du
parallélisme se fera au niveau des lignes de macroblocks ou même des macroblocks (et sera le même que le
niveau de la synchronisation).
Le travail part du code décodeur existant et de la technique de parallélisation statique décrite dans [4]. Dans un
premier temps, la nouvelle technique sera testée sous SoCLib/DSX [5]. La fonction de décodage de l'application
sera ensuite reprise et modélisée dans le formalisme de l'INRIA. L'INRIA propose un outil d'ordonnancement
statique pour le code des tâches mais aussi pour les communications sur le NoC [6].
OBJECTIF:
Nous souhaitons disposer d'un outil qui nous permettra de générer les flux H.264 qui correspondent à nos
critères (distance maximale pour l'estimation de mouvement, nombre de slices, etc.). Pour cela, un encodeur
existant [7] est à étudier et à bien paramétrer en lien avec les propriétés requises par notre décodeur parallélisé.
Cet encodeur est disponible sur le domaine public.
TRAVAIL DEMANDE:
Les étapes seront les suivantes :
Acquérir une bonne compréhension de la norme H.264 et de la plate-forme de simulation.
Premier volet : étudie de l'encodeur X264
Deuxième volet : parametrer l'encodeur afin de générer de flux selon les critères requises (nombre de
slices, distance maximale des pixels de référence etc.)
Troisième volet : constituer une collection de flux H.264 documentée.
Le bon fonctionnement sera validé en utilisant les flux générés comme flux d'entrée pour l'application de
decodage H.264 existante dans le département.
PREREQUIS : choix du module MULTI en S2, bonnes connaissances de la programmation C sous Linux
ENCADRANTE : Daniela Genius, Maison de la Pédagogie Aile A Bureau 004/ e-mail: [email protected],
avec la participation de Dumitru Potop-Butucaru, INRIA Rocquencourt, [email protected]
[1] International Standard of Joint Video Specification (ITU-T Rec. H. 264--ISO/IEC 14496-10 AVC) (2005)
[2] Martin Fiedler, Implementation of a basic H.264/AVC Decoder, Seminar Paper, Universtät Chemnitz (2004)
[3] Joel Porquet : Décodeur H.264 en forme de graphe de tâches (implémentation dans le cadre d'un stage chez
Thalès Communications, 2008, disponible sur les machines du département SoC)
[5] Nicoals Pouillon, Design Space Explorer DSX: https://www-asim.lip6.fr/trac/dsx/
[6] M. Djemal et. al. Programmable routers for efficient mapping of applications onto NoC based MPSoC,
DASIP (2012)
[4] C. Meenderinck et al. Parallel scalability of H.264
[7] Encodeur X264: http://www.videolan.org/developers/x264.html et
http://mewiki.project357.com/wiki/X264_Settings