From 5eb6256df6e1a00d73c9091b38ee99c4d523f059 Mon Sep 17 00:00:00 2001 From: "wagic.the.homebrew@gmail.com" Date: Sun, 29 Nov 2009 06:25:03 +0000 Subject: [PATCH] Erwan -Fix issue 223 by Yeshua. Thanks :) --- JGE/include/JMP3.h | 1 + JGE/src/JMP3.cpp | 35 ++++++++++++++++++++++++++++++++--- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/JGE/include/JMP3.h b/JGE/include/JMP3.h index 396bdf83b..46a9d5554 100644 --- a/JGE/include/JMP3.h +++ b/JGE/include/JMP3.h @@ -32,6 +32,7 @@ protected: bool m_loop; int m_lastDecoded; int m_playTime; + int GetID3TagSize(char *fname); public: int m_paused; int m_channel; diff --git a/JGE/src/JMP3.cpp b/JGE/src/JMP3.cpp index 1b517f648..9ca425c4f 100644 --- a/JGE/src/JMP3.cpp +++ b/JGE/src/JMP3.cpp @@ -74,6 +74,35 @@ bool JMP3::fillBuffers() { return true; } +int JMP3::GetID3TagSize(char *fname) +{ + SceUID fd; + char header[10]; + int size = 0; + fd = sceIoOpen(fname, PSP_O_RDONLY, 0777); + if (fd < 0) + return 0; + + sceIoRead(fd, header, sizeof(header)); + sceIoClose(fd); + + if (!strncmp((char*)header, "ea3", 3) || !strncmp((char*)header, "EA3", 3) + ||!strncmp((char*)header, "ID3", 3)) + { + //get the real size from the syncsafe int + size = header[6]; + size = (size<<7) | header[7]; + size = (size<<7) | header[8]; + size = (size<<7) | header[9]; + + size += 10; + + if (header[5] & 0x10) //has footer + size += 10; + return size; + } + return 0; +} bool JMP3::load(const std::string& filename, int inBufferSize, int outBufferSize) { m_inBufferSize = inBufferSize; @@ -110,11 +139,11 @@ bool JMP3::load(const std::string& filename, int inBufferSize, int outBufferSize int fileSize = sceIoLseek32(m_fileHandle, 0, SEEK_END); sceIoLseek32(m_fileHandle, 0, SEEK_SET); m_fileSize = fileSize; - + int id3tagsize = GetID3TagSize((char*)filename.c_str()); initArgs.unk1 = 0; initArgs.unk2 = 0; - initArgs.mp3StreamStart = 0; - initArgs.mp3StreamEnd = fileSize; + initArgs.mp3StreamStart = id3tagsize; + initArgs.mp3StreamEnd = fileSize-(id3tagsize); initArgs.mp3BufSize = m_inBufferSize; initArgs.mp3Buf = (SceVoid*) m_inBuffer; initArgs.pcmBufSize = m_outBufferSize;