O filtro CSource do DirectShow ininterrupto faz o travamento do programa durante o desligamento do processo

Estou desenvolvendo um filtro de captura CSource do DirectShow. Ele funciona bem, mas quando eu fecho o programa que está usando o filtro (neste caso estou testando com VLC, mas o mesmo acontece com outros programas), o programa trava (se eu estou depurando no Visual Studio, em seguida, um ponto de interrupção é acionado).

Eu tenho caçado esse problema há algum tempo e descobri que ambos, meu filtro de origem e meu fluxo de origem, não estão sendo liberados; isto é, seu contador de referência é 1 no final do programa, a função DllCanUnloadNow () informa que há dois objetos ainda em uso e, quando CoUninitialize () é invocado, o programa falha.

Tenho certeza de que os contadores de referência estão sendo tratados corretamente desde que eu estou usando a implementação de classes base. A única coisa incomum em meu software que eu posso pensar é que eu estou usando minha própria versão de DllGetClassObject (): eu configurei o arquivo .DEF para ter MyDllGetClassObject () exportado em vez de DllGetClassObject () para que eu pudesse inserir algum código antes invocando a implementação padrão. Eu não acho que isso é um problema desde que eu verifiquei que o contador de referência de todos os objetos que eu retornar no final de MyDllGetClassObject () é 1.

Eu acho que estou perdendo algo sobre o ciclo de vida do filtro, mas não consigo descobrir o que (este é o primeiro filtro de captura que estou desenvolvendo). Alguma sugestão?

Agradeço antecipadamente,

Guillermo

questionAnswers(1)

yourAnswerToTheQuestion