• 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 #ifndef __M4VSS3GPP_EXTENDED_API_H__
18 #define __M4VSS3GPP_EXTENDED_API_H__
19 
20 /**
21  ******************************************************************************
22  * @file    M4VSS3GPP_Extended_API.h
23  * @brief    API of xVSS
24  * @note
25  ******************************************************************************
26 */
27 
28 #ifndef M4VSS_SUPPORT_EXTENDED_FEATURES
29 #error "*** the flag M4VSS_SUPPORT_EXTENDED_FEATURES should be activated in CompilerSwitches\
30              for VideoStudio ***"
31 #endif
32 
33 /**
34  ******************************************************************************
35  * prototype    M4xVSS_getTextRgbBufferFct
36  * @brief        External text to RGB buffer functions implemented by the integrator
37  *                must match this prototype.
38  * @note        The function is provided with the renderingData, the text buffer and
39  *                its size. It must build the output RGB image plane containing the text.
40  *
41  * @param   pRenderingData    (IN) The data given by the user in M4xVSS_EffectSettings
42  * @param    pTextBuffer        (IN) Text buffer given by the user in M4xVSS_EffectSettings
43  * @param    textBufferSize    (IN) Text buffer size given by the user in M4xVSS_EffectSettings
44  * @param    pOutputPlane    (IN/OUT) Output RGB565 image
45  * @return    M4NO_ERROR:            No error
46  * @return    M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL (debug only)
47  ******************************************************************************
48 */
49 typedef M4OSA_ERR (*M4xVSS_getTextRgbBufferFct)
50 (
51     M4OSA_Void *pRenderingData,
52     M4OSA_Void *pTextBuffer,
53     M4OSA_UInt32 textBufferSize,
54     M4VIFI_ImagePlane **pOutputPlane
55 );
56 
57 /**
58  ******************************************************************************
59  * struct    M4xVSS_BGMSettings
60  * @brief    This structure gathers all the information needed to add Background music to 3gp file
61  ******************************************************************************
62 */
63 typedef struct
64 {
65     M4OSA_Void                  *pFile;         /**< Input file path */
66     M4VIDEOEDITING_FileType     FileType;       /**< .3gp, .amr, .mp3     */
67     M4OSA_UInt32                uiAddCts;       /**< Time, in milliseconds, at which the added
68                                                       audio track is inserted */
69     M4OSA_UInt32                uiAddVolume;     /**< Volume, in percentage, of the added audio track */
70     M4OSA_UInt32                uiBeginLoop;    /**< Describes in milli-second the start time
71                                                      of the loop */
72     M4OSA_UInt32                uiEndLoop;      /**< Describes in milli-second the end time of the
73                                                      loop (0 means no loop) */
74     M4OSA_Bool                  b_DuckingNeedeed;
75     M4OSA_Int32                 InDucking_threshold;  /**< Threshold value at which background
76                                                             music shall duck */
77     M4OSA_Float                 lowVolume;       /**< lower the background track to this factor
78                                                  and increase the primary track to inverse of this factor */
79     M4OSA_Bool                  bLoop;
80     M4OSA_UInt32                uiSamplingFrequency;
81     M4OSA_UInt32                uiNumChannels;
82 } M4xVSS_BGMSettings;
83 
84 
85 /**
86  ******************************************************************************
87  * enum     M4VSS3GPP_VideoEffectType
88  * @brief   This enumeration defines the video effect types of the VSS3GPP
89  ******************************************************************************
90 */
91 typedef enum
92 {
93     M4VSS3GPP_kRGB888           = 0,  /**< RGB888 data type */
94     M4VSS3GPP_kRGB565           = 1  /**< RGB565 data type */
95 
96 } M4VSS3GPP_RGBType;
97 
98 /**
99  ******************************************************************************
100  * struct   M4xVSS_EffectSettings
101  * @brief   This structure defines an audio/video effect for the edition.
102  ******************************************************************************
103 */
104 typedef struct
105 {
106     /**< In percent of the cut clip duration */
107     M4OSA_UInt32               uiStartPercent;
108     /**< In percent of the ((clip duration) - (effect starttime)) */
109     M4OSA_UInt32               uiDurationPercent;
110     /**< Framing file path (GIF/PNG file), used only if VideoEffectType == framing */
111     M4OSA_Void                 *pFramingFilePath;
112     /**< Framing RGB565 buffer,  used only if VideoEffectType == framing */
113     M4VIFI_ImagePlane          *pFramingBuffer;
114     /**<RGB Buffer type,used only if VideoEffectType == framing */
115     M4VSS3GPP_RGBType          rgbType;
116     /**< The top-left X coordinate in the output picture where the added frame will be displayed.
117      Used only if VideoEffectType == framing || VideoEffectType == text */
118     M4OSA_UInt32               topleft_x;
119     /**< The top-left Y coordinate in the output picture where the added frame will be displayed.
120      Used only if VideoEffectType == framing || VideoEffectType == text */
121     M4OSA_UInt32               topleft_y;
122     /**< Does framing image is resized to output video size.
123      Used only if VideoEffectType == framing */
124     M4OSA_Bool                 bResize;
125     M4VIDEOEDITING_VideoFrameSize framingScaledSize;
126 /**< Size to which the the framing file needs to be resized */
127     /**< Text buffer. Used only if VideoEffectType == text */
128     M4OSA_Void*                pTextBuffer;
129     /**< Text buffer size. Used only if VideoEffectType == text */
130     M4OSA_UInt32               textBufferSize;
131     /**< Pointer containing specific data used by the font engine (size, color...) */
132     M4OSA_Void*                pRenderingData;
133     /**< Text plane width. Used only if VideoEffectType == text */
134     M4OSA_UInt32               uiTextBufferWidth;
135     /**< Text plane height. Used only if VideoEffectType == text */
136     M4OSA_UInt32               uiTextBufferHeight;
137     /**< Processing rate of the effect added when using the Fifties effect */
138     M4OSA_UInt32               uiFiftiesOutFrameRate;
139     /**< RGB16 input color of the effect added when using the rgb16 color effect */
140     M4OSA_UInt16               uiRgb16InputColor;
141 
142     M4OSA_UInt8                uialphaBlendingStart;       /*Start percentage of Alpha blending*/
143     M4OSA_UInt8                uialphaBlendingMiddle;      /*Middle percentage of Alpha blending*/
144     M4OSA_UInt8                uialphaBlendingEnd;         /*End percentage of Alpha blending*/
145     M4OSA_UInt8                uialphaBlendingFadeInTime;  /*Duration, in percentage of
146                                                             effect duration, of the FadeIn phase*/
147     M4OSA_UInt8                uialphaBlendingFadeOutTime;   /*Duration, in percentage of effect
148                                                                 duration, of the FadeOut phase*/
149     M4OSA_UInt32                width;   /*width of the ARGB8888 clip .
150                                             Used only if video effect is framming */
151     M4OSA_UInt32                height; /*height of the ARGB8888 clip .
152                                             Used only if video effect is framming */
153 } M4xVSS_EffectSettings;
154 
155 /**
156  ******************************************************************************
157  * struct    M4xVSS_AlphaMagicSettings
158  * @brief    This structure defines the alpha magic transition settings
159  ******************************************************************************
160 */
161 typedef struct
162 {
163     M4OSA_Void*            pAlphaFilePath;        /**< Alpha file path (JPG file)  */
164     M4OSA_Int32            blendingPercent;    /**< Blending Percentage between 0 and 100 */
165     M4OSA_Bool             isreverse;            /**< direct effect or reverse */
166     /*To support ARGB8888 : get the width and height */
167     M4OSA_UInt32            width;
168     M4OSA_UInt32            height;
169 } M4xVSS_AlphaMagicSettings;
170 
171 /**
172  ******************************************************************************
173  * enum        M4xVSS_SlideTransition_Direction
174  * @brief    Defines directions for the slide transition
175  ******************************************************************************
176 */
177 
178 typedef enum {
179     M4xVSS_SlideTransition_RightOutLeftIn,
180     M4xVSS_SlideTransition_LeftOutRightIn,
181     M4xVSS_SlideTransition_TopOutBottomIn,
182     M4xVSS_SlideTransition_BottomOutTopIn
183 } M4xVSS_SlideTransition_Direction;
184 
185 /**
186  ******************************************************************************
187  * struct    M4xVSS_AlphaMagicSettings
188  * @brief    This structure defines the slide transition settings
189  ******************************************************************************
190 */
191 
192 typedef struct
193 {
194     M4xVSS_SlideTransition_Direction direction; /* direction of the slide */
195 } M4xVSS_SlideTransitionSettings;
196 
197 /**
198  ******************************************************************************
199  * struct   M4xVSS_TransitionSettings
200  * @brief   This structure defines additional transition settings specific to
201  *            xVSS, which are appended to the VSS3GPP transition settings
202  *            structure.
203  ******************************************************************************
204 */
205 typedef struct
206 {
207     /* Anything xVSS-specific, but common to all transitions, would go here,
208     before the union. */
209     union {
210         /**< AlphaMagic settings, used only if VideoTransitionType ==
211             M4xVSS_kVideoTransitionType_AlphaMagic */
212         M4xVSS_AlphaMagicSettings        *pAlphaMagicSettings;
213         /* only in case of slide transition. */
214         M4xVSS_SlideTransitionSettings    *pSlideTransitionSettings;
215     } transitionSpecific;
216 } M4xVSS_TransitionSettings;
217 
218 
219 /**
220  ******************************************************************************
221  * enum        M4xVSS_MediaRendering
222  * @brief    This enum defines different media rendering using exif orientation
223  ******************************************************************************
224 */
225 typedef enum
226 {
227     M4xVSS_kResizing = 0,        /*The picture is resized, the aspect ratio can be different
228                                     from the original one. All of the picture is rendered*/
229     M4xVSS_kCropping,            /*The picture is cropped, the aspect ratio is the same as
230                                     the original one. The picture is not rendered entirely*/
231     M4xVSS_kBlackBorders        /*Black borders are rendered in order to keep the original
232                                     aspect ratio. All the picture is rendered*/
233 
234 } M4xVSS_MediaRendering;
235 
236 
237 /**
238  ******************************************************************************
239  * struct   M4xVSS_ClipSettings
240  * @brief   This structure defines an input clip for the edition.
241  * @note    It also contains the settings for the cut and begin/end effects applied to the clip.
242  ******************************************************************************
243 */
244 typedef struct
245 {
246     M4OSA_UInt32                    uiBeginCutPercent;    /**< Begin cut time, in percent of clip
247                                                                 duration (only for 3GPP clip !) */
248     M4OSA_UInt32                    uiEndCutPercent;    /**< End cut time, in percent of clip
249                                                              duration (only for 3GPP clip !) */
250     M4OSA_UInt32                    uiDuration;            /**< Duration of the clip, if different
251                                                                 from 0, has priority on
252                                                                 uiEndCutTime or uiEndCutPercent */
253     M4OSA_Bool                        isPanZoom;            /**< RC: Boolean used to know if the
254                                                                  pan and zoom mode is enabled */
255     M4OSA_UInt16                    PanZoomXa;            /**< RC */
256     M4OSA_UInt16                    PanZoomTopleftXa;    /**< RC */
257     M4OSA_UInt16                    PanZoomTopleftYa;    /**< RC */
258     M4OSA_UInt16                    PanZoomXb;            /**< RC */
259     M4OSA_UInt16                    PanZoomTopleftXb;    /**< RC */
260     M4OSA_UInt16                    PanZoomTopleftYb;    /**< RC */
261     M4xVSS_MediaRendering            MediaRendering;        /**< FB only used with JPEG: to crop,
262                                                                  resize, or render black borders*/
263 
264 } M4xVSS_ClipSettings;
265 
266 /**
267  ******************************************************************************
268  * struct   M4xVSS_EditSettings
269  * @brief   This structure gathers all the information needed to define a complete
270  *          edition operation
271  ******************************************************************************
272 */
273 typedef struct
274 {
275     /**< Output video size */
276     M4VIDEOEDITING_VideoFrameSize             outputVideoSize;
277     /**< Output video format (MPEG4 / H263) */
278     M4VIDEOEDITING_VideoFormat                outputVideoFormat;
279     /**< Output audio format (AAC, AMRNB ...) */
280     M4VIDEOEDITING_AudioFormat                outputAudioFormat;
281     /**< Output audio sampling freq (8000Hz,...) */
282     M4VIDEOEDITING_AudioSamplingFrequency     outputAudioSamplFreq;
283     /**< Maximum output file size in BYTES (if set to 0, no limit */
284     M4OSA_UInt32                              outputFileSize;
285     /**< Is output audio must be Mono ? Valid only for AAC */
286     M4OSA_Bool                                bAudioMono;
287     /**< Output video bitrate*/
288     M4OSA_UInt32                              outputVideoBitrate;
289     /**< Output audio bitrate*/
290     M4OSA_UInt32                              outputAudioBitrate;
291     /**< Background music track settings */
292     M4xVSS_BGMSettings                        *pBGMtrack;
293     /**< Function pointer on text rendering engine, if not used, must be set to NULL !! */
294     M4xVSS_getTextRgbBufferFct                pTextRenderingFct;
295     /** output video profile and level*/
296     M4OSA_Int32   outputVideoProfile;
297     M4OSA_Int32   outputVideoLevel;
298 
299 } M4xVSS_EditSettings;
300 
301 #endif /* __M4VSS3GPP_EXTENDED_API_H__ */
302 
303