7static int sample_rates[4] =
20 &rada_nonzero_bitflags_huff0,
21 &rada_nonzero_bitflags_huff1,
22 &rada_nonzero_bitflags_huff2,
23 &rada_nonzero_bitflags_huff3,
24 &rada_nonzero_bitflags_huff4,
25 &rada_nonzero_bitflags_huff5,
30 &rada_nonzero_coefficient_pair_huff0,
31 &rada_nonzero_coefficient_pair_huff1,
32 &rada_nonzero_coefficient_pair_huff2,
33 &rada_nonzero_coefficient_pair_huff3,
38 &rada_nonzero_coefficient_big_huff0,
39 &rada_nonzero_coefficient_big_huff1,
40 &rada_nonzero_coefficient_big_huff2,
41 &rada_nonzero_coefficient_big_huff3,
110 for (
int i=0; i < 3; ++i)
111 compute_packorder(&nz_desc[i]);
116static float *radaudio_windows [2] = { window_long , window_short };
137static int rate_scale[4] = {
146static void compute_mantissa_bitcount(
int rate_mode,
174static int radaudio_code_sample_rate(
int rate)
178 for (i=0; i < 4; ++i)
179 if (sample_rates[i] == rate)
186 bc->bytes_bias[0][0] =
bc->bytes_bias[0][1] =
bc->bytes_bias[0][2] = 0;
187 bc->bytes_bias[1][0] =
bc->bytes_bias[1][1] =
bc->bytes_bias[1][2] = 0;
190 bc->bytes_bias[0][2] = bias;
193 bc->bytes_bias[0][1] = (bias >> 1);
200#define RADAUDIO_BLOCKFLAG_8BIT_PARITY (1u << 0)
201#define RADAUDIO_BLOCKFLAG_THIS_SHORT (1u << 1)
202#define RADAUDIO_BLOCKFLAG_NEXT_SHORT (1u << 2)
203#define RADAUDIO_BLOCKFLAG_STEREO (1u << 3)
204#define RADAUDIO_BLOCKFLAG_MIDSIDE_BANDS (1u << 4)
205#define RADAUDIO_BLOCKFLAG_PREDICT_SUBBAND_STEREO (1u << 5)
206#define RADAUDIO_BLOCKFLAG_PREDICT_EXPONENT_STEREO (1u << 6)
207#define RADAUDIO_BLOCKFLAG_16BIT_FLAGS (1u << 7)
209#define RADAUDIO_BLOCKFLAG_NONZERO_BITARRAY_MASK (3u << 8)
210#define RADAUDIO_BLOCKFLAG_DISABLE_SUBBAND_PREDICT (1u << 10)
211#define RADAUDIO_BLOCKFLAG_MIDSIDE_ENCODED (1u << 11)
212#define RADAUDIO_BLOCKFLAG_EXCESS_RUNLENGTH_ARRAY (1u << 12)
213#define RADAUDIO_BLOCKFLAG_EXCESS_VBSTREAM0_LENGTH (1u << 13)
214#define RADAUDIO_BLOCKFLAG_EXCESS_BLOCK_BYTES (1u << 14)
215#define RADAUDIO_BLOCKFLAG_FINAL (1u << 15)
217#define RADAUDIO_BLOCKFLAG_NONZERO_BITARRAY_MODE_GET(x) (((x) >> 8) & 3u)
218#define RADAUDIO_BLOCKFLAG_NONZERO_BITARRAY_MODE_SET(x) ((x) << 8)
222#define RADAUDIO_STREAMHEADER_FLAGS ( \
223 RADAUDIO_BLOCKFLAG_PREDICT_SUBBAND_STEREO \
224 | RADAUDIO_BLOCKFLAG_PREDICT_EXPONENT_STEREO \
227static int countbits8(
U32 flags)
229 flags = ((flags>>1) & 0x5555) + (flags & 0x5555);
230 flags = ((flags>>2) & 0x3333) + (flags & 0x3333);
231 return ((flags>>4) & 0x0f0f) + (flags & 0x0f0f);
234static int put_8bits_or_16bits(
U8 buffer[9],
int offset,
U16 value)
236 buffer[offset++] = (
U8) (value & 255);
238 buffer[offset++] = (
U8) (value >> 8);
260 if (
bh->vbstream0_length > 65535)
262 if (
bh->block_bytes > 65535)
264 if (
bh->num_runlength_array > 65535)
268 if (
bh->num_channels_encoded != 1 &&
bh->num_channels_encoded != 2)
273 if (
bh->final_block) {
274 if (
bh->this_block_short) {
280 if (
bh->final_samples_discard != 0)
285 U16 bias =
bc->bytes_bias[
bh->this_block_short][
bh->num_channels_encoded];
313 offset = put_8bits_or_16bits(buffer, offset, (
U16) flags);
318 if (
bh->final_block) {
339 U16 flags = buffer[offset++];
347 if ((countbits8(flags) & 1) == 0)
352 flags |= buffer[offset++] << 8;
355 size_t header_length = offset;
362 if ((
size_t)header_length >
memavail)
379 U16 block_bytes, num_runlength_array, vbstream0_length;
385 block_bytes = buffer[offset++];
388 if (block_bytes < 256)
394 num_runlength_array = buffer[offset++];
396 num_runlength_array =
RR_GET16_LE(&buffer[offset]);
397 if (num_runlength_array < 256)
403 vbstream0_length = buffer[offset++];
406 if (vbstream0_length < 256)
411 if (
bh->final_block) {
416 bh->block_bytes = (
U16) (block_bytes +
bc->bytes_bias[
bh->this_block_short][
bh->num_channels_encoded]);
417 bh->num_runlength_array = (
U16) (num_runlength_array + 0 );
418 bh->vbstream0_length = (
U16) (vbstream0_length + 0 );
444 U8 padding[128-16-26-48];
449static const char RADAUDIO_MAGIC[8] = {
459#define NZ_MODE_INVERT (1<<3)
461static size_t radaudio_pack_stream_header(
U8 *
raw_header,
475 memset(header, 0,
sizeof(*header));
498 for (
int j=0; j < 4; ++j)
513 return sizeof(*header);
549 for (
int j=0; j < 4; ++j) {
566 for (
int j=0; j < 4; ++j) {
594 return sizeof(*header);
RAD_S8 S8
Definition egttypes.h:476
RAD_U32 U32
Definition egttypes.h:501
RAD_U8 U8
Definition egttypes.h:481
#define RR_COMPILER_ASSERT(exp)
Definition egttypes.h:411
S32 rrbool
Definition egttypes.h:536
RAD_U16 U16
Definition egttypes.h:491
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
memcpy(InputBufferBase, BinkBlocksData, BinkBlocksSize)
#define RRX86_CPU_AVX2
Definition cpux86.h:25
#define RRX86_CPU_SSE41
Definition cpux86.h:20
#define RRX86_CPU_SSE2
Definition cpux86.h:18
#define RRX86_CPU_SSSE3
Definition cpux86.h:19
#define rrCPUx86_feature_present(bit)
Definition cpux86.h:89
#define RRX86_CPU_POPCNT
Definition cpux86.h:30
#define rrCPUx86_detect()
Definition cpux86.h:88
#define MAX_BANDS
Definition radaudio_common.h:29
#define NUM_NZ_HUFF
Definition radaudio_common.h:61
#define BAND_EXPONENT_NONE
Definition radaudio_common.h:50
#define RADAUDIO_LONG_BLOCK_LEN
Definition radaudio_common.h:26
#define MAX_VALID_VERSION
Definition radaudio_common.h:5
#define MAX_NZ_BLOCKS
Definition radaudio_common.h:62
#define SUBBAND_BIAS_CENTER
Definition radaudio_common.h:56
#define NUM_NZ_MODE
Definition radaudio_common.h:58
#define NUM_SELECTOR_MODES
Definition radaudio_common.h:59
#define RADAUDIO_SHORT_BLOCK_LEN
Definition radaudio_common.h:27
#define MAX_RADAUD_CHANNELS
Definition radaudio_common.h:34
#define RADAUDIO_BLOCKFLAG_THIS_SHORT
Definition radaudio_common.inl:201
@ COMMON_STREAM_HEADER
Definition radaudio_common.inl:251
@ COMMON_INCOMPLETE_DATA
Definition radaudio_common.inl:249
@ COMMON_INVALID_DATA
Definition radaudio_common.inl:250
#define RADAUDIO_BLOCKFLAG_8BIT_PARITY
Definition radaudio_common.inl:200
#define RADAUDIO_BLOCKFLAG_DISABLE_SUBBAND_PREDICT
Definition radaudio_common.inl:210
#define RADAUDIO_BLOCKFLAG_NEXT_SHORT
Definition radaudio_common.inl:202
#define RADAUDIO_BLOCKFLAG_NONZERO_BITARRAY_MODE_SET(x)
Definition radaudio_common.inl:218
#define RADAUDIO_BLOCKFLAG_NONZERO_BITARRAY_MODE_GET(x)
Definition radaudio_common.inl:217
#define RADAUDIO_BLOCKFLAG_MIDSIDE_ENCODED
Definition radaudio_common.inl:211
@ HS_COEFF_PAIR
Definition radaudio_common.inl:64
@ HS_COEFF_BIG
Definition radaudio_common.inl:65
#define RADAUDIO_BLOCKFLAG_EXCESS_BLOCK_BYTES
Definition radaudio_common.inl:214
#define RADAUDIO_BLOCKFLAG_PREDICT_SUBBAND_STEREO
Definition radaudio_common.inl:205
#define RADAUDIO_BLOCKFLAG_EXCESS_VBSTREAM0_LENGTH
Definition radaudio_common.inl:213
#define RADAUDIO_BLOCKFLAG_16BIT_FLAGS
Definition radaudio_common.inl:207
#define RADAUDIO_BLOCKFLAG_EXCESS_RUNLENGTH_ARRAY
Definition radaudio_common.inl:212
#define RADAUDIO_BLOCKFLAG_FINAL
Definition radaudio_common.inl:215
#define RADAUDIO_BLOCKFLAG_MIDSIDE_BANDS
Definition radaudio_common.inl:204
#define RADAUDIO_STREAMHEADER_FLAGS
Definition radaudio_common.inl:222
#define RADAUDIO_BLOCKFLAG_PREDICT_EXPONENT_STEREO
Definition radaudio_common.inl:206
#define RADAUDIO_BLOCKFLAG_STEREO
Definition radaudio_common.inl:203
Definition radaudio_common.h:73
Definition radaudio_common.h:207
Definition radaudio_common.h:126
U8 num_chunks_per_huff[NUM_NZ_HUFF]
Definition radaudio_common.h:133
U8 num_8byte_chunks
Definition radaudio_common.h:128
U8 huffman_table_for_chunk[MAX_NZ_BLOCKS]
Definition radaudio_common.h:129
U8 source_pos[3][MAX_NZ_BLOCKS]
Definition radaudio_common.h:134
Definition radaudio_common.h:154
int num_bands
Definition radaudio_common.h:156
int num_subbands_for_band[MAX_BANDS]
Definition radaudio_common.h:163