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 93extern M4OSA_ERR M4WRITER_AMR_getInterfaces( M4WRITER_OutputFileType* Type, 94 M4WRITER_GlobalInterface** SrcGlobalInterface, 95 M4WRITER_DataInterface** SrcDataInterface); 96#endif 97#ifdef M4VSS_SUPPORT_WRITER_3GPP 98extern M4OSA_ERR M4WRITER_3GP_getInterfaces( M4WRITER_OutputFileType* Type, 99 M4WRITER_GlobalInterface** SrcGlobalInterface, 100 M4WRITER_DataInterface** SrcDataInterface); 101#endif 102#ifdef M4VSS_SUPPORT_WRITER_PCM 103extern M4OSA_ERR M4WRITER_PCM_getInterfaces( M4WRITER_OutputFileType* Type, 104 M4WRITER_GlobalInterface** SrcGlobalInterface, 105 M4WRITER_DataInterface** SrcDataInterface); 106#endif 107#ifdef M4VSS_SUPPORT_WRITER_MP3 108extern 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 */ 141M4OSA_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