[Thomson] Vidéo avec son en streaming

Cette catégorie traite de développements récents pour 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

Avatar de l’utilisateur
DataPro
Messages : 2790
Inscription : 07 févr. 2011 17:03
Localisation : France - Auvergne

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

Message par DataPro »

Visuellement, n'est-il pas souhaitable de faire une vidéo plus petite et sans espace noir ?

Parce que sur une vignette c'est joli mais sur un écran de 36 cm, il faut prendre pas mal de recul pour que cela soit sympa.
Recherche: cartouches Mattel Intellivision Imagic (loose)
Star Jacker et Lode Runner sur Yeno/SEGA SC-3000
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

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

Message par __sam__ »

Oui il faut s'éloigner de l'écran avec un TO7 pour bien voir les couleurs avec cette matrice de type "dot-cluster". Je suis en train de travailler sur une matrice qui est plus proche du ordered-dither et necessite moins d'être éloigné de l'écran. L'allure ressemble alors beaucoup avec le mode sortie TO8 un peu plus haut dans le fil. A noter: dans ce mode 160x200x16 couleurs TO8, même tout proche de l'écran, la qualité est très bonne car le choix de la palette permet d'afficher 3*4*5=60 couleurs simultanées sans tramage contrairement aux pauvres 8 couleurs du TO7.

Autre avantage de cette future matrice: la bande passant est possiblement réduite de 50% dans les zones de teinte moyenne.
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 : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

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

Message par __sam__ »

Bon cette matrice est intéressante mais pas aussi bien que la clustered car il les défauts de couleurs y sont visibles pour celui qui a l'oeil.
Image
Image

Typiquement le problème se situe avec la config suivante. Le dither "sans contrainte" produit les groupes de 8 pixels suivants (Y=jaune, W=blanc, K=noir):

Code : Tout sélectionner

Y Y W W K K K K
K K K K K K K K
Sur le 1er groupe il y a 3 couleurs K W et Y et l'algo trouve 2 couples équivalents: (Y,K) et (W,K). En effet avec le 1er couple c'est le W qui a trop de de B (Bleu) pour faire du Y, et avec le 2eme couple c'est le Y qui est en manque de bleu pour faire du W (rappel: Y+B=W ou W-B=Y). L'erreur avec le 1er couple est de +2B et de -2B pour l'autre. +2B/-2B = Même distance à K (0). Les couples sont équidistants, et le programme choisit l'un des deux au pif, par exemple: (W,K) lequel produit l'octet tramé suivant

Code : Tout sélectionner

W W W W K K K K
(-B -B 0 0 0 0 0 0)
Comme le B est en trop il soustrait B des deux premiers pixels de la ligne du dessous qui du coup reste en K K K K K K K K (le plus proche de -B c'est K).

Bilan: la teinte "jaune" qui aurait pu être récupérée si on avait enlevé du bleu dans la ligne au dessous est perdue et ne reviendra plus. Ce qui nous plante c'est qu'il n'y a pas de couleurs pour représenter la soustraction de bleu, (-B). Si la ligne du dessous avait eu du bleu, la correction aurait marchée, mais là l'image est trop sombre et la correction de -B ne peut être appliquée.

Ce défaut est typique des zones à moins de 50% de luminosité, mais qu'on se rassure il existe le même défaut inverse où il faudrait ajouter du bleu à une ligne déjà complètement saturée avec des pixels blancs. Par contre dans les parties vives ce défaut est moins visible.

C''est je crois la matrice qui introduisant des lignes complètes de K dans les zones peu claire qui favorise ce défaut qui est à peine visible avec la matrice "clustered" utilisée précédemment.
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 : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

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

Message par __sam__ »

Bon je suis toujours sur je sujet de faire une anim avec fond et forme, mais ca ne marche pas comme je veux dès l'étude "sur le papier" :(

En fait le soucis que j'ai c'est le découpage 512 = 51*10 + 2. Le 2 final sert à l'interbloc (son + reset des pointeurs en RAM si fin d'écran atteinte). Parfait. Le 10 c'est une séquence en RAM forme ou fond. Jusque là ca colle. Mais là où ca colle pas bien c'est le 51.

