summaryrefslogtreecommitdiffstats
path: root/libvideoeditor/vss/inc/M4VSS3GPP_InternalFunctions.h
diff options
context:
space:
mode:
Diffstat (limited to 'libvideoeditor/vss/inc/M4VSS3GPP_InternalFunctions.h')
-rwxr-xr-xlibvideoeditor/vss/inc/M4VSS3GPP_InternalFunctions.h663
1 files changed, 663 insertions, 0 deletions
diff --git a/libvideoeditor/vss/inc/M4VSS3GPP_InternalFunctions.h b/libvideoeditor/vss/inc/M4VSS3GPP_InternalFunctions.h
new file mode 100755
index 0000000..aeddd97
--- /dev/null
+++ b/libvideoeditor/vss/inc/M4VSS3GPP_InternalFunctions.h
@@ -0,0 +1,663 @@
+/*
+ * Copyright (C) 2004-2011 NXP Software
+ * 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.
+ */
+
+/**
+ ******************************************************************************
+ * @file M4VSS3GPP_InternalFunctions.h
+ * @brief This file contains all function prototypes not visible to the external world.
+ * @note
+ ******************************************************************************
+*/
+
+
+#ifndef __M4VSS3GPP_INTERNALFUNCTIONS_H__
+#define __M4VSS3GPP_INTERNALFUNCTIONS_H__
+
+#include "NXPSW_CompilerSwitches.h"
+/**
+ * VSS public API and types */
+#include "M4VSS3GPP_API.h"
+
+/**
+ * VSS private types */
+#include "M4VSS3GPP_InternalTypes.h"
+
+
+#include "M4READER_Common.h" /**< for M4_AccessUnit definition */
+
+#ifdef M4VSS_ENABLE_EXTERNAL_DECODERS
+#include "M4VD_HW_API.h"
+#endif /* M4VSS_ENABLE_EXTERNAL_DECODERS */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* All errors are fatal in the VSS */
+#define M4ERR_CHECK_RETURN(err) if(M4NO_ERROR!=err) return err;
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intEditStepVideo()
+ * @brief One step of video processing
+ * @param pC (IN/OUT) Internal edit context
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intEditStepVideo(M4VSS3GPP_InternalEditContext *pC);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intEditStepAudio()
+ * @brief One step of audio processing
+ * @param pC (IN/OUT) Internal edit context
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intEditStepAudio(M4VSS3GPP_InternalEditContext *pC);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intEditStepMP3()
+ * @brief One step of audio processing for the MP3 clip
+ * @param pC (IN/OUT) Internal edit context
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intEditStepMP3(M4VSS3GPP_InternalEditContext *pC);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intOpenClip()
+ * @brief Open next clip
+ * @param pC (IN/OUT) Internal edit context
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intOpenClip(M4VSS3GPP_InternalEditContext *pC, M4VSS3GPP_ClipContext **hClip,
+ M4VSS3GPP_ClipSettings *pClipSettings);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intDestroyVideoEncoder()
+ * @brief Destroy the video encoder
+ * @note
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intDestroyVideoEncoder(M4VSS3GPP_InternalEditContext *pC);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intCreateVideoEncoder()
+ * @brief Creates the video encoder
+ * @note
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intCreateVideoEncoder(M4VSS3GPP_InternalEditContext *pC);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intReachedEndOfVideo()
+ * @brief Do what to do when the end of a clip video track is reached
+ * @note If there is audio on the current clip, process it, else switch to the next clip
+ * @param pC (IN/OUT) Internal edit context
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intReachedEndOfVideo(M4VSS3GPP_InternalEditContext *pC);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intReachedEndOfAudio()
+ * @brief Do what to do when the end of a clip audio track is reached
+ * @param pC (IN/OUT) Internal edit context
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intReachedEndOfAudio(M4VSS3GPP_InternalEditContext *pC);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intCheckClipCompatibleWithVssEditing()
+ * @brief Check if the clip is compatible with VSS editing
+ * @note
+ * @param pClipCtxt (IN) internal clip context
+ * @param pClipProperties (OUT) Pointer to a valid ClipProperties structure.
+ * @return M4NO_ERROR: No error
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intCheckClipCompatibleWithVssEditing(M4VIDEOEDITING_ClipProperties \
+ *pClipProperties);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intClipOpen()
+ * @brief Open a clip. Creates a clip context.
+ * @note
+ * @param hClipCtxt (OUT) Return the internal clip context
+ * @param pClipSettings (IN) Edit settings of this clip. The module will keep a
+ * reference to this pointer
+ * @param pFileReadPtrFct (IN) Pointer to OSAL file reader functions
+ * @param bSkipAudioTrack (IN) If true, do not open the audio
+ * @param bFastOpenMode (IN) If true, use the fast mode of the 3gpp reader
+ * (only the first AU is read)
+ * @return M4NO_ERROR: No error
+ * @return M4ERR_ALLOC: There is no more available memory
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intClipInit (
+ M4VSS3GPP_ClipContext **hClipCtxt,
+ M4OSA_FileReadPointer *pFileReadPtrFct
+);
+
+M4OSA_ERR M4VSS3GPP_intClipOpen (
+ M4VSS3GPP_ClipContext *pClipCtxt,
+ M4VSS3GPP_ClipSettings *pClipSettings,
+ M4OSA_Bool bSkipAudioTrack,
+ M4OSA_Bool bFastOpenMode,
+ M4OSA_Bool bAvoidOpeningVideoDec
+);
+
+
+/**
+ ******************************************************************************
+ * M4OSA_Void M4VSS3GPP_intClipDeleteAudioTrack()
+ * @brief Delete the audio track. Clip will be like if it had no audio track
+ * @note
+ * @param pClipCtxt (IN) Internal clip context
+ ******************************************************************************
+*/
+M4OSA_Void M4VSS3GPP_intClipDeleteAudioTrack(M4VSS3GPP_ClipContext *pClipCtxt);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intClipDecodeVideoUpToCurrentTime()
+ * @brief Jump to the previous RAP and decode up to the current video time
+ * @param pClipCtxt (IN) Internal clip context
+ * @param iCts (IN) Target CTS
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intClipDecodeVideoUpToCts(M4VSS3GPP_ClipContext* pClipCtxt, M4OSA_Int32 iCts);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intClipReadNextAudioFrame()
+ * @brief Read one AU frame in the clip
+ * @note
+ * @param pClipCtxt (IN) Internal clip context
+ * @return M4NO_ERROR: No error
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intClipReadNextAudioFrame(M4VSS3GPP_ClipContext *pClipCtxt);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intClipDecodeCurrentAudioFrame()
+ * @brief Decode the current AUDIO frame.
+ * @note
+ * @param pClipCtxt (IN) internal clip context
+ * @return M4NO_ERROR: No error
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intClipDecodeCurrentAudioFrame(M4VSS3GPP_ClipContext *pClipCtxt);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intClipJumpAudioAt()
+ * @brief Jump in the audio track of the clip.
+ * @note
+ * @param pClipCtxt (IN) internal clip context
+ * @param pJumpCts (IN/OUT) in:target CTS, out: reached CTS
+ * @return M4NO_ERROR: No error
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intClipJumpAudioAt(M4VSS3GPP_ClipContext *pClipCtxt, M4OSA_Int32 *pJumpCts);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intClipClose()
+ * @brief Close a clip. Destroy the context.
+ * @note
+ * @param pClipCtxt (IN) Internal clip context
+ * @return M4NO_ERROR: No error
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intClipClose(M4VSS3GPP_ClipContext *pClipCtxt);
+
+M4OSA_ERR M4VSS3GPP_intClipCleanUp(M4VSS3GPP_ClipContext *pClipCtxt);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intEditJumpMP3()
+ * @brief One step of jumping processing for the MP3 clip.
+ * @note On one step, the jump of several AU is done
+ * @param pC (IN/OUT) Internal edit context
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intEditJumpMP3(M4VSS3GPP_InternalEditContext *pC);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_registerWriter()
+ * @brief This function will register a specific file format writer.
+ * @note According to the Mediatype, this function will store in the internal context
+ * the writer context.
+ * @param pContext: (IN) Execution context.
+ * @return M4NO_ERROR: there is no error
+ * @return M4ERR_PARAMETER pContext,pWtrGlobalInterface or pWtrDataInterface is
+ * M4OSA_NULL (debug only), or invalid MediaType
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_registerWriter(M4VSS3GPP_MediaAndCodecCtxt *pC,
+ M4WRITER_OutputFileType MediaType,
+ M4WRITER_GlobalInterface* pWtrGlobalInterface,
+ M4WRITER_DataInterface* pWtrDataInterface);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_registerEncoder()
+ * @brief This function will register a specific video encoder.
+ * @note According to the Mediatype, this function will store in the internal context
+ * the encoder context.
+ * @param pContext: (IN) Execution context.
+ * @return M4NO_ERROR: there is no error
+ * @return M4ERR_PARAMETER pContext or pEncGlobalInterface is M4OSA_NULL (debug only),
+ * or invalid MediaType
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_registerVideoEncoder(M4VSS3GPP_MediaAndCodecCtxt *pC,
+ M4ENCODER_Format MediaType,
+ M4ENCODER_GlobalInterface *pEncGlobalInterface);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_registerAudioEncoder()
+ * @brief This function will register a specific audio encoder.
+ * @note According to the Mediatype, this function will store in the internal context
+ * the encoder context.
+ * @param pContext: (IN) Execution context.
+ * @param mediaType: (IN) The media type.
+ * @param pEncGlobalInterface: (OUT) the encoder interface functions.
+ * @return M4NO_ERROR: there is no error
+ * @return M4ERR_PARAMETER: pContext or pEncGlobalInterface is M4OSA_NULL (debug only)
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_registerAudioEncoder(M4VSS3GPP_MediaAndCodecCtxt *pC,
+ M4ENCODER_AudioFormat MediaType,
+ M4ENCODER_AudioGlobalInterface *pEncGlobalInterface);
+
+/**
+ ************************************************************************
+ * M4OSA_ERR M4VSS3GPP_registerReader()
+ * @brief Register reader.
+ * @param pContext (IN/OUT) VSS context.
+ * @return M4NO_ERROR: No error
+ * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only)
+ ************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_registerReader(M4VSS3GPP_MediaAndCodecCtxt *pC,
+ M4READER_MediaType mediaType,
+ M4READER_GlobalInterface *pRdrGlobalInterface,
+ M4READER_DataInterface *pRdrDataInterface);
+
+/**
+ ************************************************************************
+ * M4OSA_ERR M4VSS3GPP_registerVideoDecoder()
+ * @brief Register video decoder
+ * @param pContext (IN/OUT) VSS context.
+ * @param decoderType (IN) Decoder type
+ * @param pDecoderInterface (IN) Decoder interface.
+ * @return M4NO_ERROR: No error
+ * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only), or the decoder type
+ * is invalid
+ ************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_registerVideoDecoder(M4VSS3GPP_MediaAndCodecCtxt *pC,
+ M4DECODER_VideoType decoderType,
+ M4DECODER_VideoInterface *pDecoderInterface);
+
+/**
+ ************************************************************************
+ * M4OSA_ERR M4VSS3GPP_registerAudioDecoder()
+ * @brief Register audio decoder
+ * @note This function is used internaly by the VSS to register audio decoders,
+ * @param context (IN/OUT) VSS context.
+ * @param decoderType (IN) Audio decoder type
+ * @param pDecoderInterface (IN) Audio decoder interface.
+ * @return M4NO_ERROR: No error
+ * @return M4ERR_PARAMETER: A parameter is null, or the decoder type is invalid
+ * (in DEBUG only)
+ ************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_registerAudioDecoder(M4VSS3GPP_MediaAndCodecCtxt *pC,
+ M4AD_Type decoderType,
+ M4AD_Interface *pDecoderInterface);
+
+/**
+ ************************************************************************
+ * M4OSA_ERR M4VSS3GPP_unRegisterAllWriters()
+ * @brief Unregister writer
+ * @param pContext (IN/OUT) VSS context.
+ * @return M4NO_ERROR: No error
+ * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only)
+ ************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_unRegisterAllWriters(M4VSS3GPP_MediaAndCodecCtxt *pC);
+
+/**
+ ************************************************************************
+ * M4OSA_ERR M4VSS3GPP_unRegisterAllEncoders()
+ * @brief Unregister the encoders
+ * @param pContext (IN/OUT) VSS context.
+ * @return M4NO_ERROR: No error
+ * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only)
+ ************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_unRegisterAllEncoders(M4VSS3GPP_MediaAndCodecCtxt *pC);
+
+/**
+ ************************************************************************
+ * M4OSA_ERR M4VSS3GPP_unRegisterAllReaders()
+ * @brief Unregister reader
+ * @param pContext (IN/OUT) VSS context.
+ * @return M4NO_ERROR: No error
+ * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only)
+ ************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_unRegisterAllReaders(M4VSS3GPP_MediaAndCodecCtxt *pC);
+
+/**
+ ************************************************************************
+ * M4OSA_ERR M4VSS3GPP_unRegisterAllDecoders()
+ * @brief Unregister the decoders
+ * @param pContext (IN/OUT) VSS context.
+ * @return M4NO_ERROR: No error
+ * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only)
+ ************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_unRegisterAllDecoders(M4VSS3GPP_MediaAndCodecCtxt *pC);
+
+/**
+ ************************************************************************
+ * M4OSA_ERR M4VSS3GPP_setCurrentWriter()
+ * @brief Set current writer
+ * @param pContext (IN/OUT) VSS context.
+ * @param mediaType (IN) Media type.
+ * @return M4NO_ERROR: No error
+ * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only)
+ * @return M4WAR_VSS_MEDIATYPE_NOT_SUPPORTED: Media type not supported
+ ************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_setCurrentWriter(M4VSS3GPP_MediaAndCodecCtxt *pC,
+ M4VIDEOEDITING_FileType mediaType);
+
+/**
+ ************************************************************************
+ * M4OSA_ERR M4VSS3GPP_setCurrentVideoEncoder()
+ * @brief Set a video encoder
+ * @param pContext (IN/OUT) VSS context.
+ * @param MediaType (IN) Encoder type
+ * @return M4NO_ERROR: No error
+ * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only)
+ * @return M4WAR_VSS_MEDIATYPE_NOT_SUPPORTED: Media type not supported
+ ************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_setCurrentVideoEncoder(M4VSS3GPP_MediaAndCodecCtxt *pC,
+ M4SYS_StreamType mediaType);
+
+/**
+ ************************************************************************
+ * M4OSA_ERR M4VSS3GPP_setCurrentAudioEncoder()
+ * @brief Set an audio encoder
+ * @param context (IN/OUT) VSS context.
+ * @param MediaType (IN) Encoder type
+ * @return M4NO_ERROR: No error
+ * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only)
+ ************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_setCurrentAudioEncoder(M4VSS3GPP_MediaAndCodecCtxt *pC,
+ M4SYS_StreamType mediaType);
+
+/**
+ ************************************************************************
+ * M4OSA_ERR M4VSS3GPP_setCurrentReader()
+ * @brief Set current reader
+ * @param pContext (IN/OUT) VSS context.
+ * @param mediaType (IN) Media type.
+ * @return M4NO_ERROR: No error
+ * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only)
+ * @return M4WAR_VSS_MEDIATYPE_NOT_SUPPORTED: Media type not supported
+ ************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_setCurrentReader(M4VSS3GPP_MediaAndCodecCtxt *pC,
+ M4VIDEOEDITING_FileType mediaType);
+
+/**
+ ************************************************************************
+ * M4OSA_ERR M4VSS3GPP_setCurrentVideoDecoder()
+ * @brief Set a video decoder
+ * @param pContext (IN/OUT) VSS context.
+ * @param decoderType (IN) Decoder type
+ * @return M4NO_ERROR: No error
+ * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only)
+ * @return M4WAR_VSS_MEDIATYPE_NOT_SUPPORTED: Media type not supported
+ ************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_setCurrentVideoDecoder(M4VSS3GPP_MediaAndCodecCtxt *pC,
+ M4_StreamType mediaType);
+
+/**
+ ************************************************************************
+ * M4OSA_ERR M4VSS3GPP_setCurrentAudioDecoder()
+ * @brief Set an audio decoder
+ * @param context (IN/OUT) VSS context.
+ * @param decoderType (IN) Decoder type
+ * @return M4NO_ERROR: No error
+ * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only)
+ ************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_setCurrentAudioDecoder(M4VSS3GPP_MediaAndCodecCtxt *pC,
+ M4_StreamType mediaType);
+
+/**
+ ************************************************************************
+ * M4OSA_ERR M4VSS3GPP_clearInterfaceTables()
+ * @brief Clear encoders, decoders, reader and writers interfaces tables
+ * @param pContext (IN/OUT) VSS context.
+ * @return M4NO_ERROR: No error
+ * @return M4ERR_PARAMETER: The context is null
+ ************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_clearInterfaceTables(M4VSS3GPP_MediaAndCodecCtxt *pC);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_SubscribeMediaAndCodec()
+ * @brief This function registers the reader, decoders, writers and encoders
+ * in the VSS.
+ * @note
+ * @param pContext: (IN) Execution context.
+ * @return M4NO_ERROR: there is no error
+ * @return M4ERR_PARAMETER pContext is NULL
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_subscribeMediaAndCodec(M4VSS3GPP_MediaAndCodecCtxt *pContext);
+
+/**
+ ******************************************************************************
+ * M4OSA_UInt32 M4VSS3GPP_intGetFrameSize_AMRNB()
+ * @brief Return the length, in bytes, of the AMR Narrow-Band frame contained in the given buffer
+ * @note
+ * @param pAudioFrame (IN) AMRNB frame
+ * @return M4NO_ERROR: No error
+ ******************************************************************************
+*/
+M4OSA_UInt32 M4VSS3GPP_intGetFrameSize_AMRNB(M4OSA_MemAddr8 pAudioFrame);
+
+/**
+ ******************************************************************************
+ * M4OSA_UInt32 M4VSS3GPP_intGetFrameSize_EVRC()
+ * @brief Return the length, in bytes, of the EVRC frame contained in the given buffer
+ * @note
+ * 0 1 2 3
+ * +-+-+-+-+
+ * |fr type| RFC 3558
+ * +-+-+-+-+
+ *
+ * Frame Type: 4 bits
+ * The frame type indicates the type of the corresponding codec data
+ * frame in the RTP packet.
+ *
+ * For EVRC and SMV codecs, the frame type values and size of the
+ * associated codec data frame are described in the table below:
+ *
+ * Value Rate Total codec data frame size (in octets)
+ * ---------------------------------------------------------
+ * 0 Blank 0 (0 bit)
+ * 1 1/8 2 (16 bits)
+ * 2 1/4 5 (40 bits; not valid for EVRC)
+ * 3 1/2 10 (80 bits)
+ * 4 1 22 (171 bits; 5 padded at end with zeros)
+ * 5 Erasure 0 (SHOULD NOT be transmitted by sender)
+ *
+ * @param pCpAudioFrame (IN) EVRC frame
+ * @return M4NO_ERROR: No error
+ ******************************************************************************
+*/
+M4OSA_UInt32 M4VSS3GPP_intGetFrameSize_EVRC(M4OSA_MemAddr8 pAudioFrame);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intBuildAnalysis()
+ * @brief Get video and audio properties from the clip streams
+ * @note This function must return fatal errors only (errors that should not happen in the
+ * final integrated product).
+ * @param pClipCtxt (IN) internal clip context
+ * @param pClipProperties (OUT) Pointer to a valid ClipProperties structure.
+ * @return M4NO_ERROR: No error
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intBuildAnalysis(M4VSS3GPP_ClipContext *pClipCtxt,
+ M4VIDEOEDITING_ClipProperties *pClipProperties);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intCreateAudioEncoder()
+ * @brief Reset the audio encoder (Create it if needed)
+ * @note
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intCreateAudioEncoder(M4VSS3GPP_EncodeWriteContext *pC_ewc,
+ M4VSS3GPP_MediaAndCodecCtxt *pC_ShellAPI,
+ M4OSA_UInt32 uiAudioBitrate);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intCreate3GPPOutputFile()
+ * @brief Creates and prepare the output MP3 file
+ * @note Creates the writer, Creates the output file, Adds the streams, Readies the
+ * writing process
+ * @param pC (IN/OUT) Internal edit context
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intCreate3GPPOutputFile(M4VSS3GPP_EncodeWriteContext *pC_ewc,
+ M4VSS3GPP_MediaAndCodecCtxt *pC_ShellAPI,
+ M4OSA_FileWriterPointer *pOsaFileWritPtr,
+ M4OSA_Void* pOutputFile,
+ M4OSA_FileReadPointer *pOsaFileReadPtr,
+ M4OSA_Void* pTempFile,
+ M4OSA_UInt32 maxOutputFileSize);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intAudioMixingCompatibility()
+ * @brief This function allows checking if two clips are compatible with each other for
+ * VSS 3GPP audio mixing feature.
+ * @note
+ * @param pC (IN) Context of the audio mixer
+ * @param pInputClipProperties (IN) Clip analysis of the first clip
+ * @param pAddedClipProperties (IN) Clip analysis of the second clip
+ * @return M4NO_ERROR: No error
+ * @return M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_VERSION
+ * @return M4VSS3GPP_ERR_INPUT_CLIP_IS_NOT_A_3GPP
+ * @return M4NO_ERROR
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intAudioMixingCompatibility(M4VSS3GPP_InternalAudioMixingContext *pC,
+ M4VIDEOEDITING_ClipProperties \
+ *pInputClipProperties,
+ M4VIDEOEDITING_ClipProperties \
+ *pAddedClipProperties);
+
+/**
+ ******************************************************************************
+ * M4OSA_Void M4VSS3GPP_intClipDeleteAudioTrack()
+ * @brief Delete the audio track. Clip will be like if it had no audio track
+ * @note
+ * @param pClipCtxt (IN) Internal clip context
+ ******************************************************************************
+*/
+M4OSA_Void M4VSS3GPP_intClipDeleteAudioTrack(M4VSS3GPP_ClipContext *pClipCtxt);
+
+#ifdef M4VSS_ENABLE_EXTERNAL_DECODERS
+M4OSA_ERR M4VSS3GPP_intClipRegisterExternalVideoDecoder(M4VSS3GPP_ClipContext *pClipCtxt,
+ M4VD_VideoType decoderType,
+ M4VD_Interface* pDecoderInterface,
+ M4OSA_Void* pUserData);
+#endif /* M4VSS_ENABLE_EXTERNAL_DECODERS */
+
+/******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intStartAU()
+ * @brief StartAU writer-like interface used for the VSS 3GPP only
+ * @note
+ * @param pContext: (IN) It is the VSS 3GPP context in our case
+ * @param streamID: (IN) Id of the stream to which the Access Unit is related.
+ * @param pAU: (IN/OUT) Access Unit to be prepared.
+ * @return M4NO_ERROR: there is no error
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intStartAU(M4WRITER_Context pContext, M4SYS_StreamID streamID,
+ M4SYS_AccessUnit* pAU);
+
+/******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intProcessAU()
+ * @brief ProcessAU writer-like interface used for the VSS 3GPP only
+ * @note
+ * @param pContext: (IN) It is the VSS 3GPP context in our case
+ * @param streamID: (IN) Id of the stream to which the Access Unit is related.
+ * @param pAU: (IN/OUT) Access Unit to be written
+ * @return M4NO_ERROR: there is no error
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intProcessAU(M4WRITER_Context pContext, M4SYS_StreamID streamID,
+ M4SYS_AccessUnit* pAU);
+
+/**
+ ******************************************************************************
+ * M4OSA_ERR M4VSS3GPP_intVPP()
+ * @brief We implement our own VideoPreProcessing function
+ * @note It is called by the video encoder
+ * @param pContext (IN) VPP context, which actually is the VSS 3GPP context in our case
+ * @param pPlaneIn (IN)
+ * @param pPlaneOut (IN/OUT) Pointer to an array of 3 planes that will contain the
+ * output YUV420 image
+ * @return M4NO_ERROR: No error
+ ******************************************************************************
+*/
+M4OSA_ERR M4VSS3GPP_intVPP(M4VPP_Context pContext, M4VIFI_ImagePlane* pPlaneIn,
+ M4VIFI_ImagePlane* pPlaneOut);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __M4VSS3GPP_INTERNALFUNCTIONS_H__ */
+