2017-07-11 1 views
0

J'ai une application C# WinForms qui appelle une DLL C++ Win32 contenant les opérations DirectShow.IMediaControl :: Run E_OUTOFMEMORY

Lorsque je diffuse 13MP (4208 * 3120) à partir de la caméra, l'API IMediaControl :: Run() échoue avec la valeur HRESULT = E_OUTOFMEMORY. J'ai vérifié l'allocation de mémoire et les désallocations de la mémoire. En outre, j'ai essayé d'activer/LARGEADDRESSAWARE. J'ai même essayé de spécifier la taille de commit de tas.

Mais encore, l'est existe.

Ai-je raté quelque chose? S'il vous plaît partagez vos pensées.

Merci à l'avance.

+0

Avez-vous vérifié si votre ordinateur manquait de mémoire? –

+0

oui. J'ai fait. PC a suffisamment de mémoire. – sam

+0

Il est encore susceptible d'être un problème de mémoire. Est-ce votre application 32 bits? PC RAM est peu susceptible d'être pertinent. Une grande connaissance de l'adresse doit être définie sur l'application (EXE). Vous devriez être capable de surveiller le processus et son utilisation de l'adresse virtuelle. Il est typique pour le pipeline DirectShow d'allouer des tampons et ils peuvent être coûteux en termes de mémoire pour une telle résolution. Il serait utile aussi de [connaître votre graphique de filtre DirectShow] (http://alax.info/blog/1678). –

Répondre

0

Merci les gars pour votre réponse.

Je pourrais trouver le problème avec l'outil @RomanR. suggéré.

Le problème était que je suis en train de déclencher une image fixe et de changer la résolution immédiatement. Qu'est-ce qui se passe réellement, le déclencheur est encore traité. Le tampon immobile est en cours de traitement dans le rappel. Avant que le processus de capture d'images fixes soit terminé, j'arrache le graphique. C'est la raison du problème.