[Thomson] Vidéo avec son en streaming

Cette catégorie traite de développements récents destinés à nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

__sam__
Messages : 7925
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ »

__sam__ a écrit :Je crois que le truc se situe dans la matrice de tramage. Je vais y réfléchir et expérimenter. J'ai une petite idée en tête, et il faut voir si elle veut grandir.
Oui c'est bien ce que je soupçonnais, tout dépend de la matrice de tramage. En pratique j'ai un un bol monstrueux que la matrice vac-8 marche bien avec le bug de AND3. D'autres matrices ne rendent pas aussi bien. Méga coup de bol. Et ca explique aussi pourquoi cette matrice 8x8 ne s'applique pas avec un motif sur 3 ligne (les deux périodes sont premières entre elles).

Donc j'ai creusé mon idée pour crée une matrice void-and-cluster qui marche bien avec une période de 3. Il faut simplement qu'elle soit un multiple de 3 en hauteur et de largeur sensiblement identique pour avoir des macros-pixels carrés.

Au départ je suis parti sur cette matrice

Code : Tout sélectionner

               <threshold map="test1">
                                <description>diag 3</description>
                                <levels width="3" height="3" divisor="4">
                                                2 1 3
                                                1 3 2
                                                3 2 1
                                </levels>
                </threshold>
Elle représente une diagonale entre les lignes R V et B, de sorte à éviter l'apparition d'artefacts désagréables (ligne de 3 pixels verticaux). Ca marche pas mal, mais cela ne permet que 4 valeurs par composantes, soit 64 couls en tout. C'est peu, on voit tout de suite le manque de couleurs. (voir "motif 1" sur l'image suivante)
Untitled.png
Untitled.png (11.41 Kio) Consulté 6013 fois
Pour pallier ce problème j'ai utilisé la technique pour produire une matrice de bayer d'ordre n à partir de celle d'ordre (n-1). Ici l'ordre (n-1) est la matrice ci-dessus et donc celle d'ordre n est la suivante:

Code : Tout sélectionner

                <threshold map="test2">
                                <description>diag3 + bayer</description>
                                <levels width="6" height="6" divisor="13">
                                                5 1 9 8 4 12
                                                1 9 5 4 12 8
                                                9 5 1 12 8 4
                                                7 3 11 6 2 10
                                                3 11 7 2 10 6
                                                11 7 3 10 6 2
                                </levels>
                </threshold>
