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
27extern "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*/
52typedef 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*/
74typedef 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*/
116typedef 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*/
130typedef 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*/
146typedef 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*/
162typedef 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*/
181typedef 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
201typedef void* M4WRITER_Context;
202
203typedef M4OSA_ERR (M4WRITER_openWrite)        (M4WRITER_Context* hContext,\
204                                             void* outputFileDescriptor,\
205                                             M4OSA_FileWriterPointer* pFileWriterPointer,\
206                                             void* tempFileDescriptor, \
207                                             M4OSA_FileReadPointer* pFileReaderPointer);
208typedef M4OSA_ERR (M4WRITER_addStream)        (M4WRITER_Context  pContext,\
209                                            M4SYS_StreamDescription*streamDescription);
210typedef M4OSA_ERR (M4WRITER_startWriting)    (M4WRITER_Context  pContext);
211typedef M4OSA_ERR (M4WRITER_closeWrite)        (M4WRITER_Context  pContext);
212typedef M4OSA_ERR (M4WRITER_setOption)        (M4WRITER_Context  pContext, \
213                                            M4OSA_UInt32 optionID, \
214                                            M4OSA_DataOption optionValue);
215typedef 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*/
226typedef 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
236typedef M4OSA_ERR  M4WRITER_startAU(M4WRITER_Context pContext, M4SYS_StreamID streamID,\
237                                     M4SYS_AccessUnit* pAU);
238typedef 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*/
247typedef 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