/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** ************************************************************************ * @file M4WAV_WavReader.h * @brief WAV Reader declarations * @note This file implements functions of the WAV reader ************************************************************************ */ #include "M4OSA_CoreID.h" #include "M4OSA_Types.h" #include "M4OSA_Memory.h" #include "M4OSA_FileReader.h" #include "M4SYS_AccessUnit.h" #include "M4TOOL_VersionInfo.h" #define M4PCMC_ERR_PCM_NOT_COMPLIANT M4OSA_ERR_CREATE(M4_ERR, M4WAV_COMMON,0x000001) #define M4PCMC_ERR_PCM_NO_SPACE_AVAIL M4OSA_ERR_CREATE(M4_ERR, M4WAV_COMMON,0x000002) #define M4PCMC_ERR_PCM_NOT_SUPPORTED M4OSA_ERR_CREATE(M4_ERR, M4WAV_COMMON,0x000003) #define M4PCMC_WAR_END_OF_STREAM M4OSA_ERR_CREATE(M4_WAR, M4WAV_COMMON ,0x000001) /** ************************************************************************ * structure M4WAVC_DecoderSpecificInfo * @brief This structure defines the decoder Specific informations * @note This structure is used by the WAV reader to store all * decoder specific informations: * - Sample Frequency * - Average Bytes per second * - Number of channels (1 or 2) * - Number of bits per sample (8 or 16) ************************************************************************ */ typedef struct { M4OSA_UInt32 SampleFrequency; M4OSA_UInt32 AvgBytesPerSec; M4OSA_UInt32 DataLength; M4OSA_UInt16 nbChannels; M4OSA_UInt16 BitsPerSample; } M4PCMC_DecoderSpecificInfo; /** ************************************************************************ * enum M4WAVR_State * @brief This enum defines the WAV Reader States * @note The state automaton is documented separately * consult the design specification for details ************************************************************************ */ typedef enum { M4PCMR_kInit = 0x0000, M4PCMR_kOpening = 0x0100, M4PCMR_kOpening_streamRetrieved = 0x0101, M4PCMR_kReading = 0x0200, M4PCMR_kReading_nextAU = 0x0201, M4PCMR_kClosed = 0x0300 } M4PCMR_State; /** ************************************************************************ * enum M4WAVR_OptionID * @brief This enum defines the WAV Reader options * @note Only one option is available: * - M4WAVR_kPCMblockSize: sets the size of the PCM block to read * from WAV file ************************************************************************ */ typedef enum { M4PCMR_kPCMblockSize = M4OSA_OPTION_ID_CREATE(M4_READ, M4WAV_READER, 0x01) } M4PCMR_OptionID; /** ************************************************************************ * structure M4WAVR_Context * @brief This structure defines the WAV Reader context * @note This structure is used for all WAV Reader calls to store * the context ************************************************************************ */ typedef struct { M4OSA_MemAddr32 m_pDecoderSpecInfo;/**< Pointer to the decoder specific info structure contained in pStreamDesc (only used to free...) */ M4OSA_FileReadPointer* m_pFileReadFunc;/**< The OSAL set of pointer to function for file management */ M4OSA_Context m_fileContext; /**< The context needed by OSAL to manage File */ M4PCMC_DecoderSpecificInfo m_decoderConfig;/**< Specific configuration for decoder */ M4PCMR_State m_state; /**< state of the wav reader */ M4PCMR_State m_microState; /**< state of the read wav stream */ M4OSA_UInt32 m_blockSize; /**< Size of the read block */ M4OSA_UInt32 m_offset; /**< Offset of the PCM read (i.e m_offset of the file without wav header) */ M4OSA_MemAddr32 m_pAuBuffer; /**< Re-used buffer for AU content storage */ M4OSA_FilePosition m_dataStartOffset;/**< offset of the pcm data beginning into the file */ } M4PCMR_Context; /************************************************************************* * * Prototypes of all WAV reader functions * ************************************************************************/ M4OSA_ERR M4PCMR_openRead(M4OSA_Context* pContext, M4OSA_Void* pUrl, M4OSA_FileReadPointer* pFileFunction); M4OSA_ERR M4PCMR_getNextStream(M4OSA_Context context, M4SYS_StreamDescription* pStreamDesc); M4OSA_ERR M4PCMR_startReading(M4OSA_Context context, M4SYS_StreamID* pStreamIDs); M4OSA_ERR M4PCMR_nextAU(M4OSA_Context context, M4SYS_StreamID streamID, M4SYS_AccessUnit* pAU); M4OSA_ERR M4PCMR_freeAU(M4OSA_Context context, M4SYS_StreamID streamID, M4SYS_AccessUnit* pAU); M4OSA_ERR M4PCMR_seek(M4OSA_Context context, M4SYS_StreamID* pStreamID, M4OSA_Time time, M4SYS_SeekAccessMode seekAccessMode, M4OSA_Time* pObtainCTS); M4OSA_ERR M4PCMR_closeRead(M4OSA_Context context); M4OSA_ERR M4PCMR_getOption(M4OSA_Context context, M4PCMR_OptionID optionID, M4OSA_DataOption* pValue); M4OSA_ERR M4PCMR_setOption(M4OSA_Context context, M4PCMR_OptionID optionID, M4OSA_DataOption Value); M4OSA_ERR M4PCMR_getVersion(M4_VersionInfo *pVersion);