Logicielsmoto.com
http://www.logicielsmoto.com/phpBB/

Décompression vidéo en temps réel
http://www.logicielsmoto.com/phpBB/viewtopic.php?f=3&t=528
Page 1 sur 1

Auteur:  Daniel Coulom [ 15 Aoû 2015, 18:41 ]
Sujet du message:  Décompression vidéo en temps réel

Vidéo de la dernière démo de Sam, filmée sur MO5 : http://www.filedropper.com/hammer
Cette démo fonctionne sur toutes machines Thomson, TO ou MO.

Auteur:  Prehisto [ 16 Aoû 2015, 09:36 ]
Sujet du message:  Re: Décompression vidéo en temps réel

Une petite explication ?
Je suppose que cette démo ne peut se regarder qu'avec un support SD ?

Auteur:  Daniel Coulom [ 16 Aoû 2015, 13:21 ]
Sujet du message:  Re: Décompression vidéo en temps réel

Toute l'histoire, depuis les premiers essais à 58 Ko/s jusqu'à la version actuelle à 120 Ko/s,
est dans ce fil de discussion : http://forum.system-cfg.com/viewtopic.php?f=25&t=6367
Vous y trouverez aussi les sources de tous les programmes, et les explications de Sam.

Auteur:  Prehisto [ 16 Aoû 2015, 14:08 ]
Sujet du message:  Re: Décompression vidéo en temps réel

Évidemment, c'est plus facile avec du débit :)

Auteur:  Prehisto [ 16 Aoû 2015, 17:49 ]
Sujet du message:  Re: Décompression vidéo en temps réel

Daniel Coulom a écrit:
Toute l'histoire, depuis les premiers essais à 58 Ko/s jusqu'à la version actuelle à 120 Ko/s,
est dans ce fil de discussion : http://forum.system-cfg.com/viewtopic.php?f=25&t=6367
Vous y trouverez aussi les sources de tous les programmes, et les explications de Sam.

Il peut les mettre ici aussi.

Auteur:  Samuel Devulder [ 17 Aoû 2015, 13:09 ]
Sujet du message:  Re: Décompression vidéo en temps réel

Oui je suis là, en vacance, mais actif aussi. Je suis content de voir que Daniel poste à nouveau ici. :bien:

D'abord le son

Pour résumer: c'est la suite de la manip initiale avec les carte SD. Historiquement il y a eu des cartes SD lues en SPI (série) via un port manette. Il nous en avait parlé ici il y a 2 ans environ. Cette solution avait pas mal évoluée, avec notamment la reprogrammation de l'eprom du boitier nano-réseau permettant (je passe les détails) de monter et utiliser de façon transparentes des diskettes virtuelles sur cartes SD pour tout type de MO/TO (sauf le TO9...). C'est le contrôleur CS91-280 (http://dcmoto.free.fr/bricolage/cs91-280/index.html) dont le fil de discussion se trouve ici: http://www.forum.system-cfg.com/viewtop ... =25&t=4785.

Une diskette c'est bien et 4 diskettes c'est mieux. C'est le maximum qu'un THOMSON sache faire. Pour aller plus loin, l'an dernier, Daniel a eu l'idée de streamer du son depuis la carte SD connectée au port manette en utilisant un mode de lecture de secteurs continus (CMD18). Ca n'est pas simple a mettre au point car si au sein d'un bloc de carte SD les délais sont constants, entre deux blocs, une carte SD met plus ou moins de temps pour répondre. Daniel a trouvé le moyen d'utiliser des bits inutilisés des octets son pour bufferiser plusieurs octets qui seront joués en inter-bloc. Ca marche pas mal et fournit un son à environ 5.5khz, ce qui est très très honorable pour les thomson (http://www.forum.system-cfg.com/viewtop ... 943#p85943).

