le codec "Core avc" en mode "dxva" est-il compatible ?

Échanges entre les développeurs et les utilisateurs au sujet du développement logiciel de Pouchin TV Mod. Les participants sont présumés avoir des connaissances raisonnables en matière de programmation informatique.
Répondre
Curtis
Messages : 164
Enregistré le : 27 févr. 2010, 20:15
Carte Tuner : Leadtek DTV1800H
Êtes-vous un robot ? : Je ne suis pas un robot

le codec "Core avc" en mode "dxva" est-il compatible ?

Message par Curtis » 11 avr. 2011, 21:58

Bonjour,

j'ai installé le codec "core avc" en version 2.5.1 ( build 8223 ) afin d'avoir l’accélération matérielle H264 via ma carte graphique ati radeon HD4650 pci express,

avec l’accélération désactivée le codec fonctionne bien sous pouchintvmod révision 284, mode de rendu VMR7 renderless sous windows XP pro SP3 pour les chaines HD,

mais si j'active le mode "DXVA" ( accélération matérielle via la carte graphique ) dans les propriétés de core-avc l'affichage des chaines HD est corrompue, on voit une image au format 4/3 avec une colorimétrie verte et l'image semble agrandie ( comme zoomée ),

donc j'aimerai savoir si quelqu'un a réussi à faire fonctionner ce mode "DXVA" ( le mode "DXVA2" n'est pas disponible sous windows XP ) avec coreavc et pouchintvmod ?

quels réglages il faut choisir dans la configuration de core-avc pour rendre compatible l’accélération matérielle sous pouchintvmod ? :
coreavc.png
panneau de configuration de core-avc H264
coreavc.png (12.54 Kio) Vu 17524 fois
au final core-avc avec l'option "DXVA" provoque parfois un plantage de pouchintvmod avec comme conséquence un processus zombie ( qui est impossible à tuer dans le gestionnaire de processus )

Curtis
Messages : 164
Enregistré le : 27 févr. 2010, 20:15
Carte Tuner : Leadtek DTV1800H
Êtes-vous un robot ? : Je ne suis pas un robot

Re: le codec "Core avc" en mode "dxva" est-il compatible ?

Message par Curtis » 12 avr. 2011, 06:26

voici le type d'image que donne coreavc sous pouchintvmod 277 et 284, avec les modes VMR7 et VMR9 sur les chaines HD avec le mode DXVA activé sous winxp :
France 2 HD 2011-04-12 06-15-32.jpg
France 2 HD 2011-04-12 06-15-32.jpg (28.93 Kio) Vu 17517 fois
France 2 HD 2011-04-12 06-18-47.jpg
France 2 HD 2011-04-12 06-18-47.jpg (28.59 Kio) Vu 17517 fois
si je choisis evr l'image devient correcte mais le mode DXVA est automatiquement désactivé d'après l'icone de coreavc,

quand je fais un test sous graphedit avec un fichier haute définition 1920x1080 encodé avec le codec x264 dans un conteneur mkv le codec coreavc fonctionne bien avec le mode DXVA ( % CPU très faible, moins de 10% alors que sans le mode DXVA le %CPU monte jusqu'à 35~40% ), dans mon graph j'ai ajouté le filtre VMR9 video render,

du coup il faudrait peut-être ajouter un mode de rendu "VMR9 renderless" dans pouchintvmod pour voir si le codec coreavc réagit mieux avec le mode dxva activé ? ( car pour l'instant il n'y a que le mode VMR9 windowsless dans pouchintvmod )
Modifié en dernier par Curtis le 12 avr. 2011, 07:05, modifié 1 fois.

Avatar du membre
Gingko
Administrateur du site et développeur
Messages : 2017
Enregistré le : 05 août 2007, 12:57
Carte Tuner : August DVB-T210 USB + divers autres
Êtes-vous un robot ? : Je ne suis pas un robot
Localisation : Pantin (IDF, 93)
Contact :

Re: le codec "Core avc" en mode "dxva" est-il compatible ?

Message par Gingko » 12 avr. 2011, 06:38

Curtis a écrit :voici le type d'image que donne coreavc sous pouchintvmod 277 et 284, avec les modes VMR7 et VMR9 sur les chaines HD avec le mode DXVA activé sous winxp :
France 2 HD 2011-04-12 06-15-32.jpg
France 2 HD 2011-04-12 06-18-47.jpg
si je choisis evr l'image devient correcte mais le mode DXVA est automatiquement désactivé d'après l'icone de coreavc,

quand je fais un test sous graphedit avec un fichier haute définition 1920x1080 encodé avec le codec x264 dans un conteneur mkv le codec coreavc fonctionne bien avec le mode coreavc ( % CPU très faible, moins de 10% alors que sans le mode DXVA le %CPU monte jusqu'à 35~40% ), dans mon graph j'ai ajouté le filtre VMR9 video render,

du coup il faudrait peut-être ajouter un mode de rendu "VMR9 renderless" dans pouchintvmod pour voir si le codec coreavc réagit mieux avec le mode dxva activé ? ( car pour l'instant il n'y a que le mode VMR9 windowsless dans pouchintvmod )
Bonjour,

Oui, je sais, quand j'ai essayé ça m'a fait ça aussi.

Mais je soupçonne qu'une meilleure condition de test serait de faire travailler le filtre en mode « pull » plutôt qu'en mode « push ». Dans le premier mode, on lit un fichier et c'est le rendu vidéo qui cadence la lecture. Dans le second, on lit un programme TV, et la vidéo, dans ce cas, ne fonctionne plus à son propre rythme mais à celui imposé par le programme TV.

J'ai l'impression que les concepteurs de codecs testent rarement leurs produits en mode « push ».

Gingko
Gingko
․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․
Tuners utilisés, sur 3 ordis : • USB : August DVB-T210, AverMedia HDTV DVB-T Volar (2×) • PCI : Hauppauge Nova-DT Dual DVB-T • Express Card : AverMedia Digi Express 54

Curtis
Messages : 164
Enregistré le : 27 févr. 2010, 20:15
Carte Tuner : Leadtek DTV1800H
Êtes-vous un robot ? : Je ne suis pas un robot

Re: le codec "Core avc" en mode "dxva" est-il compatible ?

Message par Curtis » 12 avr. 2011, 07:58

sinon j'ai un codec h264 de cyberlink issu de powerdvd 10.0 qui marche sous graphedit pour la lecture de fichier HD avec DXVA ( y compris les fichiers TS enregistrés par pouchintvmod ) : c'est le fichier "CLVvd.ax" ( numéro de version : 1.0.0.2229 )

il apparait sous le nom de "Cyberlink video decoder (PDVD10)" dans graphedit, mais il n'apparait pas dans pouchintvmod au niveau de la liste déroulante pour les codecs h264, est-ce un bug de pouchintvmod ?

c'est dommage car ce codec marcherait peut-être dans pouchintvmod et permettrait l’accélération matérielle des chaines HD h264

Avatar du membre
Gingko
Administrateur du site et développeur
Messages : 2017
Enregistré le : 05 août 2007, 12:57
Carte Tuner : August DVB-T210 USB + divers autres
Êtes-vous un robot ? : Je ne suis pas un robot
Localisation : Pantin (IDF, 93)
Contact :

Re: le codec "Core avc" en mode "dxva" est-il compatible ?

Message par Gingko » 12 avr. 2011, 12:56

Curtis a écrit :sinon j'ai un codec h264 de cyberlink issu de powerdvd 10.0 qui marche sous graphedit pour la lecture de fichier HD avec DXVA ( y compris les fichiers TS enregistrés par pouchintvmod ) : c'est le fichier "CLVvd.ax" ( numéro de version : 1.0.0.2229 )

il apparait sous le nom de "Cyberlink video decoder (PDVD10)" dans graphedit, mais il n'apparait pas dans pouchintvmod au niveau de la liste déroulante pour les codecs h264, est-ce un bug de pouchintvmod ?

c'est dommage car ce codec marcherait peut-être dans pouchintvmod et permettrait l’accélération matérielle des chaines HD h264
Pouchin TV Mod liste en H264 tous les codecs qui annoncent qu'ils peuvent décoder le sous-type de média « MEDIASUBTYPE_H264 » (CLSID = {34363248-0000-0010-8000-00AA00389B71}).
Si le codec de Cyberlink n'expose pas ce sous-type de média, il ne sera pas listé, peu importe qu'il soit en réalité capable ou non de décoder le H264.
Il se peut qu'il expose un autre CLSID moins standard à la place, si c'est le cas et qu'on arrive à trouver lequel, on peut toujours envisager de faire en sorte que Pouchin TV Mod recherche celui-là aussi dans une version future.
Il existe un clone amélioré (et open source) de GraphEdit, nommé GraphStudio, qui est capable de montrer tous les types et sous-types de médias qu'un codec annonce qu'il est capable de décoder.

En tout état de cause, on est en train de parler ici d'une caractéristique éventuellement à implémenter dans Pouchin TV Mod. Ce n'est pas là la définition d'un bug.

Gingko
Gingko
․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․
Tuners utilisés, sur 3 ordis : • USB : August DVB-T210, AverMedia HDTV DVB-T Volar (2×) • PCI : Hauppauge Nova-DT Dual DVB-T • Express Card : AverMedia Digi Express 54

Curtis
Messages : 164
Enregistré le : 27 févr. 2010, 20:15
Carte Tuner : Leadtek DTV1800H
Êtes-vous un robot ? : Je ne suis pas un robot

Re: le codec "Core avc" en mode "dxva" est-il compatible ?

Message par Curtis » 12 avr. 2011, 20:27

vous pouvez donc déplacer ce sujet dans la rubrique suggestion ou autres :)

sinon j'ai regardé dans le code source de la révision 284 afin de voir où se fait la recherche et le remplissage de cette liste de codec h264 dans l'onglet "pilotes", j'ai un peu de mal à y voir clair, est-ce que tout se passe dans le fichier search.cpp à la ligne 88 ? :

Code : Tout sélectionner

// Recherche de codecs
// ====================================================================================

CSearchByType::CSearchByType(GUID type, GUID subtype, bool bExactMatch) :
	hr(E_FAIL)
il faut aussi regarder dans le fichier main.cpp où ces fonctions de recherches sont appelées ?
l'idée c'est que j'aimerai imposer en dur dans le code source ce codec h264 de cyberlink à des fins de test pour voir si ce codec fonctionne sous pouchintvmod,

j'ai essayé de tricher en modifiant le fichier config.ini avec le bloc notes en mettant le nom en dur du codec dans la ligne :

Code : Tout sélectionner

Filtre H264=CyberLink Video Decoder (PDVD10)
mais ça me donne cette erreur quand je vais sur une chaine hd :
---------------------------
Erreur
---------------------------
Le filtre "CyberLink Video Decoder (PDVD10)" n'a pas pu être créé
Erreur non spécifiée (code 0x80004005)
et quand je vais dans l'onglet "pilotes" j'ai cet avertissement :
---------------------------
Filtres non disponibles
---------------------------
Au moins un filtre, précédemment défini, n'est plus disponible.
Veuillez effectuer une autre sélection.
Liste des filtres manquants :
- CyberLink Video Decoder (PDVD10)
soit "CyberLink Video Decoder (PDVD10)" n'est pas le vrai nom officiel de ce codec h264 de cyberlink, soit il faut l’appeler d'une autre manière plus fiable dans le code source, par exemple par son ID ?

c'est cette modif que j'aimerai faire dans le code source mais je ne suis pas très fort en manipulation de graph de directshow ( à part bidouiller des graphs dans graphedit ),

ce qui est sûr c'est que ce codec de cyberlink sait parfaitement décoder des fichiers encodés en h264 ( fichier avi, mkv, fichier ts ), il sait aussi décoder d'autres types comme du mpeg2,

j'ai lancé graphstudio pour avoir des infos sur ce codec et on voit la mention "h264" dans les propriétés "media subtype" ( subtype 9 ) :
cyberlink h264.png
cyberlink h264.png (15.91 Kio) Vu 17501 fois
peut-être que la solution serait d'élargir la recherche dans le code source ( genre la borne maximum d'une boucle "for" qui ne va pas assez loin dans l'exploration des propriétés du codec )

Avatar du membre
Gingko
Administrateur du site et développeur
Messages : 2017
Enregistré le : 05 août 2007, 12:57
Carte Tuner : August DVB-T210 USB + divers autres
Êtes-vous un robot ? : Je ne suis pas un robot
Localisation : Pantin (IDF, 93)
Contact :

Re: le codec "Core avc" en mode "dxva" est-il compatible ?

Message par Gingko » 12 avr. 2011, 21:03

Curtis a écrit :vous pouvez donc déplacer ce sujet dans la rubrique suggestion ou autres :)
« Développement », je pense que ça va mieux. :)
Curtis a écrit :sinon j'ai regardé dans le code source de la révision 284 afin de voir où se fait la recherche et le remplissage de cette liste de codec h264 dans l'onglet "pilotes", j'ai un peu de mal à y voir clair, est-ce que tout se passe dans le fichier search.cpp à la ligne 88 ? :

