• 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    M4_VideoEditingCommon.h
19  * @brief    Video Editing (VSS3GPP, MCS, PTO3GPP) common definitions
20  * @note
21  ******************************************************************************
22 */
23 
24 #ifndef __M4_VIDEOEDITINGCOMMON_H__
25 #define __M4_VIDEOEDITINGCOMMON_H__
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30 
31 /**
32  *    Version */
33 /* CHANGE_VERSION_HERE */
34 #define M4VIDEOEDITING_VERSION_MAJOR    3
35 #define M4VIDEOEDITING_VERSION_MINOR    1
36 #define M4VIDEOEDITING_VERSION_REVISION    0
37 
38 #define M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE 0x7fffffff
39 #define M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL 0x7fffffff
40 
41 /**
42  ******************************************************************************
43  * enum        M4VIDEOEDITING_FileType
44  * @brief    This enum defines the file format type to be used
45  ******************************************************************************
46 */
47 typedef enum {
48     M4VIDEOEDITING_kFileType_3GPP        = 0,      /**< 3GPP file media type : input & output */
49     M4VIDEOEDITING_kFileType_MP4         = 1,      /**< MP4  file media type : input          */
50     M4VIDEOEDITING_kFileType_AMR         = 2,      /**< AMR  file media type : input & output */
51     M4VIDEOEDITING_kFileType_MP3         = 3,      /**< MP3  file media type : input          */
52     M4VIDEOEDITING_kFileType_PCM         = 4,      /**< PCM RAW file media type : input    RC */
53     M4VIDEOEDITING_kFileType_JPG         = 5,      /**< STILL PICTURE FEATURE: JPG file media
54                                                         type : input AND OUTPUT */
55     M4VIDEOEDITING_kFileType_BMP         = 6,      /**< STILL PICTURE FEATURE: BMP file media
56                                                         type : input only */
57     M4VIDEOEDITING_kFileType_GIF         = 7,      /**< STILL PICTURE FEATURE: GIF file media
58                                                         type : input only */
59     M4VIDEOEDITING_kFileType_PNG         = 8,      /**< STILL PICTURE FEATURE: PNG file media
60                                                         type : input only */
61     M4VIDEOEDITING_kFileType_ARGB8888    = 9,      /**< STILL PICTURE FEATURE: ARGB8888 file
62                                                         media type : input only */
63     M4VIDEOEDITING_kFileType_M4V         = 10,     /**< M4V  file media type : input only     */
64     M4VIDEOEDITING_kFileType_Unsupported = 255     /**< Unsupported file media type           */
65 } M4VIDEOEDITING_FileType;
66 
67 
68 /**
69  ******************************************************************************
70  * enum        M4VIDEOEDITING_VideoFormat
71  * @brief    This enum defines the avalaible video compression formats.
72  ******************************************************************************
73 */
74 typedef enum
75 {
76     M4VIDEOEDITING_kNoneVideo = 0, /**< Video not present */
77     M4VIDEOEDITING_kH263 = 1, /**< H263 video */
78     M4VIDEOEDITING_kH264 = 2,    /**< H264 video */
79     M4VIDEOEDITING_kMPEG4 = 3, /**< MPEG-4 video */
80     M4VIDEOEDITING_kNullVideo = 254,  /**< Do not care video type, use NULL encoder */
81     M4VIDEOEDITING_kUnsupportedVideo = 255    /**< Unsupported video stream type */
82 } M4VIDEOEDITING_VideoFormat;
83 
84 /**
85  ******************************************************************************
86  * enum        M4VIDEOEDITING_AudioFormat
87  * @brief    This enum defines the avalaible audio format.
88  * @note    HE_AAC, HE_AAC_v2 and MP3 can not be used for the output audio format
89  ******************************************************************************
90 */
91 typedef enum {
92     M4VIDEOEDITING_kNoneAudio            = 0,    /**< Audio not present */
93     M4VIDEOEDITING_kAMR_NB              = 1,    /**< AMR Narrow Band audio */
94     M4VIDEOEDITING_kAAC                    = 2,    /**< AAC audio */
95     M4VIDEOEDITING_kAACplus                = 3,    /**< AAC+ audio */
96     M4VIDEOEDITING_keAACplus             = 4,    /**< Enhanced AAC+ audio */
97     M4VIDEOEDITING_kMP3                 = 5,    /**< MP3 audio */
98     M4VIDEOEDITING_kEVRC                = 6,    /**< EVRC audio */
99     M4VIDEOEDITING_kPCM                 = 7,    /**< PCM audio */
100     M4VIDEOEDITING_kNullAudio           = 254,  /**< Do not care audio type, use NULL encoder */
101     M4VIDEOEDITING_kUnsupportedAudio    = 255    /**< Unsupported audio stream type */
102 } M4VIDEOEDITING_AudioFormat;
103 
104 /**
105  ******************************************************************************
106  * enum        M4VIDEOEDITING_VideoFrameSize
107  * @brief    This enum defines the available output frame sizes.
108  ******************************************************************************
109 */
110 typedef enum
111 {
112     M4VIDEOEDITING_kSQCIF=0, /**< SQCIF 128x96  */
113     M4VIDEOEDITING_kQQVGA,   /**< QQVGA 160x120 */
114     M4VIDEOEDITING_kQCIF,    /**< QCIF  176x144 */
115     M4VIDEOEDITING_kQVGA,    /**< QVGA  320x240 */
116     M4VIDEOEDITING_kCIF,     /**< CIF   352x288 */
117     M4VIDEOEDITING_kVGA,     /**< VGA   640x480 */
118 /* +PR LV5807 */
119     M4VIDEOEDITING_kWVGA,    /**< WVGA 800x480 */
120     M4VIDEOEDITING_kNTSC,    /**< NTSC 720x480 */
121 /* -PR LV5807 */
122 
123 /* +CR Google */
124     M4VIDEOEDITING_k640_360,  /**< 640x360 */
125     M4VIDEOEDITING_k854_480,  /**< 854x480 */
126     M4VIDEOEDITING_k1280_720, /**< 720p 1280x720 */
127     M4VIDEOEDITING_k1080_720, /**< 720p 1080x720 */
128     M4VIDEOEDITING_k960_720,  /**< 720p 960x720 */
129     M4VIDEOEDITING_k1920_1080 /**<1080p 1920x1080*/
130 /* -CR Google */
131 
132 } M4VIDEOEDITING_VideoFrameSize;
133 
134 
135 /**
136  ******************************************************************************
137  * enum        M4VIDEOEDITING_Videoframerate
138  * @brief    This enum defines the available video framerates.
139  ******************************************************************************
140 */
141 typedef enum
142 {
143     M4VIDEOEDITING_k5_FPS = 0,
144     M4VIDEOEDITING_k7_5_FPS,
145     M4VIDEOEDITING_k10_FPS,
146     M4VIDEOEDITING_k12_5_FPS,
147     M4VIDEOEDITING_k15_FPS,
148     M4VIDEOEDITING_k20_FPS,
149     M4VIDEOEDITING_k25_FPS,
150     M4VIDEOEDITING_k30_FPS
151 } M4VIDEOEDITING_VideoFramerate;
152 
153 
154 /**
155  ******************************************************************************
156  * enum        M4VIDEOEDITING_AudioSamplingFrequency
157  * @brief    This enum defines the available output audio sampling frequencies
158  * @note    8 kHz is the only supported frequency for AMR-NB output
159  * @note    16 kHz is the only supported frequency for AAC output
160  * @note    The recommended practice is to use the Default value when setting the encoding parameters
161  ******************************************************************************
162 */
163 typedef enum {
164     M4VIDEOEDITING_kDefault_ASF    = 0,    /**< Default Audio Sampling Frequency for selected
165                                                  Audio output format */
166     M4VIDEOEDITING_k8000_ASF    = 8000,    /**< Note: Default audio Sampling Frequency for
167                                                     AMR-NB output */
168     M4VIDEOEDITING_k11025_ASF    = 11025,
169     M4VIDEOEDITING_k12000_ASF    = 12000,
170     M4VIDEOEDITING_k16000_ASF    = 16000,    /**< Note: Default audio Sampling Frequency
171                                                      for AAC output */
172     M4VIDEOEDITING_k22050_ASF    = 22050,
173     M4VIDEOEDITING_k24000_ASF    = 24000,
174     M4VIDEOEDITING_k32000_ASF    = 32000,
175     M4VIDEOEDITING_k44100_ASF    = 44100,
176     M4VIDEOEDITING_k48000_ASF    = 48000
177 
178 } M4VIDEOEDITING_AudioSamplingFrequency;
179 
180 
181 /**
182  ******************************************************************************
183  * enum        M4VIDEOEDITING_Bitrate
184  * @brief    This enum defines the available audio or video bitrates.
185  ******************************************************************************
186 */
187 typedef enum
188 {
189     M4VIDEOEDITING_kVARIABLE_KBPS = -1,     /* no regulation */
190     M4VIDEOEDITING_kUndefinedBitrate = 0,   /* undefined */
191     M4VIDEOEDITING_k8_KBPS = 8000,
192     M4VIDEOEDITING_k9_2_KBPS = 9200,        /* evrc only */
193     M4VIDEOEDITING_k12_2_KBPS = 12200,      /* amr only */
194     M4VIDEOEDITING_k16_KBPS = 16000,
195     M4VIDEOEDITING_k24_KBPS = 24000,
196     M4VIDEOEDITING_k32_KBPS = 32000,
197     M4VIDEOEDITING_k40_KBPS = 40000,
198     M4VIDEOEDITING_k48_KBPS = 48000,
199     M4VIDEOEDITING_k56_KBPS = 56000,
200     M4VIDEOEDITING_k64_KBPS = 64000,
201     M4VIDEOEDITING_k80_KBPS = 80000,
202     M4VIDEOEDITING_k96_KBPS = 96000,
203     M4VIDEOEDITING_k112_KBPS = 112000,
204     M4VIDEOEDITING_k128_KBPS = 128000,
205     M4VIDEOEDITING_k160_KBPS = 160000,
206     M4VIDEOEDITING_k192_KBPS = 192000,
207     M4VIDEOEDITING_k224_KBPS = 224000,
208     M4VIDEOEDITING_k256_KBPS = 256000,
209     M4VIDEOEDITING_k288_KBPS = 288000,
210     M4VIDEOEDITING_k320_KBPS = 320000,
211     M4VIDEOEDITING_k384_KBPS = 384000,
212     M4VIDEOEDITING_k512_KBPS = 512000,
213     M4VIDEOEDITING_k800_KBPS = 800000,
214 /*+ New Encoder bitrates */
215     M4VIDEOEDITING_k2_MBPS = 2000000,
216     M4VIDEOEDITING_k5_MBPS = 5000000,
217     M4VIDEOEDITING_k8_MBPS = 8000000,
218 /*- New Encoder bitrates */
219 } M4VIDEOEDITING_Bitrate;
220 
221 
222 /**
223  ******************************************************************************
224  * structure    M4VIDEOEDITING_FtypBox
225  * @brief        Information to build the 'ftyp' atom
226  ******************************************************************************
227 */
228 #define M4VIDEOEDITING_MAX_COMPATIBLE_BRANDS 10
229 typedef struct
230 {
231     /* All brand fields are actually char[4] stored in big-endian integer format */
232 
233     M4OSA_UInt32    major_brand;           /* generally '3gp4'            */
234     M4OSA_UInt32    minor_version;         /* generally '0000' or 'x.x '  */
235     M4OSA_UInt32    nbCompatibleBrands;    /* number of compatible brands */
236     M4OSA_UInt32    compatible_brands[M4VIDEOEDITING_MAX_COMPATIBLE_BRANDS]; /* array of
237                                                                          max compatible brands */
238 
239 } M4VIDEOEDITING_FtypBox;
240 
241 /* Some useful brands */
242 #define M4VIDEOEDITING_BRAND_0000  0x00000000
243 #define M4VIDEOEDITING_BRAND_3G2A  0x33673261
244 #define M4VIDEOEDITING_BRAND_3GP4  0x33677034
245 #define M4VIDEOEDITING_BRAND_3GP5  0x33677035
246 #define M4VIDEOEDITING_BRAND_3GP6  0x33677036
247 #define M4VIDEOEDITING_BRAND_AVC1  0x61766331
248 #define M4VIDEOEDITING_BRAND_EMP   0x656D7020
249 #define M4VIDEOEDITING_BRAND_ISOM  0x69736F6D
250 #define M4VIDEOEDITING_BRAND_MP41  0x6D703431
251 #define M4VIDEOEDITING_BRAND_MP42  0x6D703432
252 #define M4VIDEOEDITING_BRAND_VFJ1  0x76666A31
253 
254 /**
255  ******************************************************************************
256  * enum     M4VIDEOEDITING_ClipProperties
257  * @brief   This structure gathers the information related to an input file
258  ******************************************************************************
259 */
260 typedef struct {
261 
262     /**
263      * Common */
264     M4OSA_Bool                          bAnalysed;           /**< Flag to know if the file has
265                                                                   been already analysed or not */
266     M4OSA_UInt8                         Version[3];          /**< Version of the libraries used to
267                                                                   perform the clip analysis */
268     M4OSA_UInt32                        uiClipDuration;      /**< Clip duration (in ms) */
269     M4VIDEOEDITING_FileType             FileType;            /**< .3gp, .amr, .mp3 */
270     M4VIDEOEDITING_FtypBox              ftyp;                /**< 3gp 'ftyp' atom, major_brand =
271                                                                     0 if not used */
272 
273     /**
274      * Video */
275     M4VIDEOEDITING_VideoFormat          VideoStreamType;     /**< Format of the video stream */
276     M4OSA_UInt32                        uiClipVideoDuration; /**< Video track duration (in ms) */
277     M4OSA_UInt32                        uiVideoBitrate;      /**< Video average bitrate (in bps)*/
278     M4OSA_UInt32                        uiVideoMaxAuSize;    /**< Maximum Access Unit size of the
279                                                                   video stream */
280     M4OSA_UInt32                        uiVideoWidth;        /**< Video frame width */
281     M4OSA_UInt32                        uiVideoHeight;       /**< Video frame height */
282     M4OSA_UInt32                        uiVideoTimeScale;    /**< Video time scale */
283     M4OSA_Float                         fAverageFrameRate;   /**< Average frame rate of the video
284                                                                   stream */
285     M4OSA_Int32 uiVideoLevel;   /**< video level*/
286     M4OSA_Int32 uiVideoProfile; /**< video profile */
287 
288     M4OSA_Bool                          bMPEG4dataPartition; /**< MPEG-4 uses data partitioning */
289     M4OSA_Bool                          bMPEG4rvlc;          /**< MPEG-4 uses RVLC tool */
290     M4OSA_Bool                          bMPEG4resynchMarker; /**< MPEG-4 stream uses Resynch
291                                                                    Marker */
292 
293     /**
294      * Audio */
295     M4VIDEOEDITING_AudioFormat          AudioStreamType;     /**< Format of the audio stream */
296     M4OSA_UInt32                        uiClipAudioDuration; /**< Audio track duration (in ms) */
297     M4OSA_UInt32                        uiAudioBitrate;      /**< Audio average bitrate (in bps) */
298     M4OSA_UInt32                        uiAudioMaxAuSize;    /**< Maximum Access Unit size of the
299                                                                     audio stream */
300     M4OSA_UInt32                        uiNbChannels;        /**< Number of channels
301                                                                     (1=mono, 2=stereo) */
302     M4OSA_UInt32                        uiSamplingFrequency; /**< Sampling audio frequency
303                                                            (8000 for amr, 16000 or more for aac) */
304     M4OSA_UInt32                        uiExtendedSamplingFrequency; /**< Extended frequency for
305                                                                          AAC+, eAAC+ streams */
306     M4OSA_UInt32                        uiDecodedPcmSize;    /**< Size of the decoded PCM data */
307 
308     /**
309      * Video editing compatibility chart */
310     M4OSA_Bool      bVideoIsEditable;                        /**< Video stream can be decoded and
311                                                                  re-encoded */
312     M4OSA_Bool      bAudioIsEditable;                        /**< Audio stream can be decoded and
313                                                                   re-encoded */
314     M4OSA_Bool      bVideoIsCompatibleWithMasterClip;        /**< Video properties match reference
315                                                                   clip properties */
316     M4OSA_Bool      bAudioIsCompatibleWithMasterClip;        /**< Audio properties match reference
317                                                                    clip properties */
318 
319     /**
320      * Still Picture */
321     M4OSA_UInt32                        uiStillPicWidth;        /**< Image width */
322     M4OSA_UInt32                        uiStillPicHeight;       /**< Image height */
323     M4OSA_UInt32                        uiClipAudioVolumePercentage;
324     M4OSA_Bool                          bSetImageData;
325 
326     M4OSA_Int32     videoRotationDegrees;        /**< Video rotation degree */
327 
328 } M4VIDEOEDITING_ClipProperties;
329 
330 
331 #ifdef __cplusplus
332     }
333 #endif
334 
335 #endif /* __M4_VIDEOEDITINGCOMMON_H__ */
336 
337