Servizi di formato file di interscambio risorse
Il formato preferito per i file multimediali è il formato di file di interscambio delle risorse (RIFF). Le funzioni di I/O del file RIFF funzionano con i servizi di I/O di I/O di base memorizzati nel buffer. È possibile aprire, leggere e scrivere file RIFF nello stesso modo di altri tipi di file. Per informazioni dettagliate su RIFF, vedere Funzioni e macro AVIFile.
I file RIFF usano codici a quattro caratteri per identificare gli elementi file. Questi codici sono quantità a 32 bit che rappresentano una sequenza di uno a quattro caratteri alfanumerici ASCII, riempiti a destra con caratteri di spazio. Il tipo di dati per i codici a quattro caratteri è FOURCC. Usare la macro mmioFOURCC per convertire quattro caratteri in un codice a quattro caratteri. Per convertire una stringa con terminazione null in un codice a quattro caratteri, usare la funzione mmioStringToFOURCC .
Il blocco predefinito di base di un file RIFF è un blocco. Un blocco è un'unità logica di dati multimediali, ad esempio una singola cornice 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
- Campo dati
La figura seguente mostra un blocco "RIFF" che contiene due sotto-blocchi.
Un blocco contenuto in un altro blocco è una porzione. Gli unici blocchi consentiti per contenere sotto-blocchi 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 subchunks 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 waveform-audio 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 sulla data di copyright e creazione. Nella figura seguente viene illustrato un blocco "RIFF" che contiene un blocco "LIST" e un altro blocco subchunk (il blocco "LIST" contiene due sotto-blocchi).
I/O servizi di I/O 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 è impostata sul campo dati del blocco (8 byte dall'inizio del blocco). Per i blocchi "RIFF" e "LIST", la posizione del file è impostata sul percorso seguente 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 funzione mmioCreateChunk per scrivere un'intestazione di blocco nella posizione corrente in un file aperto. Le funzioni mmioAscend, mmioDescend e mmioCreateChunk usano la struttura MMCKINFO per specificare e recuperare informazioni sui blocchi "RIFF".