Code : Tout sélectionner

// Recherche de codecs
// ====================================================================================

CSearchByType::CSearchByType(GUID type, GUID subtype, bool bExactMatch) :
	hr(E_FAIL)
il faut aussi regarder dans le fichier main.cpp où ces fonctions de recherches sont appelées ?
l'idée c'est que j'aimerai imposer en dur dans le code source ce codec h264 de cyberlink à des fins de test pour voir si ce codec fonctionne sous pouchintvmod,

j'ai essayé de tricher en modifiant le fichier config.ini avec le bloc notes en mettant le nom en dur du codec dans la ligne :

Code : Tout sélectionner

Filtre H264=CyberLink Video Decoder (PDVD10)
mais ça me donne cette erreur quand je vais sur une chaine hd :
---------------------------
Erreur
---------------------------
Le filtre "CyberLink Video Decoder (PDVD10)" n'a pas pu être créé
Erreur non spécifiée (code 0x80004005)
Une variante de la fonction de recherche est utilisée pour l'insertion du codec.
Donc s'il ne le trouve pas à la recherche, il ne le trouvera pas à l'insertion non plus : pas la peine de forcer le nom, c'est vérifié après de toutes façons.
Curtis a écrit :et quand je vais dans l'onglet "pilotes" j'ai cet avertissement :
---------------------------
Filtres non disponibles
---------------------------
Au moins un filtre, précédemment défini, n'est plus disponible.
Veuillez effectuer une autre sélection.
Liste des filtres manquants :
- CyberLink Video Decoder (PDVD10)
Normal puisque vous avez inséré un nom qu'il ne retrouve pas.
Curtis a écrit :soit "CyberLink Video Decoder (PDVD10)" n'est pas le vrai nom officiel de ce codec h264 de cyberlink, soit il faut l’appeler d'une autre manière plus fiable dans le code source, par exemple par son ID ?

