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