Du coup on a 13*13*13 (presque 2200) couleurs. Ca marche très bien, mais on voit trop apparaitre à mon gout le motif en croix de la matrice de bayer qui est absent quand on fait du void-and-cluster. (voir "motif 2" sur l'image ci-dessus)

Aussi j'ai réflechi à produire un void-and-cluster adapté aux lignes R V B. C'est à dire que sur chaque ligne de la matrice, la probabilité d'avoir une valeur n sur la ligne i est indépendant de i mod 3. Je veux dire par là que chaque nombre n apparait exactement 3 fois, sur des lignes toutes différentes modulo 3. Exprimé comme ca ca semble difficile de trouver de telles matrices. Cependant j'ai trouvé une méthode de construction qui satisfait cette contrainte tout en étant vraiment aléatoire.

L'idée est de partir de 3 matrices void-and-cluster 9x3 (9 colonnes, 3 lignes) différentes: A=(Aij) B=(Bij) C=(Cij). Ensuite on construit la matrice D=(Dij) où D1j = A1j D2j = B1j D3j = C1j, D4j = A2j D5j=B2j D6j =C2j, D7j=A3j D8j=B3j D9j=C3j

Code : Tout sélectionner

A1,1 .. A1,9
B1,1 .. B1,9
C1,1 .. C1,9

A2,1 .. A2,9
B2,1 .. B2,9
C2,1 .. C2,9

A3,1 .. A3,9
B3,1 .. B3,9
C3,1 .. C3,9
Bref on entremêle les lignes de A, B et C. Ca donne

Code : Tout sélectionner

                <threshold>
                <description>void and cluster entremélé</description>
                <levels width="9" height="9" divisor="28">
                21 1 20 8 22 13 5 27 12
                18 24 6 16 11 25 2 19 7
                8 22 13 5 26 12 21 2 20
                10 14 26 4 17 9 23 15 3
                12 21 1 20 8 22 13 5 26
                4 17 9 23 15 3 10 14 27
                24 6 16 11 25 2 19 7 18
                3 10 14 27 4 17 9 23 15
                11 25 1 19 7 18 24 6 16
                </levels>
                </threshold>
Cette matrice là marche très très bien avec la version "MOD3". On y retrouve toutes les bonnes propriétés du void-and-cluster (absence de motifs réguliers trop prononcés), et on a une très bonne variété des couleurs: 28^3 (22000 couleurs, soit 10x plus que celle au dessus). Ca devient très sérieux :) ("motif 3" sur l'image du haut en la scrollant vers le bas)

Pour voir ce que ca donne, c'est ici: http://dl.free.fr/nFo5Eeco1

Code : Tout sélectionner

$ for i in *.mp4 *.flv; do echo; perl conv_sd.pl "$i"; done

Daft Hands - Harder, Better, Faster, Stronger.mp4 : 540x360 (4:3)
avg 266x200 frame length = 4676 bytes (96%) @ 225s
zoom = 0.95 -> 252x190 @ 10fps
0:03:44 (0.4x) v=1:0.977 a=(x+0)*1

Daft Punk - Harder Better Faster Stronger.mp4 : 640x360 (16:9)
avg 320x180 frame length = 12148 bytes (251%) @ 225s
zoom = 0.59 -> 188x106 @ 10fps
0:03:43 (0.4x) v=1:0.935 a=(x+0)*1

Eric Prydz - Call on me.mp4 : 640x360 (16:9)
avg 320x180 frame length = 13931 bytes (287%) @ 181s
zoom = 0.55 -> 176x99 @ 10fps
0:03:01 (0.4x) v=1:0.938 a=(x+0)*1

Eric Prydz - Pjanoo.mp4 : 640x358 (16:9)
avg 320x180 frame length = 11884 bytes (245%) @ 189s
zoom = 0.6 -> 190x107 @ 10fps
0:03:08 (0.4x) v=1:0.944 a=(x-29)*1

Indiana Jones Boulder Scene.mp4 : 640x278 (16:9)
avg 320x180 frame length = 4868 bytes (100%) @ 29s
zoom = 0.94 -> 302x170 @ 10fps
0:00:28 (0.5x) v=1:0.889 a=(x-24)*1

Junior Senior - Move Your Feet (Official music video, HD).mp4 : 450x360 (4:3)
avg 266x200 frame length = 10238 bytes (211%) @ 200s
zoom = 0.64 -> 170x128 @ 10fps
0:03:18 (0.4x) v=1:0.922 a=(x-15)*1

Kylie Minogue - Can't Get You Out Of My Head.mp4 : 554x360 (4:3)
avg 266x200 frame length = 12541 bytes (259%) @ 229s
zoom = 0.58 -> 154x116 @ 10fps
0:03:47 (0.4x) v=1:0.941 a=(x-88)*3

Kylie Minogue - Come Into My World [HD].mp4 : 640x360 (16:9)
avg 320x180 frame length = 15630 bytes (323%) @ 260s
zoom = 0.52 -> 166x93 @ 10fps
0:04:18 (0.4x) v=1:0.999 a=(x+0)*1

Kylie Minogue - In Your Eyes.mp4 : 626x360 (16:9)
avg 320x180 frame length = 12899 bytes (266%) @ 198s
zoom = 0.57 -> 183x103 @ 10fps
0:03:17 (0.4x) v=1:0.895 a=(x-92)*4

Kylie Minogue - Love At First Sight.mp4 : 496x360 (4:3)
avg 266x200 frame length = 10532 bytes (217%) @ 237s
zoom = 0.63 -> 168x126 @ 10fps
0:03:56 (0.4x) v=1:0.97 a=(x-84)*3

Kylie Minogue - Spinning Around.mp4 : 640x360 (16:9)
avg 320x180 frame length = 14709 bytes (304%) @ 211s
zoom = 0.54 -> 171x96 @ 10fps
0:03:31 (0.4x) v=1:0.936 a=(x-38)*1

Masoud feat. Aneym - No More (Music video))).mp4 : 640x360 (16:9)
avg 320x180 frame length = 4967 bytes (102%) @ 248s
zoom = 0.92 -> 295x165 @ 10fps
0:04:06 (0.4x) v=1:0.977 a=(x+0)*1