Il est impair. Donc un secteur qui débute en RAM forme se termine en RAM forme aussi. La lecture du streaming produirait les alternances suivantes:

Code : Tout sélectionner

RAM:      A          B                A          B           A             
STREAM:  (10 octets) (10 octets) ... (10 octets) (10 octets) (10 octets) (2 octets)
                                                                          ^test fin écran ?
Damned, le test fin écran échouera toujours puis qu'on est en RAMA et pas en RAMB.

On pourrait "ignoer" ce dernier bloc de 10, mais ca ne m'enchante guère: c'est perte de bande passante.

J'ai bien une autre idée de découpage: 512 = 32(1+5*3) à savoir 32 fois une trame de 16 octets décomposés en 1 octet son plus 5 triplets video. Une trame permet de mettre à jour 10 octets consécutifs à l'écran.

Oui mais l'interbloc ? effectivement, il n'y a plus d'octets interblocs. C'est pas bon, sauf que on a 1 bit de libre dans chaque octet son, soit 32bits, c'est à dire de quoi reconstituer 4 octets par blocs. Largement de quoi compenser un interbloc hyper long. Mais, c'est là le hic la récup de ce bit par octet son est lente

Code : Tout sélectionner

* traitement d'une trame de 10 octets
READ_TRAME MACRO
* echantillon son (16 cycles)
  LDA   <$CC      (4) lecture echantillon son avec B6 alternant
  STA   <$CD      (4) joue le son et acknowledge
  LSLA            (2) Récup MSB
  ROR ,U         (6)  Mise à jour octet interbloc

  REPEAT 5

* lecture octets depl + video1 + video2 = 20 cycles
  LDB   <$CC      (4) lecture octet deplacement
  ABX             (3) ajout de l'increment
  LDA   <$CC      (4) lecture octet video1
  LDB   <$CC      (4) lecture octet video2
  STD   ,X        (5) affiche l'octet image

  END   REPEAT

  ENDM

* Lecture bloc:
READ_BLOC
  REPEAT 16
* Lecture trame
  READ_TRAME (116)
* Echange pointeurs video
  EXG   X,Y    (8)
* commutation forme -> fond
  DEC    <$C3  (6)
* Lecture trame
  READ_TRAME (116)
* Echange pointeurs video
  EXG   X,Y    (8)
* commutation fond->forme
  INC  <$C3    (6)
  END REPEAT
* lecture SON reconstitué
  LDA  ,U      (4)
  STA <$CD     (4) joue son  + ack
  RTS
On voit bien que parmi ces 4 octets, seul le dernier est pris en compte. Le temps entre 2 octets son est de 116 cycles, soit 8.6khz.. C'est de moins en moins bon.

Par contre un bloc de 512 octets fournit 32 * trames, chacune fournissant 10 octets video, donc un total 320 octets vidéos par bloc (62% de la bande passante). Un écran de 16000 octets a besoin de 50 blocs exactement. Un bloc prends 116*32+116 = 3.8 ms, donc rafraichir l'écran au complet occupe 119.4ms, un peu plus de 5fps.

Mouais... Ca m'inspire moyen. :? C'est la récup de l'octet son intercalaire qui effondre tout. Si quelqu'un a des idées de façon efficace de découper ces 512octets pour avoir facilement l'octet son intercalaire, je suis preneur. Je crois cependant que c'est pas facile car 512-1 = 511 = 3 x 73, 512-2 = 2x3x5x17... 512-3 = premier... bref c'est vraiment pas des nombres sympathiques tout ca.
Dernière modification par __sam__ le 03 juin 2016 18:43, 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 »

Est ce que la proportion 2+10 ou 1+5 ne pourrait pas être modifié en 2+14 (16) ou 1+7 (8) :?:
Mince mais tu doit aussi prendre en compte les 2 octets d'interbloc :roll:

Remplir une mémoire tampon en même temps est peut être trop pénalisant ?
Car sinon tu pourrais utiliser un tampon pour le son puisqu'il va 3 fois moins vite que la vidéo ?
Phil.

www.6502man.com

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

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

Message par __sam__ »

