| /* |
| * 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_API_H__ |
| #define __M4VSS3GPP_API_H__ |
| |
| /** |
| ****************************************************************************** |
| * @file M4VSS3GPP_API.h |
| * @brief Video Studio Service 3GPP public API. |
| * @note VSS allows editing 3GPP files. |
| * It is a straightforward and fully synchronous API. |
| ****************************************************************************** |
| */ |
| |
| /** |
| * OSAL basic types and errors */ |
| #include "M4OSA_Types.h" |
| #include "M4OSA_Error.h" |
| |
| /** |
| * OSAL types for file access */ |
| #include "M4OSA_FileReader.h" |
| #include "M4OSA_FileWriter.h" |
| |
| /** |
| * Definition of M4_VersionInfo */ |
| #include "M4TOOL_VersionInfo.h" |
| |
| /** |
| * Image planes definition */ |
| #include "M4VIFI_FiltersAPI.h" |
| |
| /** |
| * Common definitions of video editing components */ |
| #include "M4_VideoEditingCommon.h" |
| #include "M4ENCODER_AudioCommon.h" |
| #include "M4AD_Common.h" |
| #include "M4DA_Types.h" |
| |
| /** |
| * Extended API (xVSS) */ |
| #ifdef M4VSS_SUPPORT_EXTENDED_FEATURES |
| #include "M4VSS3GPP_Extended_API.h" |
| #endif |
| |
| //#include "M4VD_HW_API.h" |
| //#include "M4VE_API.h" |
| |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| |
| |
| /** |
| ****************************************************************************** |
| ****************************************************************************** |
| ****************************************************************************** |
| * |
| * Edition Feature |
| * |
| ****************************************************************************** |
| ****************************************************************************** |
| ****************************************************************************** |
| */ |
| |
| /** |
| * Public type of the VSS edit context */ |
| typedef M4OSA_Void* M4VSS3GPP_EditContext; |
| |
| |
| /** |
| ****************************************************************************** |
| * enum M4VSS3GPP_VideoEffectType |
| * @brief This enumeration defines the video effect types of the VSS3GPP |
| ****************************************************************************** |
| */ |
| typedef enum |
| { |
| M4VSS3GPP_kVideoEffectType_None = 0, /**< No video effect */ |
| M4VSS3GPP_kVideoEffectType_FadeFromBlack = 8, /**< Intended for begin effect */ |
| M4VSS3GPP_kVideoEffectType_FadeToBlack = 16, /**< Intended for end effect */ |
| M4VSS3GPP_kVideoEffectType_External = 256 /**< External effect function is used */ |
| /* reserved 256 + n */ /**< External effect number n */ |
| |
| } M4VSS3GPP_VideoEffectType; |
| |
| |
| /** |
| ****************************************************************************** |
| * enum M4VSS3GPP_AudioEffectType |
| * @brief This enumeration defines the audio effect types of the VSS3GPP |
| ****************************************************************************** |
| */ |
| typedef enum |
| { |
| M4VSS3GPP_kAudioEffectType_None = 0, |
| M4VSS3GPP_kAudioEffectType_FadeIn = 8, /**< Intended for begin effect */ |
| M4VSS3GPP_kAudioEffectType_FadeOut = 16 /**< Intended for end effect */ |
| |
| } M4VSS3GPP_AudioEffectType; |
| |
| |
| /** |
| ****************************************************************************** |
| * enum M4VSS3GPP_VideoTransitionType |
| * @brief This enumeration defines the video effect that can be applied during a transition. |
| ****************************************************************************** |
| */ |
| typedef enum |
| { |
| M4VSS3GPP_kVideoTransitionType_None = 0, |
| M4VSS3GPP_kVideoTransitionType_CrossFade = 1, |
| M4VSS3GPP_kVideoTransitionType_External = 256 |
| /* reserved 256 + n */ /**< External transition number n */ |
| |
| } M4VSS3GPP_VideoTransitionType; |
| |
| |
| /** |
| ****************************************************************************** |
| * enum M4VSS3GPP_AudioTransitionType |
| * @brief This enumeration defines the audio effect that can be applied during a transition. |
| ****************************************************************************** |
| */ |
| typedef enum |
| { |
| M4VSS3GPP_kAudioTransitionType_None = 0, |
| M4VSS3GPP_kAudioTransitionType_CrossFade |
| |
| } M4VSS3GPP_AudioTransitionType; |
| |
| |
| /** |
| ****************************************************************************** |
| * struct M4VSS3GPP_ExternalProgress |
| * @brief This structure contains information provided to the external Effect |
| * and Transition functions |
| * @note The uiProgress value should be enough for most cases |
| ****************************************************************************** |
| */ |
| typedef struct |
| { |
| /**< Progress of the Effect or the Transition, from 0 to 1000 (one thousand) */ |
| M4OSA_UInt32 uiProgress; |
| /**< Index of the current clip (first clip in case of a Transition), from 0 to N */ |
| //M4OSA_UInt8 uiCurrentClip; |
| /**< Current time, in milliseconds, in the current clip time-line */ |
| M4OSA_UInt32 uiClipTime; |
| /**< Current time, in milliseconds, in the output clip time-line */ |
| M4OSA_UInt32 uiOutputTime; |
| M4OSA_Bool bIsLast; |
| |
| } M4VSS3GPP_ExternalProgress; |
| |
| |
| /** |
| ************************************************************************ |
| * enum M4VSS3GPP_codecType |
| * @brief This enum defines the codec types used to create interfaces |
| * @note This enum is used internally by the VSS3GPP services to identify |
| * a currently supported codec interface. Each codec is |
| * registered with one of this type associated. |
| * When a codec instance is needed, this type is used to |
| * identify and retrieve its interface. |
| * This can be extended for other codecs. |
| ************************************************************************ |
| */ |
| typedef enum |
| { |
| /* Video Decoder Types */ |
| M4VSS3GPP_kVideoDecMPEG4 = 0, |
| M4VSS3GPP_kVideoDecH264, |
| |
| /* Video Encoder Types */ |
| M4VSS3GPP_kVideoEncMPEG4, |
| M4VSS3GPP_kVideoEncH263, |
| M4VSS3GPP_kVideoEncH264, |
| |
| /* Audio Decoder Types */ |
| M4VSS3GPP_kAudioDecAMRNB, |
| M4VSS3GPP_kAudioDecAAC, |
| M4VSS3GPP_kAudioDecMP3, |
| |
| /* Audio Encoder Types */ |
| M4VSS3GPP_kAudioEncAMRNB, |
| M4VSS3GPP_kAudioEncAAC, |
| |
| /* number of codecs, keep it as last enum entry, before invlaid type */ |
| M4VSS3GPP_kCodecType_NB, |
| /* invalid codec type */ |
| M4VSS3GPP_kCodecTypeInvalid = 255 |
| |
| } M4VSS3GPP_codecType; |
| |
| |
| /** |
| ****************************************************************************** |
| * prototype M4VSS3GPP_editVideoEffectFct |
| * @brief Begin and End video effect functions implemented by the integrator |
| * must match this prototype. |
| * @note The function is provided with the original image of the clip. |
| * It must apply the video effect to build the output image. |
| * The progress of the effect is given, on a scale from 0 to 1000. |
| * When the effect function is called, all the image plane structures |
| * and buffers are valid and owned by the VSS 3GPP. |
| * |
| * @param pFunctionContext (IN) The function context, previously set by the integrator |
| * @param pInputPlanes (IN) Input YUV420 image: pointer to an array of three valid |
| image planes (Y, U and V) |
| * @param pOutputPlanes (IN/OUT) Output (filtered) YUV420 image: pointer to an array |
| of three valid image planes (Y, U and V) |
| * @param pProgress (IN) Set of information about the video transition progress. |
| * @param uiExternalEffectId (IN) Which effect function should be used (for external effects) |
| * |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL (debug only) |
| ****************************************************************************** |
| */ |
| typedef M4OSA_ERR (*M4VSS3GPP_editVideoEffectFct) |
| ( |
| M4OSA_Void *pFunctionContext, |
| M4VIFI_ImagePlane *pInputPlanes, |
| M4VIFI_ImagePlane *pOutputPlanes, |
| M4VSS3GPP_ExternalProgress *pProgress, |
| M4OSA_UInt32 uiExternalEffectId |
| ); |
| |
| |
| /** |
| ****************************************************************************** |
| * prototype M4VSS3GPP_editVideoTransitionFct |
| * @brief External transition functions implemented by the integrator |
| * must match this prototype. |
| * @note The function is provided with the image of the first clip and |
| * the image of the second clip. It must build the output image |
| * from the two input images. |
| * The progress of the transition is given, on a scale from 0 to 1000. |
| * When the external function is called, all the image plane |
| * structures and buffers are valid and owned by the VSS 3GPP. |
| * |
| * @param pFunctionContext (IN) The function context, previously set by the integrator |
| * @param pClip1InputPlanes (IN) First input YUV420 image: pointer to an array of three |
| valid image planes (Y, U and V) |
| * @param pClip2InputPlanes (IN) Second input YUV420 image: pointer to an array of three |
| valid image planes (Y, U and V) |
| * @param pOutputPlanes (IN/OUT) Output (filtered) YUV420 image: pointer to an array |
| of three valid image planes (Y, U and V) |
| * @param pProgress (IN) Set of information about the video effect progress. |
| * @param uiExternalTransitionId (IN) Which transition function should be used |
| (for external transitions) |
| * |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL (debug only) |
| ****************************************************************************** |
| */ |
| typedef M4OSA_ERR (*M4VSS3GPP_editVideoTransitionFct) |
| ( |
| M4OSA_Void *pFunctionContext, |
| M4VIFI_ImagePlane *pClip1InputPlanes, |
| M4VIFI_ImagePlane *pClip2InputPlanes, |
| M4VIFI_ImagePlane *pOutputPlanes, |
| M4VSS3GPP_ExternalProgress *pProgress, |
| M4OSA_UInt32 uiExternalTransitionId |
| ); |
| |
| |
| /** |
| ****************************************************************************** |
| * struct M4VSS3GPP_EffectSettings |
| * @brief This structure defines an audio/video effect for the edition. |
| * @note Effect start time is relative to output clip. |
| ****************************************************************************** |
| */ |
| typedef struct |
| { |
| M4OSA_UInt32 uiStartTime; /**< In ms */ |
| M4OSA_UInt32 uiDuration; /**< In ms */ |
| M4VSS3GPP_VideoEffectType VideoEffectType; /**< None, FadeIn, FadeOut, etc. */ |
| M4VSS3GPP_editVideoEffectFct ExtVideoEffectFct; /**< External effect function */ |
| M4OSA_Void *pExtVideoEffectFctCtxt;/**< Context given to the external |
| effect function */ |
| M4VSS3GPP_AudioEffectType AudioEffectType; /**< None, FadeIn, FadeOut */ |
| |
| #ifdef M4VSS_SUPPORT_EXTENDED_FEATURES |
| M4xVSS_EffectSettings xVSS; |
| #endif |
| |
| } M4VSS3GPP_EffectSettings; |
| |
| |
| /** |
| ****************************************************************************** |
| * enum M4VSS3GPP_TransitionBehaviour |
| * @brief Transition behavior |
| ****************************************************************************** |
| */ |
| typedef enum |
| { |
| M4VSS3GPP_TransitionBehaviour_SpeedUp = 0, |
| M4VSS3GPP_TransitionBehaviour_Linear, |
| M4VSS3GPP_TransitionBehaviour_SpeedDown, |
| M4VSS3GPP_TransitionBehaviour_SlowMiddle, |
| M4VSS3GPP_TransitionBehaviour_FastMiddle |
| } M4VSS3GPP_TransitionBehaviour; |
| |
| |
| /** |
| ****************************************************************************** |
| * struct M4VSS3GPP_TransitionSettings |
| * @brief This structure defines the transition to be applied when assembling two clips. |
| ****************************************************************************** |
| */ |
| typedef struct |
| { |
| /**< Duration of the transition, in milliseconds (set to 0 to get no transition) */ |
| M4OSA_UInt32 uiTransitionDuration; |
| |
| /**< Type of the video transition */ |
| M4VSS3GPP_VideoTransitionType VideoTransitionType; |
| |
| /**< External transition video effect function */ |
| M4VSS3GPP_editVideoTransitionFct ExtVideoTransitionFct; |
| |
| /**< Context of the external transition video effect function */ |
| M4OSA_Void *pExtVideoTransitionFctCtxt; |
| M4VSS3GPP_AudioTransitionType AudioTransitionType; /**< Type of the audio transition */ |
| M4VSS3GPP_TransitionBehaviour TransitionBehaviour; /**<Transition behaviour*/ |
| |
| #ifdef M4VSS_SUPPORT_EXTENDED_FEATURES |
| M4xVSS_TransitionSettings xVSS; |
| #endif |
| |
| } M4VSS3GPP_TransitionSettings; |
| |
| |
| /** |
| ****************************************************************************** |
| * struct M4VSS3GPP_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_Void *pFile; /**< Clip file descriptor */ |
| M4VIDEOEDITING_FileType FileType; /**< .3gp, .amr, .mp3 */ |
| M4OSA_UInt32 filePathSize; /**< Clip path size |
| (add because of UTF16 conversion)*/ |
| M4VIDEOEDITING_ClipProperties ClipProperties; /**< Clip analysis previously computed |
| with M4VSS3GPP_editAnalyseClip */ |
| M4OSA_UInt32 uiBeginCutTime; /**< Begin cut time, in milliseconds */ |
| M4OSA_UInt32 uiEndCutTime; /**< End cut time, in milliseconds */ |
| M4OSA_Bool bTranscodingRequired; |
| |
| #ifdef M4VSS_SUPPORT_EXTENDED_FEATURES |
| M4xVSS_ClipSettings xVSS; |
| #endif |
| |
| } M4VSS3GPP_ClipSettings; |
| |
| |
| /** |
| ****************************************************************************** |
| * struct M4VSS3GPP_EditSettings |
| * @brief This structure gathers all the information needed to define a complete |
| * edition operation |
| ****************************************************************************** |
| */ |
| typedef struct |
| { |
| /**< Number of element of the clip list pClipList */ |
| M4OSA_UInt8 uiClipNumber; |
| /**< The properties of this clip will be used as a reference for compatibility checking */ |
| M4OSA_UInt8 uiMasterClip; |
| /**< List of the input clips settings. Pointer to an array of uiClipNumber |
| clip settings pointers */ |
| M4VSS3GPP_ClipSettings **pClipList; |
| /**< List of the transition settings. Pointer to an array of uiClipNumber-1 |
| transition settings pointers */ |
| M4VSS3GPP_TransitionSettings **pTransitionList; |
| M4VSS3GPP_EffectSettings *Effects; /**< List of effects */ |
| M4OSA_UInt8 nbEffects; /**< Number of effects in the above list */ |
| /**< Frame rate at which the modified video sections will be encoded */ |
| M4VIDEOEDITING_VideoFramerate videoFrameRate; |
| M4OSA_Void *pOutputFile; /**< Output 3GPP clip file descriptor */ |
| M4OSA_UInt32 uiOutputPathSize; /**< Output file path size*/ |
| /**< Temporary file to store metadata ("moov.bin") */ |
| M4OSA_Void *pTemporaryFile; |
| |
| #ifdef M4VSS_SUPPORT_EXTENDED_FEATURES |
| M4xVSS_EditSettings xVSS; |
| #endif |
| M4OSA_Float PTVolLevel; |
| } M4VSS3GPP_EditSettings; |
| |
| |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_editAnalyseClip() |
| * @brief This function allows checking if a clip is compatible with VSS 3GPP editing |
| * @note It also fills a ClipAnalysis structure, which can be used to check if two |
| * clips are compatible |
| * @param pClip (IN) File descriptor of the input 3GPP/MP3 clip file. |
| * @param pClipProperties (IN) Pointer to a valid ClipProperties structure. |
| * @param FileType (IN) Type of the input file (.3gp, .amr, .mp3) |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL (debug only) |
| * @return M4VSS3GPP_ERR_H263_PROFILE_NOT_SUPPORTED |
| * @return M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_VERSION |
| * @return M4VSS3GPP_ERR_AMR_EDITING_UNSUPPORTED |
| * @return M4VSS3GPP_ERR_EDITING_UNSUPPORTED_H263_PROFILE |
| * @return M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_PROFILE |
| * @return M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_RVLC |
| * @return M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT |
| * @return M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_VIDEO_STREAM_IN_FILE |
| * @return M4VSS3GPP_ERR_EDITING_UNSUPPORTED_AUDIO_FORMAT |
| * @return M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_STREAM_IN_FILE |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_editAnalyseClip(M4OSA_Void *pClip, M4VIDEOEDITING_FileType FileType, |
| M4VIDEOEDITING_ClipProperties *pClipProperties, |
| M4OSA_FileReadPointer *pFileReadPtrFct); |
| |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_editCheckClipCompatibility() |
| * @brief This function allows checking if two clips are compatible with each other |
| * for VSS 3GPP editing assembly feature. |
| * @note |
| * @param pClip1Properties (IN) Clip analysis of the first clip |
| * @param pClip2Properties (IN) Clip analysis of the second clip |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL (debug only) |
| * @return M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_VERSION |
| * @return M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_PLATFORM |
| * @return M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FORMAT |
| * @return M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FRAME_SIZE |
| * @return M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_TIME_SCALE |
| * @return M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_DATA_PARTITIONING |
| * @return M4VSS3GPP_ERR_UNSUPPORTED_MP3_ASSEMBLY |
| * @return M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_editCheckClipCompatibility(M4VIDEOEDITING_ClipProperties *pClip1Properties, |
| M4VIDEOEDITING_ClipProperties *pClip2Properties); |
| |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_editInit() |
| * @brief Initializes the VSS 3GPP edit operation (allocates an execution context). |
| * @note |
| * @param pContext (OUT) Pointer on the VSS 3GPP edit context to allocate |
| * @param pFileReadPtrFct (IN) Pointer to OSAL file reader functions |
| * @param pFileWritePtrFct (IN) Pointer to OSAL file writer functions |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL |
| * @return M4ERR_ALLOC: There is no more available memory |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_editInit( |
| M4VSS3GPP_EditContext* pContext, |
| M4OSA_FileReadPointer* pFileReadPtrFct, |
| M4OSA_FileWriterPointer* pFileWritePtrFct ); |
| |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_editCreateClipSettings() |
| * @brief Allows filling a clip settings structure with default values |
| * |
| * @note WARNING: pClipSettings->pFile will be allocated in this function. |
| * |
| * @param pClipSettings (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure |
| * @param pFile (IN) Clip file name |
| * @param filePathSize (IN) Size of the clip path (needed for UTF16 conversion) |
| * @param nbEffects (IN) Nb of effect settings to allocate |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: pClipSettings is M4OSA_NULL (debug only) |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_editCreateClipSettings(M4VSS3GPP_ClipSettings *pClipSettings, |
| M4OSA_Void* pFile, M4OSA_UInt32 filePathSize, |
| M4OSA_UInt8 nbEffects); |
| |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_editDuplicateClipSettings() |
| * @brief Duplicates a clip settings structure, performing allocations if required |
| * |
| * @param pClipSettingsDest (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure |
| * @param pClipSettingsOrig (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure |
| * @param bCopyEffects (IN) Flag to know if we have to duplicate effects (deprecated) |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: pClipSettings is M4OSA_NULL (debug only) |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_editDuplicateClipSettings(M4VSS3GPP_ClipSettings *pClipSettingsDest, |
| M4VSS3GPP_ClipSettings *pClipSettingsOrig, |
| M4OSA_Bool bCopyEffects); |
| |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_editFreeClipSettings() |
| * @brief Free the pointers allocated in the ClipSetting structure (pFile, Effects). |
| * |
| * @param pClipSettings (IN) Pointer to a valid M4VSS3GPP_ClipSettings structure |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: pClipSettings is M4OSA_NULL (debug only) |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_editFreeClipSettings(M4VSS3GPP_ClipSettings *pClipSettings); |
| |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_editOpen() |
| * @brief Set the VSS 3GPP input and output files, and set the settings. |
| * @note |
| * @param pContext (IN) VSS 3GPP edit context |
| * @param pSettings (IN) Edit settings |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL (debug only) |
| * @return M4ERR_STATE: VSS is not in an appropriate state for this function to be called |
| * @return M4ERR_ALLOC: There is no more available memory |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_editOpen(M4VSS3GPP_EditContext pContext, M4VSS3GPP_EditSettings *pSettings); |
| |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_editStep() |
| * @brief Perform one step of editing. |
| * @note |
| * @param pContext (IN) VSS 3GPP edit context |
| * @param pProgress (OUT) Progress percentage (0 to 100) of the editing operation |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) |
| * @return M4ERR_STATE: VSS 3GPP is not in an appropriate state for this function to |
| * be called |
| * @return M4VSS3GPP_WAR_EDITING_DONE:Edition is done, user should now call M4VSS3GPP_editClose() |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_editStep(M4VSS3GPP_EditContext pContext, M4OSA_UInt8 *pProgress); |
| |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_editClose() |
| * @brief Finish the VSS 3GPP edit operation. |
| * @note The output 3GPP file is ready to be played after this call |
| * @param pContext (IN) VSS 3GPP edit context |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) |
| * @return M4ERR_STATE: VSS 3GPP is not in an appropriate state for this function |
| * to be called |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_editClose(M4VSS3GPP_EditContext pContext); |
| |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_editCleanUp() |
| * @brief Free all resources used by the VSS 3GPP edit operation. |
| * @note The context is no more valid after this call |
| * @param pContext (IN) VSS 3GPP edit context |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_editCleanUp(M4VSS3GPP_EditContext pContext); |
| |
| /** |
| ****************************************************************************** |
| ****************************************************************************** |
| ****************************************************************************** |
| * |
| * Audio Mixing Feature |
| * |
| ****************************************************************************** |
| ****************************************************************************** |
| ****************************************************************************** |
| */ |
| /** |
| * Public type of the VSS audio mixing context */ |
| typedef M4OSA_Void* M4VSS3GPP_AudioMixingContext; |
| |
| |
| /** |
| ****************************************************************************** |
| * struct M4VSS3GPP_AudioMixingSettings |
| * @brief This structure defines the settings of the audio mixing operation. |
| ****************************************************************************** |
| */ |
| typedef struct { |
| M4OSA_Void* pOriginalClipFile; /**< Input 3GPP clip file */ |
| M4OSA_Void* pAddedAudioTrackFile; /**< New audio track */ |
| M4VIDEOEDITING_FileType AddedAudioFileType; /**< File Format of the new audio file */ |
| 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 bRemoveOriginal; /**< If true, the original audio track |
| is not taken into account */ |
| M4OSA_Void* pOutputClipFile; /**< Output 3GPP clip file */ |
| M4OSA_Void* pTemporaryFile; /**< Temporary file to store metadata |
| ("moov.bin") */ |
| /**< The following parameters are optionnal. They are just used in case of MP3 replacement. */ |
| M4VIDEOEDITING_AudioSamplingFrequency outputASF; /**< Output sampling frequency */ |
| M4VIDEOEDITING_AudioFormat outputAudioFormat; /**< Output audio codec(AAC/AMR)*/ |
| M4VIDEOEDITING_Bitrate outputAudioBitrate; /**< Output audio bitrate */ |
| M4OSA_UInt8 outputNBChannels; /**< Output audio nb of channels */ |
| M4OSA_Bool b_DuckingNeedeed; |
| M4OSA_Int32 InDucking_threshold; |
| M4OSA_Float fBTVolLevel; |
| M4OSA_Float fPTVolLevel; |
| M4OSA_Float InDucking_lowVolume; |
| M4OSA_Bool bLoop; |
| M4OSA_UInt32 uiSamplingFrequency; |
| M4OSA_UInt32 uiNumChannels; |
| } M4VSS3GPP_AudioMixingSettings; |
| |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_audioMixingInit(M4VSS3GPP_AudioMixingContext* pContext, |
| * M4VSS3GPP_AudioMixingSettings* pSettings) |
| * @brief Initializes the VSS audio mixing operation (allocates an execution context). |
| * @note |
| * @param pContext (OUT) Pointer on the VSS audio mixing context to allocate |
| * @param pSettings (IN) Pointer to valid audio mixing settings |
| * @param pFileReadPtrFct (IN) Pointer to OSAL file reader functions |
| * @param pFileWritePtrFct (IN) Pointer to OSAL file writer functions |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL (debug only) |
| * @return M4ERR_ALLOC: There is no more available memory |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_audioMixingInit( |
| M4VSS3GPP_AudioMixingContext* pContext, |
| M4VSS3GPP_AudioMixingSettings* pSettings, |
| M4OSA_FileReadPointer* pFileReadPtrFct, |
| M4OSA_FileWriterPointer* pFileWritePtrFct ); |
| |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_audioMixingStep() |
| * @brief Perform one step of audio mixing. |
| * @note |
| * @param pContext (IN) VSS 3GPP audio mixing context |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) |
| * @param pProgress (OUT) Progress percentage (0 to 100) |
| of the finalization operation |
| * @return M4ERR_STATE: VSS is not in an appropriate state for |
| this function to be called |
| * @return M4VSS3GPP_WAR_END_OF_AUDIO_MIXING: Audio mixing is over, user should |
| now call M4VSS3GPP_audioMixingCleanUp() |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_audioMixingStep(M4VSS3GPP_AudioMixingContext pContext, |
| M4OSA_UInt8 *pProgress); |
| |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_audioMixingCleanUp() |
| * @brief Free all resources used by the VSS audio mixing operation. |
| * @note The context is no more valid after this call |
| * @param pContext (IN) VSS 3GPP audio mixing context |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_audioMixingCleanUp(M4VSS3GPP_AudioMixingContext pContext); |
| |
| |
| /** |
| ****************************************************************************** |
| ****************************************************************************** |
| ****************************************************************************** |
| * |
| * Extract Picture Feature |
| * |
| ****************************************************************************** |
| ****************************************************************************** |
| ****************************************************************************** |
| */ |
| /** |
| * Public type of the VSS extract picture context */ |
| typedef M4OSA_Void* M4VSS3GPP_ExtractPictureContext; |
| |
| /** |
| ****************************************************************************** |
| * struct M4VSS3GPP_ExtractPictureSettings |
| * @brief This structure defines the settings of the extract picture audio operation. |
| ****************************************************************************** |
| */ |
| typedef struct { |
| M4OSA_Void* pInputClipFile; /**< Input 3GPP clip file */ |
| M4OSA_Int32 iExtractionTime; /**< frame time (in ms) to be extracted */ |
| M4OSA_Void* pOutputYuvPic; /**< Output YUV picture name */ |
| } M4VSS3GPP_ExtractPictureSettings; |
| |
| |
| /****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_extractPictureInit() |
| * @brief Initializes the VSS extract picture operation (allocates an execution context). |
| * @note |
| * @param pContext (OUT) Pointer on the VSS extract picture context to allocate |
| * @param pSettings (IN) Pointer to valid extract picture settings |
| * @param pWidth (OUT) video stream width |
| * @param pHeight (OUT) video stream height |
| * @param pFileReadPtrFct (IN) Pointer to OSAL file reader functions |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: At least one parameter is M4OSA_NULL (debug only) |
| * @return M4ERR_ALLOC: There is no more available memory |
| * @return M4VSS3GPP_ERR_INVALID_CLIP1: The input clip is empty |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_extractPictureInit( |
| M4VSS3GPP_ExtractPictureContext* pContext, |
| M4VSS3GPP_ExtractPictureSettings* pSettings, |
| M4OSA_UInt32 *pWidth, |
| M4OSA_UInt32 *pHeight, |
| M4OSA_FileReadPointer* pFileReadPtrFct ); |
| |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_extractPictureStep() |
| * @brief Perform one step of picture extraction. |
| * @note |
| * @param pContext (IN) VSS extract picture context |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) |
| * @param pDecPlanes (OUT) Plane in wich the extracted picture is copied |
| * @param pProgress (OUT) Progress percentage (0 to 100) |
| of the picture extraction |
| * @return M4ERR_STATE: VSS is not in an appropriate state for this |
| function to be called |
| * @return VSS_WAR_END_OF_EXTRACT_PICTURE: Picture extraction is over, user should now |
| call M4VSS3GPP_extractPictureCleanUp() |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_extractPictureStep(M4VSS3GPP_ExtractPictureContext pContext, |
| M4VIFI_ImagePlane *pDecPlanes, M4OSA_UInt8 *pProgress); |
| |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_extractPictureCleanUp() |
| * @brief Free all resources used by the VSS picture extraction. |
| * @note The context is no more valid after this call |
| * @param pContext (IN) VSS extract picture context |
| * @return M4NO_ERROR: No error |
| * @return M4ERR_PARAMETER: pContext is M4OSA_NULL (debug only) |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_extractPictureCleanUp(M4VSS3GPP_ExtractPictureContext pContext); |
| |
| /** |
| ****************************************************************************** |
| ****************************************************************************** |
| ****************************************************************************** |
| * |
| * Common features |
| * |
| ****************************************************************************** |
| ****************************************************************************** |
| ****************************************************************************** |
| */ |
| |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_GetVersion() |
| * @brief Get the VSS version. |
| * @note Can be called anytime. Do not need any context. |
| * @param pVersionInfo (OUT) Pointer to a version info structure |
| * @return M4NO_ERROR: No error |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_GetVersion(M4_VersionInfo* pVersionInfo); |
| |
| |
| #ifdef WIN32 |
| /** |
| ****************************************************************************** |
| * M4OSA_ERR M4VSS3GPP_GetErrorMessage() |
| * @brief Return a string describing the given error code |
| * @note The input string must be already allocated (and long enough!) |
| * @param err (IN) Error code to get the description from |
| * @param sMessage (IN/OUT) Allocated string in which the description will be copied |
| * @return M4NO_ERROR: Input error is from the VSS3GPP module |
| * @return M4ERR_PARAMETER:Input error is not from the VSS3GPP module |
| ****************************************************************************** |
| */ |
| M4OSA_ERR M4VSS3GPP_GetErrorMessage(M4OSA_ERR err, M4OSA_Char* sMessage); |
| #endif /**< WIN32 */ |
| |
| |
| #ifdef __cplusplus |
| } |
| #endif /* __cplusplus */ |
| |
| #endif /* __M4VSS3GPP_API_H__ */ |
| |