• 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  * @file    M4WRITER_common.h
19  * @brief    VES writers shell interface.
20  * @note    This file defines the types internally used by the VES to abstract writers
21  ******************************************************************************
22 */
23 #ifndef __M4WRITER_COMMON_H__
24 #define __M4WRITER_COMMON_H__
25 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif /* __cplusplus */
29 
30 #include "M4OSA_Types.h"
31 #include "M4OSA_FileWriter.h"   /* for M4OSA_FileWriterPointer */
32 #include "M4OSA_FileReader.h"   /* for M4OSA_FileWriterPointer */
33 #include "M4OSA_OptionID.h"     /* for M4OSA_OPTION_ID_CREATE() */
34 #include "M4OSA_CoreID.h"       /* for M4WRITER_COMMON */
35 
36 #include "M4SYS_Stream.h"       /* for M4SYS_StreamID */
37 #include "M4SYS_AccessUnit.h"   /* for M4SYS_AccessUnit */
38 
39 /**
40  ******************************************************************************
41  * MP4W Errors & Warnings definition
42  ******************************************************************************
43 */
44 #define M4WAR_WRITER_STOP_REQ        M4OSA_ERR_CREATE(M4_WAR, M4WRITER_COMMON ,0x000001)
45 
46 /**
47  ******************************************************************************
48  * enum        M4WRITER_OutputFileType
49  * @brief    This enum defines the avalaible output file format.
50  ******************************************************************************
51 */
52 typedef enum
53 {
54     M4WRITER_kUnknown=-1,
55     M4WRITER_k3GPP=0,            /**< 3GPP compliant file */
56     M4WRITER_kAVI=1,            /**< AVI file */
57     M4WRITER_kAMR=2,            /**< AMR file */
58     M4WRITER_kNETWORK3GPP=3,    /**< 3GPP via TCP */
59     M4WRITER_kPCM=4,            /**< PCM file */
60     M4WRITER_kJPEG=5,            /**< JPEG EXIF writer */
61     M4WRITER_kMP3=6,            /**< MP3 writer */
62 
63     M4WRITER_kType_NB  /* number of writers, keep it as last enum entry */
64 
65 } M4WRITER_OutputFileType;
66 
67 /**
68  ******************************************************************************
69  * enum    M4WRITER_OptionID
70  * @brief    This enums defines all avalaible options. All the reuturned values are in
71  *           M4OSA_UInt32 type.
72  ******************************************************************************
73 */
74 typedef enum {
75     M4WRITER_kMaxAUSize        = M4OSA_OPTION_ID_CREATE (M4_READ|M4_WRITE, M4WRITER_COMMON, 0x01),
76     M4WRITER_kMaxChunckSize    = M4OSA_OPTION_ID_CREATE (M4_READ|M4_WRITE, M4WRITER_COMMON, 0x02),
77     M4WRITER_kFileSize          = M4OSA_OPTION_ID_CREATE (M4_READ            , \
78         M4WRITER_COMMON, 0x03),  /**< File size if the process was ended when we call the method */
79     M4WRITER_kFileSizeAudioEstimated= M4OSA_OPTION_ID_CREATE (M4_READ    ,\
80          M4WRITER_COMMON, 0x04),    /**< File size if the process was ended when we call the
81                                      method, estimated size for audio */
82     M4WRITER_kEmbeddedString  = M4OSA_OPTION_ID_CREATE (M4_WRITE        ,\
83          M4WRITER_COMMON, 0x05),    /**< String embedded at the end of the file(SW - VES) */
84     M4WRITER_kEmbeddedVersion = M4OSA_OPTION_ID_CREATE (M4_WRITE        ,\
85          M4WRITER_COMMON, 0x06),    /**< Version embedded at the end of the file */
86     M4WRITER_kIntegrationTag  = M4OSA_OPTION_ID_CREATE (M4_WRITE        ,\
87          M4WRITER_COMMON, 0x07),    /**< String embedded at the end of the file (char[60]
88                                          for integration purpose) */
89     M4WRITER_kMaxFileSize      = M4OSA_OPTION_ID_CREATE (M4_WRITE        , \
90         M4WRITER_COMMON, 0x08),    /**< Maximum file size limitation */
91     M4WRITER_kMaxFileDuration = M4OSA_OPTION_ID_CREATE (M4_WRITE        ,\
92          M4WRITER_COMMON, 0x09),    /**< Maximum file duration limitation */
93     M4WRITER_kSetFtypBox      = M4OSA_OPTION_ID_CREATE (M4_WRITE        ,\
94          M4WRITER_COMMON, 0x0A),    /**< Set 'ftyp' atom */
95     M4WRITER_kMetaData          = M4OSA_OPTION_ID_CREATE (M4_WRITE        ,\
96          M4WRITER_COMMON, 0x0B),    /**< Additionnal information to set in the file */
97     M4WRITER_kDSI          = M4OSA_OPTION_ID_CREATE (M4_WRITE        , \
98         M4WRITER_COMMON, 0x0C),    /**< To set DSI of the file (Decoder specifc info) */
99     M4WRITER_kJpegReserveFPData     = M4OSA_OPTION_ID_CREATE (M4_WRITE        ,\
100          M4WRITER_COMMON, 0x0D),    /**< Reserve some space in the file for JPEG fast
101                                         processing data */
102     M4WRITER_kJpegSetFPData     = M4OSA_OPTION_ID_CREATE (M4_WRITE        , \
103         M4WRITER_COMMON, 0x0E),    /**< Write Fast Processing Data in the file*/
104     /* + CRLV6775 -H.264 trimming */
105     M4WRITER_kMUL_PPS_SPS       = M4OSA_OPTION_ID_CREATE (M4_WRITE        , M4WRITER_COMMON, 0x0F)
106     /* - CRLV6775 -H.264 trimming */
107 } M4WRITER_OptionID;
108 
109 
110 /**
111  ******************************************************************************
112  * struct    M4WRITER_Header
113  * @brief    This structure defines the buffer where an header is put.
114  ******************************************************************************
115 */
116 typedef struct
117 {
118     M4OSA_MemAddr8    pBuf;        /**< Buffer for the header */
119     M4OSA_UInt32    Size;        /**< Size of the data */
120 } M4WRITER_Header;
121 
122 
123 /**
124  ******************************************************************************
125  * struct    M4WRITER_StreamVideoInfos
126  * @brief    This structure defines the specific video stream infos, extension to
127  *           M4SYS_StreamDescription.
128  ******************************************************************************
129 */
130 typedef struct {
131     M4OSA_UInt32    height;                /**< Frame height */
132     M4OSA_UInt32    width;                /**< Frame Width */
133     M4OSA_Double    fps;                /**< Targetted framerate of the video */
134     M4WRITER_Header    Header;                /**< Sequence header of the video stream,
135                                         member set to NULL if no header present */
136 } M4WRITER_StreamVideoInfos;
137 
138 
139 /**
140  ******************************************************************************
141  * struct    M4WRITER_StreamAudioInfos
142  * @brief    This structure defines the specific audio stream infos, extension to
143              M4SYS_StreamDescription.
144  ******************************************************************************
145 */
146 typedef struct {
147     M4OSA_UInt32    nbSamplesPerSec;    /**< Number of Samples per second */
148     M4OSA_UInt16    nbBitsPerSample;    /**< Number of Bits in 1 sample */
149     M4OSA_UInt16    nbChannels;            /**< Number of channels */
150     M4WRITER_Header    Header;                /**< Decoder Specific Info of the audiostream,
151                                              member set to NULL if no DSI present */
152 } M4WRITER_StreamAudioInfos;
153 
154 
155 /**
156  ******************************************************************************
157  * enum        M4WRITER_Orientation
158  * @brief    This enum defines the possible orientation of a frame as described
159  *            in the EXIF standard.
160  ******************************************************************************
161 */
162 typedef enum
163 {
164     M4WRITER_OrientationUnknown = 0,
165     M4WRITER_OrientationTopLeft,
166     M4WRITER_OrientationTopRight,
167     M4WRITER_OrientationBottomRight,
168     M4WRITER_OrientationBottomLeft,
169     M4WRITER_OrientationLeftTop,
170     M4WRITER_OrientationRightTop,
171     M4WRITER_OrientationRightBottom,
172     M4WRITER_OrientationLeftBottom
173 }M4WRITER_Orientation ;
174 
175 /**
176  ******************************************************************************
177  * struct    M4WRITER_MetaData
178  * @brief    This structure defines all the meta data to store in the encoded file.
179  ******************************************************************************
180 */
181 typedef struct
182 {
183     M4OSA_Char*                Description ;
184     M4OSA_Char*                PhoneManufacturer ;
185     M4OSA_Char*                PhoneModel ;
186     M4OSA_Char*                Artist ;
187     M4OSA_Char*                Copyright ;
188     M4OSA_Char*                Software ;
189     M4OSA_Char*                CreationDate;
190     M4WRITER_Orientation    Orientation ;
191 
192     M4OSA_UInt32            Width ;
193     M4OSA_UInt32            Height ;
194 
195     M4OSA_UInt32            ThumbnailWidth ;
196     M4OSA_UInt32            ThumbnailHeight ;
197     M4OSA_Bool                ThumbnailPresence ;
198 }M4WRITER_MetaData;
199 
200 
201 typedef void* M4WRITER_Context;
202 
203 typedef M4OSA_ERR (M4WRITER_openWrite)        (M4WRITER_Context* hContext,\
204                                              void* outputFileDescriptor,\
205                                              M4OSA_FileWriterPointer* pFileWriterPointer,\
206                                              void* tempFileDescriptor, \
207                                              M4OSA_FileReadPointer* pFileReaderPointer);
208 typedef M4OSA_ERR (M4WRITER_addStream)        (M4WRITER_Context  pContext,\
209                                             M4SYS_StreamDescription*streamDescription);
210 typedef M4OSA_ERR (M4WRITER_startWriting)    (M4WRITER_Context  pContext);
211 typedef M4OSA_ERR (M4WRITER_closeWrite)        (M4WRITER_Context  pContext);
212 typedef M4OSA_ERR (M4WRITER_setOption)        (M4WRITER_Context  pContext, \
213                                             M4OSA_UInt32 optionID, \
214                                             M4OSA_DataOption optionValue);
215 typedef M4OSA_ERR (M4WRITER_getOption)        (M4WRITER_Context  pContext, \
216                                             M4OSA_UInt32 optionID, \
217                                             M4OSA_DataOption optionValue);
218 
219 
220 /**
221  ******************************************************************************
222  * struct    M4WRITER_GlobalInterface
223  * @brief    Defines all the functions required for a writer shell.
224  ******************************************************************************
225 */
226 typedef struct _M4WRITER_GlobalInterface
227 {
228     M4WRITER_openWrite*             pFctOpen;
229     M4WRITER_addStream*                pFctAddStream;
230     M4WRITER_startWriting*          pFctStartWriting;
231     M4WRITER_closeWrite*            pFctCloseWrite;
232     M4WRITER_setOption*                pFctSetOption;
233     M4WRITER_getOption*                pFctGetOption;
234 } M4WRITER_GlobalInterface;
235 
236 typedef M4OSA_ERR  M4WRITER_startAU(M4WRITER_Context pContext, M4SYS_StreamID streamID,\
237                                      M4SYS_AccessUnit* pAU);
238 typedef M4OSA_ERR  M4WRITER_processAU(M4WRITER_Context pContext, M4SYS_StreamID streamID,\
239                                      M4SYS_AccessUnit* pAU);
240 
241 /**
242  ******************************************************************************
243  * struct    M4WRITER_DataInterface
244  * @brief    Defines all the functions required to write data with a writer shell.
245  ******************************************************************************
246 */
247 typedef struct _M4WRITER_DataInterface
248 {
249     M4WRITER_startAU*    pStartAU;
250     M4WRITER_processAU* pProcessAU;
251 
252     M4WRITER_Context    pWriterContext;
253 
254 } M4WRITER_DataInterface;
255 
256 #ifdef __cplusplus
257 }
258 #endif /* __cplusplus */
259 
260 #endif /*__M4WRITER_COMMON_H__*/
261 
262