summaryrefslogtreecommitdiffstats
path: root/libvideoeditor/vss/common/inc/M4PCMR_CoreReader.h
blob: 6afc50c49178e6281a196ae596ac88812ad4de5e (plain)
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);