c'est cette modif que j'aimerai faire dans le code source mais je ne suis pas très fort en manipulation de graph de directshow ( à part bidouiller des graphs dans graphedit ),

ce qui est sûr c'est que ce codec de cyberlink sait parfaitement décoder des fichiers encodés en h264 ( fichier avi, mkv, fichier ts ), il sait aussi décoder d'autres types comme du mpeg2,

j'ai lancé graphstudio pour avoir des infos sur ce codec et on voit la mention "h264" dans les propriétés "media subtype" ( subtype 9 ) :

[]

peut-être que la solution serait d'élargir la recherche dans le code source ( genre la borne maximum d'une boucle "for" qui ne va pas assez loin dans l'exploration des propriétés du codec )
Rien à voir avec une boucle « for ».

C'est une fonction d'énumération « EnumMatchingFilters » qui fait ça.

Effectivement, logiquement il devrait le trouver. Je ne sais pas pourquoi il ne le fait pas.
Mais j'ai peut-être une idée pour une raison possible.
Seulement il faudrait que je fasse des essais avec ce codec.

Gingko
Gingko
․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․
Tuners utilisés, sur 3 ordis : • USB : August DVB-T210, AverMedia HDTV DVB-T Volar (2×) • PCI : Hauppauge Nova-DT Dual DVB-T • Express Card : AverMedia Digi Express 54

