diff options
Diffstat (limited to 'DOCS/OUTDATED-tech/realcodecs/audio-codecs.txt')
-rw-r--r-- | DOCS/OUTDATED-tech/realcodecs/audio-codecs.txt | 155 |
1 files changed, 0 insertions, 155 deletions
diff --git a/DOCS/OUTDATED-tech/realcodecs/audio-codecs.txt b/DOCS/OUTDATED-tech/realcodecs/audio-codecs.txt deleted file mode 100644 index fd28ab2a16..0000000000 --- a/DOCS/OUTDATED-tech/realcodecs/audio-codecs.txt +++ /dev/null @@ -1,155 +0,0 @@ -all audio codecs (cook,atrk,14_4,28_8,dnet,sipr) have the same interface, -but i have only analyzed the cook codec - - -audio properties (hex) - -00 short text/description of the format (bitrate, when to use) -01 bitrate (bits/s) //avg. bytes/sec output -02 ulong: ? - ulong: samples per second - ushort: bits/sample - ushort: number of channels -03 same as 02 //constant 2 -04 long description -05 constant 1 (always?) -06 ulong: block align (input frame size for RADecode) -07 string: minimum player version -08 n/a -09 n/a -0A n/a -0B n/a -0C n/a -0D ? -0E ? leaf size -0F ? -10 ? -11 ? -12 ? -13 min. output buffer size? max. number of samples? -14 ? - - - - -functions: - -ulong result=RAOpenCodec2(ra_main_t *raMain); - -ulong result=RAInitDecoder(ra_main_t *raMain, ra_init_struct *raInit); -struct ra_init_struct { - ulong sample_rate; - ushort bits_per_sample; // unused by RAInitDecoder - ushort number_of_channels; - ushort unknown1; // 0 - ushort unknown2; // also unused (100) - ulong leaf_size; // leaf size (used for interleaving, but - // exists in audio stream description header (ASDH)) - ulong block_align; // packet size - ulong bits_per_sample; // unused (always 16) - char *ext_data; // 16 bytes located at the end of the - // ASDH -}; - -There are some information missing that you usually need for playback, -like bits per sample (the fileds aren't read by RAInitDecoder()). These -are hard coded in the "flavors", i.e. the sub formats. A flavor is an entry -in the list of available format variations like bitrate, number of channels, -decoding algorithm, and so on.We can get those information with the -following command: - - - -void *GetRAFlavorProperty(ra_main_t *raMain, ulong flavor, ulong property, - short *property_length_in_bytes); -returns property data for a specific data - -This is not important, because it's just a read only function. -These flavor properties don't seem to exist in - - -ulong RADecode(ra_main_t *raMain, char *input_buffer, - ulong input_buffer_size, char *output_buffer, - ulong *decoded_bytes, ulong p6=-1); - -RAFreeDecoder(ra_main_t *); - -RACloseCodec(ra_main_t *); - - -ulong RASetFlavor(ra_main_t *ra_main, ulong flavor); - -Set the flavor of the stream. - -a flavor is an entry in the list of available format variations like -bitrate, number of channels, decoding algorithm, and so on - - -audio data storage: -------------------- - -With Real Audio V5 (or earlier?), the audio streams can be interleaved, -i.e. the stream is striped amongst several data packets. The packets -(which have a fixed size packet_len) are split up into a fixed number -of num_parts equally sized parts - I call them leaves in lack of -better name. The leaves have the size leaf_size = packet_len / num_parts. - -To create a bunch of packets, you need 2*num_parts stream packets. -The first part of the first stream packet is stored in leaf number 0, -the first part of the second into leaf number num_parts, the one of the -next one into leaf number 1 etc. The following part of a stream packet -is stored 2*num_packets behind the current part of the same stream packet. - -In short words: when you have a matrix with the leaves as the values, -it's a transposition in conjunction with a permutation. - -packet | leaf | stream packet, part no. --------+---------------+------------------------ -0 | 0 | (0,0) -0 | 1 | (2,0) -. | . | . -. | . | . -0 | num_parts-1 | (2*num_parts-2,0) -0 | num_parts | (1,0) -0 | num_parts+1 | (3,0) -. | . | . -. | . | . -0 | 2*num_parts-1 | (2*num_parts-1,0) -1 | 0 | (0,1) -. | . | . -. | . | . - - -sequence of calls: ------------------- - -RAOpenCodec2() - -RAInitDecoder() - -RASetFlavor() - -RAGetFlavorProperty(0xE) - -sequence of RADecode()s - -once a RAGetFlavorProperty(0xE) after some RADecode()s - -and occasionally the following sequence: -RAGetFlavorProperty(0) -RAGetFlavorProperty(7) -which is rather pointless because they only return -cleartext audio descriptions - -RAFreeDecoder() - -RACloseCodec() - - - -RAFlush(ra_main_t *raMain, char *output_buffer, ulong *retval) -will be called when seeking -output_buffer points to the output buffer from the last -decode operation. -retval is unknown, returning always 0x18 in a specific sample --> further investigation needed |