2 Stimmen

ITuner::put_TuneRequest()-Aufruf ignoriert

Ich habe einen DirectShow-Graph mit einem "Microsoft DVBT Network Provider", "AVerMedia BDA DVBT Tuner", "AVerMEdia BDA Digital Capture", "Sample Grabber" und "NULL Renderer".

Diese Filter sind miteinander verbunden.

Daneben habe ich auch einen "MPEG-2 Demultiplexer" und einen "BDA MPEG2 Transport Information Filter", aber diese beiden Filter sind NICHT verbunden! Es scheint, dass sie hier sein müssen, um das Diagramm auszuführen.

Wenn ich das Diagramm starte, erhalte ich zwar TS-Daten, aber egal was ich tue, ich kann die Abstimmungsanforderung nicht stellen. Ich kann nur die MUX-Daten von der letzten abgestimmten Frequenz mit einer anderen Anwendung wie Windows Media Center erfassen.

Hier ist der Code, um die Tune-Anfrage zu stellen:

// creating tuning space

CComPtr<IDVBTuningSpace> pDVBTuningSpace;<br>
hr = pDVBTuningSpace.CoCreateInstance( __uuidof( DVBTuningSpace ) );

WCHAR szFriendlyName[ 64 ] = L"Local DVB-T Digital Antenna";<br> BSTR bstrFriendlyName = SysAllocString( szFriendlyName );

hr = pDVBTuningSpace->put_UniqueName( bstrFriendlyName );<br>
hr = pDVBTuningSpace->put_FriendlyName( bstrFriendlyName );

SysFreeString( bstrFriendlyName );

CComBSTR clsid_dvbt = ("{216C62DF-6D7F-4e9a-8571-05F14EDB766A}");<br>
hr = pDVBTuningSpace->put_NetworkType( clsid_dvbt );<br>
hr = pDVBTuningSpace->put_SystemType( DVB_Terrestrial );<br>

// creating tune request<br>
CComPtr<ITuneRequest> pTuneRequest;

hr = pDVBTuningSpace->CreateTuneRequest( &pTuneRequest );

CComQIPtr<IDVBTuneRequest> pDVBTuneRequest( pTuneRequest );

hr = pDVBTuneRequest->put_ONID( -1 );<br>
hr = pDVBTuneRequest->put_TSID( -1 );<br>
hr = pDVBTuneRequest->put_SID( -1 );

// locator<br>
CComPtr<IDVBTLocator> pDVBTLocator;

hr = pDVBTLocator.CoCreateInstance( __uuidof( DVBTLocator ) );<br>
hr = pDVBTLocator->put_Bandwidth( 8 );<br>
hr = pDVBTLocator->put_CarrierFrequency( 506000 );

hr = pDVBTuneRequest->put_Locator( pDVBTLocator );

CComQIPtr<ITuner> pTuner( pNetworkProvider_ );

hr = pTuner->put_TuneRequest( pDVBTuneRequest );

Dieser wird unmittelbar nach dem Hinzufügen des Filters "Microsoft DVBT Network Provider" im Diagramm ausgeführt.
Alle "hr"-Werte des obigen Codes sind S_OK.

Was mache ich falsch? Oder habe ich etwas Wichtiges bei dieser "Tune Request"-Sache übersehen?

(Bandbreiten- und Frequenzwerte sind korrekt)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X