Apple ProRes: Difference between revisions
Line 62: | Line 62: | ||
|- | |- | ||
| align="center" | AppleProResCodec.component || align="center" | 2.0 (Build 224) || align="center" | Mac OS X || align="center" | PowerPC/x86 || align="center" | Yes || align="center" | Yes | | align="center" | AppleProResCodec.component || align="center" | 2.0 (Build 224) || align="center" | Mac OS X || align="center" | PowerPC/x86 || align="center" | Yes || align="center" | Yes | ||
|- | |||
| align="center" | AppleProResDecoder.component || align="center" | 2.0.1 (Build 227) || align="center" | Mac OS X || align="center" | PowerPC/x86 || align="center" | No || align="center" | Yes | |||
|} | |} | ||
== Frame layout == | == Frame layout == |
Revision as of 04:23, 17 June 2011
- FourCCs used to indicate different ProRes flavours in the QuickTime container:
- Apple ProRes 422 High Quality: 'apch' ('hcpa' in little-endian)
- Apple ProRes 422 Standard Definition: 'apcn' ('ncpa' in little-endian)
- Apple ProRes 422 LT: 'apcs' ('scpa' in little-endian)
- Apple ProRes 422 Proxy: 'apco' ('ocpa' in little-endian)
- Apple ProRes 4444: 'ap4h' ('h4pa' in little-endian)
- Company: Apple
- Whitepaper: http://images.apple.com/finalcutstudio/resources/white_papers/L342568A_ProRes_WP.pdf
- New Whitepaper introducing ProRes LT/Proxy/4444: http://images.apple.com/finalcutstudio/docs/Apple_ProRes_White_Paper_July_2009.pdf
- Samples: http://samples.mplayerhq.hu/V-codecs/HCPA/
ProRes Introduction
Apple ProRes is a family of proprietary video codecs used for storing and editing high definition video data in Apple's Final Cut Pro. Apple's official whitepaper lists the codec's key features as being:
- intra-only codecs
- visually lossless compression (i.e. compressed images cannot be distinguished from the original by a human observer)
- 4:2:2 / 4:4:4:4 source material
- 10-bit (12-bit for ProRes 4444) sample depth
- variable bitrate
ProRes 422 Standard Definition / High Quality codec
ProRes 422 SD/HQ is the same codec operating on two different bitrates (flavours). Two different FOURCCs are used in order to indicate each flavour:
Flavour name | FOURCC | Bitrate |
---|---|---|
Standard Definition (SD) | 'apcn' | 145 Mbps |
High Quality (HQ) | 'apch' | 220 Mbps |
ProRes algorithm is based on the Discrete cosine transform (further DCT) and utilizes the following compression techniques:
- custom hybrid Golomb-Rice / Exponential Golomb coding for DCT coefficients
- run-lenght coding
- differential coding
- scalar quantization
The bitstream of the ProRes 422 has been designed to provide the following additional features:
- frame-level multi-threaded encoding/decoding depending on available CPU cores
- spatial scalability providing the possibility to decode a video at different partial resolutions (1/2, 1/4, 1/8 of the full size and so on). ProRes is capable of saving CPU cycles while decoding at smaller resolutions due to a special bitstream layout enabling partial bitstream access and parsing.
Binary packages and compatibility
ProRes codec is currently available as the following binary libraries:
Lib Name | Version | Supported OS | Supported Architecture | Encoding | Decoding |
---|---|---|---|---|---|
AppleProRes422.component | 1.0.2 (Build 46) | Mac OS X | PowerPC | Yes | Yes |
AppleProResDecoder.qtx | 1.0.0.1 | Windows | x86 | No | Yes |
AppleProResCodec.component | 2.0 (Build 224) | Mac OS X | PowerPC/x86 | Yes | Yes |
AppleProResDecoder.component | 2.0.1 (Build 227) | Mac OS X | PowerPC/x86 | No | Yes |
Frame layout
A typical ProRes 422 frame has the following layout:
Frame container atom ------------------------------------ Frame header ------------------------------------ Picture 1 ------------------------------------ Picture 2 (interlaced frames only)
Frame container atom
At the beginning of each frame the frame container atom is located. It has the classical QuickTime atom structure with the ID set to the undocumented ProRes frame type ID:
Field size | Field name | Description |
---|---|---|
4 bytes | size | frame size in bytes |
4 bytes | type | 'icpf' ("image codec prores frame"?) |
All data is stored in the big-endian format. The value of the field "size" must match frame size from the movie container.
Frame header
A frame header stores description information, such as frame dimension, frame structure (progressive/interlaced), color information and the like. All data is stored in the big-endian format.
Field size | Field name | Value | Description |
---|---|---|---|
2 bytes | hdrSize | size of this header in bytes. Must be at least 28 bytes long. | |
2 bytes | version |
|
header version. |
4 bytes | vendorID? | 'apl0' | Ignored in all known decoders. |
2 bytes | frameWidth | Width of encoded frame. | |
2 bytes | frameHeight | Height of encoded frame. | |
1 byte | frameFlags |
layout: AAxxBBxx where
|
Frame structure flags. |
3 bytes | reserved1 | 0 | Ignored in the decoder v1. It has some meaning in the version 2.0 that need to be clarified. |
1 byte | colorMatrix |
|
Color matrix ID for color conversion between YUV and RGB (see below). |
2 bytes | reserved2 | 0 | Ignored. |
1 byte | QMatFlags |
layout: xxxxxxCD where
|
Custom quantization matrices presence indicators. |
64 bytes | QMatLuma | Custom quantization matrix for luminance. Only present if indicated by the bit "C" of the QMatFlags. | |
64 bytes | QMatChroma | Custom quantization matrix for chrominance. Only present if indicated by the bit "D" of the QMatFlags. |