minimp3: Support for MP3 files < MAX_FRAME_SYNC_MATCHES
Signed-off-by: Christopher Snowhill <kode54@gmail.com>
This commit is contained in:
parent
ad71b64a21
commit
110e991c3a
2 changed files with 34 additions and 0 deletions
|
@ -1654,6 +1654,21 @@ static void mp3d_synth_granule(float *qmf_state, float *grbuf, int nbands, int n
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int hdr_is_tag(const uint8_t* hdr)
|
||||||
|
{
|
||||||
|
return hdr[0] == 'T' && hdr[1] == 'A' && hdr[2] == 'G' && hdr[3] == '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
static int hdr_is_null(const uint8_t* hdr)
|
||||||
|
{
|
||||||
|
return hdr[0] == '\0' && hdr[1] == '\0' && hdr[2] == '\0' && hdr[3] == '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
static int hdr_is_null_or_tag(const uint8_t* hdr)
|
||||||
|
{
|
||||||
|
return hdr_is_tag(hdr) > 0 || hdr_is_null(hdr) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int mp3d_match_frame(const uint8_t *hdr, int mp3_bytes, int frame_bytes)
|
static int mp3d_match_frame(const uint8_t *hdr, int mp3_bytes, int frame_bytes)
|
||||||
{
|
{
|
||||||
int i, nmatch;
|
int i, nmatch;
|
||||||
|
@ -1662,6 +1677,8 @@ static int mp3d_match_frame(const uint8_t *hdr, int mp3_bytes, int frame_bytes)
|
||||||
i += hdr_frame_bytes(hdr + i, frame_bytes) + hdr_padding(hdr + i);
|
i += hdr_frame_bytes(hdr + i, frame_bytes) + hdr_padding(hdr + i);
|
||||||
if (i + HDR_SIZE > mp3_bytes)
|
if (i + HDR_SIZE > mp3_bytes)
|
||||||
return nmatch > 0;
|
return nmatch > 0;
|
||||||
|
if (hdr_is_null_or_tag(hdr + i))
|
||||||
|
return nmatch > 0;
|
||||||
if (!hdr_compare(hdr, hdr + i))
|
if (!hdr_compare(hdr, hdr + i))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
17
Plugins/minimp3/ThirdParty/minimp3.h
vendored
17
Plugins/minimp3/ThirdParty/minimp3.h
vendored
|
@ -1654,6 +1654,21 @@ static void mp3d_synth_granule(float *qmf_state, float *grbuf, int nbands, int n
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int hdr_is_tag(const uint8_t* hdr)
|
||||||
|
{
|
||||||
|
return hdr[0] == 'T' && hdr[1] == 'A' && hdr[2] == 'G' && hdr[3] == '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
static int hdr_is_null(const uint8_t* hdr)
|
||||||
|
{
|
||||||
|
return hdr[0] == '\0' && hdr[1] == '\0' && hdr[2] == '\0' && hdr[3] == '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
static int hdr_is_null_or_tag(const uint8_t* hdr)
|
||||||
|
{
|
||||||
|
return hdr_is_tag(hdr) > 0 || hdr_is_null(hdr) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int mp3d_match_frame(const uint8_t *hdr, int mp3_bytes, int frame_bytes)
|
static int mp3d_match_frame(const uint8_t *hdr, int mp3_bytes, int frame_bytes)
|
||||||
{
|
{
|
||||||
int i, nmatch;
|
int i, nmatch;
|
||||||
|
@ -1662,6 +1677,8 @@ static int mp3d_match_frame(const uint8_t *hdr, int mp3_bytes, int frame_bytes)
|
||||||
i += hdr_frame_bytes(hdr + i, frame_bytes) + hdr_padding(hdr + i);
|
i += hdr_frame_bytes(hdr + i, frame_bytes) + hdr_padding(hdr + i);
|
||||||
if (i + HDR_SIZE > mp3_bytes)
|
if (i + HDR_SIZE > mp3_bytes)
|
||||||
return nmatch > 0;
|
return nmatch > 0;
|
||||||
|
if (hdr_is_null_or_tag(hdr + i))
|
||||||
|
return nmatch > 0;
|
||||||
if (!hdr_compare(hdr, hdr + i))
|
if (!hdr_compare(hdr, hdr + i))
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue