19 #include <stdlib.h> |
19 #include <stdlib.h> |
20 #include <assert.h> |
20 #include <assert.h> |
21 #include <string.h> |
21 #include <string.h> |
22 |
22 |
23 #include "xaglobals.h" |
23 #include "xaglobals.h" |
|
24 #include "xaadptbasectx.h" |
24 #include "xaaudioencodercapabilitiesitf.h" |
25 #include "xaaudioencodercapabilitiesitf.h" |
25 #ifdef _GSTREAMER_BACKEND_ |
26 #include "xacapabilitiesmgr.h" |
26 #include "XAStaticCapsAdaptation.h" |
27 |
27 #endif |
|
28 /* XAAudioEncoderCapabilitiesItfImpl* GetImpl |
28 /* XAAudioEncoderCapabilitiesItfImpl* GetImpl |
29 * Description: Validate interface pointer and cast it to implementation pointer. |
29 * Description: Validate interface pointer and cast it to implementation pointer. |
30 */ |
30 */ |
31 static XAAudioEncoderCapabilitiesItfImpl* GetImpl(XAAudioEncoderCapabilitiesItf self) |
31 static XAAudioEncoderCapabilitiesItfImpl* GetImpl(XAAudioEncoderCapabilitiesItf self) |
32 { |
32 { |
71 DEBUG_ERR("XA_RESULT_BUFFER_INSUFFICIENT"); |
71 DEBUG_ERR("XA_RESULT_BUFFER_INSUFFICIENT"); |
72 res = XA_RESULT_BUFFER_INSUFFICIENT; |
72 res = XA_RESULT_BUFFER_INSUFFICIENT; |
73 } |
73 } |
74 else |
74 else |
75 { |
75 { |
76 #ifdef _GSTREAMER_BACKEND_ |
76 |
77 XAuint32 i = 0; |
77 XAuint32 i = 0; |
78 XAStaticCapsData temp; |
78 XACapabilities temp; |
79 for( i=0; i<impl->numCodecs; i++ ) |
79 for( i=0; i<impl->numCodecs; i++ ) |
80 { |
80 { |
81 /* query encoder id from adaptation using index value */ |
81 /* query encoder id from adaptation using index value */ |
82 XAStaticCapsAdapt_GetCapsByIdx(XACAP_ENCODER|XACAP_AUDIO, i, &temp); |
82 XACapabilitiesMgr_GetCapsByIdx(impl->capslist, (XACapsType)(XACAP_ENCODER|XACAP_AUDIO), i, &temp); |
83 pEncoderIds[i] = temp.xaid; |
83 pEncoderIds[i] = temp.xaid; |
84 } |
84 } |
85 #endif |
85 |
86 pEncoderIds[0] = XA_AUDIOCODEC_AMR; |
86 pEncoderIds[0] = XA_AUDIOCODEC_AMR; |
87 pEncoderIds[1] = XA_AUDIOCODEC_AAC; |
87 pEncoderIds[1] = XA_AUDIOCODEC_AAC; |
88 pEncoderIds[2] = XA_AUDIOCODEC_PCM; |
88 pEncoderIds[2] = XA_AUDIOCODEC_PCM; |
89 } |
89 } |
90 } |
90 } |
106 XAAudioCodecDescriptor *pDescriptor) |
106 XAAudioCodecDescriptor *pDescriptor) |
107 { |
107 { |
108 XAAudioEncoderCapabilitiesItfImpl* impl = GetImpl(self); |
108 XAAudioEncoderCapabilitiesItfImpl* impl = GetImpl(self); |
109 XAresult res = XA_RESULT_SUCCESS; |
109 XAresult res = XA_RESULT_SUCCESS; |
110 |
110 |
111 #ifdef _GSTREAMER_BACKEND_ |
111 |
112 XAStaticCapsData temp; |
112 XACapabilities temp; |
113 #endif |
113 |
114 DEBUG_API("->XAAudioEncoderCapabilitiesItfImpl_GetAudioEncoderCapabilities"); |
114 DEBUG_API("->XAAudioEncoderCapabilitiesItfImpl_GetAudioEncoderCapabilities"); |
115 |
115 |
116 /*if( !impl || !pIndex || !pDescriptor )*/ |
116 /*if( !impl || !pIndex || !pDescriptor )*/ |
117 /*Removing the pDescriptor because the client can pass |
117 /*Removing the pDescriptor because the client can pass |
118 * it as NULL to query the pIndex for number of Codec/Mode |
118 * it as NULL to query the pIndex for number of Codec/Mode |
234 } |
234 } |
235 break; |
235 break; |
236 } |
236 } |
237 |
237 |
238 |
238 |
239 #ifdef _GSTREAMER_BACKEND_ |
239 |
240 res = XAStaticCapsAdapt_GetCapsById(XACAP_ENCODER|XACAP_AUDIO, encoderId, &temp); |
240 res = XACapabilitiesMgr_GetCapsById(impl->capslist, (XACapsType)(XACAP_ENCODER|XACAP_AUDIO), encoderId, &temp); |
241 if( res == XA_RESULT_SUCCESS ) |
241 if( res == XA_RESULT_SUCCESS ) |
242 { |
242 { |
243 /* map applicable values to XAAudioCodecCapabilities */ |
243 XAAudioCodecDescriptor* desc = ((XAAudioCodecDescriptor*)(temp.pEntry)); |
244 pDescriptor->maxChannels=temp.maxCh; |
244 /* map applicable values to XAAudioCodecCapabilities */ |
245 pDescriptor->minSampleRate=temp.minSR*1000; /* milliHz */ |
245 pDescriptor->maxChannels = desc->maxChannels; |
246 if (temp.maxSR < (0xFFFFFFFF / 1000)) |
246 pDescriptor->minSampleRate= desc->minSampleRate*1000; /* milliHz */ |
247 { |
247 if (desc->maxSampleRate < (0xFFFFFFFF / 1000)) |
248 pDescriptor->maxSampleRate = temp.maxSR*1000; |
248 { |
|
249 pDescriptor->maxSampleRate = desc->maxSampleRate*1000; |
249 } |
250 } |
250 else |
251 else |
251 { |
252 { |
252 pDescriptor->maxSampleRate = 0xFFFFFFFF; |
253 pDescriptor->maxSampleRate = 0xFFFFFFFF; |
253 } |
254 } |
254 pDescriptor->minBitsPerSample=temp.minBPS; |
255 pDescriptor->minBitsPerSample=desc->minBitsPerSample; |
255 pDescriptor->maxBitsPerSample=temp.maxBPS; |
256 pDescriptor->maxBitsPerSample=desc->maxBitsPerSample; |
256 pDescriptor->isFreqRangeContinuous=XA_BOOLEAN_TRUE; |
257 pDescriptor->isFreqRangeContinuous=XA_BOOLEAN_TRUE; |
257 pDescriptor->minBitRate=temp.minBR; |
258 pDescriptor->minBitRate=desc->minBitRate; |
258 pDescriptor->maxBitRate=temp.maxBR; |
259 pDescriptor->maxBitRate=desc->maxBitRate; |
259 pDescriptor->numBitratesSupported = temp.numBitrates; |
260 pDescriptor->numBitratesSupported = desc->numBitratesSupported; |
260 pDescriptor->isBitrateRangeContinuous=XA_BOOLEAN_TRUE; |
261 pDescriptor->isBitrateRangeContinuous=XA_BOOLEAN_TRUE; |
|
262 if (temp.xaid == XA_AUDIOCODEC_PCM ) |
|
263 { |
|
264 pDescriptor->profileSetting=XA_AUDIOPROFILE_PCM; |
|
265 pDescriptor->modeSetting=0; /* no chanmode for pcm defined */ |
|
266 } |
|
267 else if (temp.xaid == XA_ADAPTID_VORBIS) /* for ogg */ |
|
268 { |
|
269 if (desc->maxChannels == 1) |
|
270 { |
|
271 pDescriptor->profileSetting=XA_AUDIOPROFILE_MPEG1_L3; |
|
272 pDescriptor->modeSetting=XA_AUDIOCHANMODE_MP3_MONO; |
|
273 } |
|
274 else |
|
275 { |
|
276 pDescriptor->profileSetting=XA_AUDIOPROFILE_MPEG2_L3; |
|
277 pDescriptor->modeSetting=XA_AUDIOCHANMODE_MP3_STEREO; |
|
278 } |
|
279 } |
|
280 else |
|
281 { |
|
282 /* do nothing */ |
|
283 } |
261 |
284 |
262 if (temp.xaid == XA_AUDIOCODEC_PCM ) |
285 } |
263 { |
286 |
264 pDescriptor->profileSetting=XA_AUDIOPROFILE_PCM; |
|
265 pDescriptor->modeSetting=0; |
|
266 } |
|
267 else if (temp.xaid == XA_ADAPTID_VORBIS) /* for ogg */ |
|
268 { |
|
269 if (temp.maxCh == 1) |
|
270 { |
|
271 pDescriptor->profileSetting=XA_AUDIOPROFILE_MPEG1_L3; |
|
272 pDescriptor->modeSetting=XA_AUDIOCHANMODE_MP3_MONO; |
|
273 } |
|
274 else |
|
275 { |
|
276 pDescriptor->profileSetting=XA_AUDIOPROFILE_MPEG2_L3; |
|
277 pDescriptor->modeSetting=XA_AUDIOCHANMODE_MP3_STEREO; |
|
278 } |
|
279 } |
|
280 else |
|
281 { |
|
282 /* Do nothing */ |
|
283 } |
|
284 } |
|
285 #endif |
|
286 DEBUG_API("<-XAAudioEncoderCapabilitiesItfImpl_GetAudioEncoderCapabilities"); |
287 DEBUG_API("<-XAAudioEncoderCapabilitiesItfImpl_GetAudioEncoderCapabilities"); |
287 return res; |
288 return res; |
288 } |
289 } |
289 |
290 |
290 |
291 |
293 *****************************************************************************/ |
294 *****************************************************************************/ |
294 |
295 |
295 /* XAAudioEncoderCapabilitiesItfImpl_Create |
296 /* XAAudioEncoderCapabilitiesItfImpl_Create |
296 * Description: Allocate and initialize XAAudioEncoderCapabilitiesItfImpl |
297 * Description: Allocate and initialize XAAudioEncoderCapabilitiesItfImpl |
297 */ |
298 */ |
298 XAAudioEncoderCapabilitiesItfImpl* XAAudioEncoderCapabilitiesItfImpl_Create() |
299 XAAudioEncoderCapabilitiesItfImpl* XAAudioEncoderCapabilitiesItfImpl_Create(XACapabilities* caps) |
299 { |
300 { |
300 XAAudioEncoderCapabilitiesItfImpl* self = (XAAudioEncoderCapabilitiesItfImpl*) |
301 XAAudioEncoderCapabilitiesItfImpl* self = (XAAudioEncoderCapabilitiesItfImpl*) |
301 calloc(1,sizeof(XAAudioEncoderCapabilitiesItfImpl)); |
302 calloc(1,sizeof(XAAudioEncoderCapabilitiesItfImpl)); |
302 |
303 |
303 DEBUG_API("->XAAudioEncoderCapabilitiesItfImpl_Create"); |
304 DEBUG_API("->XAAudioEncoderCapabilitiesItfImpl_Create"); |
307 /* init itf default implementation */ |
308 /* init itf default implementation */ |
308 self->itf.GetAudioEncoders = |
309 self->itf.GetAudioEncoders = |
309 XAAudioEncoderCapabilitiesItfImpl_GetAudioEncoders; |
310 XAAudioEncoderCapabilitiesItfImpl_GetAudioEncoders; |
310 self->itf.GetAudioEncoderCapabilities = |
311 self->itf.GetAudioEncoderCapabilities = |
311 XAAudioEncoderCapabilitiesItfImpl_GetAudioEncoderCapabilities; |
312 XAAudioEncoderCapabilitiesItfImpl_GetAudioEncoderCapabilities; |
312 |
313 self->capslist = caps; |
313 #ifdef _GSTREAMER_BACKEND_ |
314 |
314 /* init variables */ |
315 /* init variables */ |
315 assert( XAStaticCapsAdapt_GetCapsCount( XACAP_ENCODER|XACAP_AUDIO, |
316 assert( XACapabilitiesMgr_GetCapsCount( caps, (XACapsType)((XACapsType)(XACAP_ENCODER|XACAP_AUDIO)), |
316 &(self->numCodecs) ) == XA_RESULT_SUCCESS ); |
317 &(self->numCodecs) ) == XA_RESULT_SUCCESS ); |
317 #endif |
318 |
318 /*self->mmfEngine = (void*)mmf_capability_engine_init();*/ |
319 /*self->mmfEngine = (void*)mmf_capability_engine_init();*/ |
319 self->numCodecs = 3; |
320 self->numCodecs = 3; |
320 self->self = self; |
321 self->self = self; |
321 |
322 |
322 } |
323 } |