| |||||
| Dernière réponse | |
|---|---|
| Sujet : DivX et décompression hardware | |
| nonos | rhaaaaa!!!!!!!
ca y est, j'ai réussi à faire l'encodage video en YUY2. mais ca plante ! en rgb 540*576 à 1000kbps divx5.02 je suis à 15 fps avec accélération hardware et 12 sans. j'ai pas fais beaucoup de tests. je ne vois pas pourquoi ca plante en YUY2. c'est pas mon filtre (debug partout) c'est le filtre powerdvd !!! en mettant un attente de 1sec entre chaque frame reçue de powerdvd, ca marche. lorsque j'enlève l'attente, le filtre se bloque après quelques frames envoyées. l'autre truc, c'est que quand j'arrete la chaine directshow en RGB, ca marche. En YUY2, j'ai des msgs d'erreur comme quoi la mémoire ne peut être lue !!! si vous avez une idéee ? parce que là, vu le gain pas énorme, je me fais chier pour pas gd chose... |
| Aperçu |
|---|
| Vue Rapide de la discussion |
|---|
| nonos | rhaaaaa!!!!!!!
ca y est, j'ai réussi à faire l'encodage video en YUY2. mais ca plante ! en rgb 540*576 à 1000kbps divx5.02 je suis à 15 fps avec accélération hardware et 12 sans. j'ai pas fais beaucoup de tests. je ne vois pas pourquoi ca plante en YUY2. c'est pas mon filtre (debug partout) c'est le filtre powerdvd !!! en mettant un attente de 1sec entre chaque frame reçue de powerdvd, ca marche. lorsque j'enlève l'attente, le filtre se bloque après quelques frames envoyées. l'autre truc, c'est que quand j'arrete la chaine directshow en RGB, ca marche. En YUY2, j'ai des msgs d'erreur comme quoi la mémoire ne peut être lue !!! si vous avez une idéee ? parce que là, vu le gain pas énorme, je me fais chier pour pas gd chose... |
| nonos | y'a un truc qui m'échape vraiment... c'est sur le format AVI.
pour créer un avi, il faut (par l'API avifile): *créer le fichier .avi *créer le flux vidéo (AVIFileCreateStream) avec les paramètres taille, rate et le fourcc de l'encodeur notamment. *créer le flux compressé à partir du flux vidéo et des paramètres d'encodage récupérés de l'encodeur. *définir le format de flux compressé. et c'est là que je ne comprends pas. il faut définir le format à partir d'un BITMAPINFOHEADER dans lequel biCompression=BI_RGB obligatoirement (sinon ca plante). si j'encode une image YUY2 en divx et la sauve dans un flux video compressé défini en RGB... ca marche mais le résulat est complétement déformé avec des couleurs pourries. en gros une image YUY2 qui est lue au format RGB... je récapitule : comment enregistrer une image YUY2 dans un fichier AVI ? |
| blackphantom | Vive la france :D |
| JeSuisPasUnNumero | http://forum.hardware.fr/icones/flag1.gif |
| nonos | et hop, c'est reparti.
j'avais laissé de côté le projet depuis un petit moment... (décembre 2001) j'ai besoin d'aide sur les formats images. il y a un truc que je ne comprends pas sur le format video dans le fichier AVI final. j'ai l'impression que le flux est en RGB nécessairement. ca donne un truc comme ca : MPEG2 decodeur => encodeur Divx => AVI YUY2 RGB peut-on définir le flux video principal de l'avi comme du YUY ou seulement en RGB (avec compression d'images en YUY) ? |
| nonos | je l'ai déjà parcouru.
il ya effectivement toutes les explications sur les fonctions qui me pose soucis. par contre ce sont des explications unitaires et n'explique pas le process dans son ensemble. |
| Slyde | les docs et algos sur les conversions spaciales sont déjà dûres à trouver, ca m'étonnerais que dans la MSDN il y ait quoi que ce soit... remarque c'est tellement le bordel leur truc qu'on sait jamais :lol: |
| Ciler |
|
| nonos | je crois que j'ai trouvé tout ce que je cherchais dans les sources de freevcr.
merci Slyde ! résultat de l'avancement l'année prochaine (because vacances) A+ ! :) |
| Slyde | Essaie de regarder dans :
Les sources du codec MSMPEG4 dispo chez doom9. Les sources de divers softs comme FreeVCR par exemple Les sources de DVD2AVI (on sait jamais). Sinon je ne pourrais pas t'aider sur ce point pour le moment, j'y connais rien :/ |
| nonos | bon, je bloque.
je suis sur la partie écriture image YUV2 dans un fichier AVI et ca marche pas. HELP :) voilà les fonctions que j'utilise pour initialiser le flux vidéo : AVIFileCreateStream pour créer le flux principal AVIMakeCompressedStream avec les paramètres de compression retournés par la fonction ICCompressorChoose. et AVIStreamSetFormat. malheuresement AVIStreamSetFormat retourne un paramètre d'erreur si je lui spécifie un BITMAPINFOHEADER avec biCompression!=BI_RGB. je ne vois pas pourquoi. Du coup je ne peux encoder qu'en RGB. avez vous des exemples de compression d'images autre qu'en RGB ? j'ai cherché sur le Net et je n'ai rien trouvé. c'est la première partie du problème. Pour l'instant j'encode sans définir de keyframes. Pareil : si vous avez des infos sur ICSeqCompressFrame, je suis preneur. Merci à tous ! |
| neodam |
|
| Slyde | Si quelqu'un à une page autre que webartz ou je ne sais plus quoi qui décrit très précisement le format YUV je prends, j'en ai besoin :D
Sinon nonos les sources de ton boulôt m'interessent grandement :) |
| Slyde | En YUY2, t'a des macropixels de 32 bits ou l'une des composantes est partagée entre les deux pixels.
Du coup t'a en fait 16 bits par pixels même s'ils sont liés par deux (d'ou les macropixels de 2 pixels qui font en tout 32 bits). Ca devrait être un peu plus rapide car je crois que le codec va convertir tout ça en YV12 ou YUY2 si tu lui donnes du RGB, donc en YUV ca sera plus rapide. En plus ca fais 2x moins de mémoire nécéssaire, d'ou gains sur la bande passante necessaire. Finalement j'ai l'impression qu'il y a pas mal d'abus de langage concernant le YUV. Voila comment je vois les choses : - YUV : terme générique en pratique : YUY2 : packed, macropixels de 32 bits YV12 : sans doute une variante Il existe aussi des formats planar qui n'ont pas de macropixels. Ce qu'il y a de bizarre dans cette histoire c'est que le codec ne devrait pas normalement poser problème avec le YUY2, donc normalement pas de conversion à faire... |
| nonos | j'ai pas beaucoup de temps, du coup j'avance pas vite.
les dernière nouvelles : ok pour le resize directement à partir du filtre de PowerDvd. Bizarrement, ca ne marche pas avec le filtre Ligos. Par contre, la demande de crop ne marche pas. Mes problèmes de synchronisation sont corrigés. j'arrive donc à encoder en RGB. Ca a l'air assez rapide et je ne vois pas de différence avec le mpeg2avi original au niveau qualité. Je vais faire des tests d'encodage en entier (pour l'instant je n'ai fait que le début d'un épisode de Friends). voilà, voilà. Je me lance maintenant dans l'encodage en YUV2. là par contre j'ai besoin d'aide. lorsque je défini une connection YUV2, le filtre PowerDvd l'accepte et m'envoie apparement des images YUV2 (puisque la taille est x*y*2). par contre lors de l'encodage, la video est noire avec une sorte de brouillage qui par du bas et rempli progressivement l'image vers le haut. c'est pas terrible. j'ai fait des recherches mais je n'ai pas trouvé grand chose sur les formats vidéos et l'écriture dans les fichiers AVI. Avez-vous des @ à me conseiller ? Dernière chose : l'encodage Divx est-il vraiment plus performant en YUV2. Est-ce la même chose en YUV (quelle est la différence ?) |
| BlackSunSoft | Non Nonos on t'a pas oublié :lol: |
| ACClarke | quelqu'un pourrait m'envoyer le .ax du LIGOS MPEG-2 SPLITTER
c'est pour mes graphs sous graphedit :) merci |
| blackphantom | Vive la france :D |
| ACClarke |
|
| Slyde |
|
| nonos | BlackSunSoft : merci. Il faut juste que j'arrive à le faire ce soft !
ACClarke : pour le crop & resize, au moment de la conexion de 2 filtres, ils vérifient le format d'échange. Dans les variables de connexion (BITMAPINFOHEADER), il y des définitions sur le format désiré de l'image. J'ai bon espoir de réussir à demander au filtre PowerDvd de faire le crop & resize. J'ai pas eu le temps de tester. |
| Slyde |
|
| BlackSunSoft | nonos: tu vas avoir un tres beau site pour ton soft, en plus bcp de monde va venir dessus... |
| BlackSunSoft | Hmmm, et il ressemble a quoi le fichier Htaccess ?
je connais le order deny allow mais apres :??: Matthias Lenk c'est l'auteur du filtre DeDynamic |
| Slyde | Sinon en parlant de bricolage à coup de filtre j'ai aussi une petite idée que je dois tester :D vous tiendrais au courant quand j'aurais le temps. |
| Slyde |
|
| ACClarke | c'est tres bien ton idée je trouve
mais pour le rezise de la video ?? bon il y le I-VideoResizer qui fonctionne correctement mais il fait pas le crop. faudra s'encoder les video en 720*... ???? |
| nonos | aie aie. c'est pas facile.
j'arrive à faire l'ensemble de la chaîne. l'encodage en YUV2 s'effectue... presque parfaitement. parfois l'image s'accélère dans l'avi final. j'ai fait le test avec le filtre ligos : pas de problème, les séquences sont conformes à l'original. je ne vois pas du tout ce qui peut bloquer. la chaîne directshow : ".vob" => mepg-2 splitter => cyberlink video/sp decoder => I-media avi renderer j'ai repris le filtre I-media : j'ai enlevé toute la partie traitement du son et changé l'encodage RVB en YUV2. ce qui est encore plus fort, c'est que quand j'enlève l'interface IReferenceClock, l'encodage se fait en accéléré (ie lecture accélérée par le filtre PowerDvd). mais toujours saccadée. le truc encore plus fort, c'est que sur la pin de sortie du filtre PowerDvd, si on mais l'overlay mixer 2 et le video renderer, la lecture est nickel. clairement, powerdvd ne sait pas gérer le flux video lui-même et il faut l'aider. faut-il que j'implémente l'interface videorenderer sur le filtre I-media ? je sens que ca va être un peu plus long que prévu. merci de vos réponse ! |
| BlackSunSoft | ça me fait penser a ce que Matthias Lenk m'a ecris ce matin:
|