Curtis
Messages : 164
Enregistré le : 27 févr. 2010, 20:15
Carte Tuner : Leadtek DTV1800H
Êtes-vous un robot ? : Je ne suis pas un robot

Re: le codec "Core avc" en mode "dxva" est-il compatible ?

Message par Curtis » 12 avr. 2011, 21:38

j'ai trouvé la solution 8)

en fait le problème venait du paramètre "merit" du codec, il était positionné sur "0x00200000 (MERIT_DO_NOT_USE)",

j'ai donc changé ce paramètre avec graphstudio via le bouton "change merit" dans la fenêtre qui permet d'inserer un filtre, j'ai mis alors une nouvelle valeur :

Code : Tout sélectionner

0x00600000 (MERIT_NORMAL)
ensuite il faut quitter la session de winxp, puis se reconnecter pour que le changement soit pris en compte,

ça permet maintenant à pouchintvmod de lister ce codec "CyberLink Video Decoder (PDVD10)" dans la liste déroulante "h264" et de pouvoir l'utliser :mrgreen:

le changement est considérable en terme d'utilisation du CPU car le % tombe à quasiment 0% quand on regarde une chaine HD alors qu'auparavant ça montait à 35~40% :)

tout ça grâce à l'option "DXVA" qui utilise l’accélération matérielle h264 de ma carte graphique ati radeon 4650 PCI express, ça permet de soulager le CPU et d'aider ceux qui ont un PC de puissance modeste,

je précise que le mode de rendu utilisé est le VMR7 renderless chez moi,