Michael Gray - The Weekend (Official Video).mp4 : 640x360 (16:9)
avg 320x180 frame length = 13961 bytes (288%) @ 192s
zoom = 0.55 -> 176x99 @ 10fps
0:03:10 (0.4x) v=1:0.954 a=(x-73)*2

Star Trek Genesis.mp4 : 480x360 (4:3)
avg 266x200 frame length = 4786 bytes (98%) @ 67s
zoom = 0.94 -> 251x188 @ 10fps
0:01:05 (0.4x) v=1:0.977 a=(x-123)*8

Star Wars A New Hope 1977 Trailer.mp4 : 640x360 (16:9)
avg 320x180 frame length = 10651 bytes (220%) @ 167s
zoom = 0.63 -> 201x113 @ 10fps
0:02:45 (0.4x) v=1:0.909 a=(x-12)*1

Star Wars Episode V - The Empire Strikes Back Trailer.mp4 : 540x360 (4:3)
avg 266x200 frame length = 5422 bytes (112%) @ 195s
zoom = 0.88 -> 234x176 @ 10fps
0:03:15 (0.4x) v=1:0.946 a=(x+0)*1

Star Wars- Return Of The Jedi Trailer (HD).mp4 : 640x360 (16:9)
avg 320x180 frame length = 6292 bytes (130%) @ 133s
zoom = 0.82 -> 262x147 @ 10fps
0:02:11 (0.4x) v=1:0.931 a=(x-12)*1

Star Wars The Force Awakens Special Extended Trailer.mp4 : 1280x720 (16:9)
avg 320x180 frame length = 5595 bytes (115%) @ 149s
zoom = 0.87 -> 278x156 @ 10fps
0:02:28 (0.4x) v=1:0.914 a=(x+0)*1

THE ABYSS - Trailer ( 1989 ).mp4 : 540x360 (4:3)
avg 266x200 frame length = 4713 bytes (97%) @ 175s
zoom = 0.95 -> 252x189 @ 10fps
0:02:57 (0.4x) v=1:0.937 a=(x+0)*1

Dire Straits - Sultans Of Swing.flv : 320x240 (4:3)
avg 266x200 frame length = 9004 bytes (186%) @ 268s
zoom = 0.68 -> 182x136 @ 10fps
0:04:26 (0.4x) v=1:0.945 a=(x-102)*5

Georges Brassens Bobino 1972 08 Les amours d'antan.flv : 318x240 (4:3)
avg 266x200 frame length = 7476 bytes (154%) @ 200s
zoom = 0.75 -> 200x150 @ 10fps
0:03:18 (0.4x) v=1:0.984 a=(x-1)*1

HollySiz - Come Back To Me [Clip Officiel].flv : 426x240 (16:9)
avg 320x180 frame length = 5653 bytes (116%) @ 179s
zoom = 0.87 -> 276x155 @ 10fps
0:02:58 (0.4x) v=1:0.892 a=(x+0)*1
Perso, je trouve les couleurs bien plus pures qu'avec la version AND3 qui a une ligne de gris. Le FPS est aussi très respecté quitte à réduire la taille de l'image. Pour bien voir les vidéos, je recommande de s'éloigner quelque peu de l'écran pour que les couleurs se mélangent un peu.
xUntitled.png
xUntitled.png (6.06 Kio) Consulté 6011 fois
versus
ImageImage

Quant à la version AND3, ca mouline toujours depuis hier soir.. C'est lent.. mais les démos amiga sont à plus que 10fps, et c'est fort appréciable. Une fois fini je mettrais le lien pour comparaison: <ici> (ou dans un autre message, celui-ci est déjà très long!)

Etape suivante: fait un code C pour aller beaucoup plus vite. Le code C doit pouvoir être capable de générer une version SD noir et blanc, et couleurs compatible AND3 et une autre compatible MOD3.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
__sam__
Messages : 7925
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ »

__sam__ a écrit : Quant à la version AND3, ca mouline toujours depuis hier soir.. C'est lent.. mais les démos amiga sont à plus que 10fps, et c'est fort appréciable. Une fois fini je mettrais le lien pour comparaison: <ici> (ou dans un autre message, celui-ci est déjà très long!)
Bon ben ce sera là: http://dl.free.fr/k6U9SF1dU

Avec un total de 47 vidéos (plusieurs heures). A part les couleurs plus claires à cause de la ligne grise, j'aime assez. En fait la ligne grise tombe bien pour les faibles intensités. Elle prend le relais des couleurs trop peu visibles. Ca aide bien à donner l'impression que le tramage s'estompe moins abruptement. En plus cette ligne combinée à la verte fait que l'info de luminance est présente une ligne sur deux. Finalement entre la version MOD3 ert AND3 je ne sais décider lequel est le mieux.

Quel sont les avis de ceux qui ont regardés les deux dernier sets de vidéo ?
Dernière modification par __sam__ le 17 juin 2015 23:20, modifié 1 fois.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Thomson] Vidéo avec son en streaming

Message par 6502man »

Chez moi ca tourne qu'en n&b :(

D'après ce que je vois c'est dur de faire un choix, je pense que pour chaque vidéo le choix peut être différent en fonction des couleurs :roll:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
__sam__
Messages : 7925
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ »

6502man a écrit :Chez moi ca tourne qu'en n&b :(
Ca m'intrigue. Il n'y a rien de sorcier, c'est du basic de base. Tu as bien mis la dernière version de la ligne "15" que j'ai mis dans un message plus haut ?
dcmoto01.png
dcmoto01.png (6.6 Kio) Consulté 5982 fois
Je viens de tester sur TO8 et MO5 (émulés). Ca marche!

Qu'observes tu exactement ? une ligne blanche descendre de haut en bas ? Si c'est le cas c'est que tu as un "CONSOLE,,1" qui traine avant l'execution du programme. Le "CONSOLE,,0" en début de ligne 15 sert à l'annuler.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Thomson] Vidéo avec son en streaming

Message par 6502man »

Oui c'est bien ce que j'ai fait mais la version de DCMOTO j'ai pris la dernière 2015.06.04 !

Sinon tu peut redonner le code BASIC complet au cas ou ???

Oui une ligne blanche de haut en bas ..
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
__sam__
Messages : 7925
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ »

6502man a écrit :Oui c'est bien ce que j'ai fait mais la version de DCMOTO j'ai pris la dernière 2015.06.04 !
J'ai la 2015.06.06 ca devrait être kif-kif. De toute façon le code basic tourne indépendamment de la version de l'emul, et il n'y a que ca qui coince pour toi.
Sinon tu peut redonner le code BASIC complet au cas ou ???
Ben le gif, sinon

Code : Tout sélectionner

1 '================================
2 ' SDANIM3
3 '================================
10 SCREEN7,0,0:LOCATE0,0,0:CLS
15 CONSOLE,,0:FOR I=0 TO 199:LINE(0,I)-(319,I),2^(I MOD 3):NEXT:CONSOLE,,1:CLS
20 A=&H9000
30 READX$:IFX$="**"THEN99
40 POKEA,VAL("&H"+X$):A=A+1:GOTO30
99 EXEC&H9000:END
100 DATA 34,7F,1A,50,8E,1F,40,E6
101 DATA 84,63,84,E1,84,27,14,63
102 DATA 84,86,A7,1F,8B,96,C0,8A
103 DATA 01,97,C0,8E,00,00,7F,90
104 DATA 52,20,0D,86,E7,1F,8B,96
105 DATA C3,8A,01,97,C3,8E,40,00
106 DATA 4F,5F,DD,CE,C6,7F,DD,CC
107 DATA 8A,04,97,CE,97,CF,84,3F
108 DATA 97,CD,D6,CC,27,07,8A,40
109 DATA 97,CD,3A,20,09,8A,40,97
110 DATA CD,8E,40,00,20,00,84,3F
111 DATA 97,CD,D6,CC,8A,40,97,CD
112 DATA E7,84,84,3F,97,CD,96,CC
113 DATA 97,CD,2A,D2,35,FF,**
pour la version "MOD 3". Mettre "AND 3" à la place en ligne 15 pour avoir la version... AND3 :wink:

