uint16_t stream_read_uint16(stream_t *stream) { uint16_t v; stream_read(stream, 2, &v); #ifdef ROCKBOX_LITTLE_ENDIAN _Swap16(v); #endif return v; }
static int decoder_alac_init(struct alac_decoder *alac, unsigned char *in_buffer) { unsigned char *ptr = in_buffer; int i; /* Get ALAC parameters from buffer */ ptr += 4; /* size */ ptr += 4; /* frma */ ptr += 4; /* alac */ ptr += 4; /* size */ ptr += 4; /* alac */ ptr += 4; /* 0 ? */ alac->samples_per_frame = *(uint32_t*)ptr; /* buffer size / 2 ? */ if (!host_bigendian) _Swap32(alac->samples_per_frame); ptr += 4; alac->info_7a = *(uint8_t*)ptr; ptr += 1; alac->sample_size = *(uint8_t*)ptr; ptr += 1; alac->rice_historymult = *(uint8_t*)ptr; ptr += 1; alac->rice_initialhistory = *(uint8_t*)ptr; ptr += 1; alac->rice_kmodifier = *(uint8_t*)ptr; ptr += 1; alac->numchannels = *(uint8_t*)ptr; ptr += 1; alac->info_80 = *(uint16_t*)ptr; if (!host_bigendian) _Swap16(alac->info_80); ptr += 2; alac->info_82 = *(uint32_t*)ptr; if (!host_bigendian) _Swap32(alac->info_82); ptr += 4; alac->info_86 = *(uint32_t*)ptr; if (!host_bigendian) _Swap32(alac->info_86); ptr += 4; alac->samplerate = *(uint32_t*)ptr; if (!host_bigendian) _Swap32(alac->samplerate); alac->bytespersample = (alac->sample_size / 8) * alac->numchannels; /* Allocate buffers */ for(i = 0; i < 2; i++) { alac->predicterror_buffer[i] = malloc(alac->samples_per_frame * 4); alac->outputsamples_buffer[i] = malloc(alac->samples_per_frame * 4); alac->uncompressed_bytes_buffer[i] = malloc(alac->samples_per_frame * 4); } return 0; }
void alac_set_info(alac_file *alac, char *inputbuffer) { char *ptr = inputbuffer; ptr += 4; /* size */ ptr += 4; /* frma */ ptr += 4; /* alac */ ptr += 4; /* size */ ptr += 4; /* alac */ ptr += 4; /* 0 ? */ alac->setinfo_max_samples_per_frame = *(uint32_t*)ptr; /* buffer size / 2 ? */ if (!host_bigendian) _Swap32(alac->setinfo_max_samples_per_frame); ptr += 4; alac->setinfo_7a = *(uint8_t*)ptr; ptr += 1; alac->setinfo_sample_size = *(uint8_t*)ptr; ptr += 1; alac->setinfo_rice_historymult = *(uint8_t*)ptr; ptr += 1; alac->setinfo_rice_initialhistory = *(uint8_t*)ptr; ptr += 1; alac->setinfo_rice_kmodifier = *(uint8_t*)ptr; ptr += 1; alac->setinfo_7f = *(uint8_t*)ptr; ptr += 1; alac->setinfo_80 = *(uint16_t*)ptr; if (!host_bigendian) _Swap16(alac->setinfo_80); ptr += 2; alac->setinfo_82 = *(uint32_t*)ptr; if (!host_bigendian) _Swap32(alac->setinfo_82); ptr += 4; alac->setinfo_86 = *(uint32_t*)ptr; if (!host_bigendian) _Swap32(alac->setinfo_86); ptr += 4; alac->setinfo_8a_rate = *(uint32_t*)ptr; if (!host_bigendian) _Swap32(alac->setinfo_8a_rate); ptr += 4; allocate_buffers(alac); }