Question

Je dois lire un grand fichier contenant de nombreuses trames d'animation de CD / DVDROM et l'afficher dans l'écran sous forme d'animation. Lors de la lecture du disque dur, la stratégie de lecture d'un cadre dans la mémoire, du traitement, de l'affichage puis de la lecture du cadre suivant fonctionne bien, mais lorsque je lis à partir de l'appareil optique, le temps d'accès tue l'animation.

J'utilise les méthodes C et WinAPI OpenFile / ReadFile.

Comment dois-je lire le contenu d'un fichier stocké sur un appareil optique pour atteindre une vitesse d'animation en temps réel (j'ai vu un programme qui le fait même en double vitesse, c'est sûr qu'il ne tamponne pas tout le fichier avant le début de l'animation)?

Était-ce utile?

La solution

Deux techniques:

  1. Grand tampon ou cache, comme dans plusieurs MB. Le CD / DVD a des E / S séquentiels raisonnables mais des vitesses de recherche / accès très lentes (comme vous l'avez noté), il est donc rapide de remplir le tampon. Vous avez juste besoin que le tampon soit suffisamment grand pour couvre quelques secondes pour permettre au disque de tourner si nécessaire, et cherchez-le si déjà tourné.

  2. Multi-threading: Gardez un fil de lecture en continu et une animation de décodage de thread séparé. Le fil du lecteur doit bloquer s'il devient trop loin avant le décodage.

Ces techniques s'appliquent à n'importe quel langage de programmation et peuvent être combinées pour le meilleur effet. Un tampon de lecture et un tampon de trame décodé vous protège deux fois contre le temps de décodage et le temps d'accès.

ÉDITER:Ce sont les techniques que MPlayer utilise. De plus, vous devez considérer votre format d'encodage si vous le pouvez - différents formats peuvent échanger du temps de CPU en décodage pour moins de données à lire à partir du disque. Quelques informations pour estimer la quantité de vidéo doivent être compressées.

  • Vitesse de lecture pour 1x CD-ROM: 150 kib / s (vitesse minimale nue)
  • Lire la vitesse 4x CD-ROM: 600 kib / s (entraînement minimum standard)
  • Spee de lecture 16x CD-ROM: 1600 kib / s (maximum obtenu, généralement jusqu'à 8x)
  • Drive de lecture 1x DVD: ~ 1,3 MIB / s
  • DÉFINITION STANDARD VIDÉO COMPRIMÉ avec MPEG2 à la qualité DVD: ~ 600 kib / s
  • Définition standard Video Compressé avec MPEG4 à la qualité du DVD: ~ 100 kib / s
  • Vidéo de définition standard non compressée: ~ 30 Mo / s
  • Image standard 1000x1000 (1 mégapixel) à 24 bits Couleur: 3 Mo
  • Image standard de 1 mégapixel à la couleur 8 bits (niveaux de gris): 1 Mo

Edit2: informations supplémentaires

  • Notez que les DVD peuvent généralement être lus à 8x environ si votre lecteur le prend en charge (la plupart le font maintenant).
  • Les animations commencent à apparaître lisses à 24+ images / seconde. Ci-dessous, ils apparaîtront saccadés à un spectateur.
  • La compression sans perte est généralement bonne pour une réduction d'environ 50% de taille pour les images photographiques. Votre kilométrage peut cependant varier.
  • La lecture en douceur des animations dépendra en partie de la façon dont vous parlez au matériel vidéo. Certaines méthodes produiront de meilleurs résultats que d'autres. Je vous suggère fortement de regarder le code de MPlayer dans ce cas.

Autres conseils

Une chose à essayer est la compression. Le chargement d'un fichier zip hors du lecteur, par exemple, prendra moins de temps mais nécessitera plus de temps de CPU pour traiter. Si une compression sans perte est possible, cela peut valoir la peine d'être inspecté. Comprendre un lecteur de CD est également utile. Le lecteur tourne à une vitesse de rotation fixe. Cela signifie que les données sur le à l'extérieur du disque se charge plus rapidement que les données à l'intérieur. Un brûleur, cependant, brûlera des données de l'intérieur vers l'extérieur, vous pouvez donc finir par devoir brûler beaucoup de données avant «l'animation» pour obtenir une vitesse de lecture maximale.

utilisation Création avec open_always et file_flag_sequential_scan

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top