Servizi formato file di interscambio risorse

Il formato preferito per i file multimediali è il formato di file di interscambio risorse (RIFF). Le funzioni di I/O dei file RIFF funzionano con i servizi di i/O dei file di base memorizzati nel buffer 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 avifile Functions and Macros.

I file RIFF usano codici di 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, con riempimento 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 di quattro caratteri. Per convertire una stringa con terminazione null in un codice di 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 un singolo frame in un clip video. Ogni blocco contiene i campi seguenti:

  • Codice di quattro caratteri che specifica l'identificatore del blocco
  • Valore parola doppia che specifica la dimensione del membro dati nel blocco
  • Un campo dati

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

blocco riff che contiene l'immagine di due sottoblocchi

Un blocco contenuto in un altro blocco è un sottoblocco. Gli unici blocchi consentiti per contenere sottoblocchi sono quelli con un identificatore di blocco "RIFF" o "LIST". Un blocco contenente un altro blocco viene chiamato blocco padre. Il primo blocco in un file RIFF deve essere un blocco "RIFF". Tutti gli altri blocchi del file sono sottoblocchi del blocco "RIFF".

I blocchi "RIFF" includono un campo aggiuntivo nei primi quattro byte del campo dati. Questo campo aggiuntivo fornisce il tipo di form del campo. Il tipo di modulo è un codice di quattro caratteri che identifica il formato dei dati archiviati nel file. Ad esempio, Microsoft waveform-file audio 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 è costituito da un codice di 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 sottoblocco (il blocco "LIST" contiene due sottoblocchi).

blocco riff che contiene un'immagine del blocco di elenco

I servizi di I/O dei file multimediali includono due funzioni che è possibile usare per spostarsi tra I blocchi in un file RIFF: mmioAscend e mmioDescend. È possibile utilizzare 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" ed "LIST", la posizione del file è impostata sulla posizione successiva al tipo di modulo o al tipo di elenco (12 byte dall'inizio del blocco). Quando si esce da un blocco, la posizione del file viene impostata sulla posizione successiva alla 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".