43 |
43 |
44 extern void* vfHandle; |
44 extern void* vfHandle; |
45 |
45 |
46 /* Static mapping of enumeration XAMediaPlayerInterfaces to interface iids */ |
46 /* Static mapping of enumeration XAMediaPlayerInterfaces to interface iids */ |
47 static const XAInterfaceID* xaMediaPlayerItfIIDs[MP_ITFCOUNT] = |
47 static const XAInterfaceID* xaMediaPlayerItfIIDs[MP_ITFCOUNT] = |
48 { |
48 { |
49 &XA_IID_OBJECT, |
49 &XA_IID_OBJECT, |
50 &XA_IID_DYNAMICINTERFACEMANAGEMENT, |
50 &XA_IID_DYNAMICINTERFACEMANAGEMENT, |
51 &XA_IID_PLAY, |
51 &XA_IID_PLAY, |
52 &XA_IID_SEEK, |
52 &XA_IID_SEEK, |
53 &XA_IID_VOLUME, |
53 &XA_IID_VOLUME, |
54 &XA_IID_PREFETCHSTATUS, |
54 &XA_IID_PREFETCHSTATUS, |
55 &XA_IID_CONFIGEXTENSION, |
55 &XA_IID_CONFIGEXTENSION, |
56 &XA_IID_DYNAMICSOURCE, |
56 &XA_IID_DYNAMICSOURCE, |
57 &XA_IID_EQUALIZER, |
57 &XA_IID_EQUALIZER, |
58 &XA_IID_IMAGECONTROLS, |
58 &XA_IID_IMAGECONTROLS, |
59 &XA_IID_IMAGEEFFECTS, |
59 &XA_IID_IMAGEEFFECTS, |
60 &XA_IID_METADATAEXTRACTION, |
60 &XA_IID_METADATAEXTRACTION, |
61 &XA_IID_METADATATRAVERSAL, |
61 &XA_IID_METADATATRAVERSAL, |
62 &XA_IID_PLAYBACKRATE, |
62 &XA_IID_PLAYBACKRATE, |
63 &XA_IID_VIDEOPOSTPROCESSING, |
63 &XA_IID_VIDEOPOSTPROCESSING, |
64 &XA_IID_NOKIAVOLUMEEXT, |
64 &XA_IID_NOKIAVOLUMEEXT, |
65 &XA_IID_NOKIALINEARVOLUME, |
65 &XA_IID_NOKIALINEARVOLUME, |
66 &XA_IID_STREAMINFORMATION |
66 &XA_IID_STREAMINFORMATION |
67 }; |
67 }; |
68 |
68 |
69 /* Global methods */ |
69 /* Global methods */ |
70 |
70 |
71 /* XAResult XAMediaPlayerImpl_CreateMediaPlayer |
71 /* XAResult XAMediaPlayerImpl_CreateMediaPlayer |
72 * Create object |
72 * Create object |
73 */ |
73 */ |
74 XAresult XAMediaPlayerImpl_CreateMediaPlayer(FrameworkMap* mapper, |
74 XAresult XAMediaPlayerImpl_CreateMediaPlayer(FrameworkMap* mapper, |
75 XACapabilities* capabilities, |
75 XACapabilities* capabilities, XAObjectItf *pPlayer, |
76 XAObjectItf *pPlayer, |
76 XADataSource *pDataSrc, XADataSource *pBankSrc, |
77 XADataSource *pDataSrc, |
77 XADataSink *pAudioSnk, XADataSink *pImageVideoSnk, |
78 XADataSource *pBankSrc, |
78 XADataSink *pVibra, XADataSink *pLEDArray, XAuint32 numInterfaces, |
79 XADataSink *pAudioSnk, |
79 const XAInterfaceID *pInterfaceIds, |
80 XADataSink *pImageVideoSnk, |
80 const XAboolean *pInterfaceRequired) |
81 XADataSink *pVibra, |
81 { |
82 XADataSink *pLEDArray, |
|
83 XAuint32 numInterfaces, |
|
84 const XAInterfaceID *pInterfaceIds, |
|
85 const XAboolean *pInterfaceRequired) |
|
86 { |
|
87 XAuint8 itfIdx = 0; |
82 XAuint8 itfIdx = 0; |
88 XAMediaType mediaType = XA_MEDIATYPE_UNKNOWN; |
83 XAMediaType mediaType = XA_MEDIATYPE_UNKNOWN; |
89 XAMediaPlayerImpl* pPlayerImpl = NULL; |
84 XAMediaPlayerImpl* pPlayerImpl = NULL; |
90 FWMgrFwType fwType; |
85 FWMgrFwType fwType; |
91 XAObjectItfImpl* pBaseObj = NULL; |
86 XAObjectItfImpl* pBaseObj = NULL; |
92 const char *uri = NULL; |
87 const char *uri = NULL; |
93 XAresult ret = XA_RESULT_SUCCESS; |
88 XAresult ret = XA_RESULT_SUCCESS; |
94 |
89 XADataLocator_IODevice* tmpIODevice; |
|
90 XADataLocator_IODevice locatorIODevice; |
|
91 |
95 DEBUG_API("->XAMediaPlayerImpl_CreateMediaPlayer"); |
92 DEBUG_API("->XAMediaPlayerImpl_CreateMediaPlayer"); |
96 |
93 |
97 XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer); |
94 XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer); |
98 |
95 |
99 if(!pPlayer || !pDataSrc) |
96 if (!pPlayer || !pDataSrc) |
100 { |
97 { |
101 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
98 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
102 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
99 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
103 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
100 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
104 return XA_RESULT_PARAMETER_INVALID; |
101 return XA_RESULT_PARAMETER_INVALID; |
105 } |
102 } |
106 /* check sink&source parameters */ |
103 /* check sink&source parameters */ |
107 ret = XACommon_ValidateDataLocator(6, pAudioSnk, pImageVideoSnk, pDataSrc, |
104 ret = XACommon_ValidateDataLocator(6, pAudioSnk, pImageVideoSnk, |
108 pBankSrc, pVibra, pLEDArray); |
105 pDataSrc, pBankSrc, pVibra, pLEDArray); |
109 if(ret!=XA_RESULT_SUCCESS) |
106 if (ret != XA_RESULT_SUCCESS) |
110 { |
107 { |
111 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
108 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
112 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
109 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
113 return ret; |
110 return ret; |
114 } |
111 } |
115 /* also, check source availability */ |
112 /* also, check source availability */ |
116 ret = XACommon_CheckDataSource(pDataSrc,&mediaType); |
113 ret = XACommon_CheckDataSource(pDataSrc, &mediaType); |
117 if(ret!=XA_RESULT_SUCCESS) |
114 if (ret != XA_RESULT_SUCCESS) |
118 { |
115 { |
119 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
116 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
120 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
117 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
121 return ret; |
118 return ret; |
122 } |
119 } |
123 |
120 |
124 /* instantiate object */ |
121 /* instantiate object */ |
125 pPlayerImpl = (XAMediaPlayerImpl*)calloc(1,sizeof(XAMediaPlayerImpl)); |
122 pPlayerImpl = (XAMediaPlayerImpl*) calloc(1, sizeof(XAMediaPlayerImpl)); |
126 if(!pPlayerImpl) |
123 if (!pPlayerImpl) |
127 { |
124 { |
128 /* memory allocation failed */ |
125 /* memory allocation failed */ |
129 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
126 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
130 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
127 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
131 return XA_RESULT_MEMORY_FAILURE; |
128 return XA_RESULT_MEMORY_FAILURE; |
132 } |
129 } |
133 pBaseObj = &pPlayerImpl->baseObj; |
130 pBaseObj = &pPlayerImpl->baseObj; |
134 |
131 |
135 /* Initialize base object default implementation */ |
132 /* Initialize base object default implementation */ |
136 XAObjectItfImpl_Init(pBaseObj, MP_ITFCOUNT, xaMediaPlayerItfIIDs, |
133 XAObjectItfImpl_Init(pBaseObj, MP_ITFCOUNT, xaMediaPlayerItfIIDs, |
137 XAMediaPlayerImpl_DoRealize, XAMediaPlayerImpl_DoResume, |
134 XAMediaPlayerImpl_DoRealize, XAMediaPlayerImpl_DoResume, |
138 XAMediaPlayerImpl_FreeResources); |
135 XAMediaPlayerImpl_FreeResources); |
139 |
136 |
140 /* Mark interfaces that need to be exposed */ |
137 /* Mark interfaces that need to be exposed */ |
141 /* Implicit and mandated interfaces */ |
138 /* Implicit and mandated interfaces */ |
142 pBaseObj->interfaceMap[MP_PLAYITF].required = XA_BOOLEAN_TRUE; |
139 pBaseObj->interfaceMap[MP_PLAYITF].required = XA_BOOLEAN_TRUE; |
143 pBaseObj->interfaceMap[MP_DIMITF].required = XA_BOOLEAN_TRUE; |
140 pBaseObj->interfaceMap[MP_DIMITF].required = XA_BOOLEAN_TRUE; |
144 |
141 |
145 /* Explicit interfaces */ |
142 /* Explicit interfaces */ |
146 if((numInterfaces != 0) && pInterfaceIds && pInterfaceRequired) |
143 if ((numInterfaces != 0) && pInterfaceIds && pInterfaceRequired) |
147 { |
144 { |
148 /* Check required interfaces */ |
145 /* Check required interfaces */ |
149 for(itfIdx = 0; itfIdx < numInterfaces; itfIdx++) |
146 for (itfIdx = 0; itfIdx < numInterfaces; itfIdx++) |
150 { |
147 { |
151 /* If mapEntry is null then required interface is not supported.*/ |
148 /* If mapEntry is null then required interface is not supported.*/ |
152 XAObjItfMapEntry *entry = |
149 XAObjItfMapEntry *entry = XAObjectItfImpl_GetItfEntry( |
153 XAObjectItfImpl_GetItfEntry((XAObjectItf)&(pBaseObj), pInterfaceIds[itfIdx]); |
150 (XAObjectItf) &(pBaseObj), pInterfaceIds[itfIdx]); |
154 if( !entry ) |
151 if (!entry) |
155 { |
|
156 if( pInterfaceRequired[itfIdx] ) |
|
157 { |
152 { |
|
153 if (pInterfaceRequired[itfIdx]) |
|
154 { |
158 /* required interface cannot be accommodated - fail creation */ |
155 /* required interface cannot be accommodated - fail creation */ |
159 DEBUG_ERR("Required interface not found - abort creation!"); |
156 DEBUG_ERR("Required interface not found - abort creation!"); |
160 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
157 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
161 break; |
158 break; |
|
159 } |
|
160 else |
|
161 { |
|
162 DEBUG_INFO("Requested (not required) interface not found - continue creation"); |
|
163 } |
162 } |
164 } |
163 else |
|
164 { |
|
165 DEBUG_INFO("Requested (not required) interface not found - continue creation"); |
|
166 } |
|
167 } |
|
168 else |
165 else |
169 { /* weed out unsupported content-aware itf's */ |
166 { /* weed out unsupported content-aware itf's */ |
170 if( (mediaType==XA_MEDIATYPE_IMAGE && |
167 if ((mediaType == XA_MEDIATYPE_IMAGE && (entry->mapIdx |
171 (entry->mapIdx==MP_SEEKITF || |
168 == MP_SEEKITF || entry->mapIdx == MP_EQUALIZERITF |
172 entry->mapIdx==MP_EQUALIZERITF || |
169 || entry->mapIdx == MP_VOLUMEITF)) || (mediaType |
173 entry->mapIdx==MP_VOLUMEITF)) |
170 == XA_MEDIATYPE_AUDIO && (entry->mapIdx |
174 || |
171 == MP_IMAGECONTROLSITF || entry->mapIdx |
175 (mediaType==XA_MEDIATYPE_AUDIO && |
172 == MP_IMAGEEFFECTSITF || entry->mapIdx |
176 (entry->mapIdx==MP_IMAGECONTROLSITF || |
173 == MP_VIDEOPOSTPROCESSINGITF))) |
177 entry->mapIdx==MP_IMAGEEFFECTSITF || |
174 { |
178 entry->mapIdx==MP_VIDEOPOSTPROCESSINGITF)) ) |
|
179 { |
|
180 entry->required = XA_BOOLEAN_FALSE; |
175 entry->required = XA_BOOLEAN_FALSE; |
181 if( pInterfaceRequired[itfIdx] ) |
176 if (pInterfaceRequired[itfIdx]) |
182 { |
177 { |
183 DEBUG_ERR("Required interface not supported for given media - abort creation!"); |
178 DEBUG_ERR("Required interface not supported for given media - abort creation!"); |
184 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
179 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
185 break; |
180 break; |
|
181 } |
|
182 } |
|
183 else |
|
184 { |
|
185 entry->required = XA_BOOLEAN_TRUE; |
186 } |
186 } |
187 } |
187 } |
188 else |
188 } |
189 { |
189 } |
190 entry->required = XA_BOOLEAN_TRUE; |
190 |
191 } |
191 if (ret != XA_RESULT_SUCCESS) |
192 } |
192 { /* creation fails */ |
193 } |
193 XAObjectItfImpl_Destroy((XAObjectItf) &(pBaseObj)); |
194 } |
|
195 |
|
196 if(ret!=XA_RESULT_SUCCESS) |
|
197 { /* creation fails */ |
|
198 XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj)); |
|
199 return ret; |
194 return ret; |
200 } |
195 } |
201 |
196 |
202 /* Mark interfaces that can be handled dynamically */ |
197 /* Mark interfaces that can be handled dynamically */ |
203 /* Mandated dynamic itfs */ |
198 /* Mandated dynamic itfs */ |
204 pBaseObj->interfaceMap[MP_EQUALIZERITF].isDynamic = XA_BOOLEAN_TRUE; |
199 pBaseObj->interfaceMap[MP_EQUALIZERITF].isDynamic = XA_BOOLEAN_TRUE; |
205 pBaseObj->interfaceMap[MP_IMAGEEFFECTSITF].isDynamic = XA_BOOLEAN_TRUE; |
200 pBaseObj->interfaceMap[MP_IMAGEEFFECTSITF].isDynamic = XA_BOOLEAN_TRUE; |
206 pBaseObj->interfaceMap[MP_METADATAEXTRACTIONITF].isDynamic = XA_BOOLEAN_TRUE; |
201 pBaseObj->interfaceMap[MP_METADATAEXTRACTIONITF].isDynamic |
207 pBaseObj->interfaceMap[MP_METADATATRAVERSALITF].isDynamic = XA_BOOLEAN_TRUE; |
202 = XA_BOOLEAN_TRUE; |
|
203 pBaseObj->interfaceMap[MP_METADATATRAVERSALITF].isDynamic |
|
204 = XA_BOOLEAN_TRUE; |
208 pBaseObj->interfaceMap[MP_PLAYBACKRATEITF].isDynamic = XA_BOOLEAN_TRUE; |
205 pBaseObj->interfaceMap[MP_PLAYBACKRATEITF].isDynamic = XA_BOOLEAN_TRUE; |
209 |
206 |
210 |
207 /*Set ObjectItf to point to newly created object*/ |
211 /*Set ObjectItf to point to newly created object*/ |
208 *pPlayer = (XAObjectItf) &(pBaseObj->self); |
212 *pPlayer = (XAObjectItf)&(pBaseObj->self); |
|
213 |
209 |
214 /*initialize XAPlayerImpl variables */ |
210 /*initialize XAPlayerImpl variables */ |
215 |
211 |
216 pPlayerImpl->dataSrc = pDataSrc; |
212 pPlayerImpl->dataSrc = pDataSrc; |
217 pPlayerImpl->bankSrc = pBankSrc; |
213 pPlayerImpl->bankSrc = pBankSrc; |
218 pPlayerImpl->audioSnk = pAudioSnk; |
214 pPlayerImpl->audioSnk = pAudioSnk; |
219 pPlayerImpl->imageVideoSnk = pImageVideoSnk; |
215 pPlayerImpl->imageVideoSnk = pImageVideoSnk; |
220 pPlayerImpl->vibra = pVibra; |
216 pPlayerImpl->vibra = pVibra; |
221 pPlayerImpl->LEDArray = pLEDArray; |
217 pPlayerImpl->LEDArray = pLEDArray; |
222 |
218 |
223 /* Determine framework type that can handle recording */ |
219 // Handle possible radio: |
224 fwType = (FWMgrFwType)FWMgrMOUnknown; |
220 tmpIODevice = (XADataLocator_IODevice*) (pPlayerImpl->dataSrc->pLocator); |
225 /**/ |
221 locatorIODevice = *tmpIODevice; |
226 if (pDataSrc->pLocator) |
222 if (locatorIODevice.deviceType == XA_IODEVICE_RADIO) |
227 { |
223 { |
228 XADataLocator_URI* dataLoc = (XADataLocator_URI*)pDataSrc->pLocator; |
224 fwType = (FWMgrFwType) FWMgrFWMMF; |
229 if (dataLoc->locatorType == XA_DATALOCATOR_URI) |
225 } |
230 { |
|
231 uri = (char*)dataLoc->URI; |
|
232 } |
|
233 } |
|
234 fwType = XAFrameworkMgr_GetFramework( |
|
235 mapper, |
|
236 uri, |
|
237 FWMgrMOPlayer); |
|
238 |
|
239 if (fwType == FWMgrMOUnknown) |
|
240 { |
|
241 ret = XA_RESULT_CONTENT_UNSUPPORTED; |
|
242 XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj)); |
|
243 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
|
244 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
|
245 return ret; |
|
246 } |
|
247 |
|
248 if(fwType == FWMgrFWMMF) |
|
249 { |
|
250 pPlayerImpl->adaptationCtxMMF = XAMediaPlayerAdaptMMF_Create(pPlayerImpl->dataSrc, |
|
251 pPlayerImpl->bankSrc, |
|
252 pPlayerImpl->audioSnk, |
|
253 pPlayerImpl->imageVideoSnk, |
|
254 pPlayerImpl->vibra, |
|
255 pPlayerImpl->LEDArray); |
|
256 |
|
257 pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxMMF; |
|
258 } |
|
259 else |
226 else |
260 { |
227 { |
261 pPlayerImpl->adaptationCtxGst = XAMediaPlayerAdapt_Create(pPlayerImpl->dataSrc, |
228 /* Determine framework type that can handle recording */ |
262 pPlayerImpl->bankSrc, |
229 fwType = (FWMgrFwType) FWMgrMOUnknown; |
263 pPlayerImpl->audioSnk, |
230 /**/ |
264 pPlayerImpl->imageVideoSnk, |
231 if (pDataSrc->pLocator) |
265 pPlayerImpl->vibra, |
232 { |
266 pPlayerImpl->LEDArray); |
233 XADataLocator_URI* dataLoc = |
267 |
234 (XADataLocator_URI*) pDataSrc->pLocator; |
268 pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxGst; |
235 if (dataLoc->locatorType == XA_DATALOCATOR_URI) |
269 } |
236 { |
270 |
237 uri = (char*) dataLoc->URI; |
|
238 } |
|
239 } |
|
240 fwType = XAFrameworkMgr_GetFramework(mapper, uri, FWMgrMOPlayer); |
|
241 |
|
242 if (fwType == FWMgrMOUnknown) |
|
243 { |
|
244 ret = XA_RESULT_CONTENT_UNSUPPORTED; |
|
245 XAObjectItfImpl_Destroy((XAObjectItf) &(pBaseObj)); |
|
246 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
|
247 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
|
248 return ret; |
|
249 } |
|
250 } // end else |
|
251 |
|
252 if (fwType == FWMgrFWMMF) |
|
253 { |
|
254 pPlayerImpl->adaptationCtxMMF = XAMediaPlayerAdaptMMF_Create( |
|
255 pPlayerImpl->dataSrc, pPlayerImpl->bankSrc, |
|
256 pPlayerImpl->audioSnk, pPlayerImpl->imageVideoSnk, |
|
257 pPlayerImpl->vibra, pPlayerImpl->LEDArray); |
|
258 |
|
259 pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxMMF; |
|
260 } |
|
261 else |
|
262 { |
|
263 pPlayerImpl->adaptationCtxGst = XAMediaPlayerAdapt_Create( |
|
264 pPlayerImpl->dataSrc, pPlayerImpl->bankSrc, |
|
265 pPlayerImpl->audioSnk, pPlayerImpl->imageVideoSnk, |
|
266 pPlayerImpl->vibra, pPlayerImpl->LEDArray); |
|
267 |
|
268 pPlayerImpl->curAdaptCtx = pPlayerImpl->adaptationCtxGst; |
|
269 } |
|
270 |
271 pPlayerImpl->curAdaptCtx->capslist = capabilities; |
271 pPlayerImpl->curAdaptCtx->capslist = capabilities; |
272 pPlayerImpl->curAdaptCtx->fwtype = fwType; |
272 pPlayerImpl->curAdaptCtx->fwtype = fwType; |
273 |
273 |
274 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
274 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
275 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
275 DEBUG_API("<-XAMediaPlayerImpl_CreateMediaPlayer"); |
276 return XA_RESULT_SUCCESS; |
276 return XA_RESULT_SUCCESS; |
277 } |
277 } |
278 |
278 |
279 /* XAResult XAMediaPlayerImpl_QueryNumSupportedInterfaces |
279 /* XAResult XAMediaPlayerImpl_QueryNumSupportedInterfaces |
280 * Statically query supported interfaces |
280 * Statically query supported interfaces |
281 */ |
281 */ |
282 XAresult XAMediaPlayerImpl_QueryNumSupportedInterfaces(XAuint32 * pNumSupportedInterfaces) |
282 XAresult XAMediaPlayerImpl_QueryNumSupportedInterfaces( |
283 { |
283 XAuint32 * pNumSupportedInterfaces) |
|
284 { |
284 DEBUG_API("->XAMediaPlayerImpl_QueryNumSupportedInterfaces"); |
285 DEBUG_API("->XAMediaPlayerImpl_QueryNumSupportedInterfaces"); |
285 |
286 |
286 if(pNumSupportedInterfaces) |
287 if (pNumSupportedInterfaces) |
287 { |
288 { |
288 *pNumSupportedInterfaces = MP_ITFCOUNT; |
289 *pNumSupportedInterfaces = MP_ITFCOUNT; |
289 DEBUG_API("<-XAMediaPlayerImpl_QueryNumSupportedInterfaces"); |
290 DEBUG_API("<-XAMediaPlayerImpl_QueryNumSupportedInterfaces"); |
290 return XA_RESULT_SUCCESS; |
291 return XA_RESULT_SUCCESS; |
291 } |
292 } |
292 else |
293 else |
293 { |
294 { |
294 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
295 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
295 DEBUG_API("<-XAMediaPlayerImpl_QueryNumSupportedInterfaces"); |
296 DEBUG_API("<-XAMediaPlayerImpl_QueryNumSupportedInterfaces"); |
296 return XA_RESULT_PARAMETER_INVALID; |
297 return XA_RESULT_PARAMETER_INVALID; |
297 } |
298 } |
298 } |
299 } |
299 |
300 |
300 /* XAResult XAMediaPlayerImpl_QuerySupportedInterfaces |
301 /* XAResult XAMediaPlayerImpl_QuerySupportedInterfaces |
301 * Statically query supported interfaces |
302 * Statically query supported interfaces |
302 */ |
303 */ |
303 XAresult XAMediaPlayerImpl_QuerySupportedInterfaces(XAuint32 index, |
304 XAresult XAMediaPlayerImpl_QuerySupportedInterfaces(XAuint32 index, |
304 XAInterfaceID * pInterfaceId) |
305 XAInterfaceID * pInterfaceId) |
305 { |
306 { |
306 DEBUG_API("->XAMediaPlayerImpl_QuerySupportedInterfaces"); |
307 DEBUG_API("->XAMediaPlayerImpl_QuerySupportedInterfaces"); |
307 |
308 |
308 if (index >= MP_ITFCOUNT || !pInterfaceId ) |
309 if (index >= MP_ITFCOUNT || !pInterfaceId) |
309 { |
310 { |
310 if(pInterfaceId) |
311 if (pInterfaceId) |
311 { |
312 { |
312 *pInterfaceId = XA_IID_NULL; |
313 *pInterfaceId = XA_IID_NULL; |
313 } |
314 }DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
314 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
315 DEBUG_API("<-XAMediaPlayerImpl_QuerySupportedInterfaces"); |
315 DEBUG_API("<-XAMediaPlayerImpl_QuerySupportedInterfaces"); |
|
316 return XA_RESULT_PARAMETER_INVALID; |
316 return XA_RESULT_PARAMETER_INVALID; |
317 } |
317 } |
318 else |
318 else |
319 { |
319 { |
320 *pInterfaceId = *(xaMediaPlayerItfIIDs[index]); |
320 *pInterfaceId = *(xaMediaPlayerItfIIDs[index]); |
321 DEBUG_API("<-XAMediaPlayerImpl_QuerySupportedInterfaces"); |
321 DEBUG_API("<-XAMediaPlayerImpl_QuerySupportedInterfaces"); |
322 return XA_RESULT_SUCCESS; |
322 return XA_RESULT_SUCCESS; |
323 } |
323 } |
324 } |
324 } |
325 |
325 |
326 /* |
326 /* |
327 * Realize the object |
327 * Realize the object |
328 */ |
328 */ |
329 XAresult XAMediaPlayerImpl_DoRealize(XAObjectItf self) |
329 XAresult XAMediaPlayerImpl_DoRealize(XAObjectItf self) |
330 { |
330 { |
331 XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); |
331 XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self); |
332 XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)(pObj); |
332 XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*) (pObj); |
333 XAuint8 itfIdx = 0; |
333 XAuint8 itfIdx = 0; |
334 void *pItf = NULL; |
334 void *pItf = NULL; |
335 XAresult ret = XA_RESULT_SUCCESS; |
335 XAresult ret = XA_RESULT_SUCCESS; |
336 |
336 |
337 DEBUG_API("->XAMediaPlayerImpl_DoRealize"); |
337 DEBUG_API("->XAMediaPlayerImpl_DoRealize"); |
338 XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer ); |
338 XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaPlayer ); |
339 |
339 |
340 /* check casting from correct pointer type */ |
340 /* check casting from correct pointer type */ |
341 if(!pImpl || pObj != pImpl->baseObj.self) |
341 if (!pImpl || pObj != pImpl->baseObj.self) |
342 { |
342 { |
343 /* invalid parameter */ |
343 /* invalid parameter */ |
344 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
344 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
345 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
345 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
346 DEBUG_API("<-XAMediaPlayerImpl_DoRealize"); |
346 DEBUG_API("<-XAMediaPlayerImpl_DoRealize"); |
347 return XA_RESULT_PARAMETER_INVALID; |
347 return XA_RESULT_PARAMETER_INVALID; |
348 } |
348 } |
349 |
349 |
350 /* Realize all implicit and explicitly wanted interfaces */ |
350 /* Realize all implicit and explicitly wanted interfaces */ |
351 for(itfIdx = 0; itfIdx < MP_ITFCOUNT; itfIdx++) |
351 for (itfIdx = 0; itfIdx < MP_ITFCOUNT; itfIdx++) |
352 { |
352 { |
353 if(!(pObj->interfaceMap[itfIdx].pItf) && pObj->interfaceMap[itfIdx].required) |
353 if (!(pObj->interfaceMap[itfIdx].pItf) |
354 { |
354 && pObj->interfaceMap[itfIdx].required) |
355 switch(itfIdx) |
355 { |
356 { |
356 switch (itfIdx) |
|
357 { |
357 case MP_DIMITF: |
358 case MP_DIMITF: |
358 pItf = XADIMItfImpl_Create(); |
359 pItf = XADIMItfImpl_Create(); |
359 if(pItf) |
360 if (pItf) |
360 { |
361 { |
361 XADIMItfImpl_Init(pItf, self, |
362 XADIMItfImpl_Init(pItf, self, |
362 XAMediaPlayerImpl_DoAddItf, |
363 XAMediaPlayerImpl_DoAddItf, |
363 XAMediaPlayerImpl_DoResumeItf, |
364 XAMediaPlayerImpl_DoResumeItf, |
364 XAMediaPlayerImpl_DoRemoveItf); |
365 XAMediaPlayerImpl_DoRemoveItf); |
365 } |
366 } |
366 break; |
367 break; |
367 case MP_PLAYITF: |
368 case MP_PLAYITF: |
368 pItf = XAPlayItfImpl_Create(pImpl); |
369 pItf = XAPlayItfImpl_Create(pImpl); |
369 if ( pImpl->dataSrc ) |
370 if (pImpl->dataSrc) |
370 { |
371 { |
371 XAuint32 locType = *((XAuint32*)(pImpl->dataSrc->pLocator)); |
372 XAuint32 locType = |
372 if ( locType == XA_DATALOCATOR_IODEVICE ) |
373 *((XAuint32*) (pImpl->dataSrc->pLocator)); |
373 { |
374 if (locType == XA_DATALOCATOR_IODEVICE) |
374 XADataLocator_IODevice *ioDevice = (XADataLocator_IODevice*)(pImpl->dataSrc->pLocator); |
375 { |
375 if ( ioDevice->deviceType == XA_IODEVICE_CAMERA) |
376 XADataLocator_IODevice |
376 { |
377 *ioDevice = |
377 vfHandle = (void*) pItf; |
378 (XADataLocator_IODevice*) (pImpl->dataSrc->pLocator); |
378 DEBUG_INFO_A1("Stored view finder pointer to global address %x", vfHandle); |
379 if (ioDevice->deviceType == XA_IODEVICE_CAMERA) |
379 } |
380 { |
380 } |
381 vfHandle = (void*) pItf; |
381 else |
382 DEBUG_INFO_A1("Stored view finder pointer to global address %x", vfHandle); |
382 { |
383 } |
383 |
384 } |
384 } |
385 else |
385 } |
386 { |
|
387 |
|
388 } |
|
389 } |
386 break; |
390 break; |
387 case MP_VOLUMEITF: |
391 case MP_VOLUMEITF: |
388 pItf = XAVolumeItfImpl_Create(pImpl->curAdaptCtx); |
392 pItf = XAVolumeItfImpl_Create(pImpl->curAdaptCtx); |
389 break; |
393 break; |
390 case MP_SEEKITF: |
394 case MP_SEEKITF: |
391 pItf = XASeekItfImpl_Create(pImpl); |
395 pItf = XASeekItfImpl_Create(pImpl); |
392 break; |
396 break; |
393 case MP_PREFETCHSTATUSITF: |
397 case MP_PREFETCHSTATUSITF: |
394 pItf = XAPrefetchStatusItfImpl_Create( pImpl ); |
398 pItf = XAPrefetchStatusItfImpl_Create(pImpl); |
395 break; |
399 break; |
396 case MP_METADATAEXTRACTIONITF: |
400 case MP_METADATAEXTRACTIONITF: |
397 pItf = XAMetadataExtractionItfImpl_Create( pImpl->curAdaptCtx ); |
401 pItf = XAMetadataExtractionItfImpl_Create( |
|
402 pImpl->curAdaptCtx); |
398 break; |
403 break; |
399 case MP_METADATATRAVERSALITF: |
404 case MP_METADATATRAVERSALITF: |
400 pItf = XAMetadataTraversalItfImpl_Create( pImpl->curAdaptCtx ); |
405 pItf = XAMetadataTraversalItfImpl_Create( |
|
406 pImpl->curAdaptCtx); |
401 break; |
407 break; |
402 case MP_PLAYBACKRATEITF: |
408 case MP_PLAYBACKRATEITF: |
403 pItf = XAPlaybackRateItfImpl_Create(pImpl); |
409 pItf = XAPlaybackRateItfImpl_Create(pImpl); |
404 break; |
410 break; |
405 case MP_CONFIGEXTENSIONITF: |
411 case MP_CONFIGEXTENSIONITF: |
406 pItf = XAConfigExtensionsItfImpl_Create(); |
412 pItf = XAConfigExtensionsItfImpl_Create(); |
407 XAConfigExtensionsItfImpl_SetContext( pItf, pImpl->curAdaptCtx); |
413 XAConfigExtensionsItfImpl_SetContext(pItf, |
|
414 pImpl->curAdaptCtx); |
408 break; |
415 break; |
409 case MP_DYNAMICSOURCEITF: |
416 case MP_DYNAMICSOURCEITF: |
410 pItf = XADynamicSourceItfImpl_Create(pImpl->curAdaptCtx); |
417 pItf = XADynamicSourceItfImpl_Create(pImpl->curAdaptCtx); |
411 break; |
418 break; |
412 case MP_EQUALIZERITF: |
419 case MP_EQUALIZERITF: |
413 pItf = XAEqualizerItfImpl_Create(pImpl->curAdaptCtx); |
420 pItf = XAEqualizerItfImpl_Create(pImpl->curAdaptCtx); |
414 break; |
421 break; |
415 case MP_IMAGECONTROLSITF: |
422 #ifdef OMAX_CAMERABIN |
|
423 case MP_IMAGECONTROLSITF: |
416 pItf = XAImageControlsItfImpl_Create(pImpl->curAdaptCtx); |
424 pItf = XAImageControlsItfImpl_Create(pImpl->curAdaptCtx); |
417 break; |
425 break; |
418 case MP_IMAGEEFFECTSITF: |
426 case MP_IMAGEEFFECTSITF: |
419 pItf = XAImageEffectsItfImpl_Create(pImpl->curAdaptCtx); |
427 pItf = XAImageEffectsItfImpl_Create(pImpl->curAdaptCtx); |
420 break; |
428 break; |
421 case MP_VIDEOPOSTPROCESSINGITF: |
429 case MP_VIDEOPOSTPROCESSINGITF: |
422 pItf = XAVideoPostProcessingItfImpl_Create(pImpl->curAdaptCtx); |
430 pItf = XAVideoPostProcessingItfImpl_Create(pImpl->curAdaptCtx); |
423 break; |
431 break; |
424 case MP_NOKIAVOLUMEEXT: |
432 #endif |
|
433 case MP_NOKIAVOLUMEEXT: |
425 pItf = XANokiaVolumeExtItfImpl_Create(pImpl->curAdaptCtx); |
434 pItf = XANokiaVolumeExtItfImpl_Create(pImpl->curAdaptCtx); |
426 break; |
435 break; |
427 case MP_NOKIALINEARVOLUME: |
436 case MP_NOKIALINEARVOLUME: |
428 pItf = XANokiaLinearVolumeItfImpl_Create(pImpl->curAdaptCtx); |
437 pItf = XANokiaLinearVolumeItfImpl_Create( |
429 break; |
438 pImpl->curAdaptCtx); |
|
439 break; |
430 case MP_STREAMINFORMATIONITF: |
440 case MP_STREAMINFORMATIONITF: |
431 pItf = XAStreamInformationItfImpl_Create(pImpl->curAdaptCtx); |
441 pItf = XAStreamInformationItfImpl_Create( |
432 break; |
442 pImpl->curAdaptCtx); |
|
443 break; |
433 default: |
444 default: |
434 break; |
445 break; |
435 } |
446 } |
436 if(!pItf) |
447 if (!pItf) |
437 { |
448 { |
438 /* Memory allocation failed */ |
449 /* Memory allocation failed */ |
439 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
450 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
440 DEBUG_ERR("XA_RESULT_MEMORY_FAILURE"); |
451 DEBUG_ERR("XA_RESULT_MEMORY_FAILURE"); |
441 DEBUG_API("<-XAMediaPlayerImpl_DoRealize"); |
452 DEBUG_API("<-XAMediaPlayerImpl_DoRealize"); |
442 return XA_RESULT_MEMORY_FAILURE; |
453 return XA_RESULT_MEMORY_FAILURE; |
443 } |
454 } |
444 else |
455 else |
445 { |
456 { |
446 pObj->interfaceMap[itfIdx].pItf = pItf; |
457 pObj->interfaceMap[itfIdx].pItf = pItf; |
447 } |
458 } |
448 } |
459 } |
449 } |
460 } |
450 /* init adaptation */ |
461 /* init adaptation */ |
451 if(pImpl->curAdaptCtx->fwtype == FWMgrFWMMF) |
462 if (pImpl->curAdaptCtx->fwtype == FWMgrFWMMF) |
452 { |
463 { |
453 ret = XAMediaPlayerAdaptMMF_PostInit( (XAAdaptationMMFCtx*)pImpl->adaptationCtxMMF ); |
464 ret = XAMediaPlayerAdaptMMF_PostInit( |
454 } |
465 (XAAdaptationMMFCtx*) pImpl->adaptationCtxMMF); |
|
466 } |
455 else |
467 else |
456 { |
468 { |
457 ret = XAMediaPlayerAdapt_PostInit( (XAAdaptationGstCtx*)pImpl->adaptationCtxGst ); |
469 ret = XAMediaPlayerAdapt_PostInit( |
458 } |
470 (XAAdaptationGstCtx*) pImpl->adaptationCtxGst); |
459 if ( ret != XA_RESULT_SUCCESS ) |
471 } |
460 { |
472 if (ret != XA_RESULT_SUCCESS) |
|
473 { |
461 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
474 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
462 DEBUG_ERR("Adaptation init failed!"); |
475 DEBUG_ERR("Adaptation init failed!"); |
463 DEBUG_API("<-XAMediaPlayerImpl_DoRealize"); |
476 DEBUG_API("<-XAMediaPlayerImpl_DoRealize"); |
464 return ret; |
477 return ret; |
465 } |
478 } |
466 |
479 |
467 pObj->state = XA_OBJECT_STATE_REALIZED; |
480 pObj->state = XA_OBJECT_STATE_REALIZED; |
468 |
481 |
469 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
482 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
470 DEBUG_API("<-XAMediaPlayerImpl_DoRealize"); |
483 DEBUG_API("<-XAMediaPlayerImpl_DoRealize"); |
471 return XA_RESULT_SUCCESS; |
484 return XA_RESULT_SUCCESS; |
472 } |
485 } |
473 |
486 |
474 /* |
487 /* |
475 * Resume object |
488 * Resume object |
476 */ |
489 */ |
477 XAresult XAMediaPlayerImpl_DoResume(XAObjectItf self) |
490 XAresult XAMediaPlayerImpl_DoResume(XAObjectItf self) |
478 { |
491 { |
479 DEBUG_API("->XAMediaPlayerImpl_DoResume"); |
492 DEBUG_API("->XAMediaPlayerImpl_DoResume"); |
480 DEBUG_API("<-XAMediaPlayerImpl_DoResume"); |
493 DEBUG_API("<-XAMediaPlayerImpl_DoResume"); |
481 /* suspended state not supported by this implementation */ |
494 /* suspended state not supported by this implementation */ |
482 return XA_RESULT_PRECONDITIONS_VIOLATED; |
495 return XA_RESULT_PRECONDITIONS_VIOLATED; |
483 } |
496 } |
484 |
497 |
485 /** |
498 /** |
486 * void XAMediaPlayerImpl_FreeResources(XAObjectItf self) |
499 * void XAMediaPlayerImpl_FreeResources(XAObjectItf self) |
487 * Description: Free all resources reserved at XAMediaPlayerImpl_DoRealize() |
500 * Description: Free all resources reserved at XAMediaPlayerImpl_DoRealize() |
488 **/ |
501 **/ |
489 void XAMediaPlayerImpl_FreeResources(XAObjectItf self) |
502 void XAMediaPlayerImpl_FreeResources(XAObjectItf self) |
490 { |
503 { |
491 XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); |
504 XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self); |
492 XAuint8 itfIdx = 0; |
505 XAuint8 itfIdx = 0; |
493 XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)pObj; |
506 XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*) pObj; |
494 DEBUG_API("->XAMediaPlayerImpl_FreeResources"); |
507 DEBUG_API("->XAMediaPlayerImpl_FreeResources"); |
495 XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS( XATSMediaPlayer ); |
508 XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS( XATSMediaPlayer ); |
496 |
509 |
497 assert(pObj && pImpl && pObj == pObj->self); |
510 assert(pObj && pImpl && pObj == pObj->self); |
498 for(itfIdx = 0; itfIdx < MP_ITFCOUNT; itfIdx++) |
511 for (itfIdx = 0; itfIdx < MP_ITFCOUNT; itfIdx++) |
499 { |
512 { |
500 void *pItf = pObj->interfaceMap[itfIdx].pItf; |
513 void *pItf = pObj->interfaceMap[itfIdx].pItf; |
501 if(pItf) |
514 if (pItf) |
502 { |
515 { |
503 switch(itfIdx) |
516 switch (itfIdx) |
504 { |
517 { |
505 case MP_DIMITF: |
518 case MP_DIMITF: |
506 XADIMItfImpl_Free(pItf); |
519 XADIMItfImpl_Free(pItf); |
507 break; |
520 break; |
508 case MP_PLAYITF: |
521 case MP_PLAYITF: |
509 XAPlayItfImpl_Free(pItf); |
522 XAPlayItfImpl_Free(pItf); |
533 XADynamicSourceItfImpl_Free(pItf); |
546 XADynamicSourceItfImpl_Free(pItf); |
534 break; |
547 break; |
535 case MP_EQUALIZERITF: |
548 case MP_EQUALIZERITF: |
536 XAEqualizerItfImpl_Free(pItf); |
549 XAEqualizerItfImpl_Free(pItf); |
537 break; |
550 break; |
538 case MP_IMAGECONTROLSITF: |
551 #ifdef OMAX_CAMERABIN |
|
552 case MP_IMAGECONTROLSITF: |
539 XAImageControlsItfImpl_Free(pItf); |
553 XAImageControlsItfImpl_Free(pItf); |
540 break; |
554 break; |
541 case MP_IMAGEEFFECTSITF: |
555 case MP_IMAGEEFFECTSITF: |
542 XAImageEffectsItfImpl_Free(pItf); |
556 XAImageEffectsItfImpl_Free(pItf); |
543 break; |
557 break; |
544 case MP_VIDEOPOSTPROCESSINGITF: |
558 case MP_VIDEOPOSTPROCESSINGITF: |
545 XAVideoPostProcessingItfImpl_Free(pItf); |
559 XAVideoPostProcessingItfImpl_Free(pItf); |
546 break; |
560 break; |
|
561 #endif |
547 case MP_NOKIAVOLUMEEXT: |
562 case MP_NOKIAVOLUMEEXT: |
548 XANokiaVolumeExtItfImpl_Free(pItf); |
563 XANokiaVolumeExtItfImpl_Free(pItf); |
549 break; |
564 break; |
550 case MP_NOKIALINEARVOLUME: |
565 case MP_NOKIALINEARVOLUME: |
551 XANokiaLinearVolumeItfImpl_Free(pItf); |
566 XANokiaLinearVolumeItfImpl_Free(pItf); |
552 break; |
567 break; |
553 case MP_STREAMINFORMATIONITF: |
568 case MP_STREAMINFORMATIONITF: |
554 XAStreamInformationItfImpl_Free(pItf); |
569 XAStreamInformationItfImpl_Free(pItf); |
555 break; |
570 break; |
556 |
571 |
557 } |
572 } |
558 pObj->interfaceMap[itfIdx].pItf = NULL; |
573 pObj->interfaceMap[itfIdx].pItf = NULL; |
559 } |
574 } |
560 } |
575 } |
561 |
576 |
562 if(pImpl->curAdaptCtx) |
577 if (pImpl->curAdaptCtx) |
563 { |
578 { |
564 if(pImpl->curAdaptCtx->fwtype == FWMgrFWMMF) |
579 if (pImpl->curAdaptCtx->fwtype == FWMgrFWMMF) |
565 { |
580 { |
566 XAMediaPlayerAdaptMMF_Destroy( (XAAdaptationMMFCtx*)pImpl->adaptationCtxMMF ); |
581 XAMediaPlayerAdaptMMF_Destroy( |
|
582 (XAAdaptationMMFCtx*) pImpl->adaptationCtxMMF); |
567 } |
583 } |
568 else |
584 else |
569 { |
585 { |
570 XAMediaPlayerAdapt_Destroy( (XAAdaptationGstCtx*)pImpl->adaptationCtxGst ); |
586 XAMediaPlayerAdapt_Destroy( |
|
587 (XAAdaptationGstCtx*) pImpl->adaptationCtxGst); |
571 } |
588 } |
572 } |
589 } |
573 |
590 |
574 XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer ); |
591 XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaPlayer ); |
575 DEBUG_API("<-XAMediaPlayerImpl_FreeResources"); |
592 DEBUG_API("<-XAMediaPlayerImpl_FreeResources"); |
576 return; |
593 return; |
577 } |
594 } |
578 |
595 |
579 /* XAMediaPlayerImpl_DoAddItf |
596 /* XAMediaPlayerImpl_DoAddItf |
580 * Dynamically add an interface, object specific parts |
597 * Dynamically add an interface, object specific parts |
581 */ |
598 */ |
582 XAresult XAMediaPlayerImpl_DoAddItf(XAObjectItf self, XAObjItfMapEntry *mapEntry ) |
599 XAresult XAMediaPlayerImpl_DoAddItf(XAObjectItf self, |
583 { |
600 XAObjItfMapEntry *mapEntry) |
584 |
601 { |
585 XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); |
602 |
586 XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*)(pObj); |
603 XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self); |
|
604 XAMediaPlayerImpl* pImpl = (XAMediaPlayerImpl*) (pObj); |
587 |
605 |
588 XAresult ret = XA_RESULT_SUCCESS; |
606 XAresult ret = XA_RESULT_SUCCESS; |
589 DEBUG_API("->XAMediaPlayerImpl_DoAddItf"); |
607 DEBUG_API("->XAMediaPlayerImpl_DoAddItf"); |
590 |
608 |
591 if(mapEntry) |
609 if (mapEntry) |
592 { |
610 { |
593 switch( mapEntry->mapIdx ) |
611 switch (mapEntry->mapIdx) |
594 { |
612 { |
595 |
613 |
596 case MP_METADATAEXTRACTIONITF: |
614 case MP_METADATAEXTRACTIONITF: |
597 mapEntry->pItf = XAMetadataExtractionItfImpl_Create( pImpl->curAdaptCtx ); |
615 mapEntry->pItf = XAMetadataExtractionItfImpl_Create( |
|
616 pImpl->curAdaptCtx); |
598 break; |
617 break; |
599 case MP_METADATATRAVERSALITF: |
618 case MP_METADATATRAVERSALITF: |
600 mapEntry->pItf = XAMetadataTraversalItfImpl_Create( pImpl->curAdaptCtx ); |
619 mapEntry->pItf = XAMetadataTraversalItfImpl_Create( |
|
620 pImpl->curAdaptCtx); |
601 break; |
621 break; |
602 case MP_PLAYBACKRATEITF: |
622 case MP_PLAYBACKRATEITF: |
603 mapEntry->pItf = XAPlaybackRateItfImpl_Create(pImpl); |
623 mapEntry->pItf = XAPlaybackRateItfImpl_Create(pImpl); |
604 break; |
624 break; |
605 case MP_EQUALIZERITF: |
625 case MP_EQUALIZERITF: |
606 mapEntry->pItf = XAEqualizerItfImpl_Create( pImpl->curAdaptCtx ); |
626 mapEntry->pItf |
607 break; |
627 = XAEqualizerItfImpl_Create(pImpl->curAdaptCtx); |
608 case MP_IMAGEEFFECTSITF: |
628 break; |
|
629 #ifdef OMAX_CAMERABIN |
|
630 case MP_IMAGEEFFECTSITF: |
609 mapEntry->pItf = XAImageEffectsItfImpl_Create( pImpl->curAdaptCtx ); |
631 mapEntry->pItf = XAImageEffectsItfImpl_Create( pImpl->curAdaptCtx ); |
610 break; |
632 break; |
611 |
633 #endif |
612 default: |
634 default: |
613 DEBUG_ERR("XAMediaPlayerImpl_DoAddItf unknown id"); |
635 DEBUG_ERR("XAMediaPlayerImpl_DoAddItf unknown id") |
|
636 ; |
614 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
637 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
615 break; |
638 break; |
616 } |
639 } |
617 |
640 |
618 if( !mapEntry->pItf && ret == XA_RESULT_SUCCESS) |
641 if (!mapEntry->pItf && ret == XA_RESULT_SUCCESS) |
619 { |
642 { |
620 DEBUG_ERR("XAMediaPlayerImpl_DoAddItf itf creation failed"); |
643 DEBUG_ERR("XAMediaPlayerImpl_DoAddItf itf creation failed"); |
621 ret = XA_RESULT_MEMORY_FAILURE; |
644 ret = XA_RESULT_MEMORY_FAILURE; |
622 } |
645 } |
623 } |
646 } |
624 else |
647 else |
625 { |
648 { |
626 ret = XA_RESULT_PARAMETER_INVALID; |
649 ret = XA_RESULT_PARAMETER_INVALID; |
627 } |
650 } |
628 |
651 |
629 DEBUG_API("<-XAMediaPlayerImpl_DoAddItf"); |
652 DEBUG_API("<-XAMediaPlayerImpl_DoAddItf"); |
630 return ret; |
653 return ret; |
631 } |
654 } |
632 |
655 |
633 /* XAMediaPlayerImpl_DoResumeItf |
656 /* XAMediaPlayerImpl_DoResumeItf |
634 * Try to resume lost interface, object specific parts |
657 * Try to resume lost interface, object specific parts |
635 */ |
658 */ |
636 XAresult XAMediaPlayerImpl_DoResumeItf(XAObjectItf self, XAObjItfMapEntry *mapEntry ) |
659 XAresult XAMediaPlayerImpl_DoResumeItf(XAObjectItf self, |
637 { |
660 XAObjItfMapEntry *mapEntry) |
|
661 { |
638 /* For now, no difference between suspended and unrealised itfs */ |
662 /* For now, no difference between suspended and unrealised itfs */ |
639 XAresult ret = XA_RESULT_SUCCESS; |
663 XAresult ret = XA_RESULT_SUCCESS; |
640 DEBUG_API("->XAMediaPlayerImpl_DoResumeItf"); |
664 DEBUG_API("->XAMediaPlayerImpl_DoResumeItf"); |
641 ret = XAMediaPlayerImpl_DoAddItf(self,mapEntry); |
665 ret = XAMediaPlayerImpl_DoAddItf(self, mapEntry); |
642 DEBUG_API("<-XAMediaPlayerImpl_DoResumeItf"); |
666 DEBUG_API("<-XAMediaPlayerImpl_DoResumeItf"); |
643 return ret; |
667 return ret; |
644 } |
668 } |
645 |
669 |
646 /* XAMediaPlayerImpl_DoRemoveItf |
670 /* XAMediaPlayerImpl_DoRemoveItf |
647 * Dynamically remove an interface, object specific parts |
671 * Dynamically remove an interface, object specific parts |
648 */ |
672 */ |
649 XAresult XAMediaPlayerImpl_DoRemoveItf(XAObjectItf self, XAObjItfMapEntry *mapEntry ) |
673 XAresult XAMediaPlayerImpl_DoRemoveItf(XAObjectItf self, |
650 { |
674 XAObjItfMapEntry *mapEntry) |
|
675 { |
651 XAresult ret = XA_RESULT_SUCCESS; |
676 XAresult ret = XA_RESULT_SUCCESS; |
652 DEBUG_API("->XAMediaPlayerImpl_DoRemoveItf"); |
677 DEBUG_API("->XAMediaPlayerImpl_DoRemoveItf"); |
653 |
678 |
654 if(mapEntry) |
679 if (mapEntry) |
655 { |
680 { |
656 switch( mapEntry->mapIdx ) |
681 switch (mapEntry->mapIdx) |
657 { |
682 { |
658 case MP_METADATAEXTRACTIONITF: |
683 case MP_METADATAEXTRACTIONITF: |
659 XAMetadataExtractionItfImpl_Free(mapEntry->pItf); |
684 XAMetadataExtractionItfImpl_Free(mapEntry->pItf); |
660 break; |
685 break; |
661 case MP_METADATATRAVERSALITF: |
686 case MP_METADATATRAVERSALITF: |
662 XAMetadataTraversalItfImpl_Free(mapEntry->pItf); |
687 XAMetadataTraversalItfImpl_Free(mapEntry->pItf); |