2010-12-03 11 views
3

Je veux convertir Writablebitmap en flux Jpeg, et il semble qu'il n'y a pas de support de plate-forme ainsi que je peux voir un tas de bibliothèques de codeurs opensource sur le web, je veux avoir votre avis sur lequel est recommandé en termes de performance et de fiabilité.Meilleur encodeur Jpeg pour Silverlight 4.0

Répondre

5

J'ai passé pas mal de temps avec FJCore et LibJpeg.Net. FJCore est plus facile à utiliser, puisqu'il a été porté depuis Java, et a un modèle d'objet qui ressemble vaguement à ce que vous attendez de C#. Cependant, LibJpeg.NET est de loin la bibliothèque la plus complète (elle est basée sur le libjpeg), et elle est également beaucoup plus rapide. Pour donner un exemple, FJCore utilise une implémentation naïve d'une transformée cosinus discrète inverse qui implique quelque chose comme 1024 multiplications et 1024 additions supplémentaires pour chaque bloc 8x8. En revanche, LibJpeg.NET utilise l'algorithme AAN haute performance qui ne prend que 144 multiplications et 464 additions (voir http://datasheets.chipdb.org/Intel/x86/MMX/MMX/AP528.HTM#AAN Algorithm). En outre, FJCore est assez inefficace dans la façon dont il utilise la mémoire, recréant constamment des objets qui pourraient facilement être réutilisés. Dans le même temps, FJCore ayant moins d'optimisations, il est beaucoup plus facile de pirater. Pour mon projet actuel (qui consiste à écrire un codec vidéo pour Silverlight), j'ai utilisé FJCore comme point de départ, corrigé toute une série d'inefficacités, remplacé son algorithme IDCT par celui de LibJpeg.NET et fini avec quelque chose qui m'a donné environ 10x la performance originale.

+0

Salut Ken, pouvez-vous partager votre code mis à jour à la source FJCore? Aussi dans votre propre expérience dans les deux bibliothèques en termes de qualité et de compression, quel est selon vous le mieux? – cubski

+0

Lorsque j'ai utilisé le terme "hack" dans ma réponse ci-dessus, je ne plaisantais pas. Bien que j'aie essayé de ne rien casser dans la bibliothèque originale de FJCore, ma principale préoccupation était de le modifier pour fonctionner dans mon codec vidéo Motion JPEG particulier, ce qui ne facilite pas l'utilisation pour d'autres personnes ou dans d'autres situations. Cela dit, voir cette réponse (http://stackoverflow.com/questions/1773330/streaming-a-webcam-from-silverlight-4-beta) pour un lien vers une version plus ancienne de mon code modifié. –

+0

Salut Ken, je prends actuellement 10 fps de mon application webcam et j'utilise FJcore pour l'encodage. Je ne suis pas sûr de savoir comment assembler les images encodées en vidéo mjpeg. J'ai essayé d'ajouter séquentiellement les octets des images codées à un flux pour l'enregistrer sur le disque, en vain. Pourriez-vous me diriger vers la bonne voie? Merci. – cubski

0

Ken pourquoi ne soumettez-vous pas votre code mis à jour à la source FJCore?

http://code.google.com/p/fjcore/

+0

Désolé, je viens de le voir. Je peux encore le faire, mais la plupart de mes modifications étaient dans le sens de l'intégration avec ma solution globale, pas dans le sens de changements généralement utiles et généralement applicables. Il me faudrait probablement plusieurs jours pour reporter les modifications généralement applicables à la bibliothèque FJCore. C'est quelque chose que j'aimerais faire, mais mon démarrage actuel me tient très occupé :-). –

Questions connexes