On voit tout de suite qu'on utilise la mauvaise version MOD3/AND3 car dans ce cas les couleurs se mélangent et on voit une sorte blanc constitué de lignes RVB allumées, formant un truc pas coloré du tout.
Oui une ligne blanche de haut en bas ..
Alors je ne vois pas trop. As tu bien utilisé le ^ (chapeau), c'est à dire la fonction puissance en basic comme dernier argument à LINE ? Ce paramètre module la couleur de la ligne dessinée qui reste alors en mémoire "couleur" grâce au "CONSOLE,,1" qui limite l'effacement du CLS à la seule mémoire forme. Cela laisse alors apparaitre un écran noir sur lequel les caractères (ou la vidéo) s'affichent bariolés de couleurs.
dcmoto02.png
dcmoto02.png (8.42 Kio) Consulté 5959 fois
Et hop: un nouveau clip vidéo qui fut très novateur en son temps et qui bénéficie bien de la couleur: http://www.cjoint.com/doc/15_06/EFrup2u ... hammer.zip
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Thomson] Vidéo avec son en streaming

Message par 6502man »

Je vais essayer de tester ca ...
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
__sam__
Messages : 7925
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ »

Alors, ca donne quoi ?
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Thomson] Vidéo avec son en streaming

Message par 6502man »

Je viens de tester avec le code Basic si dessus et ca fonctionne bien en couleur.

C'est excellent, des vidéos en couleurs sur un 8 bits, BRAVO :D


J'ai observé quelque chose qui pourrait être exploiter pour donner un bon résultat avec cette méthode :
Il faudrait trouver un film avec une luminosité très clair (proche du blanc) car j'ai l'impression, que cela pourrait donner un très bon résultat.
Peut être une scène de western en extérieur en plein soleil dans le dessert , d'ailleurs masoud feat rend très bien je touve par rapport à indiana ou star wars qui est très sombre !!!
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
__sam__
Messages : 7925
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ »

Oui en effet, puisque la couleur est répartie sur 3 ligne, son intensité est 1/3 de l'intensité nominale. Pour compenser cela, en interne je multiplie tout par 2, ce qui a pour effet de saturer les blancs qui ressortent mieux. Je ne sais pas si saturer plus aiderait a avoir plus de couleurs ("harder better stronger" mode manga est déjà bien coloré comme ca je trouve).

Masoud rend bien mais il est essentiellement en gris. Du coup pour lui la couleur n'apporte pas grand chose.

Tu aurais une idée de clip coloré intéressant à convertir pour trouver la meilleur formule pour la couleur, dont le principal défaut est d'avoir une résolution verticale 3 fois moindre qu'horizontale.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Thomson] Vidéo avec son en streaming

Message par 6502man »

Une vidéo bien coloré peut être les mondes de Ralph les scènes dans le jeu sugar rush très coloré, il y a la course vers la fin du film :D
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
__sam__
Messages : 7925
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ »

J'ai trouvé ca: http://www.cjoint.com/doc/15_06/EFvlbUB ... h.mod3.zip

Si on voit bien la couleur, en revanche on perd beaucoup en résolution verticale. Ca ne rend bien que si on s'éloigne bcp de l'écran ou pour les video n'ayant pas de trop petits détails.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Thomson] Vidéo avec son en streaming

Message par 6502man »

Ah oui mais en faite je parlais d'un passage du film pas du jeu :roll:
par exemple ICI
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
__sam__
Messages : 7925
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ »

Aie lien supprimé,
Cette vidéo a été supprimée, car elle ne respecte pas les règles de YouTube concernant le spam, l'escroquerie et le détournement de clics.
...mais heureusement je l'ai récupéré avant. Bon par contre il y a comme 3 rayons de lumières diagonaux au travers de l'écran (supérieur-droit vers inférieur-gauche) qui se voit beaucoup dans cette 1ère version: http://dl.free.fr/fJrPPp7vq

[EDIT] j'ai trouvé le moyen de supprimer ces rayons parasites.. Résultats demain...
[EDIT2] voilà http://dl.free.fr/h4Jz3Y02s, en plein ecran 16fps. J'ai desactivé le test du zoom optimal, donc il y a quelques décrochages, mais la qualité des images est meilleure en plein écran.
[EDIT3] Version avec un zoom permettant de respecter le FPS: http://dl.free.fr/gPKHwyuJ8 (du coup la qualité des images est moins bonne.)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
__sam__
Messages : 7925
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson] Vidéo avec son en streaming

