RealAudio cook: Difference between revisions

From MultimediaWiki
Jump to navigation Jump to search
m (Fix link)
 
(10 intermediate revisions by 5 users not shown)
Line 1: Line 1:
* FourCC: cook
* FourCC: cook
* Company: [[Real]]
* Company: [[Real]]
* Samples: http://www1.mplayerhq.hu/MPlayer/samples/real/AC-cook/
* Samples: http://samples.mplayerhq.hu/real/AC-cook/
 
RealAudio cook (a.k.a. Cooker a.k.a. gecko) is an audio codec created by [[Real]]. It features different coding modes, of which cook 5.1 is not yet supported by the decoder in [[FFmpeg]].


RealAudio cook (a.k.a. Cooker a.k.a. gecko) is an audio codec created by [[Real]]. It features different coding modes.


Cook Flavors
Cook Flavors
Line 41: Line 40:
  32  184 Kbps 5.1 Multichannel - RealAudio 10
  32  184 Kbps 5.1 Multichannel - RealAudio 10
  33  268 Kbps 5.1 Multichannel - RealAudio 10
  33  268 Kbps 5.1 Multichannel - RealAudio 10
== Type Specific Data ==
Cook data is encapsulated in [[RealMedia]] files which transport type specific data needed by different codecs. Cook requires 8 bytes of type specific data for monophonic audio and 16 bytes for stereo data. Multi-byte numbers are big-endian:
mono and stereo data:
  bytes 0-3    Cook version
  bytes 4-5    samples per frame per channel
  bytes 6-7    number of subbands used in the frequency domain
stereo data requires 8 more bytes:
  bytes 8-11  unused
  bytes 12-13  joint stereo subband start
  bytes 14-15  joint stereo VLC bits
for multichannel data there may be additional four bytes:
  bytes 16-19  channel mask
