IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

Ajout filtre dans GraphEdit, mémoire insuffisante


Sujet :

DirectX

  1. #1
    Membre à l'essai
    Femme Profil pro
    Doctorante
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 20
    Points
    20
    Par défaut Ajout filtre dans GraphEdit, mémoire insuffisante
    Bonjour à tous,

    J'aurais besoin de quelqu'un qui maîtrise (un peu) les filtres directShow, et qui pourrait ainsi m'éviter la crise d'apoplexie...
    J'ai créé un filtre source tout mignon tout propre avec la structure nécessaire et uniquement la structure, c'est à dire la classe pin avec constructeur et destructeur, la classe filtre avec constructeur, destructeur et CreateInstance et le setup avec la définition des pins. Je n'ai rien d'autre.
    La compilation fonctionne, l'édition aussi, l'enregistrement du filtre dans la base de registre tout va bien, jusqu'à l'ouverture de regedit et l'ajout du filtre dans le graph... et là c'est le drame ! j'ai droit à une très jolie erreur "The filter could not be created, resources used by this filter may already be used. Mémoire insuffisante (Return code : 0x8007000e)"

    si quelqu'un pouvait m'aider avant que le craquage ne m'atteigne complètement (comment ça c'est déjà fait) je lui en serait éternellement reconnaissante...

    Au cas où, mon code...

    Fichiers en-tête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #pragma once
    #ifndef __AFXWIN_H__
    #error "incluez 'stdafx.h' avant d'inclure ce fichier pour PCH"
    #endif
    #include <streams.h>
    #include "initguid.h"
    #include "DirectHikvisionGuids.h"
     
     
     
    #define g_wszPushHikvision     L"Hikvision DirectShow Filter"
    #define imageSize 352*288*3
     
    class CDirectShowHikvision;
     
     
    class CDirectPinHikvision : public CSourceStream
    {
    protected:
     
    	CDirectShowHikvision *filter;	
    public:
     
    	CDirectPinHikvision(CSource *pFilter, HRESULT *phr);
    	~CDirectPinHikvision();
     
     
    };
     
     
     
    class CDirectShowHikvision : public CSource
    {
     
    	friend class CPinHikvision;
    private:
    	// Constructor is private because you have to use CreateInstance
    	CDirectShowHikvision(IUnknown *pUnk, HRESULT *phr);
    	~CDirectShowHikvision();
     
    public:
    	static CUnknown * WINAPI CreateInstance(IUnknown *pUnk, HRESULT *phr);  
     
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #ifndef __HIKGUIDS_DEFINED
    #define __HIKGUIDS_DEFINED
     
     
    // 190418CC-3808-11DF-8581-1DA255D89593
    DEFINE_GUID(CLSID_DirectShowHikvision, 
    			0x190418CC, 0x3808, 0x11DF, 0x85, 0x81, 0x1d, 0xa2, 0x55, 0xd8, 0x95, 0x93);
     
     
    #endif
    Fichier de définition du filtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // DirectShowHikvision.cpp : définit les fonctions d'initialisation pour la DLL.
    //
     
    #include "stdafx.h"
    #include "DirectShowHikvision.h"
     
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
     
     
    CDirectShowHikvision::CDirectShowHikvision(IUnknown *pUnk, HRESULT *phr)
    : CSource(NAME("DirectShowHikvision"), pUnk, CLSID_DirectShowHikvision)
    {
     
    }
     
    CDirectShowHikvision::~CDirectShowHikvision()
    {
     
    }
     
    CUnknown * WINAPI CDirectShowHikvision::CreateInstance(IUnknown *pUnk, HRESULT *phr)
    {
    	return NULL;
    }

    Fichier de définition des pins
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include "stdafx.h"
    #include "DirectShowHikvision.h"
     
     
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
     
     
    CDirectPinHikvision::CDirectPinHikvision(CSource *pFilter, HRESULT *phr)
    : CSourceStream(NAME("CDirectPinHikvision"), phr, pFilter, L"Out")
    {
     
     
     
    }
     
    CDirectPinHikvision::~CDirectPinHikvision()
    {
     
    }

    Fichier d'"installation"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    #include "stdafx.h"
     
     
    #include <initguid.h>
    #include "DirectShowHikvision.h"
     
     
     
    const AMOVIESETUP_MEDIATYPE sudOpPinTypes =
    {
    	&MEDIATYPE_Video,       // Major type
    	&MEDIASUBTYPE_NULL      // Minor type
    };
     
     
    const AMOVIESETUP_PIN sudOutputPinHikvision = 
    {
    	L"Output",      // Obsolete, not used.
    	FALSE,          // Is this pin rendered?
    	TRUE,           // Is it an output pin?
    	FALSE,          // Can the filter create zero instances?
    	FALSE,          // Does the filter create multiple instances?
    	&CLSID_NULL,    // Obsolete.
    	L"Input",           // Connect to pin.
    	1,              // Number of media types.
    	&sudOpPinTypes  // Pin Type Information.
    };
     
    const AMOVIESETUP_FILTER sudDirectHikvision =
    {
    	&CLSID_DirectShowHikvision,// Filter CLSID
    	g_wszPushHikvision,        // String name
    	MERIT_DO_NOT_USE,       // Filter merit
    	1,                      // Number pins
    	&sudOutputPinHikvision     // Pin details
    };
     
    CFactoryTemplate g_Templates[1] = {
    	{ L"Direct Hikvision",                // Name
    	&CLSID_DirectShowHikvision,             // CLSID
    	CDirectShowHikvision::CreateInstance,   // Method to create an instance of MyComponent
    	NULL,                           // Initialization function
    	&sudDirectHikvision                            // Set-up information (for filters)
    	}
    };
    int g_cTemplates = sizeof(g_Templates) / sizeof(g_Templates[0]);
     
     
     
    ////////////////////////////////////////////////////////////////////////
    //
    // Exported entry points for registration and unregistration 
    // (in this case they only call through to default implementations).
    //
    ////////////////////////////////////////////////////////////////////////
     
    STDAPI DllRegisterServer()
    {
    	return AMovieDllRegisterServer2( TRUE );
    }
     
    STDAPI DllUnregisterServer()
    {
    	return AMovieDllRegisterServer2( FALSE );
    }
     
    //
    // DllEntryPoint
    //
    extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID);
     
    BOOL APIENTRY DllMain(HANDLE hModule, 
    					  DWORD  dwReason, 
    					  LPVOID lpReserved)
    {
    	return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved);
    }

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    STDAPI DllRegisterServer()
    {
    	return AMovieDllRegisterServer2( TRUE );
    }
     
    STDAPI DllUnregisterServer()
    {
    	return AMovieDllRegisterServer2( FALSE );
    }
    Lors de l'appel du <<<<destructeur>>> ( au sens technologie COM ) tu appelles encore une fois AMovieDllRegisterServer2( FALSE );

  3. #3
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Bonjour,

    Citation Envoyé par Madalen Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    CUnknown * WINAPI CDirectShowHikvision::CreateInstance(IUnknown *pUnk, HRESULT *phr)
    {
    	return NULL;
    }
    Essaies avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    CUnknown * WINAPI CDirectShowHikvision::CreateInstance(IUnknown *pUnk, HRESULT *phr)
    {
    	CDirectShowHikvision *pNewFilter = new CDirectShowHikvision(pUnk, phr );
     
        if (phr)
        {
            if (pNewFilter == NULL) 
                *phr = E_OUTOFMEMORY;
            else
                *phr = S_OK;
        }
     
        return pNewFilter;
    }
    Enfin un truc de ce genre. Tu dois retourner un objet valide, sinon graphedit, il aime pas.

    PS: les constructeurs aussi doivent être remplis. Je regarderai chez moi.

Discussions similaires

  1. Ajouter filtres dans grille
    Par georgie2 dans le forum Ext JS / Sencha
    Réponses: 2
    Dernier message: 08/07/2013, 11h32
  2. [AC-2003] Ajouter un filtre dans une fonction d'ouverture de fichier
    Par Orakle dans le forum VBA Access
    Réponses: 2
    Dernier message: 27/05/2011, 12h05
  3. Ajout impossible dans un formulaire filtré !
    Par Stegue dans le forum IHM
    Réponses: 5
    Dernier message: 13/03/2008, 22h56
  4. Réponses: 4
    Dernier message: 22/02/2008, 10h02
  5. Ajouter un filtre dans le navigateur
    Par meufeu dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 16/02/2007, 15h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo