Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » Lecteur vidéo
Aliegeois Hors ligne Membre Points: 75 Défis: 0 Message

Lecteur vidéo

Posté le 07/02/2015 13:05

Bonjour à tous !
Depuis longtemps que je programme en BASIC j'ai finalement envie de faire un add-in et pour commencer je prévois un lecteur de vidéos (à la Martin Poupe), un genre de défi personnel. J'ai déjà réussi à transformer une vidéo "classique" en vidéo monochrome de 128*64 (via Processing si cela intéresse quelqu'un dites-le moi) mais je plante à la lecture du fichier sur calto -_-' Je ne maîtrise pas vraiment les Bfile_openfile et autres et j'aurai besoin d'un peu d'aide, voici le début de mon code (j'enlève tout le blabla compatibilité SH4 je sais je ça fonctionne) :
#include "memory.h"
#define SOURCE "\\\\crd0\\ASDFMV1"
int AddIn_main(int isAppli, unsigned short OptionNum)
{
    int handle = memory_openfile(SOURCE, _OPENMODE_READ);
    int fichier[24576000] = {0};
    int taille = memory_filesize(handle);
    int erreur = memory_readfile(handle, fichier, taille, -1);
    Bdisp_AllClr_DDVRAM();
    while(1) {}
    return 1;
}

Comment marche ? Pour une vidéo de 2 mins, j'aurai un fichier de 128*64*120(secondes)*25(fps) soit 24576000 bits donc un tableau de taille équivalente, en fait je stocke tous les pixels à la suite sur mon fichier (je ne sais pas si je suis clair)
Je suis sûr que "ASDFMV1" est dans le dossier "SDCard" s'il y a des spécificités que je devrai connaître sur l'ouverture des fichiers j'aimerai bien qu'on m'en fasse part
Merci d'avance de vos réponses.


Lephenixnoir En ligne Administrateur Points: 24575 Défis: 170 Message

Citer : Posté le 07/02/2015 15:28 | #


Ah oui, zut
Ben, c'est facile : comme le define n'est actif que dans le fichier MonochromeLib.c, il risque pas de la trouver... et comme la fonction existe simplement pas...

Bon, alors on va faire plus simple : mets ce code dans un fichier src, ajoute-le au projet et utilise la fonction getVRAM().
    .export _getVRAM

_getVRAM:
    mov.l   sc_addr, r2
    mov.l   sc_id, r0
    jmp     @r2
    nop

sc_id:
    .data.l h'0135
sc_addr:
    .data.l h'80010070

    .end

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Aliegeois Hors ligne Membre Points: 75 Défis: 0 Message

Citer : Posté le 07/02/2015 15:33 | #


Euuuuuh... c'est quoi un fichier src ? (c'est incroyable, j'ai l'impression de tenter d'apprendre à marcher et de même pas être capable de me mettre à quatre pattes..)
Calculatrice : CASIO GRAPH 95
Regardez mon lecteur de vidéo !
-florian66- Hors ligne Ancien rédacteur Points: 2384 Défis: 20 Message

Citer : Posté le 07/02/2015 15:33 | #


tu mets de l'asm dedans
In Arch, I trust ! And you ?
Aliegeois Hors ligne Membre Points: 75 Défis: 0 Message

Citer : Posté le 07/02/2015 15:35 | #


S'il vous plait quelqu’un pour parler dans une autre langue que le chinois ?
Calculatrice : CASIO GRAPH 95
Regardez mon lecteur de vidéo !
-florian66- Hors ligne Ancien rédacteur Points: 2384 Défis: 20 Message

Citer : Posté le 07/02/2015 15:36 | #


c'est bien du français pourtant mais regarde

Bonne lecture

EDIT : je te conseil de regarder plein de code source avant de te lance, ça donne plein d'idées
In Arch, I trust ! And you ?
Lephenixnoir En ligne Administrateur Points: 24575 Défis: 170 Message

Citer : Posté le 07/02/2015 15:39 | #


T'embête pas, c'est du code Assembleur, la traduction du langage binaire natif du processeur. Les fichiers .src sont les fichiers Assembleur du compilateur de l'IDE.

Franchement, y'a rien dedans. J'appelle le code à une adresse définie (le gestionnaire de syscalls) en lui disant que j'appelle le syscall numéro 0x0135, et ce syscall retourne l'adresse de la vram.