il faudrait maintenant voir si dans pouchintvmod on peut forcer la selection de codecs qui ont le paramètre "merit" sur "MERIT_DO_NOT_USE", un paramètre dans l'api de directshow qui permet de forcer la selection de ce genre de codec, on pourrait imaginer une case à cocher dans l'onglet "pilote" pour forcer pouchintvmod à afficher les codecs "MERIT_DO_NOT_USE" ?

Avatar du membre
Gingko
Administrateur du site et développeur
Messages : 2017
Enregistré le : 05 août 2007, 12:57
Carte Tuner : August DVB-T210 USB + divers autres
Êtes-vous un robot ? : Je ne suis pas un robot
Localisation : Pantin (IDF, 93)
Contact :

Re: le codec "Core avc" en mode "dxva" est-il compatible ?

Message par Gingko » 12 avr. 2011, 22:44

Curtis a écrit :j'ai trouvé la solution 8)

en fait le problème venait du paramètre "merit" du codec, il était positionné sur "0x00200000 (MERIT_DO_NOT_USE)",

j'ai donc changé ce paramètre avec graphstudio via le bouton "change merit" dans la fenêtre qui permet d'inserer un filtre, j'ai mis alors une nouvelle valeur :

Code : Tout sélectionner

0x00600000 (MERIT_NORMAL)
ensuite il faut quitter la session de winxp, puis se reconnecter pour que le changement soit pris en compte,

ça permet maintenant à pouchintvmod de lister ce codec "CyberLink Video Decoder (PDVD10)" dans la liste déroulante "h264" et de pouvoir l'utliser :mrgreen:

le changement est considérable en terme d'utilisation du CPU car le % tombe à quasiment 0% quand on regarde une chaine HD alors qu'auparavant ça montait à 35~40% :)

tout ça grâce à l'option "DXVA" qui utilise l’accélération matérielle h264 de ma carte graphique ati radeon 4650 PCI express, ça permet de soulager le CPU et d'aider ceux qui ont un PC de puissance modeste,

je précise que le mode de rendu utilisé est le VMR7 renderless chez moi,

il faudrait maintenant voir si dans pouchintvmod on peut forcer la selection de codecs qui ont le paramètre "merit" sur "MERIT_DO_NOT_USE", un paramètre dans l'api de directshow qui permet de forcer la selection de ce genre de codec, on pourrait imaginer une case à cocher dans l'onglet "pilote" pour forcer pouchintvmod à afficher les codecs "MERIT_DO_NOT_USE" ?
Bravo.

Si ça ne tient qu'à ça, il suffirait sans doute d'enlever le +1 dans la ligne 104 (« MERIT_DO_NOT_USE+1, // Minimum merit. ») de search.cpp (voire même peut-être de mettre tout le champ à zéro). Mais je n'ai pas encore eu le temps d'essayer.

Code : Tout sélectionner

    hr = pMapper->EnumMatchingFilters(
            &pEnum,
            0,                  // Reserved.
            bExactMatch,        // Use exact match?
            MERIT_DO_NOT_USE+1, // Minimum merit.
            TRUE,               // At least one input pin?
            1,                  // Number of major type/subtype pairs for input.
            arrayInTypes,       // Array of major type/subtype pairs for input.
            NULL,               // Input medium.
            NULL,               // Input pin category.
            FALSE,              // Must be a renderer?
            TRUE,               // At least one output pin?
            0,                  // Number of major type/subtype pairs for output.
            NULL,               // Array of major type/subtype pairs for output.
            NULL,               // Output medium.
            NULL);              // Output pin category.
À la limite, c'est vrai qu'il n'est pas absolument nécessaire d'exclure des filtres sur ce critère (dont le rôle est plutôt d'éviter que le filtre soit insérer dans les constructions de graphe entièrement automatiques).

Gingko
Gingko
․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․ ․
Tuners utilisés, sur 3 ordis : • USB : August DVB-T210, AverMedia HDTV DVB-T Volar (2×) • PCI : Hauppauge Nova-DT Dual DVB-T • Express Card : AverMedia Digi Express 54

Curtis
Messages : 164
Enregistré le : 27 févr. 2010, 20:15
Carte Tuner : Leadtek DTV1800H
Êtes-vous un robot ? : Je ne suis pas un robot

Re: le codec "Core avc" en mode "dxva" est-il compatible ?

Message par Curtis » 12 avr. 2011, 23:06

en effet en mettant à zéro ce paramètre à cette ligne 104 ça permet de lister un peu plus de filtres dans la liste déroulante, j'ai fait le test avec la révision 284

Répondre