Come determinare le tariffe supportate
Prima di modificare la frequenza di riproduzione, un'applicazione deve verificare se la frequenza di riproduzione è supportata dagli oggetti nella pipeline. L'interfaccia IMFRateSupport fornisce metodi per ottenere la velocità massima in avanti e inversa, la velocità supportata più vicina a una frequenza richiesta e la velocità più lenta. Ognuna di queste query di frequenza può specificare la direzione di riproduzione e se usare il thinning. La frequenza di riproduzione esatta viene eseguita tramite l'interfaccia IMFRateControl .
Per informazioni sulla modifica delle frequenze di riproduzione, vedere How to Set the Playback Rate on the Media Session.For information about changing playback rate, see How to Set the Playback Rate on the Media Session.
Per informazioni generali sulle frequenze di riproduzione, vedi Informazioni sul controllo frequenza.
Per determinare la frequenza di riproduzione corrente
Ottenere il servizio di controllo della frequenza dalla sessione multimediale.
IMFRateControl *pRateControl = NULL; hr = MFGetService( pMediaSession, MF_RATE_CONTROL_SERVICE, IID_IMFRateControl, (void**) &pRateControl );
Passare un puntatore all'interfaccia IMFMediaSession inizializzato nel parametro punkObject di MFGetService.
L'applicazione deve eseguire una query per il servizio di controllo della frequenza tramite la sessione multimediale. Internamente, la sessione multimediale esegue una query sugli oggetti nella topologia.
Chiamare il metodo IMFRateControl::GetRate per ottenere la frequenza di riproduzione corrente.
hr = pRateControl->GetRate(&bThin, &rate);
Il parametro pfThin di GetRate riceve un valore BOOL che indica se il flusso è attualmente in fase di thinned. L'applicazione deve passare NULL se non vuole eseguire query sul supporto di thinning per il flusso. Il parametro pflRate riceve la frequenza di riproduzione corrente.
Per determinare la frequenza più vicina supportata
Ottenere il servizio di supporto della frequenza dalla sessione multimediale.
IMFRateSupport *pRateSupport = NULL; hr = MFGetService( pMediaSession, MF_RATE_CONTROL_SERVICE, IID_IMFRateSupport, (void**) &pRateSupport );
Passare un puntatore all'interfaccia IMFMediaSession inizializzato nel parametro punkObject di MFGetService.
Chiamare il metodo IMFRateSupport::IsRateSupported per recuperare la frequenza supportata più vicina a una frequenza di riproduzione richiesta.
float rateRequested = 4.0; float actualRate = 0; hr = pRateSupport->IsRateSupported( TRUE, rateRequested, &actualRate );
Nell'esempio viene eseguita una query che indica se la frequenza di riproduzione di 4,0 è supportata con il thinning. Ciò è indicato passando TRUE nel parametro fThin di IsRateSupported. Se questa frequenza è supportata, actualRate contiene la velocità di riproduzione di 4,0 e la chiamata ha esito positivo con un valore restituito di S_OK. Se la frequenza di riproduzione esatta non è supportata, viene ricevuta la frequenza di riproduzione più vicina in actualRate. Se la frequenza non è supportata e non è disponibile una frequenza di riproduzione più vicina, la chiamata restituisce un codice di errore appropriato.
Questi valori possono cambiare a seconda dei componenti della pipeline caricati. Pertanto, è necessario eseguire di nuovo una query sui valori ogni volta che si carica una nuova topologia.
Se la frequenza di riproduzione desiderata non è supportata, è possibile eseguire una query su ogni oggetto nella topologia singolarmente per verificare se un determinato componente non supporta la frequenza. Potrebbe essere possibile ricompilare la topologia senza questo componente e quindi riprodurre alla velocità desiderata. Ad esempio, se ogni componente ad eccezione del renderer audio supporta una determinata frequenza, è possibile ricompilare la topologia senza il ramo audio e riprodurre alla velocità desiderata senza audio.
Per determinare la velocità supportata più lenta
Ottenere il servizio di supporto della frequenza dalla sessione multimediale.
IMFRateSupport *pRateSupport = NULL; hr = MFGetService( pMediaSession, MF_RATE_CONTROL_SERVICE, IID_IMFRateSupport, (void**) &pRateSupport );
Passare un puntatore all'interfaccia IMFMediaSession inizializzato nel parametro punkObject di MFGetService.
Chiamare il metodo IMFRateSupport::GetSlowestRate per recuperare la frequenza supportata più lenta.
float slowestRate = 0; hr = pRateSupport->GetSlowestRate( MFRATE_REVERSE, TRUE, &slowestRate);
L'esempio esegue query per la frequenza di riproduzione inversa più lenta con thinning. Il tasso di limite inferiore viene ricevuto nel parametro slowestRate di GetSlowestRate.
Se la riproduzione inversa o il thinning non è supportato, la chiamata restituisce un codice di errore appropriato.
Argomenti correlati