Message par __sam__ »

GROSSE AVANCEE DEPUIS VENDREDI

L'idée d'améliorer l'encodage traine dans ma tête depuis un certain temps....
__sam__ a écrit :Je pense qu'on peut gagner peut-être 1/3 (au pif) de bande passante avec un format de donnée de la forme: <decalage> <video1> <video2> <son>. L'idée est que l'on aurait 2 octets videos par échantillon audio (soit 12khz, largement de quoi être content). Mais du coup avec 2 échantillons video on rempli plus vite les lignes ce qui accélèrera les changements "de masse" qui sont ceux qui font effondrer le fps. Les sauts seraient aussi doublés (...) A experimenter.
L'idée exposée ci-dessus est probablement bien, mais elle baissera la qualité du son. Ca ne me plait pas trop, sauf si on ne peut vraiment pas faire autrement... Or justement à force d'y réfléchir, j'ai trouvé le moyen d'avoir un encodage plus compact tout en ne mangeant que 3 cycles de plus par rapport au player de base, ce qui est très peu. A peine un branchement conditionnel.

Comment ca marche ?

En fait il faut modifier un petit peu l'organisation des triplets audio/video du stream. Ils sont organisées à présent comme suit (son est passé au début)

Code : Tout sélectionner

<son> <depl> <video>
L'octet <son> se décompose en champ de bits comme suit

Code : Tout sélectionner

<2octets?> <encore?> <nnnnnn>
  • <nnnnnn> est l'échantillon audio comme avant
  • <encore?> un bit qui vaut 1 quand le stream n'est pas terminé. Quand la video est fini il vaut 0, et dans ce cas pour des facilités de codage et d'optimisation on présume que l'ensemble de l'octet <son> est à 0.
  • <2octets?> un bit qui s'il est à 0, on décode <depl> et <video> comme précédemment (<depl> à 0 fait un retour écran, sinon c'est un déplacement non-signé dans la mémoire vidéo; <video> est l'octet vidéo à écrire après le déplacement). S'il est à 1 on utilise un nouveau mode, dit 2octets que je détaille ci-après.
Dans le mode "2 octets", le déplacement vaut obligatoirement 2. L'octet <depl> est donc libre et est interprété comme un 2eme octet vidéo disponible. On a donc un mot de 16 bit qui est simplement recopié sur les deux adresses vidéo suivantes (le pointeur vidéo est avancé d'autant).

Ca a l'air complexe, mais finalement en assembleur cela se réduit à un saut conditionnel sur le fait que l'octet <son> est négatif, soit 3 cycles de plus que le player précédent. Voici le code à utiliser

Code : Tout sélectionner

  ORG   $9000
INI
  PSHS  U,Y,X,DP,B,A,CC  empile les registres
  ORCC  #$50      masque les interruptions
  LDX   #$1F40    adresse pour test RAM ou ROM
  LDB   ,X        lecture adresse X
  COM   ,X        tente de modifier adresse X
  CMPB  ,X        test modification adresse X
  BEQ   INIT1     pas de difference -> TO
  COM   ,X        retablissement adresse X
  LDU   #$A7C0    port A du PIA systeme
  LDX   #$0000    adresse dans ecran
  BRA   INIT2     suite des initialisations   
INIT1
  LDU   #$E7C3    port A du PIA systeme
  LDX   #$4000    adresse dans ecran
INIT2
  STX   NEWPIC+1  adresse debut ecran
  LDA   ,U        port A du PIA systeme
  ORA   #1        set bit 0
  STA   ,U        passage en video forme
  TFR   U,D       extraction base $E7/$A7
  TFR   A,DP      initialisation DP
  CLRA            A=$00
  CLRB            B=$00
  STD   <$CE      selectionne DDRA et DDRB
  LDB   #$7F      B=$7F
  STD   <$CC      PA b0-7 en entree, PB b0-6 en sortie
  ORA   #$04      set b2
  STA   <$CE      selectionne PORTA
  STA   <$CF      selectionne PORTB
 
  BRA   PLAY1
 
*------------------------------------------------------
* JOUE LA VIDEO ET LA MUSIQUE
* Boucle de 65 cycles = 15384.62 Hz
*------------------------------------------------------
 