== Frame organisation ==
In case of multichannel audio frame data may consist of several subpackets (for 5.1 it's usually 4 subpackets). In this case sizes in 16-bit words for subpackets 1-N are stored as bytes at the end of frame data.
Subpacket data is XORed with <code>0x37 0xC5 0x11 0xF2</code>. If it codes dual mono data then each half of it is XORed with that key.
=== Subpacket structure ===
  gain
  if (joint stereo coding mode)
    decoupling information
  single channel data
  if (channels == 2 && !joint) {
    gain
    single channel data
  }
==== Gain information ====
  num_sections = get_unary()
  j = 0;
  for (i = 0; i < num_sections; i++) {
      idx = get_bits(3);
      if (get_bit())
          val = get_bits(4) - 7;
      else
          val = -1;
      for (; j < idx; j++)
          gains[j] = val;
  }
  for (; j < 8; j++)
      gains[j] = 0;
==== Decoupling information ====
Decoupling information is an array of properties for all coupled bands (from <code>joint stereo subband start</code> to the last possible band).
First bit of the data is the flag signalling that array is packed with VLCs (depending on <code>joint stereo VLC bits</code>) or raw <code>joint stereo VLC bits</code>.
==== Channel data ====
Channel data format is close to G.722.1 but bitstream format still differs (different field sizes, probably different VLCs).
  envelope
  num_vectors
  vector data
Envelope:
  quant[0] = get_bits(6) - 6;
  for (i = 1; i < subbands; i++) {
      if (i >= js_subband_start * 2)
          vlc_index = i - js_subband_start;
      else
          vlc_index = i / 2;
      if (vlc_index < 1)
          vlc_index = 1;
      if (vlc_index > 13)
          vlc_index = 13;
      quant[i] = quant[i - 1] + get_vlc(quant_vlc[i - 1]) - 12;
  }
 


[[Category:Audio Codecs]]
[[Category:Audio Codecs]]
[[Category:Incomplete Audio Codecs]]
[[Category: MDCT Audio Codecs]]
[[Category: Multichannel Audio Codecs]]

Latest revision as of 06:52, 11 July 2012

RealAudio cook (a.k.a. Cooker a.k.a. gecko) is an audio codec created by Real. It features different coding modes.

Cook Flavors

00  8 Kbps Music - RealAudio
01  11 Kbps Music - RealAudio
02  16 Kbps Music - RealAudio
03  20 Kbps Music - RealAudio
04  32 Kbps Music - RealAudio
05  44 Kbps Music - RealAudio
06  64 Kbps Music - RealAudio
07  32 Kbps - RealAudio
08  6 Kbps Music - RealAudio
09  20 Kbps Stereo Music
10  32 Kbps Stereo Music
11  44 Kbps Stereo Music
12  64 Kbps Stereo Music
13  96 Kbps Stereo Music
14  64 Kbps - RealAudio
15  20 Kbps Music High Response - RealAudio
16  32 Kbps Music High Response - RealAudio
17  16 Kbps Stereo Music - RealAudio
18  20 Kbps Stereo Music - RealAudio
19  20 Kbps Stereo Music High Response - RealAudio
20  32 Kbps Stereo Music - RealAudio
21  32 Kbps Stereo Music High Response - RealAudio
22  44 Kbps Stereo Music - RealAudio
23  44 Kbps Stereo Music High Response - RealAudio
24  64 Kbps Stereo Music - RealAudio
25  96 Kbps Stereo Music - RealAudio
26  12 Kbps Stereo Music - RealAudio
27  64 kbps Stereo Surround - RealAudio
28  96 kbps Stereo Surround - RealAudio
29  44 kbps Stereo Surround - RealAudio
30  96 Kbps 5.1 Multichannel - RealAudio 10
31  132 Kbps 5.1 Multichannel - RealAudio 10
32  184 Kbps 5.1 Multichannel - RealAudio 10
33  268 Kbps 5.1 Multichannel - RealAudio 10

Type Specific Data

Cook data is encapsulated in RealMedia files which transport type specific data needed by different codecs. Cook requires 8 bytes of type specific data for monophonic audio and 16 bytes for stereo data. Multi-byte numbers are big-endian:

mono and stereo data:

 bytes 0-3    Cook version
 bytes 4-5    samples per frame per channel
 bytes 6-7    number of subbands used in the frequency domain

stereo data requires 8 more bytes:

 bytes 8-11   unused
 bytes 12-13  joint stereo subband start
 bytes 14-15  joint stereo VLC bits

for multichannel data there may be additional four bytes:

 bytes 16-19  channel mask

Frame organisation

In case of multichannel audio frame data may consist of several subpackets (for 5.1 it's usually 4 subpackets). In this case sizes in 16-bit words for subpackets 1-N are stored as bytes at the end of frame data.

Subpacket data is XORed with 0x37 0xC5 0x11 0xF2. If it codes dual mono data then each half of it is XORed with that key.

Subpacket structure

 gain
 if (joint stereo coding mode)
   decoupling information
 single channel data
 if (channels == 2 && !joint) {
   gain
   single channel data
 }

Gain information

 num_sections = get_unary()
 j = 0;
 for (i = 0; i < num_sections; i++) {
     idx = get_bits(3);
     if (get_bit())
         val = get_bits(4) - 7;
     else
         val = -1;
     for (; j < idx; j++)
         gains[j] = val;
 }
 for (; j < 8; j++)
     gains[j] = 0;

Decoupling information

Decoupling information is an array of properties for all coupled bands (from joint stereo subband start to the last possible band).

First bit of the data is the flag signalling that array is packed with VLCs (depending on joint stereo VLC bits) or raw joint stereo VLC bits.

Channel data

Channel data format is close to G.722.1 but bitstream format still differs (different field sizes, probably different VLCs).

 envelope
 num_vectors
 vector data

Envelope:

 quant[0] = get_bits(6) - 6;
 for (i = 1; i < subbands; i++) {
     if (i >= js_subband_start * 2)
         vlc_index = i - js_subband_start;
     else
         vlc_index = i / 2;
     if (vlc_index < 1)
         vlc_index = 1;
     if (vlc_index > 13)
         vlc_index = 13;
     quant[i] = quant[i - 1] + get_vlc(quant_vlc[i - 1]) - 12;
 }