Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 /**
     17  ************************************************************************
     18  * @file   M4MCS_MediaAndCodecSubscription.c
     19  * @brief  Media readers and codecs subscription
     20  * @note   This file implements the subscription of supported media
     21  *         readers and decoders for the MCS. Potential support can
     22  *         be activated or de-activated
     23  *         using compilation flags set in the projects settings.
     24  ************************************************************************
     25  */
     26 
     27 /**
     28  ********************************************************************
     29  * Includes
     30  ********************************************************************
     31  */
     32 #include "NXPSW_CompilerSwitches.h"
     33 
     34 
     35 #include "M4OSA_Debug.h"
     36 #include "M4MCS_InternalTypes.h"                /**< Include for MCS specific types */
     37 #include "M4MCS_InternalFunctions.h"            /**< Registration module */
     38 
     39 /* _______________________ */
     40 /*|                       |*/
     41 /*|  reader subscription  |*/
     42 /*|_______________________|*/
     43 
     44 /* Reader registration : at least one reader must be defined */
     45 #ifndef M4VSS_SUPPORT_READER_3GP
     46 #ifndef M4VSS_SUPPORT_READER_AMR
     47 #ifndef M4VSS_SUPPORT_READER_MP3
     48 #error "no reader registered"
     49 #endif /* M4VSS_SUPPORT_READER_MP3 */
     50 #endif /* M4VSS_SUPPORT_READER_AMR */
     51 #endif /* M4VSS_SUPPORT_READER_3GP */
     52 
     53 /* Include files for each reader to subscribe */
     54 #ifdef M4VSS_SUPPORT_READER_3GP
     55 #include "VideoEditor3gpReader.h"
     56 #endif
     57 
     58 #ifdef M4VSS_SUPPORT_READER_AMR
     59 #include "M4READER_Amr.h"
     60 #endif
     61 #ifdef M4VSS_SUPPORT_READER_MP3
     62 #include "VideoEditorMp3Reader.h"
     63 #endif
     64 
     65 /* ______________________________ */
     66 /*|                              |*/
     67 /*|  video decoder subscription  |*/
     68 /*|______________________________|*/
     69 
     70 #include "VideoEditorAudioDecoder.h"
     71 #include "VideoEditorVideoDecoder.h"
     72 
     73 
     74 
     75 /* _______________________ */
     76 /*|                       |*/
     77 /*|  writer subscription  |*/
     78 /*|_______________________|*/
     79 
     80 /* Writer registration : at least one writer must be defined */
     81 #ifndef M4VSS_SUPPORT_WRITER_AMR
     82 #ifndef M4VSS_SUPPORT_WRITER_3GPP
     83 #ifndef M4VSS_SUPPORT_WRITER_PCM
     84 #ifndef M4VSS_SUPPORT_WRITER_MP3
     85 #error "no writer registered"
     86 #endif /* M4VSS_SUPPORT_WRITER_MP3 */
     87 #endif /* M4VSS_SUPPORT_WRITER_PCM */
     88 #endif /* M4VSS_SUPPORT_WRITER_3GPP */
     89 #endif /* M4VSS_SUPPORT_WRITER_AMR */
     90 
     91 /* Include files for each writer to subscribe */
     92 #ifdef M4VSS_SUPPORT_WRITER_AMR
     93 extern M4OSA_ERR M4WRITER_AMR_getInterfaces( M4WRITER_OutputFileType* Type,
     94                                              M4WRITER_GlobalInterface** SrcGlobalInterface,
     95                                              M4WRITER_DataInterface** SrcDataInterface);
     96 #endif
     97 #ifdef M4VSS_SUPPORT_WRITER_3GPP
     98 extern M4OSA_ERR M4WRITER_3GP_getInterfaces( M4WRITER_OutputFileType* Type,
     99                                              M4WRITER_GlobalInterface** SrcGlobalInterface,
    100                                              M4WRITER_DataInterface** SrcDataInterface);
    101 #endif
    102 #ifdef M4VSS_SUPPORT_WRITER_PCM
    103 extern M4OSA_ERR M4WRITER_PCM_getInterfaces( M4WRITER_OutputFileType* Type,
    104                                              M4WRITER_GlobalInterface** SrcGlobalInterface,
    105                                              M4WRITER_DataInterface** SrcDataInterface);
    106 #endif
    107 #ifdef M4VSS_SUPPORT_WRITER_MP3
    108 extern M4OSA_ERR M4WRITER_MP3_getInterfaces( M4WRITER_OutputFileType* Type,
    109                                              M4WRITER_GlobalInterface** SrcGlobalInterface,
    110                                              M4WRITER_DataInterface** SrcDataInterface);
    111 #endif
    112 
    113 /* ______________________________ */
    114 /*|                              |*/
    115 /*|  video encoder subscription  |*/
    116 /*|______________________________|*/
    117 #include "VideoEditorAudioEncoder.h"
    118 #include "VideoEditorVideoEncoder.h"
    119 
    120 
    121 /* Include files for each video encoder to subscribe */
    122 #ifdef M4VSS_SUPPORT_ENCODER_MPEG4
    123 //#include "M4MP4E_interface.h"
    124 #endif
    125 
    126 
    127 #define M4ERR_CHECK_NULL_RETURN_VALUE(retval, pointer) \
    128     if ((pointer) == M4OSA_NULL) return ((M4OSA_ERR)(retval));
    129 
    130 /**
    131  ******************************************************************************
    132  * M4OSA_ERR M4MCS_SubscribeMediaAndCodec(M4MCS_Context pContext);
    133  * @brief    This function registers the reader, decoders, writers and encoders
    134  *          in the MCS.
    135  * @note
    136  * @param    pContext:    (IN) Execution context.
    137  * @return    M4NO_ERROR: there is no error
    138  * @return    M4ERR_PARAMETER    pContext is NULL
    139  ******************************************************************************
    140  */
    141 M4OSA_ERR M4MCS_subscribeMediaAndCodec(M4MCS_Context pContext)
    142 {
    143     M4OSA_ERR                   err = M4NO_ERROR;
    144 
    145     M4READER_MediaType          readerMediaType;
    146     M4READER_GlobalInterface*   pReaderGlobalInterface;
    147     M4READER_DataInterface*     pReaderDataInterface;
    148 
    149     M4WRITER_OutputFileType     writerMediaType;
    150     M4WRITER_GlobalInterface*   pWriterGlobalInterface;
    151     M4WRITER_DataInterface*     pWriterDataInterface;
    152 
    153     M4AD_Type                   audioDecoderType;
    154     M4ENCODER_AudioFormat       audioCodecType;
    155     M4ENCODER_AudioGlobalInterface* pAudioCodecInterface;
    156     M4AD_Interface*             pAudioDecoderInterface;
    157 
    158     M4DECODER_VideoType         videoDecoderType;
    159     M4ENCODER_Format            videoCodecType;
    160     M4ENCODER_GlobalInterface*  pVideoCodecInterface;
    161     M4DECODER_VideoInterface*   pVideoDecoderInterface;
    162 
    163     M4ERR_CHECK_NULL_RETURN_VALUE(M4ERR_PARAMETER, pContext);
    164 
    165     /* _______________________ */
    166     /*|                       |*/
    167     /*|  reader subscription  |*/
    168     /*|_______________________|*/
    169 
    170     /* --- 3GP --- */
    171 
    172 #ifdef M4VSS_SUPPORT_READER_3GP
    173     err = VideoEditor3gpReader_getInterface(&readerMediaType,
    174                                             &pReaderGlobalInterface,
    175                                             &pReaderDataInterface);
    176     if (M4NO_ERROR != err)
    177     {
    178         M4OSA_TRACE1_0("M4READER_3GP interface allocation error");
    179         return err;
    180     }
    181     err = M4MCS_registerReader( pContext, readerMediaType,
    182                                 pReaderGlobalInterface,
    183                                 pReaderDataInterface);
    184     M4OSA_DEBUG_IF1((err != M4NO_ERROR), err,
    185          "M4MCS_subscribeMediaAndCodec: can't register 3GP reader");
    186 #endif /* M4VSS_SUPPORT_READER_3GP */
    187 
    188     /* --- AMR --- */
    189 
    190 #ifdef M4VSS_SUPPORT_READER_AMR
    191     err = M4READER_AMR_getInterfaces(   &readerMediaType,
    192                                         &pReaderGlobalInterface,
    193                                         &pReaderDataInterface);
    194     if (M4NO_ERROR != err)
    195     {
    196         M4OSA_TRACE1_0("M4READER_AMR interface allocation error");
    197         return err;
    198     }
    199     err = M4MCS_registerReader( pContext, readerMediaType,
    200                                 pReaderGlobalInterface,
    201                                 pReaderDataInterface);
    202     M4OSA_DEBUG_IF1((err != M4NO_ERROR), err,
    203          "M4MCS_subscribeMediaAndCodec: can't register AMR reader");
    204 #endif /* M4VSS_SUPPORT_READER_AMR */
    205 
    206     /* --- MP3 --- */
    207 
    208 #ifdef M4VSS_SUPPORT_READER_MP3
    209 
    210     err = VideoEditorMp3Reader_getInterface(&readerMediaType,
    211                                             &pReaderGlobalInterface,
    212                                             &pReaderDataInterface);
    213     if (M4NO_ERROR != err)
    214     {
    215         M4OSA_TRACE1_0("M4READER_MP3 interface allocation error");
    216         return err;
    217     }
    218     err = M4MCS_registerReader( pContext, readerMediaType,
    219                                 pReaderGlobalInterface,
    220                                 pReaderDataInterface);
    221     M4OSA_DEBUG_IF1((err != M4NO_ERROR), err,
    222          "M4MCS_subscribeMediaAndCodec: can't register MP3 reader");
    223 #endif /* M4VSS_SUPPORT_READER_MP3 */
    224 
    225     /* ______________________________ */
    226     /*|                              |*/
    227     /*|  video decoder subscription  |*/
    228     /*|______________________________|*/
    229 
    230     /* --- MPEG4 & H263 --- */
    231 
    232 #ifdef M4VSS_SUPPORT_VIDEC_3GP
    233 
    234     err = VideoEditorVideoDecoder_getInterface_MPEG4( &videoDecoderType,
    235                                 (M4OSA_Void *)&pVideoDecoderInterface);
    236     if (M4NO_ERROR != err)
    237     {
    238         M4OSA_TRACE1_0("M4DECODER_MPEG4 interface allocation error");
    239         return err;
    240     }
    241     err = M4MCS_registerVideoDecoder(   pContext, videoDecoderType,
    242                                         pVideoDecoderInterface);
    243     M4OSA_DEBUG_IF1((err != M4NO_ERROR), err,
    244          "M4MCS_subscribeMediaAndCodec: can't register MPEG4 decoder");
    245 #endif /* M4VSS_SUPPORT_VIDEC_3GP */
    246 
    247 
    248 #ifdef M4VSS_SUPPORT_VIDEO_AVC
    249 
    250     err = VideoEditorVideoDecoder_getInterface_H264( &videoDecoderType,
    251                                 (M4OSA_Void *)&pVideoDecoderInterface);
    252 
    253     if (M4NO_ERROR != err)
    254     {
    255         M4OSA_TRACE1_0("M4DECODER_AVC interface allocation error");
    256         return err;
    257     }
    258     err = M4MCS_registerVideoDecoder(   pContext, videoDecoderType,
    259                                         pVideoDecoderInterface);
    260     M4OSA_DEBUG_IF1((err != M4NO_ERROR), err,
    261          "M4MCS_subscribeMediaAndCodec: can't register AVC decoder");
    262 #endif /* M4VSS_SUPPORT_VIDEO_AVC */
    263 
    264 
    265     /* ______________________________ */
    266     /*|                              |*/
    267     /*|  audio decoder subscription  |*/
    268     /*|______________________________|*/
    269 
    270     /* --- AMRNB --- */
    271 
    272 #ifdef M4VSS_SUPPORT_AUDEC_AMRNB
    273     err = VideoEditorAudioDecoder_getInterface_AMRNB(&audioDecoderType,
    274                                                 &pAudioDecoderInterface);
    275     if (M4NO_ERROR != err)
    276     {
    277         M4OSA_TRACE1_0("M4AD PHILIPS AMRNB interface allocation error");
    278         return err;
    279     }
    280     err = M4MCS_registerAudioDecoder(   pContext, audioDecoderType,
    281                                         pAudioDecoderInterface);
    282     M4OSA_DEBUG_IF1((err != M4NO_ERROR), err,
    283          "M4MCS_subscribeMediaAndCodec: can't register PHILIPS AMRNB decoder");
    284 #endif /* M4VSS_SUPPORT_AUDEC_AMRNB */
    285 
    286     /* --- AAC --- */
    287 
    288 #ifdef M4VSS_SUPPORT_AUDEC_AAC
    289 
    290     err = VideoEditorAudioDecoder_getInterface_AAC(&audioDecoderType,
    291                                             &pAudioDecoderInterface);
    292     if (M4NO_ERROR != err)
    293     {
    294         M4OSA_TRACE1_0("M4AD PHILIPS AAC interface allocation error");
    295         return err;
    296     }
    297     err = M4MCS_registerAudioDecoder(   pContext, audioDecoderType,
    298                                         pAudioDecoderInterface);
    299     M4OSA_DEBUG_IF1((err != M4NO_ERROR), err,
    300          "M4MCS_subscribeMediaAndCodec: can't register PHILIPS AAC decoder");
    301 #endif /* M4VSS_SUPPORT_AUDEC_AAC */
    302 
    303     /* --- MP3 --- */
    304 
    305 #ifdef M4VSS_SUPPORT_AUDEC_MP3
    306 
    307     err = VideoEditorAudioDecoder_getInterface_MP3(&audioDecoderType,
    308                                             &pAudioDecoderInterface);
    309     if (M4NO_ERROR != err)
    310     {
    311         M4OSA_TRACE1_0("M4AD PHILIPS MP3 interface allocation error");
    312         return err;
    313     }
    314     err = M4MCS_registerAudioDecoder(   pContext, audioDecoderType,
    315                                         pAudioDecoderInterface);
    316     M4OSA_DEBUG_IF1((err != M4NO_ERROR), err,
    317          "M4MCS_subscribeMediaAndCodec: can't register PHILIPS MP3 decoder");
    318 #endif  /* M4VSS_SUPPORT_AUDEC_MP3 */
    319 
    320     /* --- EVRC --- */
    321 
    322 
    323     /* _______________________ */
    324     /*|                       |*/
    325     /*|  writer subscription  |*/
    326     /*|_______________________|*/
    327 
    328     /* --- PCM --- */
    329 
    330 
    331     /* --- 3GPP --- */
    332 
    333 #ifdef M4VSS_SUPPORT_WRITER_3GPP
    334     /* retrieves the 3GPP writer media type and pointer to functions*/
    335     err = M4WRITER_3GP_getInterfaces(   &writerMediaType,
    336                                         &pWriterGlobalInterface,
    337                                         &pWriterDataInterface);
    338     if (M4NO_ERROR != err)
    339     {
    340         M4OSA_TRACE1_0("M4WRITER_3GP interface allocation error");
    341         return err;
    342     }
    343     err = M4MCS_registerWriter( pContext, writerMediaType,
    344                                 pWriterGlobalInterface,
    345                                 pWriterDataInterface);
    346     M4OSA_DEBUG_IF1((err != M4NO_ERROR), err,
    347          "M4MCS_subscribeMediaAndCodec: can't register 3GPP writer");
    348 #endif /* M4VSS_SUPPORT_WRITER_3GPP */
    349 
    350 
    351     /* ______________________________ */
    352     /*|                              |*/
    353     /*|  video encoder subscription  |*/
    354     /*|______________________________|*/
    355 
    356     /* --- MPEG4 --- */
    357 
    358 #ifdef M4VSS_SUPPORT_ENCODER_MPEG4
    359        /* retrieves the MPEG4 encoder type and pointer to functions*/
    360     err = VideoEditorVideoEncoder_getInterface_MPEG4(&videoCodecType,
    361                                                 &pVideoCodecInterface,
    362                                                 M4ENCODER_OPEN_ADVANCED);
    363     if (M4NO_ERROR != err)
    364     {
    365         M4OSA_TRACE1_0("M4MP4E_MPEG4 interface allocation error");
    366         return err;
    367     }
    368     err = M4MCS_registerVideoEncoder(   pContext, videoCodecType,
    369                                         pVideoCodecInterface);
    370     M4OSA_DEBUG_IF1((err != M4NO_ERROR), err,
    371          "M4MCS_subscribeMediaAndCodec: can't register video MPEG4 encoder");
    372 #endif /* M4VSS_SUPPORT_ENCODER_MPEG4 */
    373 
    374     /* --- H263 --- */
    375 
    376 #ifdef M4VSS_SUPPORT_ENCODER_MPEG4
    377     /* retrieves the H263 encoder type and pointer to functions*/
    378     err = VideoEditorVideoEncoder_getInterface_H263(&videoCodecType,
    379                                                 &pVideoCodecInterface,
    380                                                 M4ENCODER_OPEN_ADVANCED);
    381 
    382     if (M4NO_ERROR != err)
    383     {
    384         M4OSA_TRACE1_0("M4MP4E_H263 interface allocation error");
    385         return err;
    386     }
    387     err = M4MCS_registerVideoEncoder( pContext, videoCodecType,
    388                                       pVideoCodecInterface);
    389     M4OSA_DEBUG_IF1((err != M4NO_ERROR), err,
    390          "M4MCS_subscribeMediaAndCodec: can't register video H263 encoder");
    391 #endif /* M4VSS_SUPPORT_ENCODER_MPEG4 */
    392 
    393 #ifdef M4VSS_SUPPORT_ENCODER_AVC
    394     /* retrieves the H263 encoder type and pointer to functions*/
    395     err = VideoEditorVideoEncoder_getInterface_H264(&videoCodecType,
    396                                                 &pVideoCodecInterface,
    397                                                 M4ENCODER_OPEN_ADVANCED);
    398     if (M4NO_ERROR != err)
    399     {
    400         M4OSA_TRACE1_0("M4H264E interface allocation error");
    401         return err;
    402     }
    403     err = M4MCS_registerVideoEncoder( pContext, videoCodecType, pVideoCodecInterface);
    404     M4OSA_DEBUG_IF1((err != M4NO_ERROR), err,
    405          "M4MCS_subscribeMediaAndCodec: can't register video H264 encoder");
    406 #endif /* M4VSS_SUPPORT_ENCODER_AVC */
    407 
    408     /* ______________________________ */
    409     /*|                              |*/
    410     /*|  audio encoder subscription  |*/
    411     /*|______________________________|*/
    412 
    413     /* --- AMR --- */
    414 
    415 #ifdef M4VSS_SUPPORT_ENCODER_AMR
    416        /* retrieves the AMR encoder type and pointer to functions*/
    417     err = VideoEditorAudioEncoder_getInterface_AMRNB(&audioCodecType,
    418                                                 &pAudioCodecInterface);
    419     if (M4NO_ERROR != err)
    420     {
    421         M4OSA_TRACE1_0("M4AMR interface allocation error");
    422         return err;
    423     }
    424     err = M4MCS_registerAudioEncoder(   pContext, audioCodecType,
    425                                         pAudioCodecInterface);
    426     M4OSA_DEBUG_IF1((err != M4NO_ERROR), err,
    427          "M4MCS_subscribeMediaAndCodec: can't register audio AMR encoder");
    428 #endif /* M4VSS_SUPPORT_ENCODER_AMR */
    429 
    430     /* --- AAC --- */
    431 
    432 #ifdef M4VSS_SUPPORT_ENCODER_AAC
    433     /* retrieves the AAC encoder type and pointer to functions*/
    434     err = VideoEditorAudioEncoder_getInterface_AAC(&audioCodecType,
    435                                                 &pAudioCodecInterface);
    436     if (M4NO_ERROR != err)
    437     {
    438         M4OSA_TRACE1_0("M4AAC interface allocation error");
    439         return err;
    440     }
    441     err = M4MCS_registerAudioEncoder(   pContext, audioCodecType,
    442                                         pAudioCodecInterface);
    443     M4OSA_DEBUG_IF1((err != M4NO_ERROR), err,
    444          "M4MCS_subscribeMediaAndCodec: can't register audio AAC encoder");
    445 #endif /* M4VSS_SUPPORT_ENCODER_AAC */
    446 
    447 
    448 
    449     /* --- MP3 --- */
    450 #ifdef M4VSS_SUPPORT_ENCODER_MP3
    451     /* retrieves the MP3 encoder type and pointer to functions*/
    452     err = VideoEditorAudioEncoder_getInterface_MP3(&audioCodecType,
    453                                                 &pAudioCodecInterface);
    454     if (M4NO_ERROR != err)
    455     {
    456         M4OSA_TRACE1_0("M4MP3E interface allocation error");
    457         return err;
    458     }
    459     err = M4MCS_registerAudioEncoder( pContext, audioCodecType,
    460                                       pAudioCodecInterface);
    461     M4OSA_DEBUG_IF1((err != M4NO_ERROR), err,
    462          "M4MCS_subscribeMediaAndCodec: can't register audio MP3 encoder");
    463 #endif /* M4VSS_SUPPORT_ENCODER_MP3 */
    464 
    465     return err;
    466 }
    467 
    468