Condividi tramite


Servizi formato file interscambio risorse

[La funzionalità associata a questa pagina, I/O dei file multimediali , è una funzionalità legacy. È stato sostituito da lettore di origine. lettore di origine è stato ottimizzato per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi lettore di origine invece di file multimediali, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Il formato preferito per i file multimediali è il formato RIFF (Resource Interchange File Format). Le funzioni di I/O del file RIFF funzionano con i servizi di I/O di file memorizzati nel buffer di base e non memorizzati nel buffer. È possibile aprire, leggere e scrivere file RIFF nello stesso modo degli altri tipi di file. Per informazioni dettagliate su RIFF, vedere funzioni AVIFile e macro.

I file RIFF usano codici a quattro caratteri per identificare gli elementi del file. Questi codici sono quantità a 32 bit che rappresentano una sequenza da uno a quattro caratteri alfanumerici ASCII, riempiti a destra con caratteri di spazio. Il tipo di dati per i codici a quattro caratteri è FOURCC. Utilizzare la macrommioFOURCC per convertire quattro caratteri in un codice a quattro caratteri. Per convertire una stringa con terminazione Null in un codice a quattro caratteri, utilizzare la funzionemmioStringToFOURCC.

Il blocco predefinito di base di un file RIFF è un blocco . Un blocco è un'unità logica di dati multimediali, ad esempio un singolo fotogramma in un clip video. Ogni blocco contiene i campi seguenti:

  • Codice a quattro caratteri che specifica l'identificatore di blocco
  • Valore doubleword che specifica le dimensioni del membro dati nel blocco
  • Un campo dati

La figura seguente mostra un blocco "RIFF" che contiene due subchunk.

blocco riff che contiene due sotto blocchi immagine

Un blocco contenuto in un altro blocco è un sottochunk. Gli unici blocchi autorizzati a contenere blocchi secondari sono quelli con un identificatore di blocco "RIFF" o "LIST". Un blocco che contiene un altro blocco viene chiamato blocco padre . Il primo blocco in un file RIFF deve essere un blocco "RIFF". Tutti gli altri blocchi nel file sono subchunk del blocco "RIFF".

I blocchi "RIFF" includono un campo aggiuntivo nei primi quattro byte del campo dati. Questo campo aggiuntivo fornisce il tipo di modulo del campo. Il tipo di modulo è un codice a quattro caratteri che identifica il formato dei dati archiviati nel file. Ad esempio, i file audio waveform Microsoft hanno un tipo di modulo "WAVE".

I blocchi "LIST" includono anche un campo aggiuntivo nei primi quattro byte del campo dati. Questo campo aggiuntivo contiene il tipo di elenco del campo. Il tipo di elenco è un codice a quattro caratteri che identifica il contenuto dell'elenco. Ad esempio, un blocco "LIST" con un tipo di elenco "INFO" può contenere blocchi "ICOP" e "ICRD" che forniscono informazioni sul copyright e sulla data di creazione. La figura seguente mostra un blocco "RIFF" che contiene un blocco "LIST" e un altro sottochunk (il blocco "LIST" contiene due subchunk).

blocco riff che contiene un'immagine di blocco elenco

I servizi di I/O file multimediali includono due funzioni che è possibile usare per spostarsi tra blocchi in un file RIFF: mmioAscend e mmioDescend. È possibile usare queste funzioni come funzioni di ricerca di alto livello. Quando si scende in un blocco, la posizione del file viene impostata sul campo dati del blocco (8 byte dall'inizio del blocco). Per i blocchi "RIFF" e "LIST", la posizione del file viene impostata sul percorso che segue il tipo di modulo o il tipo di elenco (12 byte dall'inizio del blocco). Quando si esce da un blocco, la posizione del file viene impostata sul percorso che segue la fine del blocco.

Per creare un nuovo blocco, usare la funzionemmioCreateChunk per scrivere un'intestazione di blocco nella posizione corrente in un file aperto. Le funzioni mmioAscend, mmioDescende mmioCreateChunk usano la strutturaMMCKINFOper specificare e recuperare informazioni sui blocchi "RIFF".