En fait, le tableau constant dans MonochromeLib.c contient la version compilée de ce code... bref, t'embête pas à apprendre l'Assembleur pour ça
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Aliegeois Hors ligne Membre Points: 75 Défis: 0 Message

Citer : Posté le 07/02/2015 15:46 | #


Et sinon je suis le seul chez qui ça ne marche pas ou c'est pareil pour tout le monde ?
Calculatrice : CASIO GRAPH 95
Regardez mon lecteur de vidéo !
Lephenixnoir En ligne Administrateur Points: 24575 Défis: 170 Message

Citer : Posté le 07/02/2015 15:54 | #


Aliegeois a écrit :
Et sinon je suis le seul chez qui ça ne marche pas ou c'est pareil pour tout le monde ?

Qu'est-ce qui ne marche pas ?
Qu'est-ce que tu attendais comme résultat ?
Qu'est-ce que tu as obtenu ?
Quel morceau de code est en cause ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Aliegeois Hors ligne Membre Points: 75 Défis: 0 Message

Citer : Posté le 07/02/2015 16:00 | #


Je parle de la fonction ML_vram_adress, comment font les autres ? Ils créent un fichier asm et copient la fonction que tu m'a donnée ?
Calculatrice : CASIO GRAPH 95
Regardez mon lecteur de vidéo !
Lephenixnoir En ligne Administrateur Points: 24575 Défis: 170 Message

Citer : Posté le 07/02/2015 16:02 | #


Non, en fait ils ne s'en servent pas.
Parce qu'on accède très rarement à la vram directement. MonochromeLib est une interface de dessin. Entre autres elle a des fonctions pour dessiner des points, des lignes, des polygones, ellipses, etc. et elle se débrouille.
Mais toi, tu veux copier l'intégralité d'un buffer dans la mémoire et pour un lecteur vidéo t'as besoin que le programme soit rapide pour gérer les entrées/sorties et la lecture vidéo de la manière la plus fluide possible.
Donc, il faut que tu utilises la méthode la plus optimisée et en l'occurrence c'est celle-ci.

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Aliegeois Hors ligne Membre Points: 75 Défis: 0 Message

Citer : Posté le 07/02/2015 16:14 | #


Le fait de mettre
typedef char*(*sc_cpv)(void);
const unsigned int nom_a_la_con[] = { 0xD201D002, 0x422B0009, 0x80010070, 0x0135 };
#define adresse (*(sc_cpv)nom_a_la_con)

ne me permet pas d'utiliser adresse pour obtenir la vram ? Et ainsi faire
memcpy(adresse, buffer, 1024);

Calculatrice : CASIO GRAPH 95
Regardez mon lecteur de vidéo !
Lephenixnoir En ligne Administrateur Points: 24575 Défis: 170 Message

Citer : Posté le 07/02/2015 16:27 | #


Si mais c'est pareil et un peu plus moche
D'abord, tu fais passer adresse pour une variable alors que c'en est pas une. En C, c'est vraiment le genre de choses à pas faire.

Voilà en fait ce que fait ce code :
→ Il définit un tableau contenant des valeurs en hexadécimal ;
→ Il considère l'adresse du tableau comme l'adresse d'une fonction ;
→ Et il appelle la fonction.

Donc en fait il exécute le code contenu dans le tableau, parce que le tableau contient du code compilé ! Et le code compilé... de la fonction que je t'ai filé.

Donc oui, ça fonctionne mais c'est exactement pareil et vraiment moche. Mettre du code compilé dans un tableau dans le code source est un autre exemple de chose à ne pas faire... mais ça évitait à PLL d'ajouter un fichier src au projet (parce qu'on ne peut pas mettre d'Asm inline dans du code C avec cet IDE), et puis il savait ce qu'il faisait.

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Aliegeois Hors ligne Membre Points: 75 Défis: 0 Message

Citer : Posté le 07/02/2015 21:48 | #


Bon je reviens après avoir passé tout l'après-midi à re-re-refaire l'encodage de la vidéo qui était faux depuis le début (ça n'aide pas vraiment pour les tests) et maintenant je reviens sur le problème d'origine : afficher la vidéo sur calto. Or maintenant ce qui plante c'est que je n'ai que la dernière image, il y a bien le temps d'attente comme si la vidéo s'affichait, mais rien puis à la fin la dernière image..
Je hais faire ça car j'ai l'impression qu'on fait le code à ma place mais je n'ai pas d'autres solutions donc voila :
void afficher_frame(char buffer[1024])
{
    ML_clear_vram();
    memcpy(adresse(), buffer, 1024);
}

int AddIn_main(int isAppli, unsigned short OptionNum)
{
    unsigned int key;
    char buffer[1024];
    int handle = memory_openfile("\\\\crd0\\LAMA.LOL", _OPENMODE_READ);
    int filesize = memory_filesize(handle);
    int read_bytes = 0;

    ML_clear_vram();
    ML_clear_screen();

    while(read_bytes < filesize)
    {
        memory_readfile(handle, &buffer, 1024, -1);
        afficher_frame(buffer);
        read_bytes += 1024;
        Sleep(40); // 25 fps donc 1000 / 25 = 40
    }
    memory_closefile(handle);

    while(1) {GetKey(&key);}

    return 1;
}

Calculatrice : CASIO GRAPH 95
Regardez mon lecteur de vidéo !
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 07/02/2015 21:50 | #


Faut bouger le curseur

http://wiki.planet-casio.com/fr/Fxlib.h#Bfile_SeekFile
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Lephenixnoir En ligne Administrateur Points: 24575 Défis: 170 Message

Citer : Posté le 07/02/2015 21:52 | #


Zut, c'est pas à &buffer qu'il faut lire mais à buffer
Sinon, ben faut actualiser l'écran (double buffering) !

Dans afficher_frame(), faut appeler ML_display_vram()

Ajouté le 07/02/2015 à 21:53 :
Dodormeur a écrit :
Faut bouger le curseur

http://wiki.planet-casio.com/fr/Fxlib.h#Bfile_SeekFile

Nan, rien à voir >_<
Il bouge tout seul >_<
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
-florian66- Hors ligne Ancien rédacteur Points: 2384 Défis: 20 Message

Citer : Posté le 07/02/2015 21:54 | #


il ne se sert même pas de cette fonction
In Arch, I trust ! And you ?
Aliegeois Hors ligne Membre Points: 75 Défis: 0 Message

Citer : Posté le 07/02/2015 22:00 | #


Alléluia !! Ca marche !!!
Merci beaucoup mais seul Lephenixnoir m'a aidé (et encore qu'à moitié ) il ne me manquait que le display_vram. @Dodoremur : le paramètre -1 dans read_file permet de continuer la lecture du fichier là où on en était rendu donc pas besoin de seek_file. Merci quand-même je suis super heureux pour un premier add-in je le trouve pas trop mal Je vais créer un post pour mettre l'encodeur(un petit programme de ma conception) et le décodeur, l'add-in calto.
Merci encore.
Calculatrice : CASIO GRAPH 95
Regardez mon lecteur de vidéo !
-florian66- Hors ligne Ancien rédacteur Points: 2384 Défis: 20 Message

Citer : Posté le 07/02/2015 22:01 | #


ton addin avec la vidéo prend bcp de place ?
In Arch, I trust ! And you ?
Aliegeois Hors ligne Membre Points: 75 Défis: 0 Message

Citer : Posté le 07/02/2015 22:05 | #


L'add-in : 34 ko, la vidéo de 4 secs(pour le test) : 100ko, soit 25 ko/sec.
Calculatrice : CASIO GRAPH 95
Regardez mon lecteur de vidéo !
Lephenixnoir En ligne Administrateur Points: 24575 Défis: 170 Message

Citer : Posté le 07/02/2015 22:29 | #


Aliegeois a écrit :
Merci beaucoup mais seul Lephenixnoir m'a aidé (et encore qu'à moitié ) il ne me manquait que le display_vram.

Tu me fais peur quand même, je crois que tu vas lire/écrire n'importe où en mémoire. Utilise de l'alloc dynamique plutôt.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Aliegeois Hors ligne Membre Points: 75 Défis: 0 Message

Citer : Posté le 07/02/2015 22:31 | #


Si tu veut tu pourra modifier mon code à ta guise mais pour l'instant tout ce que je vois c'est qu'il marche sans problèmes ! Je n'ai rien envie de modifier. (Je m'en fous des problèmes de mémoire )
Calculatrice : CASIO GRAPH 95
Regardez mon lecteur de vidéo !

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 231 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd