decoder/mad: make variables more local
This commit is contained in:
@@ -96,12 +96,9 @@ mad_fixed_to_24_buffer(int32_t *dest, const struct mad_synth *synth,
|
|||||||
unsigned int start, unsigned int end,
|
unsigned int start, unsigned int end,
|
||||||
unsigned int num_channels)
|
unsigned int num_channels)
|
||||||
{
|
{
|
||||||
unsigned int i, c;
|
for (unsigned i = start; i < end; ++i)
|
||||||
|
for (unsigned c = 0; c < num_channels; ++c)
|
||||||
for (i = start; i < end; ++i) {
|
|
||||||
for (c = 0; c < num_channels; ++c)
|
|
||||||
*dest++ = mad_fixed_to_24_sample(synth->pcm.samples[c][i]);
|
*dest++ = mad_fixed_to_24_sample(synth->pcm.samples[c][i]);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
@@ -254,22 +251,19 @@ static bool
|
|||||||
parse_id3_replay_gain_info(ReplayGainInfo &rgi,
|
parse_id3_replay_gain_info(ReplayGainInfo &rgi,
|
||||||
struct id3_tag *tag)
|
struct id3_tag *tag)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
char *key;
|
|
||||||
char *value;
|
|
||||||
struct id3_frame *frame;
|
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
||||||
rgi.Clear();
|
rgi.Clear();
|
||||||
|
|
||||||
for (i = 0; (frame = id3_tag_findframe(tag, "TXXX", i)); i++) {
|
struct id3_frame *frame;
|
||||||
|
for (unsigned i = 0; (frame = id3_tag_findframe(tag, "TXXX", i)); i++) {
|
||||||
if (frame->nfields < 3)
|
if (frame->nfields < 3)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
key = (char *)
|
char *const key = (char *)
|
||||||
id3_ucs4_latin1duplicate(id3_field_getstring
|
id3_ucs4_latin1duplicate(id3_field_getstring
|
||||||
(&frame->fields[1]));
|
(&frame->fields[1]));
|
||||||
value = (char *)
|
char *const value = (char *)
|
||||||
id3_ucs4_latin1duplicate(id3_field_getstring
|
id3_ucs4_latin1duplicate(id3_field_getstring
|
||||||
(&frame->fields[2]));
|
(&frame->fields[2]));
|
||||||
|
|
||||||
@@ -302,21 +296,17 @@ gcc_pure
|
|||||||
static MixRampInfo
|
static MixRampInfo
|
||||||
parse_id3_mixramp(struct id3_tag *tag)
|
parse_id3_mixramp(struct id3_tag *tag)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
char *key;
|
|
||||||
char *value;
|
|
||||||
struct id3_frame *frame;
|
|
||||||
|
|
||||||
MixRampInfo result;
|
MixRampInfo result;
|
||||||
|
|
||||||
for (i = 0; (frame = id3_tag_findframe(tag, "TXXX", i)); i++) {
|
struct id3_frame *frame;
|
||||||
|
for (unsigned i = 0; (frame = id3_tag_findframe(tag, "TXXX", i)); i++) {
|
||||||
if (frame->nfields < 3)
|
if (frame->nfields < 3)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
key = (char *)
|
char *const key = (char *)
|
||||||
id3_ucs4_latin1duplicate(id3_field_getstring
|
id3_ucs4_latin1duplicate(id3_field_getstring
|
||||||
(&frame->fields[1]));
|
(&frame->fields[1]));
|
||||||
value = (char *)
|
char *const value = (char *)
|
||||||
id3_ucs4_latin1duplicate(id3_field_getstring
|
id3_ucs4_latin1duplicate(id3_field_getstring
|
||||||
(&frame->fields[2]));
|
(&frame->fields[2]));
|
||||||
|
|
||||||
@@ -338,13 +328,11 @@ inline void
|
|||||||
MadDecoder::ParseId3(size_t tagsize, Tag **mpd_tag)
|
MadDecoder::ParseId3(size_t tagsize, Tag **mpd_tag)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ID3TAG
|
#ifdef HAVE_ID3TAG
|
||||||
struct id3_tag *id3_tag = nullptr;
|
|
||||||
id3_length_t count;
|
|
||||||
id3_byte_t const *id3_data;
|
|
||||||
id3_byte_t *allocated = nullptr;
|
id3_byte_t *allocated = nullptr;
|
||||||
|
|
||||||
count = stream.bufend - stream.this_frame;
|
const id3_length_t count = stream.bufend - stream.this_frame;
|
||||||
|
|
||||||
|
const id3_byte_t *id3_data;
|
||||||
if (tagsize <= count) {
|
if (tagsize <= count) {
|
||||||
id3_data = stream.this_frame;
|
id3_data = stream.this_frame;
|
||||||
mad_stream_skip(&(stream), tagsize);
|
mad_stream_skip(&(stream), tagsize);
|
||||||
@@ -363,7 +351,7 @@ MadDecoder::ParseId3(size_t tagsize, Tag **mpd_tag)
|
|||||||
id3_data = allocated;
|
id3_data = allocated;
|
||||||
}
|
}
|
||||||
|
|
||||||
id3_tag = id3_tag_parse(id3_data, tagsize);
|
struct id3_tag *const id3_tag = id3_tag_parse(id3_data, tagsize);
|
||||||
if (id3_tag == nullptr) {
|
if (id3_tag == nullptr) {
|
||||||
delete[] allocated;
|
delete[] allocated;
|
||||||
return;
|
return;
|
||||||
@@ -558,17 +546,12 @@ struct lame {
|
|||||||
static bool
|
static bool
|
||||||
parse_xing(struct xing *xing, struct mad_bitptr *ptr, int *oldbitlen)
|
parse_xing(struct xing *xing, struct mad_bitptr *ptr, int *oldbitlen)
|
||||||
{
|
{
|
||||||
unsigned long bits;
|
int bitlen = *oldbitlen;
|
||||||
int bitlen;
|
|
||||||
int bitsleft;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
bitlen = *oldbitlen;
|
|
||||||
|
|
||||||
if (bitlen < 16)
|
if (bitlen < 16)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
bits = mad_bit_read(ptr, 16);
|
const unsigned long bits = mad_bit_read(ptr, 16);
|
||||||
bitlen -= 16;
|
bitlen -= 16;
|
||||||
|
|
||||||
if (bits == XI_MAGIC) {
|
if (bits == XI_MAGIC) {
|
||||||
@@ -617,7 +600,8 @@ parse_xing(struct xing *xing, struct mad_bitptr *ptr, int *oldbitlen)
|
|||||||
if (xing->flags & XING_TOC) {
|
if (xing->flags & XING_TOC) {
|
||||||
if (bitlen < 800)
|
if (bitlen < 800)
|
||||||
return false;
|
return false;
|
||||||
for (i = 0; i < 100; ++i) xing->toc[i] = mad_bit_read(ptr, 8);
|
for (unsigned i = 0; i < 100; ++i)
|
||||||
|
xing->toc[i] = mad_bit_read(ptr, 8);
|
||||||
bitlen -= 800;
|
bitlen -= 800;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -630,7 +614,7 @@ parse_xing(struct xing *xing, struct mad_bitptr *ptr, int *oldbitlen)
|
|||||||
|
|
||||||
/* Make sure we consume no less than 120 bytes (960 bits) in hopes that
|
/* Make sure we consume no less than 120 bytes (960 bits) in hopes that
|
||||||
* the LAME tag is found there, and not right after the Xing header */
|
* the LAME tag is found there, and not right after the Xing header */
|
||||||
bitsleft = 960 - ((*oldbitlen) - bitlen);
|
const int bitsleft = 960 - (*oldbitlen - bitlen);
|
||||||
if (bitsleft < 0)
|
if (bitsleft < 0)
|
||||||
return false;
|
return false;
|
||||||
else if (bitsleft > 0) {
|
else if (bitsleft > 0) {
|
||||||
@@ -646,19 +630,12 @@ parse_xing(struct xing *xing, struct mad_bitptr *ptr, int *oldbitlen)
|
|||||||
static bool
|
static bool
|
||||||
parse_lame(struct lame *lame, struct mad_bitptr *ptr, int *bitlen)
|
parse_lame(struct lame *lame, struct mad_bitptr *ptr, int *bitlen)
|
||||||
{
|
{
|
||||||
int adj = 0;
|
|
||||||
int name;
|
|
||||||
int orig;
|
|
||||||
int sign;
|
|
||||||
int gain;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/* Unlike the xing header, the lame tag has a fixed length. Fail if
|
/* Unlike the xing header, the lame tag has a fixed length. Fail if
|
||||||
* not all 36 bytes (288 bits) are there. */
|
* not all 36 bytes (288 bits) are there. */
|
||||||
if (*bitlen < 288)
|
if (*bitlen < 288)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
for (i = 0; i < 9; i++)
|
for (unsigned i = 0; i < 9; i++)
|
||||||
lame->encoder[i] = (char)mad_bit_read(ptr, 8);
|
lame->encoder[i] = (char)mad_bit_read(ptr, 8);
|
||||||
lame->encoder[9] = '\0';
|
lame->encoder[9] = '\0';
|
||||||
|
|
||||||
@@ -684,6 +661,7 @@ parse_lame(struct lame *lame, struct mad_bitptr *ptr, int *bitlen)
|
|||||||
* it's impossible to make the proper adjustment for 3.95.
|
* it's impossible to make the proper adjustment for 3.95.
|
||||||
* Fortunately, 3.95 was only out for about a day before 3.95.1 was
|
* Fortunately, 3.95 was only out for about a day before 3.95.1 was
|
||||||
* released. -- tmz */
|
* released. -- tmz */
|
||||||
|
int adj = 0;
|
||||||
if (lame->version.major < 3 ||
|
if (lame->version.major < 3 ||
|
||||||
(lame->version.major == 3 && lame->version.minor < 95))
|
(lame->version.major == 3 && lame->version.minor < 95))
|
||||||
adj = 6;
|
adj = 6;
|
||||||
@@ -694,10 +672,10 @@ parse_lame(struct lame *lame, struct mad_bitptr *ptr, int *bitlen)
|
|||||||
FormatDebug(mad_domain, "LAME peak found: %f", lame->peak);
|
FormatDebug(mad_domain, "LAME peak found: %f", lame->peak);
|
||||||
|
|
||||||
lame->track_gain = 0;
|
lame->track_gain = 0;
|
||||||
name = mad_bit_read(ptr, 3); /* gain name */
|
unsigned name = mad_bit_read(ptr, 3); /* gain name */
|
||||||
orig = mad_bit_read(ptr, 3); /* gain originator */
|
unsigned orig = mad_bit_read(ptr, 3); /* gain originator */
|
||||||
sign = mad_bit_read(ptr, 1); /* sign bit */
|
unsigned sign = mad_bit_read(ptr, 1); /* sign bit */
|
||||||
gain = mad_bit_read(ptr, 9); /* gain*10 */
|
unsigned gain = mad_bit_read(ptr, 9); /* gain*10 */
|
||||||
if (gain && name == 1 && orig != 0) {
|
if (gain && name == 1 && orig != 0) {
|
||||||
lame->track_gain = ((sign ? -gain : gain) / 10.0) + adj;
|
lame->track_gain = ((sign ? -gain : gain) / 10.0) + adj;
|
||||||
FormatDebug(mad_domain, "LAME track gain found: %f",
|
FormatDebug(mad_domain, "LAME track gain found: %f",
|
||||||
@@ -785,17 +763,13 @@ MadDecoder::FileSizeToSongLength()
|
|||||||
inline bool
|
inline bool
|
||||||
MadDecoder::DecodeFirstFrame(Tag **tag)
|
MadDecoder::DecodeFirstFrame(Tag **tag)
|
||||||
{
|
{
|
||||||
struct xing xing;
|
|
||||||
struct lame lame;
|
|
||||||
struct mad_bitptr ptr;
|
|
||||||
int bitlen;
|
|
||||||
enum mp3_action ret;
|
|
||||||
|
|
||||||
/* stfu gcc */
|
/* stfu gcc */
|
||||||
|
struct xing xing;
|
||||||
memset(&xing, 0, sizeof(struct xing));
|
memset(&xing, 0, sizeof(struct xing));
|
||||||
xing.flags = 0;
|
xing.flags = 0;
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
|
enum mp3_action ret;
|
||||||
do {
|
do {
|
||||||
ret = DecodeNextFrameHeader(tag);
|
ret = DecodeNextFrameHeader(tag);
|
||||||
} while (ret == DECODE_CONT);
|
} while (ret == DECODE_CONT);
|
||||||
@@ -811,8 +785,8 @@ MadDecoder::DecodeFirstFrame(Tag **tag)
|
|||||||
if (ret == DECODE_OK) break;
|
if (ret == DECODE_OK) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr = stream.anc_ptr;
|
struct mad_bitptr ptr = stream.anc_ptr;
|
||||||
bitlen = stream.anc_bitlen;
|
int bitlen = stream.anc_bitlen;
|
||||||
|
|
||||||
FileSizeToSongLength();
|
FileSizeToSongLength();
|
||||||
|
|
||||||
@@ -830,6 +804,7 @@ MadDecoder::DecodeFirstFrame(Tag **tag)
|
|||||||
max_frames = xing.frames;
|
max_frames = xing.frames;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct lame lame;
|
||||||
if (parse_lame(&lame, &ptr, &bitlen)) {
|
if (parse_lame(&lame, &ptr, &bitlen)) {
|
||||||
if (gapless_playback && input_stream.IsSeekable()) {
|
if (gapless_playback && input_stream.IsSeekable()) {
|
||||||
drop_start_samples = lame.encoder_delay +
|
drop_start_samples = lame.encoder_delay +
|
||||||
@@ -931,9 +906,7 @@ MadDecoder::UpdateTimerNextFrame()
|
|||||||
DecoderCommand
|
DecoderCommand
|
||||||
MadDecoder::SendPCM(unsigned i, unsigned pcm_length)
|
MadDecoder::SendPCM(unsigned i, unsigned pcm_length)
|
||||||
{
|
{
|
||||||
unsigned max_samples;
|
unsigned max_samples = sizeof(output_buffer) /
|
||||||
|
|
||||||
max_samples = sizeof(output_buffer) /
|
|
||||||
sizeof(output_buffer[0]) /
|
sizeof(output_buffer[0]) /
|
||||||
MAD_NCHANNELS(&frame.header);
|
MAD_NCHANNELS(&frame.header);
|
||||||
|
|
||||||
@@ -1128,9 +1101,7 @@ static bool
|
|||||||
mad_decoder_scan_stream(InputStream &is,
|
mad_decoder_scan_stream(InputStream &is,
|
||||||
const struct tag_handler *handler, void *handler_ctx)
|
const struct tag_handler *handler, void *handler_ctx)
|
||||||
{
|
{
|
||||||
int total_time;
|
const int total_time = mad_decoder_total_file_time(is);
|
||||||
|
|
||||||
total_time = mad_decoder_total_file_time(is);
|
|
||||||
if (total_time < 0)
|
if (total_time < 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user