/* * 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_MediaAndCodecSubscription.c * @brief Media readers and codecs subscription * @note This file implements the subscription of supported media * readers and decoders for the MCS. Potential support can * be activated or de-activated * using compilation flags set in the projects settings. ************************************************************************ */ /** ******************************************************************** * Includes ******************************************************************** */ #include "NXPSW_CompilerSwitches.h" #include "M4OSA_Debug.h" #include "M4MCS_InternalTypes.h" /**< Include for MCS specific types */ #include "M4MCS_InternalFunctions.h" /**< Registration module */ /* _______________________ */ /*| |*/ /*| reader subscription |*/ /*|_______________________|*/ /* Reader registration : at least one reader must be defined */ #ifndef M4VSS_SUPPORT_READER_3GP #ifndef M4VSS_SUPPORT_READER_AMR #ifndef M4VSS_SUPPORT_READER_MP3 #error "no reader registered" #endif /* M4VSS_SUPPORT_READER_MP3 */ #endif /* M4VSS_SUPPORT_READER_AMR */ #endif /* M4VSS_SUPPORT_READER_3GP */ /* Include files for each reader to subscribe */ #ifdef M4VSS_SUPPORT_READER_3GP #include "VideoEditor3gpReader.h" #endif #ifdef M4VSS_SUPPORT_READER_AMR #include "M4READER_Amr.h" #endif #ifdef M4VSS_SUPPORT_READER_MP3 #include "VideoEditorMp3Reader.h" #endif /* ______________________________ */ /*| |*/ /*| video decoder subscription |*/ /*|______________________________|*/ #include "VideoEditorAudioDecoder.h" #include "VideoEditorVideoDecoder.h" /* _______________________ */ /*| |*/ /*| writer subscription |*/ /*|_______________________|*/ /* Writer registration : at least one writer must be defined */ #ifndef M4VSS_SUPPORT_WRITER_AMR #ifndef M4VSS_SUPPORT_WRITER_3GPP #ifndef M4VSS_SUPPORT_WRITER_PCM #ifndef M4VSS_SUPPORT_WRITER_MP3 #error "no writer registered" #endif /* M4VSS_SUPPORT_WRITER_MP3 */ #endif /* M4VSS_SUPPORT_WRITER_PCM */ #endif /* M4VSS_SUPPORT_WRITER_3GPP */ #endif /* M4VSS_SUPPORT_WRITER_AMR */ /* Include files for each writer to subscribe */ #ifdef M4VSS_SUPPORT_WRITER_AMR extern M4OSA_ERR M4WRITER_AMR_getInterfaces( M4WRITER_OutputFileType* Type, M4WRITER_GlobalInterface** SrcGlobalInterface, M4WRITER_DataInterface** SrcDataInterface); #endif #ifdef M4VSS_SUPPORT_WRITER_3GPP extern M4OSA_ERR M4WRITER_3GP_getInterfaces( M4WRITER_OutputFileType* Type, M4WRITER_GlobalInterface** SrcGlobalInterface, M4WRITER_DataInterface** SrcDataInterface); #endif #ifdef M4VSS_SUPPORT_WRITER_PCM extern M4OSA_ERR M4WRITER_PCM_getInterfaces( M4WRITER_OutputFileType* Type, M4WRITER_GlobalInterface** SrcGlobalInterface, M4WRITER_DataInterface** SrcDataInterface); #endif #ifdef M4VSS_SUPPORT_WRITER_MP3 extern M4OSA_ERR M4WRITER_MP3_getInterfaces( M4WRITER_OutputFileType* Type, M4WRITER_GlobalInterface** SrcGlobalInterface, M4WRITER_DataInterface** SrcDataInterface); #endif /* ______________________________ */ /*| |*/ /*| video encoder subscription |*/ /*|______________________________|*/ #include "VideoEditorAudioEncoder.h" #include "VideoEditorVideoEncoder.h" /* Include files for each video encoder to subscribe */ #ifdef M4VSS_SUPPORT_ENCODER_MPEG4 //#include "M4MP4E_interface.h" #endif #define M4ERR_CHECK_NULL_RETURN_VALUE(retval, pointer) \ if ((pointer) == M4OSA_NULL) return ((M4OSA_ERR)(retval)); /** ****************************************************************************** * 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) { M4OSA_ERR err = M4NO_ERROR; M4READER_MediaType readerMediaType; M4READER_GlobalInterface* pReaderGlobalInterface; M4READER_DataInterface* pReaderDataInterface; M4WRITER_OutputFileType writerMediaType; M4WRITER_GlobalInterface* pWriterGlobalInterface; M4WRITER_DataInterface* pWriterDataInterface; M4AD_Type audioDecoderType; M4ENCODER_AudioFormat audioCodecType; M4ENCODER_AudioGlobalInterface* pAudioCodecInterface; M4AD_Interface* pAudioDecoderInterface; M4DECODER_VideoType videoDecoderType; M4ENCODER_Format videoCodecType; M4ENCODER_GlobalInterface* pVideoCodecInterface; M4DECODER_VideoInterface* pVideoDecoderInterface; M4ERR_CHECK_NULL_RETURN_VALUE(M4ERR_PARAMETER, pContext); /* _______________________ */ /*| |*/ /*| reader subscription |*/ /*|_______________________|*/ /* --- 3GP --- */ #ifdef M4VSS_SUPPORT_READER_3GP err = VideoEditor3gpReader_getInterface(&readerMediaType, &pReaderGlobalInterface, &pReaderDataInterface); if (M4NO_ERROR != err) { M4OSA_TRACE1_0("M4READER_3GP interface allocation error"); return err; } err = M4MCS_registerReader( pContext, readerMediaType, pReaderGlobalInterface, pReaderDataInterface); M4OSA_DEBUG_IF1((err != M4NO_ERROR), err, "M4MCS_subscribeMediaAndCodec: can't register 3GP reader"); #endif /* M4VSS_SUPPORT_READER_3GP */ /* --- AMR --- */ #ifdef M4VSS_SUPPORT_READER_AMR err = M4READER_AMR_getInterfaces( &readerMediaType, &pReaderGlobalInterface, &pReaderDataInterface); if (M4NO_ERROR != err) { M4OSA_TRACE1_0("M4READER_AMR interface allocation error"); return err; } err = M4MCS_registerReader( pContext, readerMediaType, pReaderGlobalInterface, pReaderDataInterface); M4OSA_DEBUG_IF1((err != M4NO_ERROR), err, "M4MCS_subscribeMediaAndCodec: can't register AMR reader"); #endif /* M4VSS_SUPPORT_READER_AMR */ /* --- MP3 --- */ #ifdef M4VSS_SUPPORT_READER_MP3 err = VideoEditorMp3Reader_getInterface(&readerMediaType, &pReaderGlobalInterface, &pReaderDataInterface); if (M4NO_ERROR != err) { M4OSA_TRACE1_0("M4READER_MP3 interface allocation error"); return err; } err = M4MCS_registerReader( pContext, readerMediaType, pReaderGlobalInterface, pReaderDataInterface); M4OSA_DEBUG_IF1((err != M4NO_ERROR), err, "M4MCS_subscribeMediaAndCodec: can't register MP3 reader"); #endif /* M4VSS_SUPPORT_READER_MP3 */ /* ______________________________ */ /*| |*/ /*| video decoder subscription |*/ /*|______________________________|*/ /* --- MPEG4 & H263 --- */ #ifdef M4VSS_SUPPORT_VIDEC_3GP err = VideoEditorVideoDecoder_getInterface_MPEG4( &videoDecoderType, (M4OSA_Void *)&pVideoDecoderInterface); if (M4NO_ERROR != err) { M4OSA_TRACE1_0("M4DECODER_MPEG4 interface allocation error"); return err; } err = M4MCS_registerVideoDecoder( pContext, videoDecoderType, pVideoDecoderInterface); M4OSA_DEBUG_IF1((err != M4NO_ERROR), err, "M4MCS_subscribeMediaAndCodec: can't register MPEG4 decoder"); #endif /* M4VSS_SUPPORT_VIDEC_3GP */ #ifdef M4VSS_SUPPORT_VIDEO_AVC err = VideoEditorVideoDecoder_getInterface_H264( &videoDecoderType, (M4OSA_Void *)&pVideoDecoderInterface); if (M4NO_ERROR != err) { M4OSA_TRACE1_0("M4DECODER_AVC interface allocation error"); return err; } err = M4MCS_registerVideoDecoder( pContext, videoDecoderType, pVideoDecoderInterface); M4OSA_DEBUG_IF1((err != M4NO_ERROR), err, "M4MCS_subscribeMediaAndCodec: can't register AVC decoder"); #endif /* M4VSS_SUPPORT_VIDEO_AVC */ /* ______________________________ */ /*| |*/ /*| audio decoder subscription |*/ /*|______________________________|*/ /* --- AMRNB --- */ #ifdef M4VSS_SUPPORT_AUDEC_AMRNB err = VideoEditorAudioDecoder_getInterface_AMRNB(&audioDecoderType, &pAudioDecoderInterface); if (M4NO_ERROR != err) { M4OSA_TRACE1_0("M4AD PHILIPS AMRNB interface allocation error"); return err; } err = M4MCS_registerAudioDecoder( pContext, audioDecoderType, pAudioDecoderInterface); M4OSA_DEBUG_IF1((err != M4NO_ERROR), err, "M4MCS_subscribeMediaAndCodec: can't register PHILIPS AMRNB decoder"); #endif /* M4VSS_SUPPORT_AUDEC_AMRNB */ /* --- AAC --- */ #ifdef M4VSS_SUPPORT_AUDEC_AAC err = VideoEditorAudioDecoder_getInterface_AAC(&audioDecoderType, &pAudioDecoderInterface); if (M4NO_ERROR != err) { M4OSA_TRACE1_0("M4AD PHILIPS AAC interface allocation error"); return err; } err = M4MCS_registerAudioDecoder( pContext, audioDecoderType, pAudioDecoderInterface); M4OSA_DEBUG_IF1((err != M4NO_ERROR), err, "M4MCS_subscribeMediaAndCodec: can't register PHILIPS AAC decoder"); #endif /* M4VSS_SUPPORT_AUDEC_AAC */ /* --- MP3 --- */ #ifdef M4VSS_SUPPORT_AUDEC_MP3 err = VideoEditorAudioDecoder_getInterface_MP3(&audioDecoderType, &pAudioDecoderInterface); if (M4NO_ERROR != err) { M4OSA_TRACE1_0("M4AD PHILIPS MP3 interface allocation error"); return err; } err = M4MCS_registerAudioDecoder( pContext, audioDecoderType, pAudioDecoderInterface); M4OSA_DEBUG_IF1((err != M4NO_ERROR), err, "M4MCS_subscribeMediaAndCodec: can't register PHILIPS MP3 decoder"); #endif /* M4VSS_SUPPORT_AUDEC_MP3 */ /* --- EVRC --- */ /* _______________________ */ /*| |*/ /*| writer subscription |*/ /*|_______________________|*/ /* --- PCM --- */ /* --- 3GPP --- */ #ifdef M4VSS_SUPPORT_WRITER_3GPP /* retrieves the 3GPP writer media type and pointer to functions*/ err = M4WRITER_3GP_getInterfaces( &writerMediaType, &pWriterGlobalInterface, &pWriterDataInterface); if (M4NO_ERROR != err) { M4OSA_TRACE1_0("M4WRITER_3GP interface allocation error"); return err; } err = M4MCS_registerWriter( pContext, writerMediaType, pWriterGlobalInterface, pWriterDataInterface); M4OSA_DEBUG_IF1((err != M4NO_ERROR), err, "M4MCS_subscribeMediaAndCodec: can't register 3GPP writer"); #endif /* M4VSS_SUPPORT_WRITER_3GPP */ /* ______________________________ */ /*| |*/ /*| video encoder subscription |*/ /*|______________________________|*/ /* --- MPEG4 --- */ #ifdef M4VSS_SUPPORT_ENCODER_MPEG4 /* retrieves the MPEG4 encoder type and pointer to functions*/ err = VideoEditorVideoEncoder_getInterface_MPEG4(&videoCodecType, &pVideoCodecInterface, M4ENCODER_OPEN_ADVANCED); if (M4NO_ERROR != err) { M4OSA_TRACE1_0("M4MP4E_MPEG4 interface allocation error"); return err; } err = M4MCS_registerVideoEncoder( pContext, videoCodecType, pVideoCodecInterface); M4OSA_DEBUG_IF1((err != M4NO_ERROR), err, "M4MCS_subscribeMediaAndCodec: can't register video MPEG4 encoder"); #endif /* M4VSS_SUPPORT_ENCODER_MPEG4 */ /* --- H263 --- */ #ifdef M4VSS_SUPPORT_ENCODER_MPEG4 /* retrieves the H263 encoder type and pointer to functions*/ err = VideoEditorVideoEncoder_getInterface_H263(&videoCodecType, &pVideoCodecInterface, M4ENCODER_OPEN_ADVANCED); if (M4NO_ERROR != err) { M4OSA_TRACE1_0("M4MP4E_H263 interface allocation error"); return err; } err = M4MCS_registerVideoEncoder( pContext, videoCodecType, pVideoCodecInterface); M4OSA_DEBUG_IF1((err != M4NO_ERROR), err, "M4MCS_subscribeMediaAndCodec: can't register video H263 encoder"); #endif /* M4VSS_SUPPORT_ENCODER_MPEG4 */ #ifdef M4VSS_SUPPORT_ENCODER_AVC /* retrieves the H263 encoder type and pointer to functions*/ err = VideoEditorVideoEncoder_getInterface_H264(&videoCodecType, &pVideoCodecInterface, M4ENCODER_OPEN_ADVANCED); if (M4NO_ERROR != err) { M4OSA_TRACE1_0("M4H264E interface allocation error"); return err; } err = M4MCS_registerVideoEncoder( pContext, videoCodecType, pVideoCodecInterface); M4OSA_DEBUG_IF1((err != M4NO_ERROR), err, "M4MCS_subscribeMediaAndCodec: can't register video H264 encoder"); #endif /* M4VSS_SUPPORT_ENCODER_AVC */ /* ______________________________ */ /*| |*/ /*| audio encoder subscription |*/ /*|______________________________|*/ /* --- AMR --- */ #ifdef M4VSS_SUPPORT_ENCODER_AMR /* retrieves the AMR encoder type and pointer to functions*/ err = VideoEditorAudioEncoder_getInterface_AMRNB(&audioCodecType, &pAudioCodecInterface); if (M4NO_ERROR != err) { M4OSA_TRACE1_0("M4AMR interface allocation error"); return err; } err = M4MCS_registerAudioEncoder( pContext, audioCodecType, pAudioCodecInterface); M4OSA_DEBUG_IF1((err != M4NO_ERROR), err, "M4MCS_subscribeMediaAndCodec: can't register audio AMR encoder"); #endif /* M4VSS_SUPPORT_ENCODER_AMR */ /* --- AAC --- */ #ifdef M4VSS_SUPPORT_ENCODER_AAC /* retrieves the AAC encoder type and pointer to functions*/ err = VideoEditorAudioEncoder_getInterface_AAC(&audioCodecType, &pAudioCodecInterface); if (M4NO_ERROR != err) { M4OSA_TRACE1_0("M4AAC interface allocation error"); return err; } err = M4MCS_registerAudioEncoder( pContext, audioCodecType, pAudioCodecInterface); M4OSA_DEBUG_IF1((err != M4NO_ERROR), err, "M4MCS_subscribeMediaAndCodec: can't register audio AAC encoder"); #endif /* M4VSS_SUPPORT_ENCODER_AAC */ /* --- MP3 --- */ #ifdef M4VSS_SUPPORT_ENCODER_MP3 /* retrieves the MP3 encoder type and pointer to functions*/ err = VideoEditorAudioEncoder_getInterface_MP3(&audioCodecType, &pAudioCodecInterface); if (M4NO_ERROR != err) { M4OSA_TRACE1_0("M4MP3E interface allocation error"); return err; } err = M4MCS_registerAudioEncoder( pContext, audioCodecType, pAudioCodecInterface); M4OSA_DEBUG_IF1((err != M4NO_ERROR), err, "M4MCS_subscribeMediaAndCodec: can't register audio MP3 encoder"); #endif /* M4VSS_SUPPORT_ENCODER_MP3 */ return err; }