| /* |
| * 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; |
| } |
| |