Intersezioni tra intervalli di dati in AVStream

Un formato dati è un singolo set di parametri che descrive alcuni aspetti di una connessione. Ad esempio, un formato di dati audio può specificare un determinato formato di audio a campioni X al secondo e bit Y per campione.

Un intervallo di dati specifica una sequenza di parametri validi. Ad esempio, un intervallo di dati audio può specificare un determinato formato di audio in campioni A-B al secondo e bit C-D per campione.

Il minidriver fornisce un elenco di intervalli di dati supportati per un pin specifico nel membro DataRanges della struttura di KSPIN_DESCRIPTOR corrispondente.

In AVStream i minidriver possono fornire i propri gestori di intersezione dell'intervallo di dati fornendo un puntatore a una routine di callback fornita da minidriver nel membro IntersectHandler di un KSPIN_DESCRIPTOR_EX. Per consentire a AVStream di intersecare gli intervalli, impostare questo membro su NULL. Per informazioni su come definire la routine di callback, vedere AVStrMiniIntersectHandlerEx .

Se un minidriver fornisce un gestore di intersezione, quando è necessario eseguire un'intersezione, il minidriver riceve due intervalli di dati corrispondenti a tipo principale, sottoformatto e identificatore. Inoltre, gli attributi obbligatori degli intervalli di dati corrispondono.

Se gli intervalli si intersecano e lo spazio del buffer sufficiente viene fornito nel parametro Data della routine di callback AVStrMiniIntersectHandlerEx , la routine di intersezione sceglie un formato nell'intersezione e la restituisce al chiamante nel buffer a cui punta Data.

Se i due intervalli di dati non si intersecano, il gestore restituisce STATUS_NO_MATCH.

Se il minidriver ha specificato un dispatch AVStrMiniPinSetDataFormat , AVStream chiama questo invio per informare il minidriver che AVStream sta impostando un formato specifico sul pin. Specificare un puntatore alla routine di callback AVStrMiniPinSetDataFormat nel membro SetDataFormat della struttura KSPIN_DISPATCH . I minidriver che sono client della classe di flusso ricevono SRB_SET_DATA_FORMAT anziché AVStrMiniPinSetDataFormat.

Il minidriver può rifiutare un formato proposto restituendo STATUS_NO_MATCH da AVStrMiniPinSetDataFormat.

Oltre alla chiamata iniziale ad AVStrMiniPinSetDataFormat prima della creazione del pin, il minidriver potrebbe ricevere una seconda chiamata AVStrMiniPinSetDataFormat appena prima che il pin passi allo stato RUN. Se il client di classe AVStream o stream è un minidriver di acquisizione video e si riceve una notifica di questo tipo, questo invio contiene i parametri di superficie effettivi. Se possibile, il minidriver non dovrebbe avere esito negativo questa seconda modifica del formato. Non presupporre che venga eseguita una seconda chiamata di invio.

Il minidriver deve acquisire i dati in qualsiasi formato contenuto nell'ultimo invio AVStrMiniPinSetDataFormat riuscito.