Condividi tramite


Fornitura di un ridimensionamento video personalizzato

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

[Questa API non è supportata e potrebbe essere modificata o non disponibile in futuro.]

Nota

Questa funzionalità richiede DirectX 9.0 o versione successiva.

 

Quando DirectShow Editing Services (DES) ridimensiona un clip di origine video, il comportamento predefinito è StretchBlt, veloce ma non anti-aliasing. È possibile modificare il comportamento di ridimensionamento implementando un ridimensionatore personalizzato come filtro di trasformazione DirectShow. Il filtro deve esporre l'interfaccia IResize , che consente a DES di specificare le dimensioni del video di input e output. Per informazioni sulla scrittura di un filtro di trasformazione, vedere Scrittura di filtri di trasformazione. La classe di base CTransformFilter è consigliata come punto iniziale. Quando si implementa il filtro, tenere presente quanto segue:

  • Supportare l'interfaccia IResize sul filtro (non sui pin).
  • Il filtro deve accettare solo formati VIDEOINFOHEADER (FORMAT_VideoInfo). Rifiutare altri tipi di formato.
  • Il formato video di DES può essere qualsiasi tipo RGB non compresso, incluso RGB a 32 bit con alfa (MEDIASUBTYPE_ARGB32). Il filtro può rifiutare in modo sicuro i formati con biHeight< 0.
  • Prima che il motore di rendering connetta il pin di output del filtro, chiama IResize::p ut_MediaType per impostare il tipo di output. Può anche chiamare IResize::p ut_Size per regolare le dimensioni dell'output. Può chiamare questi due metodi in qualsiasi ordine, qualsiasi numero di volte, prima di connettere il pin di output.
  • Dopo che il motore di rendering connette il pin di output, potrebbe chiamare di nuovo put_Size . Il filtro di ridimensionamento deve riconnettere il pin di output con le nuove dimensioni.
  • All'interno del metodo CTransformFilter::Transform del filtro, estendere il video di input alle dimensioni di output.
  • Il filtro non deve mai impostare il flag di discontinuità nell'esempio di output o collegare un tipo di supporto all'esempio di output.
  • Per salvare lo stato del filtro in un file GraphEdit (grf), implementare l'interfaccia IPersistStream . Questa opzione è facoltativa, ma utile per il test.

Per utilizzare il filtro di ridimensionamento, il filtro deve essere registrato come oggetto COM nel sistema dell'utente. Prima che l'applicazione esegua il rendering del progetto video, eseguire una query sul motore di rendering per l'interfaccia IRenderEngine2::SetResizerGUID con il CLSID del filtro del ridimensionatore.

Rendering di un progetto