30 #include "xathreadsafety.h" |
30 #include "xathreadsafety.h" |
31 |
31 |
32 #include "xaadaptationmmf.h" |
32 #include "xaadaptationmmf.h" |
33 #include "xametadataadaptctxmmf.h" |
33 #include "xametadataadaptctxmmf.h" |
34 |
34 |
35 |
|
36 /* Static mapping of enumeration XAMetadataInterfaces to interface iids */ |
35 /* Static mapping of enumeration XAMetadataInterfaces to interface iids */ |
37 static const XAInterfaceID* xaMetadataExtractorItfIIDs[MDE_ITFCOUNT]= |
36 static const XAInterfaceID* xaMetadataExtractorItfIIDs[MDE_ITFCOUNT] = |
38 { |
37 { |
39 &XA_IID_OBJECT, |
38 &XA_IID_OBJECT, |
40 &XA_IID_DYNAMICINTERFACEMANAGEMENT, |
39 &XA_IID_DYNAMICINTERFACEMANAGEMENT, |
41 &XA_IID_METADATAEXTRACTION, |
40 &XA_IID_METADATAEXTRACTION, |
42 &XA_IID_METADATATRAVERSAL, |
41 &XA_IID_METADATATRAVERSAL, |
43 &XA_IID_CONFIGEXTENSION, |
42 &XA_IID_CONFIGEXTENSION, |
44 &XA_IID_DYNAMICSOURCE |
43 &XA_IID_DYNAMICSOURCE |
45 }; |
44 }; |
46 |
|
47 |
45 |
48 /***************************************************************************** |
46 /***************************************************************************** |
49 * Global methods |
47 * Global methods |
50 *****************************************************************************/ |
48 *****************************************************************************/ |
51 |
49 |
52 /* XAResult XAMetadataExtractorImpl_Create |
50 /* XAResult XAMetadataExtractorImpl_Create |
53 * Description: Create object |
51 * Description: Create object |
54 * Add this method to XAGlobals.h |
52 * Add this method to XAGlobals.h |
55 */ |
53 */ |
56 XAresult XAMetadataExtractorImpl_Create(FrameworkMap* mapper, |
54 XAresult XAMetadataExtractorImpl_Create(FrameworkMap* mapper, |
57 XACapabilities* capabilities, |
55 XACapabilities* capabilities, XAObjectItf *pMetadataExtractor, |
58 XAObjectItf *pMetadataExtractor, |
56 XADataSource *pDataSource, XAuint32 numInterfaces, |
59 XADataSource *pDataSource, |
57 const XAInterfaceID * pInterfaceIds, |
60 XAuint32 numInterfaces, |
58 const XAboolean * pInterfaceRequired) |
61 const XAInterfaceID * pInterfaceIds, |
59 { |
62 const XAboolean * pInterfaceRequired) |
|
63 { |
|
64 XAMetadataExtractorImpl* pImpl = NULL; |
60 XAMetadataExtractorImpl* pImpl = NULL; |
65 XAObjectItfImpl* pBaseObj = NULL; |
61 XAObjectItfImpl* pBaseObj = NULL; |
66 XAuint8 itfIndex = 0; |
62 XAuint8 itfIndex = 0; |
67 FWMgrFwType fwType; |
63 FWMgrFwType fwType; |
68 const char *uri = NULL; |
64 const char *uri = NULL; |
69 XAresult res = XA_RESULT_SUCCESS; |
65 XAresult res = XA_RESULT_SUCCESS; |
70 |
66 |
71 DEBUG_API("->XAMetadataExtractorImpl_Create"); |
67 DEBUG_API("->XAMetadataExtractorImpl_Create"); |
72 XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer); |
68 XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer); |
73 |
69 |
74 if( !pMetadataExtractor ) |
70 if (!pMetadataExtractor) |
75 { |
71 { |
76 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
72 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
77 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
73 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
78 /* invalid parameter */ |
74 /* invalid parameter */ |
79 DEBUG_API("<-XAMetadataExtractorImpl_Create"); |
75 DEBUG_API("<-XAMetadataExtractorImpl_Create"); |
80 return XA_RESULT_PARAMETER_INVALID; |
76 return XA_RESULT_PARAMETER_INVALID; |
81 } |
77 } |
82 |
78 |
83 res = XACommon_CheckDataSource(pDataSource,NULL); |
79 res = XACommon_CheckDataSource(pDataSource, NULL); |
84 if(res!=XA_RESULT_SUCCESS) |
80 if (res != XA_RESULT_SUCCESS) |
85 { |
81 { |
86 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
82 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
87 DEBUG_API("<-XAMetadataExtractorImpl_Create"); |
83 DEBUG_API("<-XAMetadataExtractorImpl_Create"); |
88 return res; |
84 return res; |
89 } |
85 } |
90 |
86 |
91 /* instantiate object implementation */ |
87 /* instantiate object implementation */ |
92 pImpl = (XAMetadataExtractorImpl*)calloc(1,sizeof(XAMetadataExtractorImpl)); |
88 pImpl = (XAMetadataExtractorImpl*) calloc(1, |
93 if(!pImpl) |
89 sizeof(XAMetadataExtractorImpl)); |
94 { |
90 if (!pImpl) |
|
91 { |
95 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
92 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
96 DEBUG_ERR("XA_RESULT_MEMORY_FAILURE"); |
93 DEBUG_ERR("XA_RESULT_MEMORY_FAILURE"); |
97 /* memory allocation failed */ |
94 /* memory allocation failed */ |
98 DEBUG_API("<-XAMetadataExtractorImpl_Create"); |
95 DEBUG_API("<-XAMetadataExtractorImpl_Create"); |
99 return XA_RESULT_MEMORY_FAILURE; |
96 return XA_RESULT_MEMORY_FAILURE; |
100 } |
97 } |
101 pBaseObj = &pImpl->baseObj; |
98 pBaseObj = &pImpl->baseObj; |
102 |
99 |
103 /* Initialize base object default implementation */ |
100 /* Initialize base object default implementation */ |
104 XAObjectItfImpl_Init(pBaseObj, |
101 XAObjectItfImpl_Init(pBaseObj, MDE_ITFCOUNT, xaMetadataExtractorItfIIDs, |
105 MDE_ITFCOUNT, |
102 XAMetadataExtractorImpl_DoRealize, |
106 xaMetadataExtractorItfIIDs, |
103 XAMetadataExtractorImpl_DoResume, |
107 XAMetadataExtractorImpl_DoRealize, |
104 XAMetadataExtractorImpl_FreeResources); |
108 XAMetadataExtractorImpl_DoResume, |
|
109 XAMetadataExtractorImpl_FreeResources); |
|
110 |
105 |
111 /* Mark interfaces that need to be exposed */ |
106 /* Mark interfaces that need to be exposed */ |
112 /* Implicit and mandated interfaces */ |
107 /* Implicit and mandated interfaces */ |
113 pBaseObj->interfaceMap[MDE_METADATAEXTRACTIONITF].required = XA_BOOLEAN_TRUE; |
108 pBaseObj->interfaceMap[MDE_METADATAEXTRACTIONITF].required |
114 pBaseObj->interfaceMap[MDE_METADATATRAVERSALITF].required = XA_BOOLEAN_TRUE; |
109 = XA_BOOLEAN_TRUE; |
|
110 pBaseObj->interfaceMap[MDE_METADATATRAVERSALITF].required |
|
111 = XA_BOOLEAN_TRUE; |
115 pBaseObj->interfaceMap[MDE_DYNAMICSOURCEITF].required = XA_BOOLEAN_TRUE; |
112 pBaseObj->interfaceMap[MDE_DYNAMICSOURCEITF].required = XA_BOOLEAN_TRUE; |
116 pBaseObj->interfaceMap[MDE_DIMITF].required = XA_BOOLEAN_TRUE; |
113 pBaseObj->interfaceMap[MDE_DIMITF].required = XA_BOOLEAN_TRUE; |
117 |
114 |
118 /* Explicit interfaces */ |
115 /* Explicit interfaces */ |
119 if ((numInterfaces != 0) && pInterfaceIds && pInterfaceRequired ) |
116 if ((numInterfaces != 0) && pInterfaceIds && pInterfaceRequired) |
120 { |
117 { |
121 /* Check required interfaces */ |
118 /* Check required interfaces */ |
122 for(itfIndex = 0; itfIndex < numInterfaces; itfIndex++) |
119 for (itfIndex = 0; itfIndex < numInterfaces; itfIndex++) |
123 { |
120 { |
124 /* If mapEntry is null then required interface is not supported.*/ |
121 /* If mapEntry is null then required interface is not supported.*/ |
125 XAObjItfMapEntry *entry = |
122 XAObjItfMapEntry *entry = XAObjectItfImpl_GetItfEntry( |
126 XAObjectItfImpl_GetItfEntry((XAObjectItf)&(pBaseObj), pInterfaceIds[itfIndex]); |
123 (XAObjectItf) &(pBaseObj), pInterfaceIds[itfIndex]); |
127 if( !entry ) |
124 if (!entry) |
128 { |
|
129 if( pInterfaceRequired[itfIndex] ) |
|
130 { |
125 { |
|
126 if (pInterfaceRequired[itfIndex]) |
|
127 { |
131 /* required interface cannot be accommodated - fail creation */ |
128 /* required interface cannot be accommodated - fail creation */ |
132 XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj)); |
129 XAObjectItfImpl_Destroy((XAObjectItf) &(pBaseObj)); |
133 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
130 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
134 DEBUG_ERR("Required interface not found - abort creation!"); |
131 DEBUG_ERR("Required interface not found - abort creation!"); |
135 DEBUG_API("<-XAMetadataExtractorImpl_Create"); |
132 DEBUG_API("<-XAMetadataExtractorImpl_Create"); |
136 return XA_RESULT_FEATURE_UNSUPPORTED; |
133 return XA_RESULT_FEATURE_UNSUPPORTED; |
|
134 } |
|
135 else |
|
136 { |
|
137 DEBUG_INFO("Requested (not required) interface not found - continue creation"); |
|
138 } |
137 } |
139 } |
138 else |
140 else |
139 { |
141 { |
140 DEBUG_INFO("Requested (not required) interface not found - continue creation"); |
142 entry->required = XA_BOOLEAN_TRUE; |
141 } |
143 } |
142 } |
144 } |
143 else |
145 } |
144 { |
146 |
145 entry->required = XA_BOOLEAN_TRUE; |
|
146 } |
|
147 } |
|
148 } |
|
149 |
|
150 |
|
151 // Mark interfaces that can be handled dynamically |
147 // Mark interfaces that can be handled dynamically |
152 pBaseObj->interfaceMap[MDE_CONFIGEXTENSIONITF].isDynamic = XA_BOOLEAN_TRUE; |
148 pBaseObj->interfaceMap[MDE_CONFIGEXTENSIONITF].isDynamic |
153 |
149 = XA_BOOLEAN_TRUE; |
154 //Set ObjectItf to point to newly created object |
150 |
155 *pMetadataExtractor = (XAObjectItf)&(pBaseObj->self); |
151 //Set ObjectItf to point to newly created object |
156 |
152 *pMetadataExtractor = (XAObjectItf) &(pBaseObj->self); |
157 //store member variables |
153 |
158 pImpl->dataSrc = pDataSource; |
154 //store member variables |
159 |
155 pImpl->dataSrc = pDataSource; |
160 /* Determine framework type that can handle recording */ |
156 |
161 fwType = (FWMgrFwType)FWMgrMOUnknown; |
157 /* Determine framework type that can handle recording */ |
|
158 fwType = (FWMgrFwType) FWMgrMOUnknown; |
162 /**/ |
159 /**/ |
163 if (pDataSource->pLocator) |
160 if (pDataSource->pLocator) |
164 { |
161 { |
165 XADataLocator_URI* dataLoc = (XADataLocator_URI*)pDataSource->pLocator; |
162 XADataLocator_URI* dataLoc = |
|
163 (XADataLocator_URI*) pDataSource->pLocator; |
166 if (dataLoc->locatorType == XA_DATALOCATOR_URI) |
164 if (dataLoc->locatorType == XA_DATALOCATOR_URI) |
167 { |
165 { |
168 uri = (char*)dataLoc->URI; |
166 uri = (char*) dataLoc->URI; |
169 } |
167 } |
170 } |
168 } |
171 |
169 |
172 fwType = XAFrameworkMgr_GetFramework(mapper, uri, FWMgrMOPlayer); |
170 fwType = XAFrameworkMgr_GetFramework(mapper, uri, FWMgrMOPlayer); |
173 |
171 |
174 if (fwType == FWMgrMOUnknown) |
172 if (fwType == FWMgrMOUnknown) |
175 { |
173 { |
176 XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj)); |
174 XAObjectItfImpl_Destroy((XAObjectItf) &(pBaseObj)); |
177 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
175 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaPlayer ); |
178 DEBUG_API("<-XAMetadataExtractorImpl_Create"); |
176 DEBUG_API("<-XAMetadataExtractorImpl_Create"); |
179 return XA_RESULT_CONTENT_UNSUPPORTED; |
177 return XA_RESULT_CONTENT_UNSUPPORTED; |
180 } |
178 } |
181 |
179 |
182 if(fwType == FWMgrFWMMF) |
180 if (fwType == FWMgrFWMMF) |
183 { |
181 { |
184 pImpl->adaptationCtxMMF = XAMetadataAdaptCtxMMF_Create(pDataSource); |
182 pImpl->adaptationCtxMMF = XAMetadataAdaptCtxMMF_Create(pDataSource); |
185 |
183 |
186 pImpl->curAdaptCtx = pImpl->adaptationCtxMMF; |
184 pImpl->curAdaptCtx = pImpl->adaptationCtxMMF; |
187 } |
185 } |
188 else |
186 else |
189 { |
187 { |
190 // Create metadata adaptation context |
188 // Create metadata adaptation context |
191 pImpl->adaptationCtxGst = XAMetadataAdaptCtx_Create(pDataSource); |
189 pImpl->adaptationCtxGst = XAMetadataAdaptCtx_Create(pDataSource); |
192 |
190 |
193 pImpl->curAdaptCtx = pImpl->adaptationCtxGst; |
191 pImpl->curAdaptCtx = pImpl->adaptationCtxGst; |
194 } |
192 } |
195 |
193 |
196 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
194 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
197 DEBUG_API("<-XAMetadataExtractorImpl_Create"); |
195 DEBUG_API("<-XAMetadataExtractorImpl_Create"); |
198 return XA_RESULT_SUCCESS; |
196 return XA_RESULT_SUCCESS; |
199 } |
197 } |
200 |
198 |
201 /* XAResult XAMetadataExtractorImpl_QueryNumSupportedInterfaces |
199 /* XAResult XAMetadataExtractorImpl_QueryNumSupportedInterfaces |
202 * Description: Statically query number of supported interfaces |
200 * Description: Statically query number of supported interfaces |
203 */ |
201 */ |
204 XAresult XAMetadataExtractorImpl_QueryNumSupportedInterfaces( |
202 XAresult XAMetadataExtractorImpl_QueryNumSupportedInterfaces( |
205 XAuint32 *pNumSupportedInterfaces) |
203 XAuint32 *pNumSupportedInterfaces) |
206 { |
204 { |
207 XAresult res = XA_RESULT_SUCCESS; |
205 XAresult res = XA_RESULT_SUCCESS; |
208 DEBUG_API("->XAMetadataExtractorImpl_QueryNumSupportedInterfaces"); |
206 DEBUG_API("->XAMetadataExtractorImpl_QueryNumSupportedInterfaces"); |
209 if(pNumSupportedInterfaces) |
207 if (pNumSupportedInterfaces) |
210 { |
208 { |
211 *pNumSupportedInterfaces = MDE_ITFCOUNT; |
209 *pNumSupportedInterfaces = MDE_ITFCOUNT; |
212 res = XA_RESULT_SUCCESS; |
210 res = XA_RESULT_SUCCESS; |
213 } |
211 } |
214 else |
212 else |
215 { |
213 { |
216 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
214 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
217 res = XA_RESULT_PARAMETER_INVALID; |
215 res = XA_RESULT_PARAMETER_INVALID; |
218 } |
216 }DEBUG_API_A1("<-XAMetadataExtractorImpl_QueryNumSupportedInterfaces (%d)", (int)res); |
219 DEBUG_API_A1("<-XAMetadataExtractorImpl_QueryNumSupportedInterfaces (%d)", (int)res); |
|
220 return res; |
217 return res; |
221 } |
218 } |
222 /* XAResult XAMetadataExtractorImpl_QuerySupportedInterfaces |
219 /* XAResult XAMetadataExtractorImpl_QuerySupportedInterfaces |
223 * Description: Statically query supported interfaces |
220 * Description: Statically query supported interfaces |
224 */ |
221 */ |
225 XAresult XAMetadataExtractorImpl_QuerySupportedInterfaces( |
222 XAresult XAMetadataExtractorImpl_QuerySupportedInterfaces(XAuint32 index, |
226 XAuint32 index, |
223 XAInterfaceID * pInterfaceId) |
227 XAInterfaceID * pInterfaceId) |
224 { |
228 { |
|
229 XAresult res = XA_RESULT_SUCCESS; |
225 XAresult res = XA_RESULT_SUCCESS; |
230 DEBUG_API("->XAMetadataExtractorImpl_QuerySupportedInterfaces"); |
226 DEBUG_API("->XAMetadataExtractorImpl_QuerySupportedInterfaces"); |
231 |
227 |
232 if (index >= MDE_ITFCOUNT || !pInterfaceId ) |
228 if (index >= MDE_ITFCOUNT || !pInterfaceId) |
233 { |
229 { |
234 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
230 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
235 res = XA_RESULT_PARAMETER_INVALID; |
231 res = XA_RESULT_PARAMETER_INVALID; |
236 } |
232 } |
237 else |
233 else |
238 { |
234 { |
239 *pInterfaceId = *(xaMetadataExtractorItfIIDs[index]); |
235 *pInterfaceId = *(xaMetadataExtractorItfIIDs[index]); |
240 res = XA_RESULT_SUCCESS; |
236 res = XA_RESULT_SUCCESS; |
241 } |
237 }DEBUG_API_A1("<-XAMetadataExtractorImpl_QuerySupportedInterfaces (%d)", (int)res); |
242 DEBUG_API_A1("<-XAMetadataExtractorImpl_QuerySupportedInterfaces (%d)", (int)res); |
|
243 return res; |
238 return res; |
244 } |
239 } |
245 |
|
246 |
240 |
247 /***************************************************************************** |
241 /***************************************************************************** |
248 * base object XAObjectItfImpl methods |
242 * base object XAObjectItfImpl methods |
249 *****************************************************************************/ |
243 *****************************************************************************/ |
250 |
244 |
251 /* XAresult XAMetadataExtractorImpl_DoRealize( XAObjectItf self ) |
245 /* XAresult XAMetadataExtractorImpl_DoRealize( XAObjectItf self ) |
252 * Description: Realize all implicit and explicitly wanted interfaces. |
246 * Description: Realize all implicit and explicitly wanted interfaces. |
253 * Create and initialize implementation-specific variables. |
247 * Create and initialize implementation-specific variables. |
254 * Called from base object XAObjectItfImpl |
248 * Called from base object XAObjectItfImpl |
255 */ |
249 */ |
256 XAresult XAMetadataExtractorImpl_DoRealize( XAObjectItf self ) |
250 XAresult XAMetadataExtractorImpl_DoRealize(XAObjectItf self) |
257 { |
251 { |
258 XAuint8 itfIdx = 0; |
252 XAuint8 itfIdx = 0; |
259 XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); |
253 XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self); |
260 XAMetadataExtractorImpl* pObjImpl = (XAMetadataExtractorImpl*)(pObj); |
254 XAMetadataExtractorImpl* pObjImpl = (XAMetadataExtractorImpl*) (pObj); |
261 void *pItf = NULL; |
255 void *pItf = NULL; |
262 XAresult ret = XA_RESULT_SUCCESS; |
256 XAresult ret = XA_RESULT_SUCCESS; |
263 |
257 |
264 DEBUG_API("->XAMetadataExtractorImpl_DoRealize"); |
258 DEBUG_API("->XAMetadataExtractorImpl_DoRealize"); |
265 XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer); |
259 XA_IMPL_THREAD_SAFETY_ENTRY(XATSMediaPlayer); |
266 |
260 |
267 /* check casting from correct pointer type */ |
261 /* check casting from correct pointer type */ |
268 if( !pObjImpl || pObj != pObjImpl->baseObj.self ) |
262 if (!pObjImpl || pObj != pObjImpl->baseObj.self) |
269 { |
263 { |
270 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
264 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
271 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
265 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
272 /* invalid parameter */ |
266 /* invalid parameter */ |
273 DEBUG_API("<-XAMetadataExtractorImpl_DoRealize"); |
267 DEBUG_API("<-XAMetadataExtractorImpl_DoRealize"); |
274 return XA_RESULT_PARAMETER_INVALID; |
268 return XA_RESULT_PARAMETER_INVALID; |
275 } |
269 } |
276 |
270 |
277 /* Realize all implicit and explicitly wanted interfaces */ |
271 /* Realize all implicit and explicitly wanted interfaces */ |
278 for(itfIdx=0; itfIdx<MDE_ITFCOUNT; itfIdx++) |
272 for (itfIdx = 0; itfIdx < MDE_ITFCOUNT; itfIdx++) |
279 { |
273 { |
280 if(!(pObj->interfaceMap[itfIdx].pItf) && |
274 if (!(pObj->interfaceMap[itfIdx].pItf) |
281 pObj->interfaceMap[itfIdx].required ) |
275 && pObj->interfaceMap[itfIdx].required) |
282 { |
276 { |
283 switch(itfIdx) |
277 switch (itfIdx) |
284 { |
278 { |
285 case MDE_DIMITF: |
279 case MDE_DIMITF: |
286 pItf = XADIMItfImpl_Create(); |
280 pItf = XADIMItfImpl_Create(); |
287 if(pItf) |
281 if (pItf) |
288 { |
282 { |
289 XADIMItfImpl_Init(pItf, self, |
283 XADIMItfImpl_Init(pItf, self, |
290 XAMetadataExtractorImpl_DoAddItf, |
284 XAMetadataExtractorImpl_DoAddItf, |
291 XAMetadataExtractorImpl_DoResumeItf, |
285 XAMetadataExtractorImpl_DoResumeItf, |
292 XAMetadataExtractorImpl_DoRemoveItf); |
286 XAMetadataExtractorImpl_DoRemoveItf); |
293 } |
287 } |
294 break; |
288 break; |
295 |
289 |
296 case MDE_METADATAEXTRACTIONITF: |
290 case MDE_METADATAEXTRACTIONITF: |
297 pItf = XAMetadataExtractionItfImpl_Create( pObjImpl->curAdaptCtx ); |
291 pItf = XAMetadataExtractionItfImpl_Create( |
|
292 pObjImpl->curAdaptCtx); |
298 break; |
293 break; |
299 case MDE_METADATATRAVERSALITF: |
294 case MDE_METADATATRAVERSALITF: |
300 pItf = XAMetadataTraversalItfImpl_Create( pObjImpl->curAdaptCtx ); |
295 pItf = XAMetadataTraversalItfImpl_Create( |
|
296 pObjImpl->curAdaptCtx); |
301 break; |
297 break; |
302 case MDE_CONFIGEXTENSIONITF: |
298 case MDE_CONFIGEXTENSIONITF: |
303 pItf = XAConfigExtensionsItfImpl_Create(); |
299 pItf = XAConfigExtensionsItfImpl_Create(); |
304 XAConfigExtensionsItfImpl_SetContext( pItf, pObjImpl->curAdaptCtx ); |
300 XAConfigExtensionsItfImpl_SetContext(pItf, |
|
301 pObjImpl->curAdaptCtx); |
305 break; |
302 break; |
306 case MDE_DYNAMICSOURCEITF: |
303 case MDE_DYNAMICSOURCEITF: |
307 pItf = XADynamicSourceItfImpl_Create( pObjImpl->curAdaptCtx ); |
304 pItf = XADynamicSourceItfImpl_Create( |
|
305 pObjImpl->curAdaptCtx); |
308 break; |
306 break; |
309 |
307 |
310 default: |
308 default: |
311 break; |
309 break; |
312 } |
310 } |
313 if(!pItf) |
311 if (!pItf) |
314 { |
312 { |
315 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
313 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
316 DEBUG_ERR("XA_RESULT_MEMORY_FAILURE"); |
314 DEBUG_ERR("XA_RESULT_MEMORY_FAILURE"); |
317 /* memory allocation failed */ |
315 /* memory allocation failed */ |
318 DEBUG_API("<-XAMetadataExtractorImpl_DoRealize"); |
316 DEBUG_API("<-XAMetadataExtractorImpl_DoRealize"); |
319 return XA_RESULT_MEMORY_FAILURE; |
317 return XA_RESULT_MEMORY_FAILURE; |
320 } |
318 } |
321 else |
319 else |
322 { |
320 { |
323 pObj->interfaceMap[itfIdx].pItf = pItf; |
321 pObj->interfaceMap[itfIdx].pItf = pItf; |
324 } |
322 } |
325 } |
323 } |
326 } |
324 } |
327 /*Initialize adaptation context*/ |
325 /*Initialize adaptation context*/ |
328 /* init adaptation */ |
326 /* init adaptation */ |
329 |
327 |
330 if(pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF) |
328 if (pObjImpl->curAdaptCtx->fwtype == FWMgrFWMMF) |
331 { |
329 { |
332 ret = XAMetadataAdaptCtxMMF_PostInit( (XAAdaptationMMFCtx*)pObjImpl->adaptationCtxMMF ); |
330 ret = XAMetadataAdaptCtxMMF_PostInit( |
333 } |
331 (XAAdaptationMMFCtx*) pObjImpl->adaptationCtxMMF); |
|
332 } |
334 else |
333 else |
335 { |
334 { |
336 ret = XAMetadataAdaptCtx_PostInit( (XAAdaptationGstCtx*)pObjImpl->adaptationCtxGst ); |
335 ret = XAMetadataAdaptCtx_PostInit( |
337 } |
336 (XAAdaptationGstCtx*) pObjImpl->adaptationCtxGst); |
338 |
337 } |
339 if ( ret != XA_RESULT_SUCCESS ) |
338 |
340 { |
339 if (ret != XA_RESULT_SUCCESS) |
|
340 { |
341 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
341 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
342 DEBUG_ERR("Adaptation init failed!"); |
342 DEBUG_ERR("Adaptation init failed!"); |
343 DEBUG_API("<-XAMetadataExtractorImpl_DoRealize"); |
343 DEBUG_API("<-XAMetadataExtractorImpl_DoRealize"); |
344 return ret; |
344 return ret; |
345 } |
345 } |
346 pObj->state = XA_OBJECT_STATE_REALIZED; |
346 pObj->state = XA_OBJECT_STATE_REALIZED; |
347 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
347 XA_IMPL_THREAD_SAFETY_EXIT(XATSMediaPlayer); |
348 DEBUG_API("<-XAMetadataExtractorImpl_DoRealize"); |
348 DEBUG_API("<-XAMetadataExtractorImpl_DoRealize"); |
349 return XA_RESULT_SUCCESS; |
349 return XA_RESULT_SUCCESS; |
350 } |
350 } |
351 |
351 |
352 /* XAresult XAMetadataExtractorImpl_DoResume |
352 /* XAresult XAMetadataExtractorImpl_DoResume |
353 * Description: Resume object from suspended state |
353 * Description: Resume object from suspended state |
354 */ |
354 */ |
355 XAresult XAMetadataExtractorImpl_DoResume(XAObjectItf self) |
355 XAresult XAMetadataExtractorImpl_DoResume(XAObjectItf self) |
356 { |
356 { |
357 DEBUG_API("->XAMetadataExtractorImpl_DoResume"); |
357 DEBUG_API("->XAMetadataExtractorImpl_DoResume"); |
358 DEBUG_API("<-XAMetadataExtractorImpl_DoResume"); |
358 DEBUG_API("<-XAMetadataExtractorImpl_DoResume"); |
359 /* "suspended" state not supported by this implementation */ |
359 /* "suspended" state not supported by this implementation */ |
360 return XA_RESULT_PRECONDITIONS_VIOLATED; |
360 return XA_RESULT_PRECONDITIONS_VIOLATED; |
361 } |
361 } |
362 |
362 |
363 /* void XAMetadataExtractorImpl_FreeResources |
363 /* void XAMetadataExtractorImpl_FreeResources |
364 * Description: Free all resources reserved at XAMetadataExtractorImpl_DoRealize() |
364 * Description: Free all resources reserved at XAMetadataExtractorImpl_DoRealize() |
365 */ |
365 */ |
366 void XAMetadataExtractorImpl_FreeResources(XAObjectItf self) |
366 void XAMetadataExtractorImpl_FreeResources(XAObjectItf self) |
367 { |
367 { |
368 XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); |
368 XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self); |
369 |
369 |
370 XAuint8 itfIdx = 0; |
370 XAuint8 itfIdx = 0; |
371 void *pItf = NULL; |
371 void *pItf = NULL; |
372 XAMetadataExtractorImpl* pImpl = (XAMetadataExtractorImpl*)(*self); |
372 XAMetadataExtractorImpl* pImpl = (XAMetadataExtractorImpl*) (*self); |
373 DEBUG_API("->XAMetadataExtractorImpl_FreeResources"); |
373 DEBUG_API("->XAMetadataExtractorImpl_FreeResources"); |
374 XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS(XATSMediaPlayer); |
374 XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS(XATSMediaPlayer); |
375 |
375 |
376 |
|
377 assert( pObj && pImpl && pObj == pObj->self ); |
376 assert( pObj && pImpl && pObj == pObj->self ); |
378 |
377 |
379 for(itfIdx = 0; itfIdx < MDE_ITFCOUNT; itfIdx++) |
378 for (itfIdx = 0; itfIdx < MDE_ITFCOUNT; itfIdx++) |
380 { |
379 { |
381 pItf = pObj->interfaceMap[itfIdx].pItf; |
380 pItf = pObj->interfaceMap[itfIdx].pItf; |
382 if(pItf) |
381 if (pItf) |
383 { |
382 { |
384 switch(itfIdx) |
383 switch (itfIdx) |
385 { |
384 { |
386 case MDE_METADATAEXTRACTIONITF: |
385 case MDE_METADATAEXTRACTIONITF: |
387 XAMetadataExtractionItfImpl_Free(pItf); |
386 XAMetadataExtractionItfImpl_Free(pItf); |
388 break; |
387 break; |
389 case MDE_METADATATRAVERSALITF: |
388 case MDE_METADATATRAVERSALITF: |
390 XAMetadataTraversalItfImpl_Free(pItf); |
389 XAMetadataTraversalItfImpl_Free(pItf); |
396 XADIMItfImpl_Free(pItf); |
395 XADIMItfImpl_Free(pItf); |
397 break; |
396 break; |
398 case MDE_CONFIGEXTENSIONITF: |
397 case MDE_CONFIGEXTENSIONITF: |
399 XAConfigExtensionsItfImpl_Free(pItf); |
398 XAConfigExtensionsItfImpl_Free(pItf); |
400 break; |
399 break; |
401 } |
400 } |
402 pObj->interfaceMap[itfIdx].pItf = NULL; |
401 pObj->interfaceMap[itfIdx].pItf = NULL; |
403 } |
402 } |
404 } |
403 } |
405 |
404 |
406 if(pImpl->curAdaptCtx) |
405 if (pImpl->curAdaptCtx) |
407 { |
406 { |
408 if(pImpl->curAdaptCtx->fwtype == FWMgrFWMMF) |
407 if (pImpl->curAdaptCtx->fwtype == FWMgrFWMMF) |
409 { |
408 { |
410 XAMetadataAdaptCtxMMF_Destroy( (XAAdaptationMMFCtx*)pImpl->adaptationCtxMMF ); |
409 XAMetadataAdaptCtxMMF_Destroy( |
411 pImpl->adaptationCtxMMF = NULL; |
410 (XAAdaptationMMFCtx*) pImpl->adaptationCtxMMF); |
412 } |
411 pImpl->adaptationCtxMMF = NULL; |
413 else |
412 } |
414 { |
413 else |
415 XAMetadataAdaptCtx_Destroy( (XAAdaptationGstCtx*)pImpl->adaptationCtxGst ); |
414 { |
416 pImpl->adaptationCtxGst = NULL; |
415 XAMetadataAdaptCtx_Destroy( |
417 } |
416 (XAAdaptationGstCtx*) pImpl->adaptationCtxGst); |
418 } |
417 pImpl->adaptationCtxGst = NULL; |
419 |
418 } |
420 pImpl->curAdaptCtx = NULL; |
419 } |
|
420 |
|
421 pImpl->curAdaptCtx = NULL; |
421 |
422 |
422 XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS(XATSMediaPlayer); |
423 XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS(XATSMediaPlayer); |
423 DEBUG_API("<-XAMetadataExtractorImpl_FreeResources"); |
424 DEBUG_API("<-XAMetadataExtractorImpl_FreeResources"); |
424 return; |
425 return; |
425 } |
426 } |
426 |
427 |
427 /***************************************************************************** |
428 /***************************************************************************** |
428 * MetadataExtractorImpl -specific methods |
429 * MetadataExtractorImpl -specific methods |
429 *****************************************************************************/ |
430 *****************************************************************************/ |
430 |
431 |
431 /* XAMetadataExtractorImpl_DoAddItf |
432 /* XAMetadataExtractorImpl_DoAddItf |
432 * Dynamically add an interface, object specific parts |
433 * Dynamically add an interface, object specific parts |
433 */ |
434 */ |
434 XAresult XAMetadataExtractorImpl_DoAddItf(XAObjectItf self, XAObjItfMapEntry *mapEntry ) |
435 XAresult XAMetadataExtractorImpl_DoAddItf(XAObjectItf self, |
435 { |
436 XAObjItfMapEntry *mapEntry) |
436 |
437 { |
437 XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); |
438 |
438 XAMetadataExtractorImpl* pImpl = (XAMetadataExtractorImpl*)(pObj); |
439 XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self); |
|
440 XAMetadataExtractorImpl* pImpl = (XAMetadataExtractorImpl*) (pObj); |
439 |
441 |
440 XAresult ret = XA_RESULT_SUCCESS; |
442 XAresult ret = XA_RESULT_SUCCESS; |
441 DEBUG_API("->XAMetadataExtractorImpl_DoAddItf"); |
443 DEBUG_API("->XAMetadataExtractorImpl_DoAddItf"); |
442 |
444 |
443 if(mapEntry) |
445 if (mapEntry) |
444 { |
446 { |
445 switch( mapEntry->mapIdx ) |
447 switch (mapEntry->mapIdx) |
446 { |
448 { |
447 case MDE_CONFIGEXTENSIONITF: |
449 case MDE_CONFIGEXTENSIONITF: |
448 mapEntry->pItf = XAConfigExtensionsItfImpl_Create(); |
450 mapEntry->pItf = XAConfigExtensionsItfImpl_Create(); |
449 |
451 |
450 XAConfigExtensionsItfImpl_SetContext( mapEntry->pItf, pImpl->adaptationCtxGst); |
452 XAConfigExtensionsItfImpl_SetContext(mapEntry->pItf, |
|
453 pImpl->adaptationCtxGst); |
451 |
454 |
452 break; |
455 break; |
453 default: |
456 default: |
454 DEBUG_ERR("XAMetadataExtractorImpl_DoAddItf unknown id"); |
457 DEBUG_ERR("XAMetadataExtractorImpl_DoAddItf unknown id") |
|
458 ; |
455 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
459 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
456 break; |
460 break; |
457 } |
461 } |
458 if( !mapEntry->pItf && ret == XA_RESULT_SUCCESS) |
462 if (!mapEntry->pItf && ret == XA_RESULT_SUCCESS) |
459 { |
463 { |
460 DEBUG_ERR("XAMetadataExtractorImpl_DoAddItf itf creation failed"); |
464 DEBUG_ERR("XAMetadataExtractorImpl_DoAddItf itf creation failed"); |
461 ret = XA_RESULT_MEMORY_FAILURE; |
465 ret = XA_RESULT_MEMORY_FAILURE; |
462 } |
466 } |
463 } |
467 } |
464 else |
468 else |
465 { |
469 { |
466 ret = XA_RESULT_PARAMETER_INVALID; |
470 ret = XA_RESULT_PARAMETER_INVALID; |
467 } |
471 } |
468 |
472 |
469 DEBUG_API("<-XAMetadataExtractorImpl_DoAddItf"); |
473 DEBUG_API("<-XAMetadataExtractorImpl_DoAddItf"); |
470 return ret; |
474 return ret; |
471 } |
475 } |
472 |
476 |
473 /* XAMetadataExtractorImpl_DoResumeItf |
477 /* XAMetadataExtractorImpl_DoResumeItf |
474 * Try to resume lost interface, object specific parts |
478 * Try to resume lost interface, object specific parts |
475 */ |
479 */ |
476 XAresult XAMetadataExtractorImpl_DoResumeItf(XAObjectItf self, XAObjItfMapEntry *mapEntry ) |
480 XAresult XAMetadataExtractorImpl_DoResumeItf(XAObjectItf self, |
477 { |
481 XAObjItfMapEntry *mapEntry) |
|
482 { |
478 XAresult ret = XA_RESULT_SUCCESS; |
483 XAresult ret = XA_RESULT_SUCCESS; |
479 DEBUG_API("->XAMetadataExtractorImpl_DoResumeItf"); |
484 DEBUG_API("->XAMetadataExtractorImpl_DoResumeItf"); |
480 /* For now, no difference between suspended and unrealised itfs */ |
485 /* For now, no difference between suspended and unrealised itfs */ |
481 ret = XAMetadataExtractorImpl_DoAddItf(self,mapEntry); |
486 ret = XAMetadataExtractorImpl_DoAddItf(self, mapEntry); |
482 DEBUG_API("<-XAMetadataExtractorImpl_DoResumeItf"); |
487 DEBUG_API("<-XAMetadataExtractorImpl_DoResumeItf"); |
483 return ret; |
488 return ret; |
484 } |
489 } |
485 |
490 |
486 /* XAMetadataExtractorImpl_DoRemoveItf |
491 /* XAMetadataExtractorImpl_DoRemoveItf |
487 * Dynamically remove an interface, object specific parts |
492 * Dynamically remove an interface, object specific parts |
488 */ |
493 */ |
489 XAresult XAMetadataExtractorImpl_DoRemoveItf(XAObjectItf self, XAObjItfMapEntry *mapEntry ) |
494 XAresult XAMetadataExtractorImpl_DoRemoveItf(XAObjectItf self, |
490 { |
495 XAObjItfMapEntry *mapEntry) |
|
496 { |
491 XAresult ret = XA_RESULT_SUCCESS; |
497 XAresult ret = XA_RESULT_SUCCESS; |
492 DEBUG_API("->XAMetadataExtractorImpl_DoRemoveItf"); |
498 DEBUG_API("->XAMetadataExtractorImpl_DoRemoveItf"); |
493 ret = XA_RESULT_SUCCESS; |
499 ret = XA_RESULT_SUCCESS; |
494 if(mapEntry) |
500 if (mapEntry) |
495 { |
501 { |
496 switch( mapEntry->mapIdx ) |
502 switch (mapEntry->mapIdx) |
497 { |
503 { |
498 case MDE_CONFIGEXTENSIONITF: |
504 case MDE_CONFIGEXTENSIONITF: |
499 XAConfigExtensionsItfImpl_Free(mapEntry->pItf); |
505 XAConfigExtensionsItfImpl_Free(mapEntry->pItf); |
500 break; |
506 break; |
501 default: |
507 default: |
502 DEBUG_ERR("XAMetadataExtractorImpl_DoRemoveItf unknown id"); |
508 DEBUG_ERR("XAMetadataExtractorImpl_DoRemoveItf unknown id") |
|
509 ; |
503 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
510 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
504 break; |
511 break; |
505 } |
512 } |
506 mapEntry->pItf = NULL; |
513 mapEntry->pItf = NULL; |
507 } |
514 } |
508 else |
515 else |
509 { |
516 { |
510 ret = XA_RESULT_PARAMETER_INVALID; |
517 ret = XA_RESULT_PARAMETER_INVALID; |
511 } |
518 } |
512 DEBUG_API("<-XAMetadataExtractorImpl_DoRemoveItf"); |
519 DEBUG_API("<-XAMetadataExtractorImpl_DoRemoveItf"); |
513 return ret; |
520 return ret; |
514 } |
521 } |
515 /* END OF FILE */ |
522 /* END OF FILE */ |