En fait c'est compliqué car( 512 - (petit-entier)) n'a pas de beaux facteurs facilement exploitables. Comme déjà écrit:
512 - 1 = 7 x 73 (utilisé dans le mode N&B et lignes RVB)
512 - 2 = 2 x 3 x 5 x 17
512 - 3 = 509 (premier)
512 - 4 = 2 x 2 x 127
512 - 5 = 3 x 13 x 13
512 - 6 = 2 x 11 x 23
512 - 7 = 5 x 101

Une trame est de la forme (1 octet-son) + k*((1 octet-déplacement) + (2 octets-vidéo)), donc 4, 7, 10, 13, 16. Il faut dans le cas RAMA/RAMB avoir un nombre paire de commutation RAM par bloc pour garder un afficheur simple et de pas avoir non plus de trame trop longue pour garder une fréquence audio correcte.

Sans doute qu'il doit y avoir plus malin que de faire un ROR pour extraire le MSB. On peut faire STA ,U+ (6 cycles au lieu de 10), c'est à dire avoir un buffer de 32 octets représentant tous les octets son lus et reconstruire l'octet son intercalaire qu'en fin de bloc. On a environ une centaine de cycles pour reconstruire le son+ack, tester la fin de l'écran et la fin de fichier. Ce qui est sur c'est que là on utilise au max la bande passante puisque chaque bit de l'octet son est utilisé.

