2016-05-06 15 views
3

Ich habe einen benutzerdefinierten Filter in DirectShow namens Entschlüsselung erstellt, aber bei der Verwendung von GraphStudioNext gibt mir eine "VFW_E_NO_ACCEPTABLE_TYPES (0x80040207)" beim Versuch, die Ausgabe von einem MP4 in die Eingabe meines benutzerdefinierten Filters zu verbinden.Benutzerdefinierter Filter ist nicht kompatibel?

// Media Types 
const AMOVIESETUP_MEDIATYPE sudPinTypes = 
{ 
    &MEDIATYPE_Stream, 
    &MEDIASUBTYPE_NULL 
}; 

// Pins 
const AMOVIESETUP_PIN psudPins[] = 
{ 
    { L"Input", FALSE, FALSE, FALSE, FALSE, &CLSID_NULL, L"Output", 1, &sudPinTypes }, 
    { L"Output", FALSE, TRUE, FALSE, FALSE, &CLSID_NULL, L"Input", 1, &sudPinTypes } 
}; 

// Filters 
const AMOVIESETUP_FILTER sudAudioVolume = 
{ 
    &CLSID_Decryption, 
    L"Decryption", 
    MERIT_NORMAL, 
    2, 
    psudPins 
}; 

HRESULT DecryptionFilter::CheckInputType(const CMediaType *mtIn) 
{ 
    //Streaming 
    if (mtIn->majortype != MEDIATYPE_Stream) return E_FAIL; 
    if (mtIn->subtype != MEDIATYPE_NULL) return E_FAIL; 

    return S_OK; 
} 

HRESULT DecryptionFilter::CheckTransform(const CMediaType *mtIn, const CMediaType *mtOut) 
{ 
    HRESULT hr = CheckInputType(mtIn); 
    if (FAILED(hr)) return hr; 

    if (mtIn->majortype != MEDIATYPE_Stream) return E_FAIL; 
    if (mtIn->subtype != MEDIATYPE_NULL) return E_FAIL; 

    return S_OK; 
} 

ich gedebuggt durch GraphStudioNext und

  • Quelle des Ausgangs-Pin "connection" PIN_CONNECTION_TYPE_STREAM ist
  • Benutzerdefinierte Filtereingang Stecknadel "connection" ist
    PIN_CONNECTION_TYPE_OTHER

Was mein Graph aussieht wie: My Graph of what I'm trying to accomplish

Immobilien Source Filter und Benutzerdefinierte Filter Properties for Source Filter and Custom Filter

Jeder Hinweis auf, warum meine Filter nicht verbinden? Vielen Dank!

Antwort

3

Ihr Filter ist inkompatibel, da er nicht dieselbe Funktionalität wie File Source Filter implementiert, die Sie sich ausgeben. Insbesondere müssen Sie die Schnittstelle IAsyncReader implementieren.

Darüber hinaus ist GDCL-Quelle verfügbar - Sie können die Quelle Schritt und identifizieren das genaue Problem mit dem Debugger.

+0

Danke nochmal Roman R. Also meine Entschlüsselung Filterklasse würde als "Klasse DecryptionFilter: öffentliche CTransformFilter, öffentliche IAsyncReader" deklariert werden? –

+0

Nicht nur erklärt. Sie müssen die Schnittstelle korrekt implementieren und nicht den Filter, sondern dessen Pin. Die Idee ist, dass Ihr Filter genau so aussieht wie der Quellenfilter der Bestandsdatei, mit der gleichen Schnittstelle. Damit der Demultiplexer bequem mit Ihrem Filter arbeiten kann, anstatt mit dem Standardfilter. –

Verwandte Themen