IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Calculer les ECC P, ECC Q et EDC pour un ISO Mode 2 Form 1


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15
    Points : 20
    Points
    20
    Par défaut Calculer les ECC P, ECC Q et EDC pour un ISO Mode 2 Form 1
    Bonjour,

    Je suis en train de travailler sur un projet qui gènere des images CD au format ISO Mode 2 Form 1. Après avoir compris leur format, la dernière étape consiste à recalculer les zones ECC P, ECC Q et EDC.

    J'ai trouvé un code source écrit en C qui permet de le faire, appellé yazedc. Après l'avoir modifié et re-compilé, j'ai réussi avec succès à générer un secteur complet (dans un fichier) à partir d'un fichier source contenant mes données, de 2048 bytes de longueur. Mais le problème, c'est que les ECC P, ECC Q et EDC calculés par yazedc sont faux (à 10 ou 15 bytes près !!!).

    Après quelques recherches, je me suis aperçu que yazedc est en fait un hack de la libedc inclu dans cdrtools. J'ai pris la version cdrtools-2.01.01a03. Après avoir pas mal repris le code pour qu'il compile en stand-alone, j'ai réussi à génerer un fichier représentant un secteur, de la même façon qu'avec yazedc.
    Le problème, c'est comme je m'en doutais () les valeurs calculés sont encore fausses, à peu de bytes près comme tout à l'heure !

    Autrement dit, je ne sais pas du tout comment faire pour génerer ces codes de correction d'erreurs de manière valide (je base sur l'inspecteur de secteur de Alcohol).

    Je me suis dit que c'était pas si grave, et que les graveurs savent recalculer ces codes. Mais le problème c'est que mon ISO ainsi généré est illisible dans l'explorateur :/ Sauf évidemment quand je le grave et qu'ensuite je refais un ISO (là, il devient lisible).

    Auriez vous une piste, un tutorial ou quelques bon liens qui puisse m'aider ? Une version plus récente de cdrtools ?

    Merci d'avance pour tous les conseils que vous pourriez me donner ainsi que de l'aide éventuelle.

    SiZ!

    PS : Je peux évidemment poster mon projet si vous voulez jeter un oeil mais je poste pas pour que vous le fassiez entièrement à ma place.
    PS Bis : Je ne suis pas développeur en C donc j'ai un peu de mal désolé :/
    [big_fury]SiZiOUS, http://www.sbibuilder.fr.st/

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Bonjour,

    Déjà d'une part, ton problème semble un problème algorithmique, plus que de C.

    Ensuite, tu nous dis que les codes ne sont pas bons. Comment le sais-tu ? Si tu le sais, c'est que tu les as calculés ou bien qu'un logiciel l'a fait pour toi.

    Le tout, est de savoir comment sont calculés ces codes. Une fois que tu as l'algo, pas de problème.

    Ce que je ne comprend pas aussi, c'est que les bibliothèques que tu cites sont des bibliothèques assez utilisés. Et le fait qu'elles ne te renvoient pas les bons résultats me choque un peu. Et j'en reviens à la même question que précédement : comment fais tu pour vérifier que ce que tu obtiens est bien le bon résultat ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15
    Points : 20
    Points
    20
    Par défaut
    Salut, et désolé pour la réponse très tardive, exams obligent.

    Citation Envoyé par PRomu@ld
    Déjà d'une part, ton problème semble un problème algorithmique, plus que de C.
    C'est vrai, c'est plus de l'algorithmique, mais comme je ne suis pas à l'aise avec le C, j'ai jugé bon de poster ici.

    Citation Envoyé par PRomu@ld
    Ensuite, tu nous dis que les codes ne sont pas bons. Comment le sais-tu ? Si tu le sais, c'est que tu les as calculés ou bien qu'un logiciel l'a fait pour toi.
    Je le sais car j'ai regardé les codes calculés par Alcohol 120%, qui eux sont bons. En fait, je sais qu'ils sont bons car l'ISO généré est lu par mon lecteur virtuel (Deamon Tools et Alcohol 120%). Etant donné que lorsque je grave avec cdrtools, le CD est effectivement bien gravé, j'en ai conclu que les codes sont recalculés par le graveur. Et c'est effectivement le cas !

    Citation Envoyé par PRomu@ld
    Le tout, est de savoir comment sont calculés ces codes. Une fois que tu as l'algo, pas de problème.
    Exactement, et comme je ne suis pas bon en maths, je ne sais pas comment faire pour trouver cet algo et encore moins le corriger. J'ai tout de même l'impression qu'en fait l'algo est correct, mais que c'est les tables qui servent pour le hash qui ne le sont pas (fichiers crctables.out si je me souviens bien), mais ce n'est qu'une hypothèse

    Citation Envoyé par ""PRomu@ld
    Ce que je ne comprend pas aussi, c'est que les bibliothèques que tu cites sont des bibliothèques assez utilisés. Et le fait qu'elles ne te renvoient pas les bons résultats me choque un peu. Et j'en reviens à la même question que précédement : comment fais tu pour vérifier que ce que tu obtiens est bien le bon résultat ?
    Effectivement, les bibliothèques que j'utilise sont utilisées dans cdrtools, ce qui présume que les codes sont bons. Pourtant, ils sont faux, à en juger Alcohol 120%, comme le témoigne la capture d'écran suivante.

    Voici la source originale de yazedc (qui est en fait une extraction de la lib edc_ecc de cdrtools, mais un peu ancienne), peut être vous verrez quelque chose de monstrueux mais qui m'a pas choqué car j'ai vraiment du mal en C.

    Sinon, voici ma conversion à partir de cdrtools-2.01.01a03. (dernière version ?).

    J'ai posté un peu partout, consulté pas mal de docs (Cette FAQ a failli répondu à ma question mais ça reste trop théorique ), mais je suis bloqué. Apparament, c'est le code Reed Solomon, mais j'en suis pas sûr (il faudrait que j'achète le Yellow Book - qui explique la structure d'un CD-ROM - pour en être sûr, d'une part c'est pas simple à trouver, c'est pas donné et en plus pour juste un chapitre ).

    C'est quand même curieux d'avoir des difficultés si grandes pour un truc si courant, ou alors je m'y prends très mal et je fais des grosses fautes (possible).

    En tout cas, merci pour la réponse, PRomu@ld. Je vais continuer à chercher de mon coté, car maintenant j'ai le temps (quoi qu'avec la Coupe du Monde ).
    [big_fury]SiZiOUS, http://www.sbibuilder.fr.st/

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15
    Points : 20
    Points
    20
    Par défaut
    J'ai réussi ! Finalement, la lib n'y était pour rien (enfin la nouvelle)

    C'était un méchant bug de pointeur dans mon programme, honte à moi

    Désolé pour cette question !

    Jour de joie en tout cas !
    [big_fury]SiZiOUS, http://www.sbibuilder.fr.st/

  5. #5
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    C'était un méchant bug de pointeur dans mon programme
    Ca me parait plus logique parce qu'il aurait été tout de même surprenant d'avoir une bibliothèque assez largement utilisée qui produise un code non valide !

    PS : N'oublie pas le Tag Résolu

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par PRomu@ld
    Ca me parait plus logique parce qu'il aurait été tout de même surprenant d'avoir une bibliothèque assez largement utilisée qui produise un code non valide !

    PS : N'oublie pas le Tag Résolu
    C'est exact. Mais c'était du tout évident à trouver. Comme quoi j'ai accusé la lib qui pourtant marchait très bien beuh je suis impardonnable

    Désolé en tout cas
    [big_fury]SiZiOUS, http://www.sbibuilder.fr.st/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. programme fortran90 qui calcule les racines d'une equation de deg 3 ?
    Par casier dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 10/06/2006, 17h30
  2. Réponses: 1
    Dernier message: 10/01/2006, 20h35
  3. Réponses: 2
    Dernier message: 02/08/2005, 13h53
  4. [MFC]Calculer les FPS
    Par inerti@ dans le forum MFC
    Réponses: 6
    Dernier message: 19/03/2003, 18h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo