Commit 514c37b0 authored by Max Kellermann's avatar Max Kellermann

mp3: eliminated duplicate command check

When a command is received, decode_next_frame_header() and decodeNextFrame() return DECODE_BREAK. This is already checked by both callers, which means that we can eliminate lots of decoder_get_command() checks.
parent 1bfa6a94
...@@ -702,7 +702,6 @@ static bool ...@@ -702,7 +702,6 @@ static bool
mp3_decode_first_frame(struct mp3_data *data, struct tag **tag, mp3_decode_first_frame(struct mp3_data *data, struct tag **tag,
struct replay_gain_info **replay_gain_info_r) struct replay_gain_info **replay_gain_info_r)
{ {
struct decoder *decoder = data->decoder;
struct xing xing; struct xing xing;
struct lame lame; struct lame lame;
struct mad_bitptr ptr; struct mad_bitptr ptr;
...@@ -714,17 +713,18 @@ mp3_decode_first_frame(struct mp3_data *data, struct tag **tag, ...@@ -714,17 +713,18 @@ mp3_decode_first_frame(struct mp3_data *data, struct tag **tag,
xing.flags = 0; xing.flags = 0;
while (true) { while (true) {
while ((ret = decode_next_frame_header(data, tag, replay_gain_info_r)) == DECODE_CONT && do {
(!decoder || decoder_get_command(decoder) == DECODE_COMMAND_NONE)); ret = decode_next_frame_header(data, tag,
if (ret == DECODE_BREAK || replay_gain_info_r);
(decoder && decoder_get_command(decoder) != DECODE_COMMAND_NONE)) } while (ret == DECODE_CONT);
if (ret == DECODE_BREAK)
return false; return false;
if (ret == DECODE_SKIP) continue; if (ret == DECODE_SKIP) continue;
while ((ret = decodeNextFrame(data)) == DECODE_CONT && do {
(!decoder || decoder_get_command(decoder) == DECODE_COMMAND_NONE)); ret = decodeNextFrame(data);
if (ret == DECODE_BREAK || } while (ret == DECODE_CONT);
(decoder && decoder_get_command(decoder) != DECODE_COMMAND_NONE)) if (ret == DECODE_BREAK)
return false; return false;
if (ret == DECODE_OK) break; if (ret == DECODE_OK) break;
} }
...@@ -1021,21 +1021,23 @@ mp3_read(struct mp3_data *data, struct replay_gain_info **replay_gain_info_r) ...@@ -1021,21 +1021,23 @@ mp3_read(struct mp3_data *data, struct replay_gain_info **replay_gain_info_r)
while (true) { while (true) {
bool skip = false; bool skip = false;
while ((ret = do {
decode_next_frame_header(data, NULL, ret = decode_next_frame_header(data, NULL,
replay_gain_info_r)) == DECODE_CONT replay_gain_info_r);
&& decoder_get_command(decoder) == DECODE_COMMAND_NONE) ; } while (ret == DECODE_CONT);
if (ret == DECODE_BREAK || decoder_get_command(decoder) != DECODE_COMMAND_NONE) if (ret == DECODE_BREAK)
return false; return false;
else if (ret == DECODE_SKIP) else if (ret == DECODE_SKIP)
skip = true; skip = true;
if (data->mute_frame == MUTEFRAME_NONE) { if (data->mute_frame == MUTEFRAME_NONE) {
while ((ret = decodeNextFrame(data)) == DECODE_CONT && do {
decoder_get_command(decoder) == DECODE_COMMAND_NONE) ; ret = decodeNextFrame(data);
if (ret == DECODE_BREAK || } while (ret == DECODE_CONT);
decoder_get_command(decoder) != DECODE_COMMAND_NONE) if (ret == DECODE_BREAK)
return false; return false;
} }
if (!skip && ret == DECODE_OK) if (!skip && ret == DECODE_OK)
break; break;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment