Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2428 connectés 

  FORUM HardWare.fr
  Programmation
  Algo

  récupération de fichiers CRW dans un flux non borné

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

récupération de fichiers CRW dans un flux non borné

n°2091000
edwoud
⭐ shériff de l'espace
Posté le 23-07-2011 à 11:38:51  profilanswer
 

Bonjour à tous.
 
J'ai commencé il y a quelques jours à écrire un programme de récupération de données (en C sous Linux mais je compte le porter sur Mac et peut-être Windows).
 
Le but est de pouvoir retrouver ses fichiers après un formatage de carte mémoire. Soit en analysant l'image de la carte mémoire, soit en la lisant directement.
 
Pour la plupart des formats, on peut spéculer relativement facilement (TIFF, JPG, ZIP), contrôler une cohérence et retrouver le fichier exact dans le flux.
 
Par contre, le format de fichier CRW de Canon (pour les appareils compacts) me pose problème car si j'ai bien le HEADER et son marqueur HEAPCCDR, je n'arrive pas à trouver la fin du fichier. J'ai pensé au début a surévaluer sa taille (on trouve systématiquement des tags de miniatures juste avant la fin) légèrement mais avoir des octets en trop rend le fichier invalide. J'ai regardé dans un programme opensource de derawtisation mais non seulement ce programme se sert de valeurs claquées en fonction de l'appareil, mais en plus, il saute presque dès le début en fin de fichier lire des données, ce qui n'est pas possible pour moi, ne connaissant pas cette fin.
 
Reste bien la possibilité de faire de gros calculs en testant quelques millions de possibilités mais le programme risque d'être trèèèèèèès lent.
 
Est-ce que quelqu'un s'est déjà collé à ce genre de chose ou aurait de la documentation plus poussée sur le CRW?
 
Pour le moment, je n'ai trouvé que ça de potable comme doc:
http://www.sno.phy.queensu.ca/~phi [...] n_raw.html
Et un source ici (plus simple que dcraw)
chrome://downloads/media/TeraStock/download/decompress.c

mood
Publicité
Posté le 23-07-2011 à 11:38:51  profilanswer
 

n°2091042
edwoud
⭐ shériff de l'espace
Posté le 23-07-2011 à 12:57:12  profilanswer
 

Bon ben en fait, j'ai fait un mix des deux.
 
Je mouline toutes les combinaisons possibles pour trouver une structure cohérente et pour ne pas perdre de temps, je commence à partir d'une valeur que je suis sûr de retrouver vers la fin du fichier, la marque de l'appareil -> Canon
 
Ça me donne ça (sans les vérifications à ajouter une fois la supposée bonne taille trouvée)
 
 
 

       /* as we don't know the CRW size, we will try every values in a reasonable range */
        offset=CRW_MIN_SIZE;
        while (offset<CRW_MAX_SIZE)
        {
                if (!strcmp(buffer+offset,"Canon" ) && !strncmp(buffer+offset+6,"Canon ",6))
                        break;
                offset++;
 
        }
        if (offset==CRW_MAX_SIZE) return 0;
        logdebug("Camera model=%s",buffer+offset+6);
 
        /* the directory block structure must end after this internal TAG but we don't know where */
        while (offset<CRW_MAX_SIZE)
        {
                speculative_valuedatasize=GetEndianINT(buffer+offset,GET_LITTLE_ENDIAN);
                if (speculative_valuedatasize+header_len+2+10>offset) {offset++;continue;}
                speculative_dircount=GetEndianSHORTINT(buffer+speculative_valuedatasize+header_len,GET_LITTLE_ENDIAN);
                if (header_len+speculative_valuedatasize+2+speculative_dircount*10==offset)
                {
                        logdebug("Probably found a valid Directory Block Structure. Size of file may be %d",offset+4);
                }
                offset++;
        }
        logdebug("end of CRW not found..." );


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Algo

  récupération de fichiers CRW dans un flux non borné

 

Sujets relatifs
pb récupération du contenu d'un champs texteCommunication avec port RS232 : Récupération de valeurs chiffrées
Formulaire avec envoi instantané de fichiersProblème de récuperation de varibles
perl - lister les fichiers d'un repFichiers de moins de 24h triés par date ?
[PowerShell] Renommer des fichiers PDF avec leurs métadonnées[BATCH] déplacer tous les fichiers d'un ensemble de répertoires
problème pour travailler sur des fichiers textes en PHPRécupération d'une variable contenue dans une frame
Plus de sujets relatifs à : récupération de fichiers CRW dans un flux non borné


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR