This chapter discusses how to use data codec components to compress or decompress data. A list of functions provided by data codec components is also included.
Data codecs enable you to compress and decompress data that is not automatically handled by QuickTime media operations. For example, QuickTime automatically uses image and sound codecs to compress and decompress video and sound tracks, but does not automatically compress or decompress sprites.
Data codecs are useful for compressing and decompressing sprites, 3D models, or other data types whose media handlers do not inherently support compression.
Data codecs also enable you to compress or decompress arbitrary blocks of data from other sources. The data does not necessarily need to come from, or go to, a QuickTime movie.
Data codecs are divided into compressor and decompressor components. All data compressors have a component type of DataCompressorComponentType
and all data decompressors have a component type of DataDecompressorComponentType
. The compression algorithm is indicated by the component subtype.
Once you have selected a data codec component, you can compress or decompress from one buffer to another. With care, this can be done at interrupt time.
Data compressor and decompressor components have component types of DataCompressorComponentType
and DataDecompressorComponentType
. Each component has a unique component subtype, indicating the type of compression algorithm it supports.
Select an appropriate data codec component for your data using the Component Manager functions, such as the OpenADefaultComponent
or FindNextComponent
functions.
Prior to compressing or decompressing data, you need to create a buffer containing the source data and allocate a buffer to receive the destination data. You can use the DataCodecGetCompressBufferSize
function to determine the size of destination buffer you need to allocate before doing a compression or decompression.
The DataCodecCompress
function enables you to compress data using a specified compressor component. Similarly, the DataCodecDecompress
function enables you decompress data using a specified decompressor component.
If a compressor or decompressor component implements the DataCodecBeginInterruptSafe
and DataCodecEndInterruptSafe
functions, your application or other software can perform compression or decompression operations during interrupt time. You do this as follows:
1. Before performing the compression or decompression operation, call the DataCodecBeginInterruptSafe
function. In the call, pass the maximum size of a data block to be compressed or decompressed in the maxSrcSize
parameter.
2. If the call fails, do not perform compression or decompression operations during interrupt time. Otherwise, you may proceed.
3. When the compression or decompression operation is complete, call DataCodecEndInterruptSafe
to release resources used to make the operation safe at interrupt time.
The following functions are provided by data codec components:
DataCodecBeginInterruptSafe
allocates any temporary buffers needed to perform compression or decompression during interrupt. Returns an error if operations are not interrupt-safe.
DataCodecCompress
compresses data.
DataCodecDecompress
decompresses data.
DataCodecEndInterruptSafe
releases resources used to conduct compression or decompression operations during interrupt.
DataCodecGetCompressBufferSize
returns the maximum possible size of the compressed data that will be returned using the specified compressor component.
DataCodecCompressPartial
allows you to feed a large block of uncompressed data into the compressor in chunks.
DataCodecDeompressPartial
allows you to decompress a large block of data in a series of smaller pieces.
© 2005, 2006 Apple Computer, Inc. All Rights Reserved. (Last updated: 2006-01-10)