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 */
M4MCS_subscribeMediaAndCodec(M4MCS_Context pContext)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