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