• 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 __M4XVSS_API_H__
18 #define __M4XVSS_API_H__
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 /**
24  ******************************************************************************
25  * @file    M4xVSS_API.h
26  * @brief    API of Video Studio 2.1
27  * @note
28  ******************************************************************************
29 */
30 
31 #define M4VSS_SUPPORT_EXTENDED_FEATURES
32 
33 #include "M4VSS3GPP_API.h"
34 #include "M4VSS3GPP_Extended_API.h"
35 #include "M4DECODER_Common.h"
36 /* Errors codes */
37 
38 /**
39  * End of analyzing => the user can call M4xVSS_PreviewStart or M4xVSS_SaveStart */
40 #define M4VSS3GPP_WAR_ANALYZING_DONE                  M4OSA_ERR_CREATE( M4_WAR, M4VS, 0x0001)
41 
42 /**
43  * End of preview generating => the user can launch vps to see preview. Once preview is over,
44    the user must call M4xVSS_PreviewStop() to be able to save edited file, or to call another
45    M4xVSS_SendCommand() */
46 #define M4VSS3GPP_WAR_PREVIEW_READY                   M4OSA_ERR_CREATE( M4_WAR, M4VS, 0x0002)
47 
48 /**
49  * End of saved file generation => the user must call M4xVSS_SaveStop() */
50 #define M4VSS3GPP_WAR_SAVING_DONE                     M4OSA_ERR_CREATE( M4_WAR, M4VS, 0x0003)
51 
52 /**
53  * Transcoding is necessary to go further -> if the user does not want to continue,
54   he must call M4xVSS_sendCommand() */
55 #define M4VSS3GPP_WAR_TRANSCODING_NECESSARY           M4OSA_ERR_CREATE( M4_WAR, M4VS, 0x0004)
56 
57 /**
58  * In case of MMS, the output file size won't be reached */
59 #define M4VSS3GPP_WAR_OUTPUTFILESIZE_EXCEED           M4OSA_ERR_CREATE( M4_WAR, M4VS, 0x0005)
60 
61 /**
62  * JPG input file dimensions are too high */
63 #define M4VSS3GPP_ERR_JPG_TOO_BIG                     M4OSA_ERR_CREATE( M4_ERR, M4VS, 0x0001)
64 
65 /**
66  * UTF Conversion, warning on the size of the temporary converted buffer*/
67 #define M4xVSSWAR_BUFFER_OUT_TOO_SMALL                M4OSA_ERR_CREATE( M4_WAR, M4VS, 0x0006)
68 
69 /**
70  * SWIKAR :Error whan NO_MORE_SPACE*/
71 #define M4xVSSERR_NO_MORE_SPACE                       M4OSA_ERR_CREATE( M4_ERR, M4VS, 0x0007)
72 
73 /**
74  ******************************************************************************
75  * enum     M4xVSS_VideoEffectType
76  * @brief   This enumeration defines the video effect types of the xVSS
77  ******************************************************************************
78 */
79 typedef enum
80 {
81     M4xVSS_kVideoEffectType_BlackAndWhite = M4VSS3GPP_kVideoEffectType_External+1, /* 257 */
82     M4xVSS_kVideoEffectType_Pink,                                                  /* 258 */
83     M4xVSS_kVideoEffectType_Green,                                                 /* 259 */
84     M4xVSS_kVideoEffectType_Sepia,                                                 /* 260 */
85     M4xVSS_kVideoEffectType_Negative,                                              /* 261 */
86     M4xVSS_kVideoEffectType_Framing,                                               /* 262 */
87     M4xVSS_kVideoEffectType_Text, /* Text overlay */                               /* 263 */
88     M4xVSS_kVideoEffectType_ZoomIn,                                                /* 264 */
89     M4xVSS_kVideoEffectType_ZoomOut,                                               /* 265 */
90     M4xVSS_kVideoEffectType_Fifties,                                                /*266 */
91     M4xVSS_kVideoEffectType_ColorRGB16,                                                /*267 */
92     M4xVSS_kVideoEffectType_Gradient                                                /*268*/
93 } M4xVSS_VideoEffectType;
94 
95 /**
96  ******************************************************************************
97  * enum     M4xVSS_VideoTransitionType
98  * @brief   This enumeration defines the video effect that can be applied during a transition.
99  ******************************************************************************
100 */
101 typedef enum
102 {
103     M4xVSS_kVideoTransitionType_External = M4VSS3GPP_kVideoTransitionType_External, /*256*/
104     M4xVSS_kVideoTransitionType_AlphaMagic,
105     M4xVSS_kVideoTransitionType_SlideTransition,
106     M4xVSS_kVideoTransitionType_FadeBlack
107 
108 } M4xVSS_VideoTransitionType;
109 
110 /**
111  ******************************************************************************
112  * struct    M4xVSS_PreviewSettings
113  * @brief    This structure gathers all the information needed by the VPS for preview
114  ******************************************************************************
115 */
116 typedef struct
117 {
118     M4OSA_Void                                *p3gpPreviewFile;
119     M4OSA_Void                                *pPCMFile;
120     M4VIDEOEDITING_AudioSamplingFrequency    outPCM_ASF;
121     M4OSA_Bool                                bAudioMono;
122     M4VSS3GPP_EffectSettings                   *Effects;
123     M4OSA_UInt8                                nbEffects;
124 
125 } M4xVSS_PreviewSettings;
126 
127 /**
128  ******************************************************************************
129  * prototype    M4xVSS_toUTF8Fct
130  * @brief        This prototype defines the function implemented by the integrator
131  *                to convert a string encoded in any format to an UTF8 string.
132  * @note
133  *
134  * @param    pBufferIn        IN            Buffer containing the string to convert to UTF8
135  * @param    pBufferOut        IN            Buffer containing the UTF8 converted string
136  * @param    bufferOutSize    IN/OUT    IN:     Size of the given output buffer
137  *                                    OUT: Size of the converted buffer
138  *
139  ******************************************************************************
140 */
141 typedef M4OSA_ERR (*M4xVSS_toUTF8Fct)
142 (
143     M4OSA_Void            *pBufferIn,
144     M4OSA_UInt8            *pBufferOut,
145     M4OSA_UInt32        *bufferOutSize
146 );
147 
148 
149 /**
150  ******************************************************************************
151  * prototype    M4xVSS_fromUTF8Fct
152  * @brief        This prototype defines the function implemented by the integrator
153  *                to convert an UTF8 string to a string encoded in any format.
154  * @note
155  *
156  * @param    pBufferIn        IN            Buffer containing the UTF8 string to convert
157  *                                        to the desired format.
158  * @param    pBufferOut        IN            Buffer containing the converted string
159  * @param    bufferOutSize    IN/OUT    IN:     Size of the given output buffer
160  *                                    OUT: Size of the converted buffer
161  *
162  ******************************************************************************
163 */
164 typedef M4OSA_ERR (*M4xVSS_fromUTF8Fct)
165 (
166     M4OSA_UInt8            *pBufferIn,
167     M4OSA_Void            *pBufferOut,
168     M4OSA_UInt32        *bufferOutSize
169 );
170 
171 
172 
173 
174 /**
175  ******************************************************************************
176  * struct    M4xVSS_InitParams
177  * @brief    This structure defines parameters for xVSS.
178  * @note
179  ******************************************************************************
180 */
181 typedef struct
182 {
183     M4OSA_FileReadPointer*            pFileReadPtr;
184     M4OSA_FileWriterPointer*        pFileWritePtr;
185     M4OSA_Void*                        pTempPath;
186     /*Function pointer on an external text conversion function */
187     M4xVSS_toUTF8Fct                pConvToUTF8Fct;
188     /*Function pointer on an external text conversion function */
189     M4xVSS_fromUTF8Fct                pConvFromUTF8Fct;
190 
191 
192 
193 } M4xVSS_InitParams;
194 
195 /**
196  ******************************************************************************
197  * prototype    M4xVSS_Init
198  * @brief        This function initializes the xVSS
199  * @note        Initializes the xVSS edit operation (allocates an execution context).
200  *
201  * @param    pContext            (OUT) Pointer on the xVSS edit context to allocate
202  * @param    params                (IN) Parameters mandatory for xVSS
203  * @return    M4NO_ERROR:            No error
204  * @return    M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL
205  * @return    M4ERR_ALLOC:        Memory allocation has failed
206  ******************************************************************************
207 */
208 M4OSA_ERR M4xVSS_Init(M4OSA_Context* pContext, M4xVSS_InitParams* params);
209 
210 /**
211  ******************************************************************************
212  * prototype    M4xVSS_ReduceTranscode
213  * @brief        This function changes the given editing structure in order to
214  *                minimize the transcoding time.
215  * @note        The xVSS analyses this structure, and if needed, changes the
216  *                output parameters (Video codec, video size, audio codec,
217  *                audio nb of channels) to minimize the transcoding time.
218  *
219  * @param    pContext            (OUT) Pointer on the xVSS edit context to allocate
220  * @param    pSettings            (IN) Edition settings (allocated by the user)
221  * @return    M4NO_ERROR:            No error
222  * @return    M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL
223  * @return    M4ERR_ALLOC:        Memory allocation has failed
224  * @return    M4ERR_STATE:        This function cannot not be called at this time
225  ******************************************************************************
226 */
227 M4OSA_ERR M4xVSS_ReduceTranscode(M4OSA_Context pContext, M4VSS3GPP_EditSettings* pSettings);
228 
229 /**
230  ******************************************************************************
231  * prototype    M4xVSS_SendCommand
232  * @brief        This function gives to the xVSS an editing structure
233  * @note        The xVSS analyses this structure, and prepare edition
234  *                This function must be called after M4xVSS_Init, after
235  *                M4xVSS_CloseCommand, or after M4xVSS_PreviewStop.
236  *                After this function, the user must call M4xVSS_Step until
237  *                it returns another error than M4NO_ERROR.
238  *
239  * @param    pContext            (IN) Pointer on the xVSS edit context
240  * @param    pSettings            (IN) Edition settings (allocated by the user)
241  * @return    M4NO_ERROR:            No error
242  * @return    M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL
243  * @return    M4ERR_ALLOC:        Memory allocation has failed
244  * @return    M4ERR_STATE:        This function cannot not be called at this time
245  ******************************************************************************
246 */
247 M4OSA_ERR M4xVSS_SendCommand(M4OSA_Context pContext, M4VSS3GPP_EditSettings* pSettings);
248 
249 /**
250  ******************************************************************************
251  * prototype    M4xVSS_PreviewStart
252  * @brief        This function prepare the preview
253  * @note        The xVSS create 3GP preview file and fill pPreviewSettings with
254  *                preview parameters.
255  *                This function must be called once M4xVSS_Step has returned
256  *                M4VSS3GPP_WAR_ANALYZING_DONE
257  *                After this function, the user must call M4xVSS_Step until
258  *                it returns another error than M4NO_ERROR.
259  *
260  * @param    pContext            (IN) Pointer on the xVSS edit context
261  * @param    pPreviewSettings    (IN) Preview settings (allocated by the user)
262  * @return    M4NO_ERROR:            No error
263  * @return    M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL
264  * @return    M4ERR_ALLOC:        Memory allocation has failed
265  * @return    M4ERR_STATE:        This function cannot not be called at this time
266  ******************************************************************************
267 */
268 M4OSA_ERR M4xVSS_PreviewStart(M4OSA_Context pContext, M4xVSS_PreviewSettings* pPreviewSettings);
269 
270 /**
271  ******************************************************************************
272  * prototype    M4xVSS_PreviewStop
273  * @brief        This function unallocate preview ressources and change xVSS
274  *                internal state to allow saving or resend an editing command
275  * @note        This function must be called once M4xVSS_Step has returned
276  *                M4VSS3GPP_WAR_PREVIEW_READY
277  *
278  * @param    pContext            (IN) Pointer on the xVSS edit context
279  * @return    M4NO_ERROR:            No error
280  * @return    M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL
281  * @return    M4ERR_STATE:        This function cannot not be called at this time
282  ******************************************************************************
283 */
284 M4OSA_ERR M4xVSS_PreviewStop(M4OSA_Context pContext);
285 
286 /**
287  ******************************************************************************
288  * prototype    M4xVSS_SaveStart
289  * @brief        This function prepare the save
290  * @note        The xVSS create 3GP edited final file
291  *                This function must be called once M4xVSS_Step has returned
292  *                M4VSS3GPP_WAR_ANALYZING_DONE
293  *                After this function, the user must call M4xVSS_Step until
294  *                it returns another error than M4NO_ERROR.
295  *
296  * @param    pContext            (IN) Pointer on the xVSS edit context
297  * @param    pFilePath            (IN) If the user wants to provide a different
298  *                                output filename, else can be NULL (allocated by the user)
299  * @return    M4NO_ERROR:            No error
300  * @return    M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL
301  * @return    M4ERR_ALLOC:        Memory allocation has failed
302  * @return    M4ERR_STATE:        This function cannot not be called at this time
303  ******************************************************************************
304 */
305 M4OSA_ERR M4xVSS_SaveStart(M4OSA_Context pContext, M4OSA_Void* pFilePath,
306                             M4OSA_UInt32 filePathSize);
307 
308 /**
309  ******************************************************************************
310  * prototype    M4xVSS_SaveStop
311  * @brief        This function unallocate save ressources and change xVSS
312  *                internal state.
313  * @note        This function must be called once M4xVSS_Step has returned
314  *                M4VSS3GPP_WAR_SAVING_DONE
315  *
316  * @param    pContext            (IN) Pointer on the xVSS edit context
317  * @return    M4NO_ERROR:            No error
318  * @return    M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL
319  * @return    M4ERR_STATE:        This function cannot not be called at this time
320  ******************************************************************************
321 */
322 M4OSA_ERR M4xVSS_SaveStop(M4OSA_Context pContext);
323 
324 /**
325  ******************************************************************************
326  * prototype    M4xVSS_Step
327  * @brief        This function executes differents tasks, depending of xVSS
328  *                internal state.
329  * @note        This function:
330  *                    - analyses editing structure if called after M4xVSS_SendCommand
331  *                    - generates preview file if called after M4xVSS_PreviewStart
332  *                    - generates final edited file if called after M4xVSS_SaveStart
333  *
334  * @param    pContext                        (IN) Pointer on the xVSS edit context
335  * @param    pContext                        (OUT) Progress indication from 0 to 100
336  * @return    M4NO_ERROR:                        No error, the user must call M4xVSS_Step again
337  * @return    M4ERR_PARAMETER:                At least one parameter is M4OSA_NULL
338  * @return    M4ERR_STATE:                    This function cannot not be called at this time
339  * @return    M4VSS3GPP_WAR_PREVIEW_READY:    Preview file is generated
340  * @return    M4VSS3GPP_WAR_SAVING_DONE:        Final edited file is generated
341  * @return    M4VSS3GPP_WAR_ANALYZING_DONE:    Analyse is done
342  ******************************************************************************
343 */
344 M4OSA_ERR M4xVSS_Step(M4OSA_Context pContext, M4OSA_UInt8 *pProgress);
345 
346 /**
347  ******************************************************************************
348  * prototype    M4xVSS_CloseCommand
349  * @brief        This function deletes current editing profile, unallocate
350  *                ressources and change xVSS internal state.
351  * @note        After this function, the user can call a new M4xVSS_SendCommand
352  *
353  * @param    pContext            (IN) Pointer on the xVSS edit context
354  * @return    M4NO_ERROR:            No error
355  * @return    M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL
356  * @return    M4ERR_STATE:        This function cannot not be called at this time
357  ******************************************************************************
358 */
359 M4OSA_ERR M4xVSS_CloseCommand(M4OSA_Context pContext);
360 
361 /**
362  ******************************************************************************
363  * prototype    M4xVSS_CleanUp
364  * @brief        This function deletes all xVSS ressources
365  * @note        This function must be called after M4xVSS_CloseCommand.
366  *
367  * @param    pContext            (IN) Pointer on the xVSS edit context
368  * @return    M4NO_ERROR:            No error
369  * @return    M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL
370  * @return    M4ERR_STATE:        This function cannot not be called at this time
371  ******************************************************************************
372 */
373 M4OSA_ERR M4xVSS_CleanUp(M4OSA_Context pContext);
374 
375 /**
376  ******************************************************************************
377  * prototype    M4xVSS_GetVersion(M4_VersionInfo *pVersion)
378  * @brief        This function get the version of the Video Studio 2.1
379  *
380  * @param    pVersion            (IN) Pointer on the version info struct
381  * @return    M4NO_ERROR:            No error
382  * @return    M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL
383  ******************************************************************************
384 */
385 M4OSA_ERR M4xVSS_GetVersion(M4_VersionInfo *pVersion);
386 
387 /**
388  ******************************************************************************
389  * prototype    M4VSS3GPP_externalVideoEffectColor(M4OSA_Void *pFunctionContext,
390  *                                                    M4VIFI_ImagePlane *PlaneIn,
391  *                                                    M4VIFI_ImagePlane *PlaneOut,
392  *                                                    M4VSS3GPP_ExternalProgress *pProgress,
393  *                                                    M4OSA_UInt32 uiEffectKind)
394  *
395  * @brief    This function apply a color effect on an input YUV420 planar frame
396  * @note    The prototype of this effect function is exposed because it needs to
397  *            called by the VPS during the preview
398  * @param    pFunctionContext(IN) Contains which color to apply (not very clean ...)
399  * @param    PlaneIn            (IN) Input YUV420 planar
400  * @param    PlaneOut        (IN/OUT) Output YUV420 planar
401  * @param    pProgress        (IN/OUT) Progress indication (0-100)
402  * @param    uiEffectKind    (IN) Unused
403  *
404  * @return    M4VIFI_OK:    No error
405  ******************************************************************************
406 */
407 M4OSA_ERR M4VSS3GPP_externalVideoEffectColor
408 (
409     M4OSA_Void *pFunctionContext,
410     M4VIFI_ImagePlane *pInputPlanes,
411     M4VIFI_ImagePlane *pOutputPlanes,
412     M4VSS3GPP_ExternalProgress *pProgress,
413     M4OSA_UInt32 uiEffectKind
414 );
415 
416 /**
417  ******************************************************************************
418  * prototype    M4VSS3GPP_externalVideoEffectFraming(M4OSA_Void *pFunctionContext,
419  *                                                    M4VIFI_ImagePlane *PlaneIn,
420  *                                                    M4VIFI_ImagePlane *PlaneOut,
421  *                                                    M4VSS3GPP_ExternalProgress *pProgress,
422  *                                                    M4OSA_UInt32 uiEffectKind)
423  *
424  * @brief    This function add a fixed or animated image on an input YUV420 planar frame
425  * @note    The prototype of this effect function is exposed because it needs to
426  *            called by the VPS during the preview
427  * @param    pFunctionContext(IN) Contains which color to apply (not very clean ...)
428  * @param    PlaneIn            (IN) Input YUV420 planar
429  * @param    PlaneOut        (IN/OUT) Output YUV420 planar
430  * @param    pProgress        (IN/OUT) Progress indication (0-100)
431  * @param    uiEffectKind    (IN) Unused
432  *
433  * @return    M4VIFI_OK:    No error
434  ******************************************************************************
435 */
436 M4OSA_ERR M4VSS3GPP_externalVideoEffectFraming
437 (
438     M4OSA_Void *pFunctionContext,
439     M4VIFI_ImagePlane *pInputPlanes,
440     M4VIFI_ImagePlane *pOutputPlanes,
441     M4VSS3GPP_ExternalProgress *pProgress,
442     M4OSA_UInt32 uiEffectKind
443 );
444 
445 /**
446  ******************************************************************************
447  * prototype    M4VSS3GPP_externalVideoEffectFifties(M4OSA_Void *pFunctionContext,
448  *                                                    M4VIFI_ImagePlane *PlaneIn,
449  *                                                    M4VIFI_ImagePlane *PlaneOut,
450  *                                                    M4VSS3GPP_ExternalProgress *pProgress,
451  *                                                    M4OSA_UInt32 uiEffectKind)
452  *
453  * @brief    This function make a video look as if it was taken in the fifties
454  * @note
455  * @param    pUserData       (IN) Context
456  * @param    pPlaneIn        (IN) Input YUV420 planar
457  * @param    pPlaneOut        (IN/OUT) Output YUV420 planar
458  * @param    pProgress        (IN/OUT) Progress indication (0-100)
459  * @param    uiEffectKind    (IN) Unused
460  *
461  * @return    M4VIFI_OK:            No error
462  * @return  M4ERR_PARAMETER:    pFiftiesData, pPlaneOut or pProgress are NULL (DEBUG only)
463  ******************************************************************************
464 */
465 M4OSA_ERR M4VSS3GPP_externalVideoEffectFifties
466 (
467     M4OSA_Void *pUserData,
468     M4VIFI_ImagePlane *pInputPlanes,
469     M4VIFI_ImagePlane *pPlaneOut,
470     M4VSS3GPP_ExternalProgress *pProgress,
471     M4OSA_UInt32 uiEffectKind
472 );
473 
474 
475 /**
476  ******************************************************************************
477  * prototype    M4VSS3GPP_externalVideoEffectZoom(M4OSA_Void *pFunctionContext,
478  *                                                    M4VIFI_ImagePlane *PlaneIn,
479  *                                                    M4VIFI_ImagePlane *PlaneOut,
480  *                                                    M4VSS3GPP_ExternalProgress *pProgress,
481  *                                                    M4OSA_UInt32 uiEffectKind)
482  *
483  * @brief    This function add a fixed or animated image on an input YUV420 planar frame
484  * @note    The prototype of this effect function is exposed because it needs to
485  *            called by the VPS during the preview
486  * @param    pFunctionContext(IN) Contains which zoom to apply (In/Out)
487  * @param    PlaneIn            (IN) Input YUV420 planar
488  * @param    PlaneOut        (IN/OUT) Output YUV420 planar
489  * @param    pProgress        (IN/OUT) Progress indication (0-100)
490  * @param    uiEffectKind    (IN) Unused
491  *
492  * @return    M4VIFI_OK:    No error
493  ******************************************************************************
494 */
495 M4OSA_ERR M4VSS3GPP_externalVideoEffectZoom
496 (
497     M4OSA_Void *pFunctionContext,
498     M4VIFI_ImagePlane *pInputPlanes,
499     M4VIFI_ImagePlane *pOutputPlanes,
500     M4VSS3GPP_ExternalProgress *pProgress,
501     M4OSA_UInt32 uiEffectKind
502 );
503 
504 /**
505  ******************************************************************************
506  * M4OSA_ERR M4xVSS_CreateClipSettings()
507  * @brief    Allows filling a clip settings structure with default values
508  *
509  * @note    WARNING: pClipSettings->Effects[ ] will be allocated in this function.
510  *                   pClipSettings->pFile      will be allocated in this function.
511  *
512  * @param    pClipSettings        (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure
513  * @param   pFile               (IN) Clip file name
514  * @param   filePathSize        (IN) Size of the clip path (needed for the UTF16 conversion)
515  * @param    nbEffects           (IN) Nb of effect settings to allocate
516  * @return    M4NO_ERROR:            No error
517  * @return    M4ERR_PARAMETER:    pClipSettings is M4OSA_NULL (debug only)
518  ******************************************************************************
519 */
520 M4OSA_ERR M4xVSS_CreateClipSettings(M4VSS3GPP_ClipSettings *pClipSettings, M4OSA_Void* pFile,
521                                     M4OSA_UInt32 filePathSize, M4OSA_UInt8 nbEffects);
522 
523 /**
524  ******************************************************************************
525  * M4OSA_ERR M4xVSS_DuplicateClipSettings()
526  * @brief    Duplicates a clip settings structure, performing allocations if required
527  *
528  * @param    pClipSettingsDest    (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure
529  * @param    pClipSettingsOrig    (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure
530  * @param   bCopyEffects        (IN) Flag to know if we have to duplicate effects
531  * @return    M4NO_ERROR:            No error
532  * @return    M4ERR_PARAMETER:    pClipSettings is M4OSA_NULL (debug only)
533  ******************************************************************************
534 */
535 M4OSA_ERR M4xVSS_DuplicateClipSettings(M4VSS3GPP_ClipSettings *pClipSettingsDest,
536                                          M4VSS3GPP_ClipSettings *pClipSettingsOrig,
537                                          M4OSA_Bool bCopyEffects);
538 
539 /**
540  ******************************************************************************
541  * M4OSA_ERR M4xVSS_FreeClipSettings()
542  * @brief    Free the pointers allocated in the ClipSetting structure (pFile, Effects).
543  *
544  * @param    pClipSettings        (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure
545  * @return    M4NO_ERROR:            No error
546  * @return    M4ERR_PARAMETER:    pClipSettings is M4OSA_NULL (debug only)
547  ******************************************************************************
548 */
549 M4OSA_ERR M4xVSS_FreeClipSettings(M4VSS3GPP_ClipSettings *pClipSettings);
550 
551 /**
552  ******************************************************************************
553  * prototype    M4OSA_ERR M4xVSS_getMCSContext(M4OSA_Context pContext, M4OSA_Context* mcsContext)
554  * @brief        This function returns the MCS context within the xVSS internal context
555  * @note        This function must be called only after VSS state has moved to analyzing state
556  *                or beyond
557  *
558  * @param    pContext            (IN) Pointer on the xVSS edit context
559  * @param    mcsContext        (OUT) Pointer to pointer of mcs context to return
560  * @return    M4NO_ERROR:        No error
561  * @return    M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL
562  * @return    M4ERR_STATE:        This function cannot not be called at this time
563  ******************************************************************************
564 */
565 M4OSA_ERR M4xVSS_getMCSContext(M4OSA_Context pContext, M4OSA_Context* mcsContext);
566 
567 /**
568  ******************************************************************************
569  * prototype    M4OSA_ERR M4xVSS_getVSS3GPPContext(M4OSA_Context pContext,
570  *                                                     M4OSA_Context* mcsContext)
571  * @brief        This function returns the VSS3GPP context within the xVSS internal context
572  * @note        This function must be called only after VSS state has moved to Generating
573  *                preview or beyond
574  *
575  * @param    pContext            (IN) Pointer on the xVSS edit context
576  * @param    vss3gppContext        (OUT) Pointer to pointer of vss3gpp context to return
577  * @return    M4NO_ERROR:        No error
578  * @return    M4ERR_PARAMETER:    At least one parameter is M4OSA_NULL
579  * @return    M4ERR_STATE:        This function cannot not be called at this time
580  ******************************************************************************
581 */
582 M4OSA_ERR M4xVSS_getVSS3GPPContext(M4OSA_Context pContext, M4OSA_Context* vss3gppContext);
583 
584 // Get supported video decoders and capabilities.
585 M4OSA_ERR M4xVSS_getVideoDecoderCapabilities(M4DECODER_VideoDecoders **decoders);
586 #ifdef __cplusplus
587 }
588 #endif /* __cplusplus */
589 #endif /* __M4XVSS_API_H__ */
590 
591