/* * 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 __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); /****************************************************************************** * 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__ */