/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __M4VSS3GPP_EXTENDED_API_H__ #define __M4VSS3GPP_EXTENDED_API_H__ /** ****************************************************************************** * @file M4VSS3GPP_Extended_API.h * @brief API of xVSS * @note ****************************************************************************** */ #ifndef M4VSS_SUPPORT_EXTENDED_FEATURES #error "*** the flag M4VSS_SUPPORT_EXTENDED_FEATURES should be activated in CompilerSwitches\ for VideoStudio ***" #endif /** ****************************************************************************** * prototype M4xVSS_getTextRgbBufferFct * @brief External text to RGB buffer functions implemented by the integrator * must match this prototype. * @note The function is provided with the renderingData, the text buffer and * its size. It must build the output RGB image plane containing the text. * * @param pRenderingData (IN) The data given by the user in M4xVSS_EffectSettings * @param pTextBuffer (IN) Text buffer given by the user in M4xVSS_EffectSettings * @param textBufferSize (IN) Text buffer size given by the user in M4xVSS_EffectSettings * @param pOutputPlane (IN/OUT) Output RGB565 image * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL (debug only) ****************************************************************************** */ typedef M4OSA_ERR (*M4xVSS_getTextRgbBufferFct) ( M4OSA_Void *pRenderingData, M4OSA_Void *pTextBuffer, M4OSA_UInt32 textBufferSize, M4VIFI_ImagePlane **pOutputPlane ); /** ****************************************************************************** * struct M4xVSS_BGMSettings * @brief This structure gathers all the information needed to add Background music to 3gp file ****************************************************************************** */ typedef struct { M4OSA_Void *pFile; /**< Input file path */ M4VIDEOEDITING_FileType FileType; /**< .3gp, .amr, .mp3 */ M4OSA_UInt32 uiAddCts; /**< Time, in milliseconds, at which the added audio track is inserted */ M4OSA_UInt32 uiAddVolume; /**< Volume, in percentage, of the added audio track */ M4OSA_UInt32 uiBeginLoop; /**< Describes in milli-second the start time of the loop */ M4OSA_UInt32 uiEndLoop; /**< Describes in milli-second the end time of the loop (0 means no loop) */ M4OSA_Bool b_DuckingNeedeed; M4OSA_Int32 InDucking_threshold; /**< Threshold value at which background music shall duck */ M4OSA_Float lowVolume; /**< lower the background track to this factor and increase the primary track to inverse of this factor */ M4OSA_Bool bLoop; M4OSA_UInt32 uiSamplingFrequency; M4OSA_UInt32 uiNumChannels; } M4xVSS_BGMSettings; /** ****************************************************************************** * enum M4VSS3GPP_VideoEffectType * @brief This enumeration defines the video effect types of the VSS3GPP ****************************************************************************** */ typedef enum { M4VSS3GPP_kRGB888 = 0, /**< RGB888 data type */ M4VSS3GPP_kRGB565 = 1 /**< RGB565 data type */ } M4VSS3GPP_RGBType; /** ****************************************************************************** * struct M4xVSS_EffectSettings * @brief This structure defines an audio/video effect for the edition. ****************************************************************************** */ typedef struct { /**< In percent of the cut clip duration */ M4OSA_UInt32 uiStartPercent; /**< In percent of the ((clip duration) - (effect starttime)) */ M4OSA_UInt32 uiDurationPercent; /**< Framing file path (GIF/PNG file), used only if VideoEffectType == framing */ M4OSA_Void *pFramingFilePath; /**< Framing RGB565 buffer, used only if VideoEffectType == framing */ M4VIFI_ImagePlane *pFramingBuffer; /**<RGB Buffer type,used only if VideoEffectType == framing */ M4VSS3GPP_RGBType rgbType; /**< The top-left X coordinate in the output picture where the added frame will be displayed. Used only if VideoEffectType == framing || VideoEffectType == text */ M4OSA_UInt32 topleft_x; /**< The top-left Y coordinate in the output picture where the added frame will be displayed. Used only if VideoEffectType == framing || VideoEffectType == text */ M4OSA_UInt32 topleft_y; /**< Does framing image is resized to output video size. Used only if VideoEffectType == framing */ M4OSA_Bool bResize; M4VIDEOEDITING_VideoFrameSize framingScaledSize; /**< Size to which the the framing file needs to be resized */ /**< Text buffer. Used only if VideoEffectType == text */ M4OSA_Void* pTextBuffer; /**< Text buffer size. Used only if VideoEffectType == text */ M4OSA_UInt32 textBufferSize; /**< Pointer containing specific data used by the font engine (size, color...) */ M4OSA_Void* pRenderingData; /**< Text plane width. Used only if VideoEffectType == text */ M4OSA_UInt32 uiTextBufferWidth; /**< Text plane height. Used only if VideoEffectType == text */ M4OSA_UInt32 uiTextBufferHeight; /**< Processing rate of the effect added when using the Fifties effect */ M4OSA_UInt32 uiFiftiesOutFrameRate; /**< RGB16 input color of the effect added when using the rgb16 color effect */ M4OSA_UInt16 uiRgb16InputColor; M4OSA_UInt8 uialphaBlendingStart; /*Start percentage of Alpha blending*/ M4OSA_UInt8 uialphaBlendingMiddle; /*Middle percentage of Alpha blending*/ M4OSA_UInt8 uialphaBlendingEnd; /*End percentage of Alpha blending*/ M4OSA_UInt8 uialphaBlendingFadeInTime; /*Duration, in percentage of effect duration, of the FadeIn phase*/ M4OSA_UInt8 uialphaBlendingFadeOutTime; /*Duration, in percentage of effect duration, of the FadeOut phase*/ M4OSA_UInt32 width; /*width of the ARGB8888 clip . Used only if video effect is framming */ M4OSA_UInt32 height; /*height of the ARGB8888 clip . Used only if video effect is framming */ } M4xVSS_EffectSettings; /** ****************************************************************************** * struct M4xVSS_AlphaMagicSettings * @brief This structure defines the alpha magic transition settings ****************************************************************************** */ typedef struct { M4OSA_Void* pAlphaFilePath; /**< Alpha file path (JPG file) */ M4OSA_Int32 blendingPercent; /**< Blending Percentage between 0 and 100 */ M4OSA_Bool isreverse; /**< direct effect or reverse */ /*To support ARGB8888 : get the width and height */ M4OSA_UInt32 width; M4OSA_UInt32 height; } M4xVSS_AlphaMagicSettings; /** ****************************************************************************** * enum M4xVSS_SlideTransition_Direction * @brief Defines directions for the slide transition ****************************************************************************** */ typedef enum { M4xVSS_SlideTransition_RightOutLeftIn, M4xVSS_SlideTransition_LeftOutRightIn, M4xVSS_SlideTransition_TopOutBottomIn, M4xVSS_SlideTransition_BottomOutTopIn } M4xVSS_SlideTransition_Direction; /** ****************************************************************************** * struct M4xVSS_AlphaMagicSettings * @brief This structure defines the slide transition settings ****************************************************************************** */ typedef struct { M4xVSS_SlideTransition_Direction direction; /* direction of the slide */ } M4xVSS_SlideTransitionSettings; /** ****************************************************************************** * struct M4xVSS_TransitionSettings * @brief This structure defines additional transition settings specific to * xVSS, which are appended to the VSS3GPP transition settings * structure. ****************************************************************************** */ typedef struct { /* Anything xVSS-specific, but common to all transitions, would go here, before the union. */ union { /**< AlphaMagic settings, used only if VideoTransitionType == M4xVSS_kVideoTransitionType_AlphaMagic */ M4xVSS_AlphaMagicSettings *pAlphaMagicSettings; /* only in case of slide transition. */ M4xVSS_SlideTransitionSettings *pSlideTransitionSettings; } transitionSpecific; } M4xVSS_TransitionSettings; /** ****************************************************************************** * enum M4xVSS_MediaRendering * @brief This enum defines different media rendering using exif orientation ****************************************************************************** */ typedef enum { M4xVSS_kResizing = 0, /*The picture is resized, the aspect ratio can be different from the original one. All of the picture is rendered*/ M4xVSS_kCropping, /*The picture is cropped, the aspect ratio is the same as the original one. The picture is not rendered entirely*/ M4xVSS_kBlackBorders /*Black borders are rendered in order to keep the original aspect ratio. All the picture is rendered*/ } M4xVSS_MediaRendering; /** ****************************************************************************** * struct M4xVSS_ClipSettings * @brief This structure defines an input clip for the edition. * @note It also contains the settings for the cut and begin/end effects applied to the clip. ****************************************************************************** */ typedef struct { M4OSA_UInt32 uiBeginCutPercent; /**< Begin cut time, in percent of clip duration (only for 3GPP clip !) */ M4OSA_UInt32 uiEndCutPercent; /**< End cut time, in percent of clip duration (only for 3GPP clip !) */ M4OSA_UInt32 uiDuration; /**< Duration of the clip, if different from 0, has priority on uiEndCutTime or uiEndCutPercent */ M4OSA_Bool isPanZoom; /**< RC: Boolean used to know if the pan and zoom mode is enabled */ M4OSA_UInt16 PanZoomXa; /**< RC */ M4OSA_UInt16 PanZoomTopleftXa; /**< RC */ M4OSA_UInt16 PanZoomTopleftYa; /**< RC */ M4OSA_UInt16 PanZoomXb; /**< RC */ M4OSA_UInt16 PanZoomTopleftXb; /**< RC */ M4OSA_UInt16 PanZoomTopleftYb; /**< RC */ M4xVSS_MediaRendering MediaRendering; /**< FB only used with JPEG: to crop, resize, or render black borders*/ } M4xVSS_ClipSettings; /** ****************************************************************************** * struct M4xVSS_EditSettings * @brief This structure gathers all the information needed to define a complete * edition operation ****************************************************************************** */ typedef struct { /**< Output video size */ M4VIDEOEDITING_VideoFrameSize outputVideoSize; /**< Output video format (MPEG4 / H263) */ M4VIDEOEDITING_VideoFormat outputVideoFormat; /**< Output audio format (AAC, AMRNB ...) */ M4VIDEOEDITING_AudioFormat outputAudioFormat; /**< Output audio sampling freq (8000Hz,...) */ M4VIDEOEDITING_AudioSamplingFrequency outputAudioSamplFreq; /**< Maximum output file size in BYTES (if set to 0, no limit */ M4OSA_UInt32 outputFileSize; /**< Is output audio must be Mono ? Valid only for AAC */ M4OSA_Bool bAudioMono; /**< Output video bitrate*/ M4OSA_UInt32 outputVideoBitrate; /**< Output audio bitrate*/ M4OSA_UInt32 outputAudioBitrate; /**< Background music track settings */ M4xVSS_BGMSettings *pBGMtrack; /**< Function pointer on text rendering engine, if not used, must be set to NULL !! */ M4xVSS_getTextRgbBufferFct pTextRenderingFct; /** output video profile and level*/ M4OSA_Int32 outputVideoProfile; M4OSA_Int32 outputVideoLevel; } M4xVSS_EditSettings; #endif /* __M4VSS3GPP_EXTENDED_API_H__ */