• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 /**
18  ******************************************************************************
19  * @file    M4MP4W_Writer.h
20  * @brief   Core MP4 writer interface
21  * @note    This file declares the MP4 writer interface functions.
22  *          The MP4 writer specific types are defined in file M4MP4W_Types.h
23  ******************************************************************************
24  */
25 #ifndef M4MP4W_WRITER_H
26 #define M4MP4W_WRITER_H
27 
28 #ifdef __cplusplus
29 extern "C" {
30 #endif /* __cplusplus */
31 
32 #include "NXPSW_CompilerSwitches.h"
33 
34 #ifndef _M4MP4W_USE_CST_MEMORY_WRITER
35 
36 /* includes */
37 #include "M4OSA_Types.h"
38 #include "M4OSA_Error.h"
39 #include "M4OSA_FileWriter.h"
40 #include "M4OSA_FileReader.h"
41 #include "M4SYS_AccessUnit.h"
42 #include "M4MP4W_Types.h"
43 
44 /**
45  ******************************************************************************
46  * MP4W Errors & Warnings definition
47  ******************************************************************************
48  */
49 #define M4WAR_MP4W_OVERSIZE         M4OSA_ERR_CREATE(M4_WAR, M4MP4_WRITER ,0x000001)
50 #define M4WAR_MP4W_NOT_EVALUABLE    M4OSA_ERR_CREATE(M4_WAR, M4MP4_WRITER ,0x000002)
51 
52 /**
53  ******************************************************************************
54  * @brief    Get MP4W version
55  * @param    major            (OUT) Pointer to the 'major' version number.
56  * @param    minor            (OUT) Pointer to the 'minor' version number.
57  * @param    revision         (OUT) Pointer to the 'revision' number.
58  * @return   M4NO_ERROR:         No error
59  * @return   M4ERR_PARAMETER:    At least one parameter is null
60  ******************************************************************************
61  */
62 M4OSA_ERR M4MP4W_getVersion(M4OSA_UInt8* major,
63                             M4OSA_UInt8* minor,
64                             M4OSA_UInt8* revision);
65 
66 /**
67  ******************************************************************************
68  * @brief    Initiation of the MP4 file creation
69  * @param    contextPtr             (OUT) Pointer to the MP4 writer context to create.
70  * @param    outputFileDescriptor   (IN)  Descriptor of the output file to open.
71  * @param    fileWriterFunction     (IN)  Pointer to structure containing the set of
72  *                                          OSAL file write functions.
73  * @param    tempFileDescriptor     (IN)  Descriptor of the temporary file to open.
74  * @param    fileReaderFunction     (IN)  Pointer to structure containing the set of
75  *                                          OSAL file read functions.
76  * @return    M4NO_ERROR:         No error
77  * @return    M4ERR_PARAMETER:    At least one parameter is null or incorrect
78  * @return    M4ERR_ALLOC:        Memory allocation failed
79  ******************************************************************************
80  */
81 M4OSA_ERR M4MP4W_openWrite( M4OSA_Context*                  contextPtr,
82                             void*                           outputFileDescriptor,
83                             M4OSA_FileWriterPointer*        fileWriterFunction,
84                             void*                           tempFileDescriptor,
85                             M4OSA_FileReadPointer*          fileReaderFunction );
86 
87 /**
88  ******************************************************************************
89  * @brief    Add a new track
90  * @param    context              (IN/OUT)  MP4 writer context.
91  * @param    streamDescPtr        (IN)      Pointer to the structure containing the
92                                             parameters for the new track.
93  * @return    M4NO_ERROR:         No error
94  * @return    M4ERR_PARAMETER:    At least one parameter is null or incorrect
95  * @return    M4ERR_ALLOC:        Memory allocation failed
96  * @return    M4ERR_STATE:        Invalid state
97  * @return    M4ERR_BAD_CONTEXT:  An audio (resp.video) stream has already been added
98  *                                to this context while attempting to add another one,
99  *                                which is forbidden.
100  ******************************************************************************
101  */
102 M4OSA_ERR M4MP4W_addStream( M4OSA_Context                context,
103                             M4SYS_StreamDescription*     streamDescPtr);
104 
105 /**
106  ******************************************************************************
107  * @brief   Signal to the core MP4 writer that there is no more tracks to add
108  * @param   context             (IN/OUT) MP4 writer context.
109  * @return  M4NO_ERROR:         No error
110  * @return  M4ERR_PARAMETER:    At least one parameter is null or incorrect
111  * @return  M4ERR_ALLOC:        Memory allocation failed
112  * @return  M4ERR_STATE:        Invalid state
113  * @return  M4ERR_BAD_CONTEXT:  Audio size estimation is required but not two streams
114  *                              have been added.
115  ******************************************************************************
116  */
117 M4OSA_ERR M4MP4W_startWriting( M4OSA_Context context);
118 
119 /**
120  ******************************************************************************
121  * @brief   Asks the core MP4 writer to initiate the access unit creation in
122  *          the streamID track
123  * @param   context             (IN/OUT) MP4 writer context.
124  * @param   streamID            (IN) Stream ID of the track.
125  * @param   auPtr               (IN/OUT) Access unit.
126  * @return    M4NO_ERROR:         No error
127  * @return    M4ERR_PARAMETER:    At least one parameter is null or incorrect
128  * @return    M4ERR_BAD_STREAM_ID:Unknown stream ID
129  * @return    M4ERR_ALLOC:        Memory allocation failed
130  * @return    M4ERR_STATE:        Invalid state
131  ******************************************************************************
132  */
133 M4OSA_ERR M4MP4W_startAU( M4OSA_Context        context,
134                           M4SYS_StreamID       streamID,
135                           M4SYS_AccessUnit*    auPtr);
136 
137 /**
138  ******************************************************************************
139  * @brief   Ask the core MP4 writer to write the access unit in the streamID track
140  * @note    If M4MP4W_WAR_OVERSIZE is returned, M4MP4W_startAU must not be called anymore,
141  *          but directly M4MP4W_closeWrite().
142  * @param   context             (IN/OUT)   MP4 writer context.
143  * @param   streamID            (IN)       Stream ID of the track.
144  * @param   auPtr               (IN/OUT)   Access unit.
145  * @return    M4NO_ERROR:                 No error
146  * @return    M4ERR_PARAMETER:            At least one parameter is null or incorrect
147  * @return    M4ERR_BAD_STREAM_ID:        Unknown stream ID
148  * @return    M4ERR_ALLOC:                Memory allocation failed
149  * @return    M4ERR_STATE:                Invalid state
150  * @return    M4WAR_MP4W_NOT_EVALUABLE:   It is not possible to evaluate audio size if audio
151  *                                        samples don't have a constant size.
152  * @return    M4WAR_MP4W_OVERSIZE:        Max file size was reached
153  ******************************************************************************
154  */
155 M4OSA_ERR M4MP4W_processAU( M4OSA_Context        context,
156                             M4SYS_StreamID       streamID,
157                             M4SYS_AccessUnit*    auPtr);
158 
159 /**
160  ******************************************************************************
161  * @brief     Close the MP4 file
162  * @note      In previous versions of the MP4 writer, the M4MP4W_freeContext method
163  *            was in the interface, which is not the case anymore.
164  *            The context is now always deallocated in the M4MP4W_closeWrite function.
165  * @param     context             (IN/OUT) MP4 writer context.
166  * @return    M4NO_ERROR:         No error
167  * @return    M4ERR_PARAMETER:    At least one parameter is null or incorrect
168  ******************************************************************************
169  */
170 M4OSA_ERR M4MP4W_closeWrite( M4OSA_Context context);
171 
172 /**
173  ******************************************************************************
174  * @brief    Ask the core MP4 writer to return the value associated with the optionID
175  * @param    context                (IN)    MP4 writer context.
176  * @param    option                 (IN)    Option ID.
177  * @param    valuePtr               (OUT)   Pointer to the option value.
178  * @return    M4NO_ERROR:             No error
179  * @return    M4ERR_PARAMETER:        At least one parameter is null or incorrect
180  * @return    M4ERR_NOT_IMPLEMENTED:  Not implemented in the current version
181  * @return    M4ERR_BAD_OPTION_ID:    Unknown optionID
182  * @return    M4ERR_BAD_STREAM_ID:    Bad stream ID in the option value
183  ******************************************************************************
184  */
185 M4OSA_ERR M4MP4W_getOption( M4OSA_Context        context,
186                             M4OSA_OptionID        option,
187                             M4OSA_DataOption    *valuePtr);
188 
189 /**
190  ******************************************************************************
191  * @brief    Ask the core MP4 writer to set the value associated with the optionID.
192  * @param    context              (IN/OUT)  MP4 writer context.
193  * @param    option               (IN)      Option ID.
194  * @param    value                (IN)      Option value.
195  * @return    M4NO_ERROR:             No error
196  * @return    M4ERR_PARAMETER:        At least one parameter is null or incorrect
197  * @return    M4ERR_NOT_IMPLEMENTED:  Not implemented in the current version
198  * @return    M4ERR_BAD_OPTION_ID:    Unknown optionID
199  * @return    M4ERR_BAD_STREAM_ID:    Bad stream ID in the option value
200  * @return    M4ERR_ALLOC:            A memory allocation failed
201  ******************************************************************************
202  */
203 M4OSA_ERR M4MP4W_setOption( M4OSA_Context       context,
204                             M4OSA_OptionID      option,
205                             M4OSA_DataOption    value);
206 
207 /**
208  ******************************************************************************
209  * @brief    Ask the core MP4 writer to return its state.
210  * @note     By selecting a specific streamID (not null), the caller can obtain
211  *           the state of a specific stream. By using 0 as streamID the returned
212  *           state is not stream specific.
213  * @param    context                (IN/OUT) MP4 writer context.
214  * @param    context                (IN)     Pointer to the state enumeration.
215  * @param    context                (IN/OUT) streamID of the stream to retrieve the
216  *                                           micro-state (0 for global state).
217  * @return    M4NO_ERROR:             No error
218  * @return    M4ERR_BAD_STREAM_ID:    Unknown stream ID
219  * @return    M4ERR_PARAMETER:        At least one parameter is null or incorrect
220  ******************************************************************************
221  */
222 M4OSA_ERR M4MP4W_getState( M4OSA_Context    context,
223                            M4MP4W_State*    statePtr,
224                            M4SYS_StreamID   streamID);
225 
226 /**
227  ******************************************************************************
228  * @brief    Get the currently expected file size
229  * @param    context             (IN/OUT) MP4 writer context.
230  * @return   M4NO_ERROR:         No error
231  * @return   M4ERR_PARAMETER:    At least one parameter is null
232  ******************************************************************************
233  */
234 M4OSA_ERR M4MP4W_getCurrentFileSize( M4OSA_Context        context,
235                                      M4OSA_UInt32*        currentFileSize);
236 
237 #endif /* _M4MP4W_USE_CST_MEMORY_WRITER */
238 
239 #ifdef __cplusplus
240 }
241 #endif /* __cplusplus */
242 
243 
244 #endif /*M4MP4W_WRITER_H*/
245 
246