* lecture octet depl = 19 cycles
PLAY2
  ANDA  #$3F      (2) clear bit 6
  STA   <$CD      (4) acknowledge
  LDB   <$CC      (4) lecture octet deplacement
  BEQ   NEWPIC    (3) nouvelle image
  ABX             (3) ajout de l'increment
  BRA   PLAY3     (3)
 
* retour debut ecran = 7 cycle
NEWPIC
  LDX  #$4000     (3)
  BRA  PLAY3      (3)
  
* mode 2 octets: 22 cycles
PLAY4
  ANDA  #$3F      (2) clear bit 6
  STA   <$CD      (4) request to send
  LDB   <$CC      (4) lecture octet image
  STB   1,X       (5) affiche l'octet image
  LEAX  2,X       (5) deplacement de 2 octets
  NOP             (2) compensation "BMI PLAY4"
 
* sortie video = 26 cycles
PLAY3
  ORA   #$40      (2) set bit 6
  STA   <$CD      (4) acknowledge
  ANDA  #$3F      (2) clear bit 6
  STA   <$CD      (4) request to send
  LDB   <$CC      (4) lecture octet image
  ORA   #$40      (2) set bit 6
  STA   <$CD      (4) acknowledge
  STB   ,X        (4) affiche l'octet image
 
* echantillon son (14 cycles)
PLAY1
  ANDA  #$3F      (2) clear bit 6
  STA   <$CD      (4) request to send
  LDA   <$CC      (4) lecture echantillon son avec B6
  STA   <$CD      (4) joue le son et acknowledge
 
  BMI   PLAY4     (3) mode 2 octets?
  BNE   PLAY2     (3) fin ?
 
*------------------------------------------------------
* RETOUR AU BASIC
*------------------------------------------------------
  ORA   #$40      (2) set bit 6
  STA   <$CD      (4) acknowledge
 
* retour au Basic
  PULS CC,A,B,DP,X,Y,U,PC 
  
* retour a l'assembleur
*  SWI
  
  END INI
Ce nouvel encodage ne fait rien perdre au précédent qui est totalement intégré sans réductions de fonctionnalités (on ne peut donc pas encoder de façon moins efficace). En revanche le mode 2octet multiplie par deux la bande passante quand il y a de gros changements à l'écran. En effet, avec l'encodage précédent pour changer 2 octets consécutifs il fallait 6 octets (2 triplets audio/vidéo), mais à présent un seul triplet suffit. Le gain est spectaculaire car du coup beaucoup de clips précédemment réduits à 60% de taille passent plein écran à 10fps. Cela se comprend par le fait que les gros changements consécutif se font deux fois plus vite et ils sont très nombreux sur les clips "riches". Au final le travelling de Kylie Minogue passe ainsi en quasi plein-écran, et le clip de Holly Sinz passe non seulement en plein écran, mais il reste tellement de bande passante inutilisée que l'encodeur décide de le faire passer à 19fps. Une révolution!

Cette encodage est très élégant car il est, à l'ordre des octets près, compatible avec le précédent, mais surtout il augmente par deux la bande passante sans avoir besoin de toucher au protocole de communication avec l'arduino. Excellent:D

Si on s'autorise à changer le protocole, je suggèrerais de laisser tomber la détection de front montant, au profit d'une simple détection de front (montant ou descendant: un simple xor entre les deux dernières valeurs reçues). Du coté du 6809 cela signifie qu'on a juste un xor + une écriture à faire (6 cycles) pour avoir une nouvelle donnée au lieu d'un or/and + deux écritures (10 cycles). Ca ferait économiser 12 cycles au player qui tomberait à 50 cycles pour la version d'origine, soit audio à 20khz) ou 53 cycles (audio à 18.87kHz) pour la version étendue avec "2octets". Encore plus de vidéo pourraient passer en plein écran et la qualité audio serait encore meilleure (en tout cas meilleure à ce que le chipset amiga est capable de faire). Au total la modification du protocole reviendrait à obtenir un gain de vitesse de sensiblement 20% mais nécessiterait de modifier le sketch arduino. A voir pour plus tard. Chaque chose en son temps.

Demain je vais publier des exemples de ce que j'obtiens avec ce nouveau codage.... suspens.....
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Répondre