17#include <Library/BaseMemoryLib.h>
18#include <Library/BaseOverflowLib.h>
19#include <Library/DebugLib.h>
20#include <Library/MemoryAllocationLib.h>
38 IN OUT VOID **BufferCurr,
39 IN OUT UINT32 *BufferSize
47 if (*BufferSize == 0) {
51 OrgOffset = (UINT32)((UINTN)*BufferCurr - (UINTN)*
Buffer);
52 RemainingSize = *BufferSize - OrgOffset;
59 if (*BufferSize == 0) {
61 *BufferCurr = *
Buffer = AllocatePool (*BufferSize);
65 OrgSize = *BufferSize;
66 if (BaseOverflowMulU32 (OrgSize, 2, BufferSize)) {
73 NewBuffer = ReallocatePool (
78 if (NewBuffer == NULL) {
84 *BufferCurr = (UINT8 *)NewBuffer + OrgOffset;
90 IN CONST VOID *InBuffer,
91 IN UINT32 InBufferSize,
93 OUT UINT32 *OutBufferSize,
101 unsigned char *Walker;
108 if (Decoder == NULL) {
109 return EFI_OUT_OF_RESOURCES;
112 ZeroMem (&FrameInfo,
sizeof (FrameInfo));
114 Walker = (VOID *)InBuffer;
115 BytesLeft = (int)InBufferSize;
117 OutBufferCurr = NULL;
120 while (BytesLeft > 0) {
128 if (SyncOffset < 0) {
132 if (OutBufferCurr == NULL) {
134 return EFI_OUT_OF_RESOURCES;
140 Walker += SyncOffset;
141 BytesLeft -= SyncOffset;
143 if (!
BufferResize (OutBuffer, &OutBufferCurr, OutBufferSize)) {
145 return EFI_OUT_OF_RESOURCES;
165 FreePool (*OutBuffer);
166 return EFI_UNSUPPORTED;
192 FreePool (*OutBuffer);
193 return EFI_UNSUPPORTED;
216 FreePool (*OutBuffer);
217 return EFI_UNSUPPORTED;
220 *Channels = (UINT8)FrameInfo.
nChans;
221 *OutBufferSize = (UINT32)((UINT8 *)OutBufferCurr - (UINT8 *)*OutBuffer);
EFI_AUDIO_IO_PROTOCOL_FREQ
EFI_AUDIO_IO_PROTOCOL_BITS
EFI_STATUS OcDecodeMp3(IN CONST VOID *InBuffer, IN UINT32 InBufferSize, OUT VOID **OutBuffer, OUT UINT32 *OutBufferSize, OUT EFI_AUDIO_IO_PROTOCOL_FREQ *Frequency, OUT EFI_AUDIO_IO_PROTOCOL_BITS *Bits, OUT UINT8 *Channels)
STATIC BOOLEAN BufferResize(IN OUT VOID **Buffer, IN OUT VOID **BufferCurr, IN OUT UINT32 *BufferSize)
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
void MP3GetLastFrameInfo(HMP3Decoder hMP3Decoder, MP3FrameInfo *mp3FrameInfo)
int MP3Decode(HMP3Decoder hMP3Decoder, unsigned char **inbuf, int *bytesLeft, short *outbuf, int useSize)
void MP3FreeDecoder(HMP3Decoder hMP3Decoder)
HMP3Decoder MP3InitDecoder(void)
int MP3FindSyncWord(unsigned char *buf, int nBytes)
@ ERR_MP3_MAINDATA_UNDERFLOW