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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
|
/*
* 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 M4READER_3gpCom.h
* @brief Generic encapsulation of the core 3gp reader
* @note This file declares the generic shell interface retrieving function
* of the 3GP reader
************************************************************************
*/
#ifndef __M4READER_3GPCOM_H__
#define __M4READER_3GPCOM_H__
#include "NXPSW_CompilerSwitches.h"
#include "M4OSA_Types.h"
#include "M4OSA_Error.h"
#include "M4READER_Common.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* Error: Function M4READER_Com3GP_getNextStreamHandler must be called before.
*/
#define M4ERR_NO_VIDEO_STREAM_RETRIEVED_YET M4OSA_ERR_CREATE(M4_ERR, M4READER_3GP, 0x000001)
/**
* Error: No video stream H263 in file.
*/
#define M4ERR_VIDEO_NOT_H263 M4OSA_ERR_CREATE(M4_ERR, M4READER_3GP, 0x000002)
/**
* There has been a problem with the decoder configuration information, seems to be invalid */
#define M4ERR_READER3GP_DECODER_CONFIG_ERROR M4OSA_ERR_CREATE(M4_ERR, M4READER_3GP, 0x000003)
#define M4READER_COM3GP_MAXVIDEOSTREAM 5
#define M4READER_COM3GP_MAXAUDIOSTREAM 5
#define M4READER_COM3GP_MAXTEXTSTREAM 5
typedef struct
{
M4OSA_Context m_pFFContext; /**< core file format context */
M4_StreamHandler* m_AudioStreams[M4READER_COM3GP_MAXAUDIOSTREAM];
M4_StreamHandler* m_pAudioStream; /**< pointer to the current allocated audio
stream handler */
M4_StreamHandler* m_VideoStreams[M4READER_COM3GP_MAXVIDEOSTREAM];
M4_StreamHandler* m_pVideoStream; /**< pointer to the current allocated video
stream handler */
#ifdef M4VPS_SUPPORT_TTEXT
M4_StreamHandler* m_TextStreams[M4READER_COM3GP_MAXTEXTSTREAM];
M4_StreamHandler* m_pTextStream; /**< pointer to the current allocated text
stream handler */
#endif /*M4VPS_SUPPORT_TTEXT*/
} M4READER_Com3GP_Context;
/**
************************************************************************
* structure M4READER_3GP_Buffer (but nothing specific to 3GP, nor to a reader !)
* @brief This structure defines a buffer that can be used to exchange data (should be in OSAL)
************************************************************************
*/
typedef struct
{
M4OSA_UInt32 size; /**< the size in bytes of the buffer */
M4OSA_MemAddr8 dataAddress; /**< the pointer to the buffer */
} M4READER_3GP_Buffer;
/**
************************************************************************
* enum M4READER_3GP_OptionID
* @brief This enum defines the reader options specific to the 3GP format.
* @note These options can be read from or written to a 3GP reader via M4READER_3GP_getOption.
************************************************************************
*/
typedef enum
{
/**
* Get the DecoderConfigInfo for H263,
* option value must be a pointer to M4READER_3GP_H263Properties allocated by caller */
M4READER_3GP_kOptionID_H263Properties = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_3GP, 0x01),
/**
* Get the Purple Labs drm information */
M4READER_3GP_kOptionID_PurpleLabsDrm = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_3GP, 0x02),
/**
* Set the Fast open mode (Only the first AU of each stream will be parsed -> less CPU,
less RAM). */
M4READER_3GP_kOptionID_FastOpenMode = M4OSA_OPTION_ID_CREATE(M4_WRITE, M4READER_3GP, 0x03),
/**
* Set the Audio only mode (the video stream won't be opened) */
M4READER_3GP_kOptionID_AudioOnly = M4OSA_OPTION_ID_CREATE(M4_WRITE, M4READER_3GP, 0x04),
/**
* Set the Video only mode (the audio stream won't be opened) */
M4READER_3GP_kOptionID_VideoOnly = M4OSA_OPTION_ID_CREATE(M4_WRITE, M4READER_3GP, 0x05),
/**
* Get the next video CTS */
M4READER_3GP_kOptionID_getNextVideoCTS = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_3GP, 0x06)
} M4READER_3GP_OptionID;
/**
************************************************************************
* struct M4READER_3GP_H263Properties
* @brief Contains info about H263 stream read from the 3GP file.
************************************************************************
*/
typedef struct
{
/**< the profile as defined in the Visual Object Sequence header, if present */
M4OSA_UInt8 uiProfile;
/**< the level as defined in the Visual Object Sequence header, if present */
M4OSA_UInt8 uiLevel;
} M4READER_3GP_H263Properties;
/**
************************************************************************
* @brief Get the next stream found in the 3gp file
* @note
* @param pContext: (IN) Context of the reader
* @param pMediaFamily: (OUT) Pointer to a user allocated M4READER_MediaFamily that will
* be filled with the media family of the found stream
* @param pStreamHandler: (OUT) Pointer to a stream handler that will be allocated and
* filled with the found stream description
* @return M4NO_ERROR There is no error
* @return M4ERR_PARAMETER At least one parameter is not properly set
* @return M4WAR_NO_MORE_STREAM No more available stream in the media (all streams found)
************************************************************************
*/
M4OSA_ERR M4READER_Com3GP_getNextStreamHandler(M4OSA_Context context,
M4READER_MediaFamily *pMediaFamily,
M4_StreamHandler **pStreamHandler);
/**
************************************************************************
* @brief Prepare the access unit (AU)
* @note An AU is the smallest possible amount of data to be decoded by a decoder.
* @param pContext: (IN) Context of the reader
* @param pStreamHandler (IN) The stream handler of the stream to make jump
* @param pAccessUnit (IN/OUT) Pointer to an access unit to fill with read data
* (the au structure is allocated by the user, and must
* be initialized by calling M4READER_fillAuStruct_fct
* after creation)
* @return M4NO_ERROR There is no error
* @return M4ERR_PARAMETER At least one parameter is not properly set
* @returns M4ERR_ALLOC Memory allocation failed
************************************************************************
*/
M4OSA_ERR M4READER_Com3GP_fillAuStruct(M4OSA_Context context, M4_StreamHandler *pStreamHandler,
M4_AccessUnit *pAccessUnit);
/**
************************************************************************
* @brief Cleans up the stream handler
* @param pContext: (IN/OUT) Context of the reader shell
* @param pStreamHandler: (IN/OUT) Stream handler
* @return M4ERR_PARAMETER: The context is null
* @return M4NO_ERROR: No error
************************************************************************
*/
M4OSA_ERR M4READER_Com3GP_cleanUpHandler(M4_StreamHandler* pStreamHandler);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __M4READER_3GPCOM_H__ */
|