Comme la manip de lancement est un peu fastidieuse, j'ai eu l'idée de fusionner une diskette virtuelle et un fichier son (http://www.forum.system-cfg.com/viewtop ... 706#p94706). Du coup la manip est beaucoup plus simple et permet d'écouter facilement des heures et des heures de musiques sur thomson (je crois que quelqu'un l'a fait sur un salon). Cependant la préparation des données est quand même compliquée (il faut extraire le fichier son, le downsampler, le sauver dans un format spécial, préparer une image titre, executer un EXE windows, etc). Aussi j'ai écrit un script qui est capable de convertir des CD Audios à la volée en fichier "SD" pour thomson en quantité industrielle. J'en ai fait plein (dispo ici: http://dcmoto.free.fr/programmes/sdplay/index.html). Voici quelques exemples:
Résultat des courses. Le thomson peut enfin jouer de la musique à 5.5khz streamée depuis une carte SD pendant des heures et des heures, ce qui est vachement cool. :sol: On est plus limité par la RAM dispo :bien:

Auteur:  Samuel Devulder [ 17 Aoû 2015, 14:42 ]
Sujet du message:  Re: Décompression vidéo en temps réel

Ensuite l'image

Daniel avait réussi vers Noël 2013, toujours avec le module SDMOTO lisant la carte SD en série, à faire jouer une video (muette) de simon-cat (http://www.forum.system-cfg.com/viewtop ... 320#p78320). Ce clip se prête bien à l'encodage et au flux de 5 ou 6ko/sec car il y a peu de changements dans l'image. Mais c'est un clip en noir&blanc et muet. Ce qui est dommage maintenant qu'il y a du son. C'est resté longtemps le seul clip animé streamé sur Thomson. Plus tard, suite aux résultats sur le son, j'ai essayé de voir si l'on ne pouvait pas trouver un codage permettant de mixer son et image avec l'interface et les débits du CS91-280 et ce pour des clips pas spécialement calmes (http://www.forum.system-cfg.com/viewtop ... 74#p100574). Le résultat est moyen. En noir&blanc on pourrait avoir
Image
et en couleur (inspiré de la demo de 2011 "Oh la belle bleue").
Image
La résolution est vraiment pauvre. :(

En fait, ce qui limite est le débit de 5.6-6Ko/sec qui est vraiment trop bas pour avoir une bonne image et du son simultanément. Pour aller plus loin il faudrait un débit 8 à 10 fois plus grand. Or le controlleur CS91-280 est optimisé au maximum. Fin de l'histoire. On ne pourra pas avoir pas de streaming audio+video de haute fréquence sur thomson ?

Non! Car Daniel a eu l'idée astucieuse en mai dernier de faire lire la carte SD par un arduino et de fournir les données en parallèles sur les bits des port joystick au thomson (http://forum.system-cfg.com/viewtopic.php?f=18&t=6296).
Fichier(s) joint(s):
Commentaire: Thomson + Arduino
thomson+arduino.gif
thomson+arduino.gif [ 74.67 Kio | Vu 5297 fois ]

En parallèle ca veut dire minimum 8 fois plus rapide, mais en fait bien plus car il a réussi à faire jouer du son à 58824 octets/seconde (11x plus que le mode série). 58khz, c'est bien plus qu'une platine CD. Il y a du rab de bande passante, et du début juin, il a réussi a faire jouer une anim audio+video de Simon's cat précédemment silencieuse avec un son à 22khz (http://forum.system-cfg.com/viewtopic.php?f=25&t=6367).

Alors oui c'est une démo en noir et blanc. Aussi j'ai essayé de voir ce que ca donnerait avec mon codage "couleur" avec un débit 11x plus grand:
Image
C'est mieux, plus fin, mais c'est pas encore ca :L

Le code du player d'animation N&B a été régulièrement optimisé et sa structure a été modifiée pour laisser plus de bande passante à la video permettant de jouer d'autres clips que Simon's cat (http://forum.system-cfg.com/viewtopic.p ... 19#p104119). Le son à 16khz est largement suffisant et il y a enfin un clip plein écran avec de grosses parties mobiles.
Image

Le tramage utilisé par Daniel est le classique Bayer qui permet 17 niveaux de gris. De mon coté j'ai fait un test avec un Void-and-Cluster à 65 niveaux qui donne un résultat vraiment bien sur les films (http://forum.system-cfg.com/viewtopic.p ... 61#p104161)
Image
Du coup j'ai publié un script de génération de video avec ce tramage ainsi que plein de clips (http://forum.system-cfg.com/viewtopic.p ... 19#p104219). Le script a été optimisé pour utiliser au mieux la bande passante du stream soit en augmentant le fps soit en diminuant la taille de l'écran (http://forum.system-cfg.com/viewtopic.p ... 27#p104427).

Auteur:  Samuel Devulder [ 17 Aoû 2015, 14:45 ]
Sujet du message:  Re: Décompression vidéo en temps réel

Et la couleur?

Super, c'est bien. On a de l'animation et du son à 16khz simultanément sur Thomson. C'est une grande première... mais c'est du N&B. On est donc limité à Brel à l'Olympia ou Brassens à Bobino :L

En fait non pas vraiment. Avec un très légère modification du player que j'ai introduite (http://forum.system-cfg.com/viewtopic.p ... 48#p104448) la couleur est apparue!
ImageImage

Au début elle était palote, mais à force de travail sur le tramage elle est devenu plus franche, plus fine, et plus détaillée (http://forum.system-cfg.com/viewtopic.p ... 25#p104525).
Image

Avec le débit utilisé (3*16khz: 1 octet son, un déplacement vidéo non signé, un octet vidéo), on pouvait jouer des clips quelconques (c'est à dire pas spécialement statiques comme "Simon's cat", ni complétement changeant) à 10 fps avec une image représentant environ 70% de la surface de l'écran. Tout cela avec le même encodage que celui des clips N&B (Simon's cat). Perso j'étais persuadé que l'encodage n'était pas adapté aux changements massif de l'écran car beaucoup de déplacements de un seul octet sont présents. En fait, quand une zone de l'écran change les octets suivants changent très probablement eux aussi.

Aussi j'ai modifié l'encodage des données pour éviter de perdre de la bande passante lors des changements massifs. J'ai introduit le mode "deux octets", c'est à dire que sous certaines conditions, le déplacement vaut implicitement "1" et l'octet du flux est alors traité comme une donnée vidéo. Résultat on multiplie par deux la bande passante lors des changements massifs (http://forum.system-cfg.com/viewtopic.p ... 28#p104928). Le résultat est nettement meilleur. Les clips passent quasiment tous alors en plein écran et jusqu'à 19hz en vidéo. Ils sont super détaillés et super fluides. Le mode couleur inciterait presque à regarder un film en entier devant son Thomson :D (j'ai testé "starwars", et "les mondes de Ralph" en bon cobaye). Et tout cela sans changement de hardware ni même sans changement de protocole de communication. Bref toujours à ~58khz.

Avec un petite modif du protocole (synchro sur front montant et descendant) on pouvait encore améliorer un peu les débits. Mais Daniel, revenant de vacances, début juillet a annoncé alors avoir trouver le moyen de Streamer du son à 120Ko/sec en faisant porter l'horloge de synchronisation par la donnée audio: http://forum.system-cfg.com/viewtopic.p ... 84#p104984 (on plafonnait à 58ko/sec avant). Le débit est plus que doublé! :coolfuck:

OK.. 120Ko/sec c'est impressionnant, mais c'est possible parce qu'on fait du son seul. Pour la partie vidéo, tous les bits sont utiles et on ne peut pas encoder l'horloge dans la video. Bref c'est pas possible d'aller plus vite. :voyons: Sauf que Daniel a eu l'idée brillante de ne plus faire d’acquittement pour chaque octet, mais uniquement sur les octets audio qui ne représentent que 1/7 (14%) du flux, charge restant à l'ardiuino de synchroniser l'envoi des autres octets au bon moment pour le player coté thomson. La mise au point de cette synchro à l'aveugle ne fut pas facile, et c'est quand Daniel a reçu un analyseur logique que la durée des instructions "arduino" fut précisément établie et le code C coté arduino étalonné. Avec ca, on lit 7 octets de l'arduino en 60 cycles 6809. La synchro thomson->arduino ne se fait que tous les 420 cycles, soit 116.7ko/sec de débit effectif. On est vraiment tout proche du maximum théorique de 125ko/sec :cool: En outre, le format des blocs (73*7 + 1 = 512) permet de coller un octet audio suffisant pour attendre le prochain bloc de la carte SD sans craquement. C'est magique: tout tombe bien, exactement au bon moment :bien:

Tout devrait rouler sans problème sur le matériel réel.... Sauf que...

Dernière péripétie: alors que sur le papier tout doit bien marcher: player 6809 et arduino marchant de concert, synchronisation se faisant tous les 7 octets, simulation sous émulateur parfaite. Sur machine réelle rien ne marche. En fait des parasites électriques viennent perturber ce joyeux orchestre. Daniel a trouvé un contournement électronique (http://forum.system-cfg.com/viewtopic.p ... 73#p107073) et depuis le W.E. dernier les clips sont joués sans problèmes en plein écran avec du son à 16.67Khz sur thomson.
Image

Voila, j'ai été un peu long pour raconter cette aventure, et pourtant j'ai vachement simplifié. Mais comme elle démarre de loin (2013) et a connu pas mal d'étapes clefs sur plusieurs fils de discussions, il fallait au moins 3 messages pour que l'on arrive à se faire une idée du déroulement. Pour avoir tout les détails de l'histoire, il faut se référer aux liens que Daniel a posté ou à ceux que j'ai mis dans les messages. Si j'ai oublié un truc important, je pense que Daniel nous apportera des compléments ici.

Auteur:  Prehisto [ 17 Aoû 2015, 16:36 ]
Sujet du message:  Re: Décompression vidéo en temps réel

Et bientôt, Internet sur Thomson avec Youtube et lecteur Flash.

Auteur:  Samuel Devulder [ 17 Aoû 2015, 16:48 ]
Sujet du message:  Re: Décompression vidéo en temps réel

Ca se fait sur C64 pour internet, mais pour le Flash.. là même mon Raspberry-Pi qu'on voit sur les vidéos montre des limites. Il faut dire qu'il n'a qu'un CPU à 700Mhz :D

Ce qu'il serrait bien je pense c'est pouvoir faire une video qui tienne entièrement en RAM thomson, où puisse être streamée depuis le lecteur standard. Sur C64 ils y sont arrivés: http://www.pouet.net/prod.php?which=63649 (environ 70 octets par image!).
Image

Il ne nous plus qu'à faire comme eux (mieux graphiquement si possible). Pour le son j'ai déjà préparé ce qu'il faut là dedans.

Auteur:  PulkoMandy [ 01 Sep 2015, 08:48 ]
Sujet du message:  Re: Décompression vidéo en temps réel

Depuis une disquette, le débit maximal est de 6500 octets par piste * 5 pistes par seconde = 32.5Ko/s (avec un format de disquette adapté au trackload et sans rien faire d'autre). il faudrait compresser les données encore un peu plus.

Sur C64, la vitesse de chargement est 3 à 4 fois plus lente, mais ils ont 2 CPUs (un dans le C64 et un dans le lecteur de disquettes). Sur Amstrad CPC, la limite théorique est quasiment atteinte (par exemple dans le jeu Orion Prime). Sur Thomson on en est encore bien loin...

Dans le genre il y a aussi la demo "8088 Domination" sur PC-XT (CGA, 4.77MHz). La compression utilisée consiste à générer du code qui est chargé depuis le disque dur et exécuté en streaming, ce qui permet plus de flexibilité dans le codage des données.

http://trixter.oldskool.org/2014/06/19/ ... em-part-1/
http://trixter.oldskool.org/2014/06/20/ ... onclusion/

L'endcodeur utilisé a été publié, pour les curieux, mais il génère du code x86 qui n'est bien sûr pas directement utilisable.

Page 1 sur 1 Heures au format UTC + 1 heure
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/