1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
/*
* 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);
|