/* * 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 M4MCS_InternalFunctions.h * @brief This file contains all functions declarations internal * to the MCS. ************************************************************************* */ #ifndef __M4MCS_INTERNALFUNCTIONS_H__ #define __M4MCS_INTERNALFUNCTIONS_H__ #ifdef __cplusplus extern "C" { #endif #include "M4VPP_API.h" #include "M4ENCODER_common.h" /** ************************************************************************** * M4OSA_ERR M4MCS_intApplyVPP( M4VPP_Context pContext, * M4VIFI_ImagePlane* pPlaneIn, * M4VIFI_ImagePlane* pPlaneOut) * @brief Do the video rendering and the resize (if needed) * @note It is called by the video encoder * @param pContext (IN) VPP context, which actually is the MCS * internal context in our case * @param pPlaneIn (IN) Contains the image * @param pPlaneOut (IN/OUT) Pointer to an array of 3 planes that will * contain the output YUV420 image * @return M4NO_ERROR: No error * @return ERR_MCS_VIDEO_DECODE_ERROR: the video decoding failed * @return ERR_MCS_RESIZE_ERROR: the resizing failed * @return Any error returned by an underlaying module ************************************************************************** */ M4OSA_ERR M4MCS_intApplyVPP(M4VPP_Context pContext, M4VIFI_ImagePlane* pPlaneIn, M4VIFI_ImagePlane* pPlaneOut); /** ************************************************************************** * M4OSA_ERR M4MCS_SubscribeMediaAndCodec(M4MCS_Context pContext); * @brief This function registers the reader, decoders, writers and encoders * in the MCS. * @note * @param pContext: (IN) Execution context. * @return M4NO_ERROR: there is no error * @return M4ERR_PARAMETER pContext is NULL ************************************************************************** */ M4OSA_ERR M4MCS_subscribeMediaAndCodec(M4MCS_Context pContext); /** ************************************************************************** * @brief Clear encoders, decoders, reader and writers interfaces tables * @param pContext (IN/OUT) MCS context. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: The context is null ************************************************************************** */ M4OSA_ERR M4MCS_clearInterfaceTables(M4MCS_Context pContext); /** ************************************************************************** * M4OSA_ERR M4MCS_registerWriter(M4MCS_Context pContext, * M4VIDEOEDITING_FileType MediaType, * M4WRITER_GlobalInterface *pWtrGlobalInterface, * M4WRITER_DataInterface *pWtrDataInterface) * @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 M4MCS_registerWriter( M4MCS_Context pContext, M4WRITER_OutputFileType MediaType, M4WRITER_GlobalInterface* pWtrGlobalInterface, M4WRITER_DataInterface* pWtrDataInterface); /** ****************************************************************************** * M4OSA_ERR M4MCS_registerEncoder( M4MCS_Context pContext, * M4VIDEOEDITING_VideoFormat mediaType, * M4ENCODER_GlobalInterface *pEncGlobalInterface) * @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 M4MCS_registerVideoEncoder( M4MCS_Context pContext, M4ENCODER_Format MediaType, M4ENCODER_GlobalInterface *pEncGlobalInterface); /** ****************************************************************************** * M4OSA_ERR M4MCS_registerAudioEncoder( M4MCS_Context pContext, * M4ENCODER_AudioFormat mediaType, * M4ENCODER_AudioGlobalInterface *pEncGlobalInterface) * @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 M4MCS_registerAudioEncoder( M4MCS_Context pContext, M4ENCODER_AudioFormat MediaType, M4ENCODER_AudioGlobalInterface *pEncGlobalInterface); /** ************************************************************************** * @brief Register reader. * @param pContext (IN/OUT) MCS context. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) ************************************************************************** */ M4OSA_ERR M4MCS_registerReader( M4MCS_Context pContext, M4READER_MediaType mediaType, M4READER_GlobalInterface *pRdrGlobalInterface, M4READER_DataInterface *pRdrDataInterface); /** ************************************************************************** * @brief Register video decoder * @param pContext (IN/OUT) MCS 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 M4MCS_registerVideoDecoder( M4MCS_Context pContext, M4DECODER_VideoType decoderType, M4DECODER_VideoInterface *pDecoderInterface); /** ************************************************************************ * @brief Register audio decoder * @note This function is used internaly by the MCS to register Core audio decoders, * @param context (IN/OUT) MCS 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 M4MCS_registerAudioDecoder(M4MCS_Context pContext, M4AD_Type decoderType, M4AD_Interface *pDecoderInterface); /** ************************************************************************ * @brief Unregister writer * @param pContext (IN/OUT) MCS context. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) ************************************************************************ */ M4OSA_ERR M4MCS_unRegisterAllWriters(M4MCS_Context pContext); /** ************************************************************************ * @brief Unregister the encoders * @param pContext (IN/OUT) MCS context. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) ************************************************************************ */ M4OSA_ERR M4MCS_unRegisterAllEncoders(M4MCS_Context pContext); /** ************************************************************************ * @brief Unregister reader * @param pContext (IN/OUT) MCS context. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) ************************************************************************ */ M4OSA_ERR M4MCS_unRegisterAllReaders(M4MCS_Context pContext); /** ************************************************************************ * @brief Unregister the decoders * @param pContext (IN/OUT) MCS context. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) ************************************************************************ */ M4OSA_ERR M4MCS_unRegisterAllDecoders(M4MCS_Context pContext); /** ************************************************************************ * @brief Set current writer * @param pContext (IN/OUT) MCS context. * @param mediaType (IN) Media type. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) * @return M4WAR_MCS_MEDIATYPE_NOT_SUPPORTED: Media type not supported ************************************************************************ */ M4OSA_ERR M4MCS_setCurrentWriter( M4MCS_Context pContext, M4VIDEOEDITING_FileType mediaType); /** ************************************************************************ * @brief Set a video encoder * @param pContext (IN/OUT) MCS context. * @param MediaType (IN) Encoder type * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) * @return M4WAR_MCS_MEDIATYPE_NOT_SUPPORTED: Media type not supported ************************************************************************ */ M4OSA_ERR M4MCS_setCurrentVideoEncoder( M4MCS_Context pContext, M4VIDEOEDITING_VideoFormat mediaType); /** ************************************************************************ * @brief Set an audio encoder * @param context (IN/OUT) MCS context. * @param MediaType (IN) Encoder type * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) ************************************************************************ */ M4OSA_ERR M4MCS_setCurrentAudioEncoder( M4MCS_Context pContext, M4VIDEOEDITING_AudioFormat mediaType); /** ************************************************************************ * @brief Set current reader * @param pContext (IN/OUT) MCS context. * @param mediaType (IN) Media type. * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) * @return M4WAR_MCS_MEDIATYPE_NOT_SUPPORTED: Media type not supported ************************************************************************ */ M4OSA_ERR M4MCS_setCurrentReader( M4MCS_Context pContext, M4VIDEOEDITING_FileType mediaType); /** ************************************************************************ * @brief Set a video decoder * @param pContext (IN/OUT) MCS context. * @param decoderType (IN) Decoder type * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) * @return M4WAR_MCS_MEDIATYPE_NOT_SUPPORTED: Media type not supported ************************************************************************ */ M4OSA_ERR M4MCS_setCurrentVideoDecoder( M4MCS_Context pContext, M4_StreamType mediaType); /** ************************************************************************ * @brief Set an audio decoder * @param context (IN/OUT) MCS context. * @param decoderType (IN) Decoder type * @return M4NO_ERROR: No error * @return M4ERR_PARAMETER: A parameter is null (in DEBUG only) ************************************************************************ */ M4OSA_ERR M4MCS_setCurrentAudioDecoder(M4MCS_Context pContext, M4_StreamType mediaType); /** ****************************************************************************** * M4OSA_ERR M4MCS_intCheckAudioEffects(M4MCS_InternalContext* pContext) * @brief Check if an effect has to be applied currently * @note It is called by the stepEncoding function * @param pContext (IN) MCS internal context * @return M4NO_ERROR: No error ****************************************************************************** */ M4OSA_ERR M4MCS_intCheckAudioEffects(M4MCS_InternalContext* pC); /** ****************************************************************************** * M4OSA_ERR M4MCS_editAudioEffectFct_FadeIn() * @brief Apply audio effect FadeIn to pPCMdata * @param pC (IN/OUT) Internal edit context * @param pPCMdata (IN/OUT) Input and Output PCM audio data * @param uiPCMsize (IN) Size of pPCMdata * @param pProgress (IN) Effect progress * @return M4NO_ERROR: No error ****************************************************************************** */ M4OSA_ERR M4MCS_editAudioEffectFct_FadeIn( M4OSA_Void *pFunctionContext, M4OSA_Int16 *pPCMdata, M4OSA_UInt32 uiPCMsize, M4MCS_ExternalProgress *pProgress); /** ****************************************************************************** * M4OSA_ERR M4MCS_editAudioEffectFct_FadeIn() * @brief Apply audio effect FadeIn to pPCMdata * @param pC (IN/OUT) Internal edit context * @param pPCMdata (IN/OUT) Input and Output PCM audio data * @param uiPCMsize (IN) Size of pPCMdata * @param pProgress (IN) Effect progress * @return M4NO_ERROR: No error ****************************************************************************** */ M4OSA_ERR M4MCS_editAudioEffectFct_FadeOut( M4OSA_Void *pFunctionContext, M4OSA_Int16 *pPCMdata, M4OSA_UInt32 uiPCMsize, M4MCS_ExternalProgress *pProgress); #ifdef __cplusplus } #endif #endif /* __M4MCS_INTERNALFUNCTIONS_H__ */