Bon par contre 8khz de son c'est pas de l'exceptionnel, mais c'est pas non plus trop dégradé, et il est vrai qu'avoir des animations bien lumineuses en vraie couleurs (car la technique des bandes R/V/B assombrit pas mal l'image) serait très intéressante. Il faudrait vraiment que je me motive pour faire aboutir de truc car j'ai maintenant une technique de tramage en mode TO7 qui rend vraiment bien.
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
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

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

Message par Daniel »

Il est difficile de tricher avec les échantillons de son, en particulier entre deux blocs, car les décalages s'entendent. Par contre la vidéo supporte plus facilement de petits décalages, à condition de les compenser ensuite pour rester synchrone avec la musique. Pour s'aligner sur des frontières de 512 on peut peut-être sacrifier quelques octets de l'image, par exemple en fin de bloc. Cette irrégularité dans les séquences compliquera un peu le programme, mais elle devrait passer inaperçue.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

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

Message par __sam__ »

Pour ceux que ca intéresse, j'ai adapté ma conversion de vidéo en BM16 thomson sous la forme d'un add-on LUA pour l'outil GrafX2. Ca se passe ici. Avec cet algo on peut convertir n'importe quelle image sans trop de perte de qualité (pour une image thomson, bien entendu).
Image
Image
NOTA: Je pense que l'algo peut être adapté pour le mode 0 du CPC.
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 »

Le résultat est impressionnant :shock:

C'est bien du 160X200 16 couleurs ?

C'est un outil qui rendra bien service à tous ceux qui veulent convertir des images pour Thomson :D
Phil.

www.6502man.com

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

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

Message par __sam__ »

oui oui 160x200 16 couleurs sans bidouille spéciales style changement du mode graphique en cours de ligne. Le CPU est dispo à 100% (pour faire de la musique par exemple).
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 : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

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

Message par __sam__ »

Pour info, je viens de mettre à jour l'archive téléchargeable avec une nouvelle version du programme qui sauve à présent un fichier MAP (thomson) à coté du fichier d'origine.
ImageImage
[Edit2] j'ai ajouté un outil de conversion pour un écran MO5
ImageImage
[Edit3] modif du lien pour pointer sur une version permettant la sauvegarde des données brutes en appuyant sur shift-ESC durant la conversion
Dernière modification par __sam__ le 28 oct. 2016 12:47, modifié 5 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
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

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

Message par Fool-DupleX »

Superbe comme d'habitude ... :shock:

J'aime bcp GrafX2, super bonne idée d'avoir fait le script lua. Tu me rajoutes la génération de deux fichiers binaires flat dump des pages graphiques (couleur et forme), MO ou TO suivant le cas, et de la palette le cas échéant et là, j'achète ... allez dis voui stp :oops:
__sam__
Messages : 7923
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 modifié le programme pour produire d'encore meilleurs résultats..

Pour la sauvegarde RAW, il faut ajouter le code suivant juste après le thomson.savep(fullname) à la fin des des scripts de conversion. [EDIT] ou simplement appuyer sur shift-ESC (commencer par shift durant la selection du fichier lua puis ESC pendant la conversion) durant la sauvegarde avec la toute dernière version du programme (c-à-d après le 27/10/2016 ou avoir lib/thomson.lua en version 1.2)

Code : Tout sélectionner

	if ok then 
		local out
		out = io.open(fullname..".rama","wb"); out:write(string.char(unpack(thomson.ramA))); out:close()
		out = io.open(fullname..".ramb","wb"); out:write(string.char(unpack(thomson.ramB))); out:close()
		local pal = ""
		for i=0,15 do
			local val = thomson.palette(i)
			pal=pal..string.char(math.floor(val/256),val%256)
		end
		out = io.open(fullname..".pal","wb"); out:write(pal); out:close()
	end
Cela produit 3 fichiers à coté de l'image source.
  • <fichier>.map.rama c'est les 8000 octets de la RAMA,
  • <fichier>.map.ramb c'est pareil avec la RAMB (encodage MO5 pour bayer4_mo5.lua), et le
  • <fichier>.map.pal c'est la palette (32 octets).
Ah remarquer:
  • avec l'utilisation d'une matrice bayer 4x4, les redondances horizontales sont nombreuses, et les compresseurs adorent. Sur l'image avec le chien-loup ci-dessus la RAMA se compresse en 2.7ko et la RAMB en 1.8ko à comparer aux 8ko chacune sans compression.
  • GrafX2 est quand même loin d'être exempt de bugs. Par exemple, au bouts d'un certain temps à charger de nouvelles image il affiche "nombre de fichier ouvert maximal atteint" et refuse de charger une nouvelle image. Lorsqu'on fait "quit" il ne sort pas directement mais se relance. Il faut alors refaire "quit" pour sortir. La réduction de couleur laisse aussi à désirer. Voyez ce qu'il advient du noir sur la tête du pauvre oiseau après chargement.
    Avant: superbre tête avec du noir autour des yeux
    Avant: superbre tête avec du noir autour des yeux
    Arrivée_Printemps_2009_20_.jpg (84.56 Kio) Consulté 4241 fois
    Après chargement de l'image sous GrafX2: le noir a disparu (comparez la tête du zozio)
    Après chargement de l'image sous GrafX2: le noir a disparu (comparez la tête du zozio)
    ou est le noir.gif (168.53 Kio) Consulté 4241 fois
    Mais bon, il est gratuit et marche sur vraiment plein de plateformes. Comme le code source est dispo, peut-être que j'irais jetter un oeil pour voir si on peut amméliorer ces points (fichiers ouverts et non fermés, réduction de couleurs foireuse qui alloue trop de couleurs aux fortes intensités et parfois n'a plus de couleurs libres pour le noir ou d'autres couleurs sombres). Cependant depuis l'avènement des langages à protype, je suis devenu complètement rouillé (et fénéant) en C :mrgreen:
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
jasz
Messages : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

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

Message par jasz »

Je reviens sur ton travail __sam__ car j'ai utilisé récemment un logiciel, GRATUIT, qui fait de bonnes réductions de couleurs. Exemple
file.png
file.png (20.38 Kio) Consulté 4091 fois
Le format bayer pourrait présenter des avantages dans tes démarches. Qu'en penses tu?
f6d7.png
f6d7.png (10.98 Kio) Consulté 4091 fois
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

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

Message par __sam__ »

Oui c'est bien. Le résultat sur l'oiseau est très bon (seul manque le jaune qe l'aile qui a ici un aspect un peut vert). Cet oiseau est un de mes modèle de référence pour tester les algos qui souvent échouent sur soit le rouge de la tête soit le jaune des ailes qui sont pourtant bien visibles. Mais je me pose 2 questions
1) quel est ce logiciel
2) est-ce que les niveaux RGB sont compatibles avec le gama thomson qui est incapable de reproduire les couleurs sombres. En effet le rose et le vert sombre de l'image avec tramage ont un niveau 85 que le pauvre thomson peine à reproduire (on arrive pas à descendre en dessous du niveau equivalent-PC de 100).
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