38 #include <string.h> |
38 #include <string.h> |
39 #include "xacapabilitiesmgr.h" |
39 #include "xacapabilitiesmgr.h" |
40 #include "xamediarecorderadaptctxmmf.h" |
40 #include "xamediarecorderadaptctxmmf.h" |
41 #include "xamediarecorderadaptctx.h" |
41 #include "xamediarecorderadaptctx.h" |
42 /* Static mapping of enumeration XAMediaRecorderInterfaces to interface iids */ |
42 /* Static mapping of enumeration XAMediaRecorderInterfaces to interface iids */ |
43 static const XAInterfaceID* xaMediaRecorderItfIIDs[MR_ITFCOUNT]= |
43 static const XAInterfaceID* xaMediaRecorderItfIIDs[MR_ITFCOUNT] = |
44 { |
44 { |
45 &XA_IID_OBJECT, |
45 &XA_IID_OBJECT, |
46 &XA_IID_AUDIOENCODER, |
46 &XA_IID_AUDIOENCODER, |
47 &XA_IID_CONFIGEXTENSION, |
47 &XA_IID_CONFIGEXTENSION, |
48 &XA_IID_DYNAMICINTERFACEMANAGEMENT, |
48 &XA_IID_DYNAMICINTERFACEMANAGEMENT, |
49 &XA_IID_EQUALIZER, |
49 &XA_IID_EQUALIZER, |
50 &XA_IID_IMAGECONTROLS, |
50 &XA_IID_IMAGECONTROLS, |
51 &XA_IID_IMAGEEFFECTS, |
51 &XA_IID_IMAGEEFFECTS, |
52 &XA_IID_IMAGEENCODER, |
52 &XA_IID_IMAGEENCODER, |
53 &XA_IID_METADATAINSERTION, |
53 &XA_IID_METADATAINSERTION, |
54 &XA_IID_RECORD, |
54 &XA_IID_RECORD, |
55 &XA_IID_SNAPSHOT, |
55 &XA_IID_SNAPSHOT, |
56 &XA_IID_VIDEOENCODER, |
56 &XA_IID_VIDEOENCODER, |
57 &XA_IID_VIDEOPOSTPROCESSING, |
57 &XA_IID_VIDEOPOSTPROCESSING, |
58 &XA_IID_VOLUME, |
58 &XA_IID_VOLUME, |
59 &XA_IID_METADATAEXTRACTION, |
59 &XA_IID_METADATAEXTRACTION, |
60 &XA_IID_METADATATRAVERSAL |
60 &XA_IID_METADATATRAVERSAL |
61 }; |
61 }; |
62 |
62 |
63 /* Global methods */ |
63 /* Global methods */ |
64 |
64 |
65 /* XAResult XAMediaRecorderImpl_Create |
65 /* XAResult XAMediaRecorderImpl_Create |
66 * Create object |
66 * Create object |
67 */ |
67 */ |
68 XAresult XAMediaRecorderImpl_CreateMediaRecorder(FrameworkMap* mapper, |
68 XAresult XAMediaRecorderImpl_CreateMediaRecorder(FrameworkMap* mapper, |
69 XACapabilities* capabilities, |
69 XACapabilities* capabilities, XAObjectItf* pRecorder, |
70 XAObjectItf* pRecorder, |
70 XADataSource* pAudioSrc, XADataSource* pImageVideoSrc, |
71 XADataSource* pAudioSrc, |
71 XADataSink* pDataSnk, XAuint32 numInterfaces, |
72 XADataSource* pImageVideoSrc, |
72 const XAInterfaceID *pInterfaceIds, |
73 XADataSink* pDataSnk, |
73 const XAboolean *pInterfaceRequired) |
74 XAuint32 numInterfaces, |
74 { |
75 const XAInterfaceID *pInterfaceIds, |
|
76 const XAboolean *pInterfaceRequired) |
|
77 { |
|
78 XAMediaRecorderImpl* pImpl = NULL; |
75 XAMediaRecorderImpl* pImpl = NULL; |
79 XAObjectItfImpl* pBaseObj = NULL; |
76 XAObjectItfImpl* pBaseObj = NULL; |
80 FWMgrFwType fwType; |
77 FWMgrFwType fwType; |
81 XAuint8 itfIdx; |
78 XAuint8 itfIdx; |
82 XAMediaType mediaType = XA_MEDIATYPE_UNKNOWN; |
79 XAMediaType mediaType = XA_MEDIATYPE_UNKNOWN; |
83 XAresult ret=XA_RESULT_SUCCESS; |
80 XAresult ret = XA_RESULT_SUCCESS; |
84 const char *uri = NULL; |
81 const char *uri = NULL; |
85 |
82 |
86 DEBUG_API("->XAMediaRecorderImpl_CreateMediaRecorder"); |
83 DEBUG_API("->XAMediaRecorderImpl_CreateMediaRecorder"); |
87 XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaRecorder ); |
84 XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaRecorder ); |
88 |
85 |
89 if( !pRecorder ) |
86 if (!pRecorder) |
90 { |
87 { |
91 /* invalid parameter */ |
88 /* invalid parameter */ |
92 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
89 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
93 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
90 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
94 DEBUG_API("<-XAMediaRecorderImpl_CreateMediaRecorder"); |
91 DEBUG_API("<-XAMediaRecorderImpl_CreateMediaRecorder"); |
95 return XA_RESULT_PARAMETER_INVALID; |
92 return XA_RESULT_PARAMETER_INVALID; |
96 } |
93 } |
97 |
94 |
98 /* check sink&source parameters */ |
95 /* check sink&source parameters */ |
99 ret = XACommon_ValidateDataLocator(3, pAudioSrc, pImageVideoSrc, pDataSnk); |
96 ret |
100 if(ret!=XA_RESULT_SUCCESS) |
97 = XACommon_ValidateDataLocator(3, pAudioSrc, pImageVideoSrc, |
101 { |
98 pDataSnk); |
|
99 if (ret != XA_RESULT_SUCCESS) |
|
100 { |
102 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
101 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
103 DEBUG_API("<-XAMediaRecorderImpl_CreateMediaRecorder"); |
102 DEBUG_API("<-XAMediaRecorderImpl_CreateMediaRecorder"); |
104 return ret; |
103 return ret; |
105 } |
104 } |
106 |
105 |
107 /* instantiate object implementation */ |
106 /* instantiate object implementation */ |
108 pImpl = (XAMediaRecorderImpl*)calloc(1,sizeof(XAMediaRecorderImpl)); |
107 pImpl = (XAMediaRecorderImpl*) calloc(1, sizeof(XAMediaRecorderImpl)); |
109 if( !pImpl ) |
108 if (!pImpl) |
110 { |
109 { |
111 |
110 |
112 /* memory allocation failed */ |
111 /* memory allocation failed */ |
113 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
112 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
114 DEBUG_ERR("XA_RESULT_MEMORY_FAILURE"); |
113 DEBUG_ERR("XA_RESULT_MEMORY_FAILURE"); |
115 DEBUG_API("<-XAMediaRecorderImpl_CreateMediaRecorder"); |
114 DEBUG_API("<-XAMediaRecorderImpl_CreateMediaRecorder"); |
116 return XA_RESULT_MEMORY_FAILURE; |
115 return XA_RESULT_MEMORY_FAILURE; |
117 } |
116 } |
118 pBaseObj = &pImpl->baseObj; |
117 pBaseObj = &pImpl->baseObj; |
119 |
118 |
120 /* Initialize base object default implementation */ |
119 /* Initialize base object default implementation */ |
121 XAObjectItfImpl_Init(pBaseObj, |
120 XAObjectItfImpl_Init(pBaseObj, MR_ITFCOUNT, xaMediaRecorderItfIIDs, |
122 MR_ITFCOUNT, |
121 XAMediaRecorderImpl_DoRealize, XAMediaRecorderImpl_DoResume, |
123 xaMediaRecorderItfIIDs, |
122 XAMediaRecorderImpl_FreeResources); |
124 XAMediaRecorderImpl_DoRealize, |
|
125 XAMediaRecorderImpl_DoResume, |
|
126 XAMediaRecorderImpl_FreeResources); |
|
127 |
123 |
128 /* Mark interfaces that need to be exposed */ |
124 /* Mark interfaces that need to be exposed */ |
129 /* Implicit and mandated interfaces */ |
125 /* Implicit and mandated interfaces */ |
130 pBaseObj->interfaceMap[MR_RECORDITF].required = XA_BOOLEAN_TRUE; |
126 pBaseObj->interfaceMap[MR_RECORDITF].required = XA_BOOLEAN_TRUE; |
131 if(pAudioSrc && mediaType!=XA_MEDIATYPE_IMAGE) |
127 if (pAudioSrc && mediaType != XA_MEDIATYPE_IMAGE) |
132 { |
128 { |
133 pBaseObj->interfaceMap[MR_AUDIOENCODERITF].required = XA_BOOLEAN_TRUE; |
129 pBaseObj->interfaceMap[MR_AUDIOENCODERITF].required = XA_BOOLEAN_TRUE; |
134 } |
130 } |
135 if(pImageVideoSrc && mediaType!=XA_MEDIATYPE_AUDIO) |
131 if (pImageVideoSrc && mediaType != XA_MEDIATYPE_AUDIO) |
136 { |
132 { |
137 pBaseObj->interfaceMap[MR_VIDEOENCODER].required = XA_BOOLEAN_TRUE; |
133 pBaseObj->interfaceMap[MR_VIDEOENCODER].required = XA_BOOLEAN_TRUE; |
138 pBaseObj->interfaceMap[MR_IMAGEENCODERITF].required = XA_BOOLEAN_TRUE; |
134 pBaseObj->interfaceMap[MR_IMAGEENCODERITF].required = XA_BOOLEAN_TRUE; |
139 pBaseObj->interfaceMap[MR_SNAPSHOTITF].required = XA_BOOLEAN_TRUE; |
135 pBaseObj->interfaceMap[MR_SNAPSHOTITF].required = XA_BOOLEAN_TRUE; |
140 } |
136 } |
141 pBaseObj->interfaceMap[MR_DIMITF].required = XA_BOOLEAN_TRUE; |
137 pBaseObj->interfaceMap[MR_DIMITF].required = XA_BOOLEAN_TRUE; |
142 |
138 |
143 /* Explicit interfaces */ |
139 /* Explicit interfaces */ |
144 if((numInterfaces != 0) && pInterfaceIds && pInterfaceRequired) |
140 if ((numInterfaces != 0) && pInterfaceIds && pInterfaceRequired) |
145 { |
141 { |
146 /* check only sink media type, do not care about return value (availability) */ |
142 /* check only sink media type, do not care about return value (availability) */ |
147 XACommon_CheckDataSource((XADataSource*)pDataSnk,&mediaType); |
143 XACommon_CheckDataSource((XADataSource*) pDataSnk, &mediaType); |
148 /* Check required interfaces */ |
144 /* Check required interfaces */ |
149 for( itfIdx = 0; itfIdx < numInterfaces; itfIdx++) |
145 for (itfIdx = 0; itfIdx < numInterfaces; itfIdx++) |
150 { |
146 { |
151 /* If mapEntry is null then required interface is not supported.*/ |
147 /* If mapEntry is null then required interface is not supported.*/ |
152 XAObjItfMapEntry *entry = |
148 XAObjItfMapEntry *entry = XAObjectItfImpl_GetItfEntry( |
153 XAObjectItfImpl_GetItfEntry((XAObjectItf)&(pBaseObj), pInterfaceIds[itfIdx]); |
149 (XAObjectItf) &(pBaseObj), pInterfaceIds[itfIdx]); |
154 if( !entry ) |
150 if (!entry) |
155 { |
|
156 if( pInterfaceRequired[itfIdx] ) |
|
157 { |
151 { |
|
152 if (pInterfaceRequired[itfIdx]) |
|
153 { |
158 /* required interface cannot be accommodated - fail creation */ |
154 /* required interface cannot be accommodated - fail creation */ |
159 DEBUG_ERR("Required interface not found - abort creation!"); |
155 DEBUG_ERR("Required interface not found - abort creation!"); |
160 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
156 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
161 break; |
157 break; |
|
158 } |
|
159 else |
|
160 { |
|
161 DEBUG_INFO("Requested (not required) interface not found - continue creation"); |
|
162 } |
162 } |
163 } |
163 else |
|
164 { |
|
165 DEBUG_INFO("Requested (not required) interface not found - continue creation"); |
|
166 } |
|
167 } |
|
168 else |
164 else |
169 { /* weed out unsupported content-aware itf's */ |
165 { /* weed out unsupported content-aware itf's */ |
170 if( ( (mediaType==XA_MEDIATYPE_IMAGE || !pAudioSrc) && |
166 if (((mediaType == XA_MEDIATYPE_IMAGE || !pAudioSrc) |
171 (entry->mapIdx==MR_EQUALIZERITF || |
167 && (entry->mapIdx == MR_EQUALIZERITF || entry->mapIdx |
172 entry->mapIdx==MR_VOLUMEITF || |
168 == MR_VOLUMEITF || entry->mapIdx |
173 entry->mapIdx==MR_AUDIOENCODERITF)) |
169 == MR_AUDIOENCODERITF)) || ((mediaType |
174 || |
170 == XA_MEDIATYPE_AUDIO || !pImageVideoSrc) |
175 ( (mediaType==XA_MEDIATYPE_AUDIO || !pImageVideoSrc) && |
171 && (entry->mapIdx == MR_IMAGECONTROLSITF |
176 (entry->mapIdx==MR_IMAGECONTROLSITF || |
172 || entry->mapIdx == MR_IMAGEEFFECTSITF |
177 entry->mapIdx==MR_IMAGEEFFECTSITF || |
173 || entry->mapIdx == MR_VIDEOPOSTPROCESSINGITF |
178 entry->mapIdx==MR_VIDEOPOSTPROCESSINGITF || |
174 || entry->mapIdx == MR_VIDEOENCODER |
179 entry->mapIdx==MR_VIDEOENCODER || |
175 || entry->mapIdx == MR_IMAGEENCODERITF |
180 entry->mapIdx==MR_IMAGEENCODERITF || |
176 || entry->mapIdx == MR_SNAPSHOTITF))) |
181 entry->mapIdx==MR_SNAPSHOTITF)) ) |
177 { |
182 { |
|
183 entry->required = XA_BOOLEAN_FALSE; |
178 entry->required = XA_BOOLEAN_FALSE; |
184 if( pInterfaceRequired[itfIdx] ) |
179 if (pInterfaceRequired[itfIdx]) |
185 { |
180 { |
186 DEBUG_ERR("Required interface not supported for given media - abort creation!"); |
181 DEBUG_ERR("Required interface not supported for given media - abort creation!"); |
187 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
182 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
188 break; |
183 break; |
|
184 } |
|
185 } |
|
186 else |
|
187 { |
|
188 entry->required = XA_BOOLEAN_TRUE; |
|
189 } |
|
190 |
|
191 if (entry->mapIdx == MR_SNAPSHOTITF) |
|
192 { |
|
193 DEBUG_ERR("SnapshotItf requested - support still mode"); |
|
194 pImpl->recModes |= XA_RECMODE_STILL; |
|
195 } |
|
196 if (entry->mapIdx == MR_RECORDITF) |
|
197 { |
|
198 DEBUG_ERR("RecordItf requested - support stream mode"); |
|
199 pImpl->recModes |= XA_RECMODE_STREAM; |
189 } |
200 } |
190 } |
201 } |
191 else |
202 } |
192 { |
203 } |
193 entry->required = XA_BOOLEAN_TRUE; |
204 if (pImpl->recModes == 0) |
194 } |
205 { |
195 |
|
196 if(entry->mapIdx==MR_SNAPSHOTITF) |
|
197 { |
|
198 DEBUG_ERR("SnapshotItf requested - support still mode"); |
|
199 pImpl->recModes |= XA_RECMODE_STILL; |
|
200 } |
|
201 if(entry->mapIdx==MR_RECORDITF) |
|
202 { |
|
203 DEBUG_ERR("RecordItf requested - support stream mode"); |
|
204 pImpl->recModes |= XA_RECMODE_STREAM; |
|
205 } |
|
206 } |
|
207 } |
|
208 } |
|
209 if( pImpl->recModes ==0 ) |
|
210 { |
|
211 DEBUG_ERR("Warning!!! No recording interfaces requested - unable to record!!"); |
206 DEBUG_ERR("Warning!!! No recording interfaces requested - unable to record!!"); |
212 } |
207 } |
213 /*check sink and src parameters*/ |
208 /*check sink and src parameters*/ |
214 if(ret==XA_RESULT_SUCCESS) |
209 if (ret == XA_RESULT_SUCCESS) |
215 { |
210 { |
216 ret = XACommon_ValidateDataLocator(3, pDataSnk, pAudioSrc, pImageVideoSrc); |
211 ret = XACommon_ValidateDataLocator(3, pDataSnk, pAudioSrc, |
|
212 pImageVideoSrc); |
217 /*datasink ignored if only snapshotitf is used*/ |
213 /*datasink ignored if only snapshotitf is used*/ |
218 if(!pDataSnk && (pImpl->recModes & XA_RECMODE_STREAM)) |
214 if (!pDataSnk && (pImpl->recModes & XA_RECMODE_STREAM)) |
219 { |
215 { |
220 DEBUG_ERR("No datasink to record to!"); |
216 DEBUG_ERR("No datasink to record to!"); |
221 ret = XA_RESULT_PARAMETER_INVALID; |
217 ret = XA_RESULT_PARAMETER_INVALID; |
222 } |
218 } |
223 if(!pAudioSrc && !pImageVideoSrc) |
219 if (!pAudioSrc && !pImageVideoSrc) |
224 { |
220 { |
225 DEBUG_ERR("No data sources set!"); |
221 DEBUG_ERR("No data sources set!"); |
226 ret = XA_RESULT_PARAMETER_INVALID; |
222 ret = XA_RESULT_PARAMETER_INVALID; |
227 } |
223 } |
228 } |
224 } |
229 |
225 |
230 if(ret!=XA_RESULT_SUCCESS) |
226 if (ret != XA_RESULT_SUCCESS) |
231 { /* creation fails */ |
227 { /* creation fails */ |
232 XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj)); |
228 XAObjectItfImpl_Destroy((XAObjectItf) &(pBaseObj)); |
233 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
229 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
234 DEBUG_API("<-XAMediaRecorderImpl_CreateMediaRecorder"); |
230 DEBUG_API("<-XAMediaRecorderImpl_CreateMediaRecorder"); |
235 return ret; |
231 return ret; |
236 } |
232 } |
237 |
233 |
238 /* Mark interfaces that can be handled dynamically */ |
234 /* Mark interfaces that can be handled dynamically */ |
239 /* Mandated dynamic itfs */ |
235 /* Mandated dynamic itfs */ |
240 pBaseObj->interfaceMap[MR_METADATAINSERTIONITF].isDynamic = XA_BOOLEAN_TRUE; |
236 pBaseObj->interfaceMap[MR_METADATAINSERTIONITF].isDynamic |
|
237 = XA_BOOLEAN_TRUE; |
241 pBaseObj->interfaceMap[MR_EQUALIZERITF].isDynamic = XA_BOOLEAN_TRUE; |
238 pBaseObj->interfaceMap[MR_EQUALIZERITF].isDynamic = XA_BOOLEAN_TRUE; |
242 pBaseObj->interfaceMap[MR_IMAGEEFFECTSITF].isDynamic = XA_BOOLEAN_TRUE; |
239 pBaseObj->interfaceMap[MR_IMAGEEFFECTSITF].isDynamic = XA_BOOLEAN_TRUE; |
243 |
|
244 |
240 |
245 /* Initialize XAMediaRecorderImpl variables */ |
241 /* Initialize XAMediaRecorderImpl variables */ |
246 pImpl->audioSrc = pAudioSrc; |
242 pImpl->audioSrc = pAudioSrc; |
247 pImpl->dataSnk = pDataSnk; |
243 pImpl->dataSnk = pDataSnk; |
248 pImpl->imageVideoSrc = pImageVideoSrc; |
244 pImpl->imageVideoSrc = pImageVideoSrc; |
249 /* Determine framework type that can handle recording */ |
245 /* Determine framework type that can handle recording */ |
250 fwType = (FWMgrFwType)FWMgrMOUnknown; |
246 fwType = (FWMgrFwType) FWMgrMOUnknown; |
251 /**/ |
247 /**/ |
252 if (pDataSnk->pLocator) |
248 if (pDataSnk->pLocator) |
253 { |
249 { |
254 XADataLocator_URI* dataLoc = (XADataLocator_URI*)pDataSnk->pLocator; |
250 XADataLocator_URI* dataLoc = (XADataLocator_URI*) pDataSnk->pLocator; |
255 if (dataLoc->locatorType == XA_DATALOCATOR_URI) |
251 if (dataLoc->locatorType == XA_DATALOCATOR_URI) |
256 { |
252 { |
257 uri = (char*)dataLoc->URI; |
253 uri = (char*) dataLoc->URI; |
258 } |
254 } |
259 } |
255 } |
260 fwType = XAFrameworkMgr_GetFramework( |
256 fwType = XAFrameworkMgr_GetFramework(mapper, uri, FWMgrMORecorder); |
261 mapper, |
|
262 uri, |
|
263 FWMgrMORecorder); |
|
264 |
257 |
265 if (fwType == FWMgrMOUnknown) |
258 if (fwType == FWMgrMOUnknown) |
266 { |
259 { |
267 ret = XA_RESULT_CONTENT_UNSUPPORTED; |
260 ret = XA_RESULT_CONTENT_UNSUPPORTED; |
268 XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj)); |
261 XAObjectItfImpl_Destroy((XAObjectItf) &(pBaseObj)); |
269 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
262 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
270 DEBUG_API("<-XAMediaRecorderImpl_CreateMediaRecorder"); |
263 DEBUG_API("<-XAMediaRecorderImpl_CreateMediaRecorder"); |
271 return ret; |
264 return ret; |
272 } |
265 } |
273 |
266 |
274 /* Set ObjectItf to point to newly created object */ |
267 /* Set ObjectItf to point to newly created object */ |
275 *pRecorder = (XAObjectItf)&(pBaseObj->self); |
268 *pRecorder = (XAObjectItf) &(pBaseObj->self); |
276 |
269 |
277 if(fwType == FWMgrFWMMF) |
270 if (fwType == FWMgrFWMMF) |
278 { |
271 { |
279 |
272 |
280 pImpl->adaptationCtx = XAMediaRecorderAdaptMMF_Create(pImpl->audioSrc, |
273 pImpl->adaptationCtx = XAMediaRecorderAdaptMMF_Create( |
281 pImpl->imageVideoSrc, pImpl->dataSnk, pImpl->recModes); |
274 pImpl->audioSrc, pImpl->imageVideoSrc, pImpl->dataSnk, |
282 } |
275 pImpl->recModes); |
|
276 } |
283 else |
277 else |
284 { |
278 { |
285 |
279 |
286 pImpl->adaptationCtx = XAMediaRecorderAdapt_Create(pImpl->audioSrc, |
280 pImpl->adaptationCtx = XAMediaRecorderAdapt_Create(pImpl->audioSrc, |
287 pImpl->imageVideoSrc, |
281 pImpl->imageVideoSrc, pImpl->dataSnk, pImpl->recModes); |
288 pImpl->dataSnk, |
282 } |
289 pImpl->recModes); |
283 |
290 } |
284 if (pImpl->adaptationCtx) |
291 |
|
292 if(pImpl->adaptationCtx) |
|
293 { |
285 { |
294 pImpl->adaptationCtx->capslist = capabilities; |
286 pImpl->adaptationCtx->capslist = capabilities; |
295 pImpl->adaptationCtx->fwtype = fwType; |
287 pImpl->adaptationCtx->fwtype = fwType; |
296 } |
288 } |
297 else |
289 else |
298 { |
290 { |
299 ret = XA_RESULT_MEMORY_FAILURE; |
291 ret = XA_RESULT_MEMORY_FAILURE; |
300 XAObjectItfImpl_Destroy((XAObjectItf)&(pBaseObj)); |
292 XAObjectItfImpl_Destroy((XAObjectItf) &(pBaseObj)); |
301 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
293 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
302 DEBUG_API("<-XAMediaRecorderImpl_CreateMediaRecorder"); |
294 DEBUG_API("<-XAMediaRecorderImpl_CreateMediaRecorder"); |
303 return ret; |
295 return ret; |
304 } |
296 } |
305 |
297 |
306 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
298 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
307 DEBUG_API("<-XAMediaRecorderImpl_CreateMediaRecorder"); |
299 DEBUG_API("<-XAMediaRecorderImpl_CreateMediaRecorder"); |
308 return XA_RESULT_SUCCESS; |
300 return XA_RESULT_SUCCESS; |
309 } |
301 } |
310 |
302 |
311 /* XAResult XAMediaRecorderImpl_QueryNumSupportedInterfaces |
303 /* XAResult XAMediaRecorderImpl_QueryNumSupportedInterfaces |
312 * Statically query supported interfaces |
304 * Statically query supported interfaces |
313 */ |
305 */ |
314 XAresult XAMediaRecorderImpl_QueryNumSupportedInterfaces(XAuint32 *pNumSupportedInterfaces) |
306 XAresult XAMediaRecorderImpl_QueryNumSupportedInterfaces( |
315 { |
307 XAuint32 *pNumSupportedInterfaces) |
|
308 { |
316 DEBUG_API("->XAMediaRecorderImpl_QueryNumSupportedInterfaces"); |
309 DEBUG_API("->XAMediaRecorderImpl_QueryNumSupportedInterfaces"); |
317 if( pNumSupportedInterfaces ) |
310 if (pNumSupportedInterfaces) |
318 { |
311 { |
319 *pNumSupportedInterfaces = MR_ITFCOUNT; |
312 *pNumSupportedInterfaces = MR_ITFCOUNT; |
320 |
313 |
321 DEBUG_API("<-XAMediaRecorderImpl_QueryNumSupportedInterfaces"); |
314 DEBUG_API("<-XAMediaRecorderImpl_QueryNumSupportedInterfaces"); |
322 return XA_RESULT_SUCCESS; |
315 return XA_RESULT_SUCCESS; |
323 } |
316 } |
324 else |
317 else |
325 { |
318 { |
326 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
319 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
327 return XA_RESULT_PARAMETER_INVALID; |
320 return XA_RESULT_PARAMETER_INVALID; |
328 } |
321 } |
329 } |
322 } |
330 /* XAResult XAMediaRecorderImpl_QuerySupportedInterfaces |
323 /* XAResult XAMediaRecorderImpl_QuerySupportedInterfaces |
331 * Statically query supported interfaces |
324 * Statically query supported interfaces |
332 */ |
325 */ |
333 XAresult XAMediaRecorderImpl_QuerySupportedInterfaces(XAuint32 index, |
326 XAresult XAMediaRecorderImpl_QuerySupportedInterfaces(XAuint32 index, |
334 XAInterfaceID *pInterfaceId) |
327 XAInterfaceID *pInterfaceId) |
335 { |
328 { |
336 DEBUG_API("->XAMediaRecorderImpl_QuerySupportedInterfaces"); |
329 DEBUG_API("->XAMediaRecorderImpl_QuerySupportedInterfaces"); |
337 if( index >= MR_ITFCOUNT || !pInterfaceId ) |
330 if (index >= MR_ITFCOUNT || !pInterfaceId) |
338 { |
331 { |
339 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
332 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
340 return XA_RESULT_PARAMETER_INVALID; |
333 return XA_RESULT_PARAMETER_INVALID; |
341 } |
334 } |
342 else |
335 else |
343 { |
336 { |
344 *pInterfaceId = *(xaMediaRecorderItfIIDs[index]); |
337 *pInterfaceId = *(xaMediaRecorderItfIIDs[index]); |
345 |
338 |
346 DEBUG_API("<-XAMediaRecorderImpl_QuerySupportedInterfaces"); |
339 DEBUG_API("<-XAMediaRecorderImpl_QuerySupportedInterfaces"); |
347 return XA_RESULT_SUCCESS; |
340 return XA_RESULT_SUCCESS; |
348 } |
341 } |
349 } |
342 } |
350 |
343 |
351 /***************************************************************************** |
344 /***************************************************************************** |
352 * base object XAObjectItfImpl methods |
345 * base object XAObjectItfImpl methods |
353 *****************************************************************************/ |
346 *****************************************************************************/ |
354 |
347 |
355 /* XAresult XAMediaRecorderImpl_DoRealize( XAObjectItf self ) |
348 /* XAresult XAMediaRecorderImpl_DoRealize( XAObjectItf self ) |
356 * Description: Realize all implicit and explicitly wanted interfaces. |
349 * Description: Realize all implicit and explicitly wanted interfaces. |
357 * Create and initialize implementation-specific variables. |
350 * Create and initialize implementation-specific variables. |
358 * Called from base object XAObjectItfImpl |
351 * Called from base object XAObjectItfImpl |
359 */ |
352 */ |
360 XAresult XAMediaRecorderImpl_DoRealize( XAObjectItf self ) |
353 XAresult XAMediaRecorderImpl_DoRealize(XAObjectItf self) |
361 { |
354 { |
362 XAuint8 itfIdx; |
355 XAuint8 itfIdx; |
363 XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); |
356 XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self); |
364 XAMediaRecorderImpl* pObjImpl = (XAMediaRecorderImpl*)(pObj); |
357 XAMediaRecorderImpl* pObjImpl = (XAMediaRecorderImpl*) (pObj); |
365 XAresult ret = XA_RESULT_SUCCESS; |
358 XAresult ret = XA_RESULT_SUCCESS; |
366 |
|
367 |
359 |
368 DEBUG_API("->XAMediaRecorderImpl_DoRealize"); |
360 DEBUG_API("->XAMediaRecorderImpl_DoRealize"); |
369 XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaRecorder ); |
361 XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaRecorder ); |
370 |
362 |
371 /* check casting from correct pointer type */ |
363 /* check casting from correct pointer type */ |
372 if( !pObjImpl || pObj != pObjImpl->baseObj.self ) |
364 if (!pObjImpl || pObj != pObjImpl->baseObj.self) |
373 { |
365 { |
374 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
366 DEBUG_ERR("XA_RESULT_PARAMETER_INVALID"); |
375 /* invalid parameter */ |
367 /* invalid parameter */ |
376 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
368 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
377 return XA_RESULT_PARAMETER_INVALID; |
369 return XA_RESULT_PARAMETER_INVALID; |
378 } |
370 } |
379 |
371 |
380 /* init adaptation */ |
372 /* init adaptation */ |
381 if(pObjImpl->adaptationCtx->fwtype == FWMgrFWMMF) |
373 if (pObjImpl->adaptationCtx->fwtype == FWMgrFWMMF) |
382 { |
374 { |
383 ret = XAMediaRecorderAdaptMMF_PostInit( (XAAdaptationMMFCtx*)pObjImpl->adaptationCtx ); |
375 ret = XAMediaRecorderAdaptMMF_PostInit( |
384 } |
376 (XAAdaptationMMFCtx*) pObjImpl->adaptationCtx); |
|
377 } |
385 else |
378 else |
386 { |
379 { |
387 ret = XAMediaRecorderAdapt_PostInit( (XAAdaptationGstCtx*)pObjImpl->adaptationCtx ); |
380 ret = XAMediaRecorderAdapt_PostInit( |
388 } |
381 (XAAdaptationGstCtx*) pObjImpl->adaptationCtx); |
389 |
382 } |
390 if( ret != XA_RESULT_SUCCESS ) |
383 |
391 { |
384 if (ret != XA_RESULT_SUCCESS) |
|
385 { |
392 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
386 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
393 return ret; |
387 return ret; |
394 } |
388 } |
395 |
389 |
396 /* Realize all implicit and explicitly wanted interfaces */ |
390 /* Realize all implicit and explicitly wanted interfaces */ |
397 for( itfIdx = 0; itfIdx < MR_ITFCOUNT; itfIdx++ ) |
391 for (itfIdx = 0; itfIdx < MR_ITFCOUNT; itfIdx++) |
398 { |
392 { |
399 if( !(pObj->interfaceMap[itfIdx].pItf) && |
393 if (!(pObj->interfaceMap[itfIdx].pItf) |
400 pObj->interfaceMap[itfIdx].required ) |
394 && pObj->interfaceMap[itfIdx].required) |
401 { |
395 { |
402 void *pItf = NULL; |
396 void *pItf = NULL; |
403 switch( itfIdx ) |
397 switch (itfIdx) |
404 { |
398 { |
405 case MR_DIMITF: |
399 case MR_DIMITF: |
406 pItf = XADIMItfImpl_Create(); |
400 pItf = XADIMItfImpl_Create(); |
407 if(pItf) |
401 if (pItf) |
408 { |
402 { |
409 XADIMItfImpl_Init(pItf, self, |
403 XADIMItfImpl_Init(pItf, self, |
410 XAMediaRecorderImpl_DoAddItf, |
404 XAMediaRecorderImpl_DoAddItf, |
411 XAMediaRecorderImpl_DoResumeItf, |
405 XAMediaRecorderImpl_DoResumeItf, |
412 XAMediaRecorderImpl_DoRemoveItf); |
406 XAMediaRecorderImpl_DoRemoveItf); |
413 } |
407 } |
414 break; |
408 break; |
415 case MR_RECORDITF: |
409 case MR_RECORDITF: |
416 pItf = XARecordItfImpl_Create( pObjImpl ); |
410 pItf = XARecordItfImpl_Create(pObjImpl); |
417 break; |
411 break; |
418 case MR_AUDIOENCODERITF: |
412 case MR_AUDIOENCODERITF: |
419 pItf = XAAudioEncoderItfImpl_Create(pObjImpl); |
413 pItf = XAAudioEncoderItfImpl_Create(pObjImpl); |
420 break; |
414 break; |
421 #ifdef OMAX_CAMERABIN |
415 #ifdef OMAX_CAMERABIN |
422 case MR_SNAPSHOTITF: |
416 case MR_SNAPSHOTITF: |
423 pItf = XASnapshotItfImpl_Create(pObjImpl); |
417 pItf = XASnapshotItfImpl_Create(pObjImpl); |
424 break; |
418 break; |
425 case MR_VIDEOENCODER: |
419 case MR_VIDEOENCODER: |
426 pItf = XAVideoEncoderItfImpl_Create(pObjImpl); |
420 pItf = XAVideoEncoderItfImpl_Create(pObjImpl); |
427 break; |
421 break; |
428 case MR_IMAGEENCODERITF: |
422 case MR_IMAGEENCODERITF: |
429 pItf = XAImageEncoderItfImpl_Create(pObjImpl); |
423 pItf = XAImageEncoderItfImpl_Create(pObjImpl); |
430 break; |
424 break; |
431 #endif |
425 #endif |
432 case MR_METADATAINSERTIONITF: |
426 case MR_METADATAINSERTIONITF: |
433 pItf = XAMetadataInsertionItfImpl_Create(pObjImpl); |
427 pItf = XAMetadataInsertionItfImpl_Create(pObjImpl); |
434 break; |
428 break; |
435 |
429 |
436 case MR_CONFIGEXTENSIONITF: |
430 case MR_CONFIGEXTENSIONITF: |
437 pItf = XAConfigExtensionsItfImpl_Create(); |
431 pItf = XAConfigExtensionsItfImpl_Create(); |
438 XAConfigExtensionsItfImpl_SetContext( pItf, pObjImpl->adaptationCtx); |
432 XAConfigExtensionsItfImpl_SetContext(pItf, |
|
433 pObjImpl->adaptationCtx); |
439 break; |
434 break; |
440 case MR_EQUALIZERITF: |
435 case MR_EQUALIZERITF: |
441 pItf = XAEqualizerItfImpl_Create( pObjImpl->adaptationCtx ); |
436 pItf = XAEqualizerItfImpl_Create(pObjImpl->adaptationCtx); |
442 break; |
437 break; |
443 #ifdef OMAX_CAMERABIN |
438 #ifdef OMAX_CAMERABIN |
444 case MR_IMAGECONTROLSITF: |
439 case MR_IMAGECONTROLSITF: |
445 pItf = XAImageControlsItfImpl_Create( pObjImpl->adaptationCtx ); |
440 pItf = XAImageControlsItfImpl_Create( pObjImpl->adaptationCtx ); |
446 break; |
441 break; |
447 case MR_IMAGEEFFECTSITF: |
442 case MR_IMAGEEFFECTSITF: |
448 pItf = XAImageEffectsItfImpl_Create( pObjImpl->adaptationCtx ); |
443 pItf = XAImageEffectsItfImpl_Create( pObjImpl->adaptationCtx ); |
449 break; |
444 break; |
450 case MR_VIDEOPOSTPROCESSINGITF: |
445 case MR_VIDEOPOSTPROCESSINGITF: |
451 pItf = XAVideoPostProcessingItfImpl_Create( pObjImpl->adaptationCtx ); |
446 pItf = XAVideoPostProcessingItfImpl_Create( pObjImpl->adaptationCtx ); |
452 break; |
447 break; |
453 #endif |
448 #endif |
454 case MR_VOLUMEITF: |
449 case MR_VOLUMEITF: |
455 pItf = XAVolumeItfImpl_Create( pObjImpl->adaptationCtx ); |
450 pItf = XAVolumeItfImpl_Create(pObjImpl->adaptationCtx); |
456 break; |
451 break; |
457 case MR_METADATAEXTRACTIONITF: |
452 case MR_METADATAEXTRACTIONITF: |
458 pItf = XAMetadataExtractionItfImpl_Create( pObjImpl->adaptationCtx ); |
453 pItf = XAMetadataExtractionItfImpl_Create( |
|
454 pObjImpl->adaptationCtx); |
459 break; |
455 break; |
460 case MR_METADATATRAVERSALITF: |
456 case MR_METADATATRAVERSALITF: |
461 pItf = XAMetadataTraversalItfImpl_Create( pObjImpl->adaptationCtx ); |
457 pItf = XAMetadataTraversalItfImpl_Create( |
462 break; |
458 pObjImpl->adaptationCtx); |
463 |
459 break; |
|
460 |
464 default: |
461 default: |
465 break; |
462 break; |
466 } |
463 } |
467 if( !pItf ) |
464 if (!pItf) |
468 { |
465 { |
469 DEBUG_ERR("XA_RESULT_MEMORY_FAILURE"); |
466 DEBUG_ERR("XA_RESULT_MEMORY_FAILURE"); |
470 /* memory allocation failed */ |
467 /* memory allocation failed */ |
471 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
468 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
472 return XA_RESULT_MEMORY_FAILURE; |
469 return XA_RESULT_MEMORY_FAILURE; |
473 } |
470 } |
474 else |
471 else |
475 { |
472 { |
476 pObj->interfaceMap[itfIdx].pItf = pItf; |
473 pObj->interfaceMap[itfIdx].pItf = pItf; |
477 } |
474 } |
478 } |
475 } |
479 } |
476 } |
480 |
477 |
481 pObj->state = XA_OBJECT_STATE_REALIZED; |
478 pObj->state = XA_OBJECT_STATE_REALIZED; |
482 DEBUG_API("<-XAMediaRecorderImpl_DoRealize"); |
479 DEBUG_API("<-XAMediaRecorderImpl_DoRealize"); |
483 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
480 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
484 return XA_RESULT_SUCCESS; |
481 return XA_RESULT_SUCCESS; |
485 } |
482 } |
486 |
483 |
487 /* XAresult XAMediaRecorderImpl_DoResume |
484 /* XAresult XAMediaRecorderImpl_DoResume |
488 * Description: Resume object from suspended state |
485 * Description: Resume object from suspended state |
489 */ |
486 */ |
490 XAresult XAMediaRecorderImpl_DoResume(XAObjectItf self) |
487 XAresult XAMediaRecorderImpl_DoResume(XAObjectItf self) |
491 { |
488 { |
492 DEBUG_API("->XAMediaRecorderImpl_DoResume"); |
489 DEBUG_API("->XAMediaRecorderImpl_DoResume"); |
493 DEBUG_API("<-XAMediaRecorderImpl_DoResume"); |
490 DEBUG_API("<-XAMediaRecorderImpl_DoResume"); |
494 /* This implementation does not support suspended state */ |
491 /* This implementation does not support suspended state */ |
495 return XA_RESULT_PRECONDITIONS_VIOLATED; |
492 return XA_RESULT_PRECONDITIONS_VIOLATED; |
496 } |
493 } |
497 |
494 |
498 /* void XAMediaRecorderImpl_FreeResources |
495 /* void XAMediaRecorderImpl_FreeResources |
499 * Description: Free all resources reserved at XAMediaRecorderImpl_DoRealize() |
496 * Description: Free all resources reserved at XAMediaRecorderImpl_DoRealize() |
500 */ |
497 */ |
501 void XAMediaRecorderImpl_FreeResources(XAObjectItf self) |
498 void XAMediaRecorderImpl_FreeResources(XAObjectItf self) |
502 { |
499 { |
503 XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); |
500 XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self); |
504 XAMediaRecorderImpl* pObjImpl = (XAMediaRecorderImpl*)(pObj); |
501 XAMediaRecorderImpl* pObjImpl = (XAMediaRecorderImpl*) (pObj); |
505 XAuint8 itfIdx; |
502 XAuint8 itfIdx; |
506 XAMediaRecorderImpl* pImpl = (XAMediaRecorderImpl*)(*self); |
503 XAMediaRecorderImpl* pImpl = (XAMediaRecorderImpl*) (*self); |
507 DEBUG_API("->XAMediaRecorderImpl_FreeResources"); |
504 DEBUG_API("->XAMediaRecorderImpl_FreeResources"); |
508 XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS( XATSMediaRecorder ); |
505 XA_IMPL_THREAD_SAFETY_ENTRY_FOR_VOID_FUNCTIONS( XATSMediaRecorder ); |
509 assert( pObj && pImpl && pObj == pObj->self ); |
506 assert( pObj && pImpl && pObj == pObj->self ); |
510 |
507 |
511 /* free all allocated interfaces */ |
508 /* free all allocated interfaces */ |
512 for(itfIdx = 0; itfIdx < MR_ITFCOUNT; itfIdx++) |
509 for (itfIdx = 0; itfIdx < MR_ITFCOUNT; itfIdx++) |
513 { |
510 { |
514 void *pItf = pObj->interfaceMap[itfIdx].pItf; |
511 void *pItf = pObj->interfaceMap[itfIdx].pItf; |
515 if(pItf) |
512 if (pItf) |
516 { |
513 { |
517 switch(itfIdx) |
514 switch (itfIdx) |
518 { |
515 { |
519 case MR_AUDIOENCODERITF: |
516 case MR_AUDIOENCODERITF: |
520 XAAudioEncoderItfImpl_Free(pItf); |
517 XAAudioEncoderItfImpl_Free(pItf); |
521 break; |
518 break; |
522 case MR_CONFIGEXTENSIONITF: |
519 case MR_CONFIGEXTENSIONITF: |
523 XAConfigExtensionsItfImpl_Free(pItf); |
520 XAConfigExtensionsItfImpl_Free(pItf); |
565 case MR_METADATATRAVERSALITF: |
562 case MR_METADATATRAVERSALITF: |
566 XAMetadataTraversalItfImpl_Free(pItf); |
563 XAMetadataTraversalItfImpl_Free(pItf); |
567 break; |
564 break; |
568 default: |
565 default: |
569 break; |
566 break; |
570 } |
567 } |
571 pObj->interfaceMap[itfIdx].pItf = NULL; |
568 pObj->interfaceMap[itfIdx].pItf = NULL; |
572 } |
569 } |
573 } |
570 } |
574 |
571 |
575 if ( pImpl->adaptationCtx != NULL ) |
572 if (pImpl->adaptationCtx != NULL) |
576 { |
573 { |
577 if(pImpl->adaptationCtx->fwtype == FWMgrFWMMF) |
574 if (pImpl->adaptationCtx->fwtype == FWMgrFWMMF) |
578 { |
575 { |
579 XAMediaRecorderAdaptMMF_Destroy( (XAAdaptationMMFCtx*)pObjImpl->adaptationCtx ); |
576 XAMediaRecorderAdaptMMF_Destroy( |
|
577 (XAAdaptationMMFCtx*) pObjImpl->adaptationCtx); |
580 } |
578 } |
581 else |
579 else |
582 { |
580 { |
583 XAMediaRecorderAdapt_Destroy( (XAAdaptationGstCtx*)pImpl->adaptationCtx ); |
581 XAMediaRecorderAdapt_Destroy( |
|
582 (XAAdaptationGstCtx*) pImpl->adaptationCtx); |
584 } |
583 } |
585 pImpl->adaptationCtx = NULL; |
584 pImpl->adaptationCtx = NULL; |
586 } |
585 } |
587 |
586 |
588 /* free all other allocated resources*/ |
587 /* free all other allocated resources*/ |
589 |
588 |
590 DEBUG_API("<-XAMediaRecorderImpl_FreeResources"); |
589 DEBUG_API("<-XAMediaRecorderImpl_FreeResources"); |
591 XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaRecorder ); |
590 XA_IMPL_THREAD_SAFETY_EXIT_FOR_VOID_FUNCTIONS( XATSMediaRecorder ); |
592 return; |
591 return; |
593 } |
592 } |
594 |
593 |
595 /***************************************************************************** |
594 /***************************************************************************** |
596 * MediaRecorderImpl -specific methods |
595 * MediaRecorderImpl -specific methods |
597 *****************************************************************************/ |
596 *****************************************************************************/ |
598 |
597 |
599 /* XAMediaRecorderImpl_DoAddItf |
598 /* XAMediaRecorderImpl_DoAddItf |
600 * Dynamically add an interface, object specific parts |
599 * Dynamically add an interface, object specific parts |
601 */ |
600 */ |
602 XAresult XAMediaRecorderImpl_DoAddItf(XAObjectItf self, XAObjItfMapEntry *mapEntry ) |
601 XAresult XAMediaRecorderImpl_DoAddItf(XAObjectItf self, |
603 { |
602 XAObjItfMapEntry *mapEntry) |
604 |
603 { |
605 XAObjectItfImpl* pObj = (XAObjectItfImpl*)(*self); |
604 |
606 XAMediaRecorderImpl* pImpl = (XAMediaRecorderImpl*)(pObj); |
605 XAObjectItfImpl* pObj = (XAObjectItfImpl*) (*self); |
|
606 XAMediaRecorderImpl* pImpl = (XAMediaRecorderImpl*) (pObj); |
607 |
607 |
608 XAresult ret = XA_RESULT_SUCCESS; |
608 XAresult ret = XA_RESULT_SUCCESS; |
609 |
609 |
610 DEBUG_API("->XAMediaRecorderImpl_DoAddItf"); |
610 DEBUG_API("->XAMediaRecorderImpl_DoAddItf"); |
611 XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaRecorder ); |
611 XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaRecorder ); |
612 |
612 |
613 if(mapEntry) |
613 if (mapEntry) |
614 { |
614 { |
615 switch( mapEntry->mapIdx ) |
615 switch (mapEntry->mapIdx) |
616 { |
616 { |
617 |
617 |
618 case MR_METADATAINSERTIONITF: |
618 case MR_METADATAINSERTIONITF: |
619 mapEntry->pItf = XAMetadataInsertionItfImpl_Create(pImpl); |
619 mapEntry->pItf = XAMetadataInsertionItfImpl_Create(pImpl); |
620 break; |
620 break; |
621 case MR_EQUALIZERITF: |
621 case MR_EQUALIZERITF: |
622 mapEntry->pItf = XAEqualizerItfImpl_Create( pImpl->adaptationCtx ); |
622 mapEntry->pItf = XAEqualizerItfImpl_Create( |
623 break; |
623 pImpl->adaptationCtx); |
|
624 break; |
624 #ifdef OMAX_CAMERABIN |
625 #ifdef OMAX_CAMERABIN |
625 case MR_IMAGEEFFECTSITF: |
626 case MR_IMAGEEFFECTSITF: |
626 mapEntry->pItf = XAImageEffectsItfImpl_Create( pImpl->adaptationCtx ); |
627 mapEntry->pItf = XAImageEffectsItfImpl_Create( pImpl->adaptationCtx ); |
627 break; |
628 break; |
628 #endif |
629 #endif |
629 default: |
630 default: |
630 DEBUG_ERR("XAMediaRecorderImpl_DoAddItf unknown id"); |
631 DEBUG_ERR("XAMediaRecorderImpl_DoAddItf unknown id") |
631 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
632 ; |
632 break; |
633 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
633 } |
634 break; |
634 |
635 } |
635 if( !mapEntry->pItf && ret == XA_RESULT_SUCCESS) |
636 |
636 { |
637 if (!mapEntry->pItf && ret == XA_RESULT_SUCCESS) |
|
638 { |
637 DEBUG_ERR("XAMediaRecorderImpl_DoAddItf itf creation failed"); |
639 DEBUG_ERR("XAMediaRecorderImpl_DoAddItf itf creation failed"); |
638 ret = XA_RESULT_MEMORY_FAILURE; |
640 ret = XA_RESULT_MEMORY_FAILURE; |
639 } |
641 } |
640 } |
642 } |
641 else |
643 else |
642 { |
644 { |
643 ret = XA_RESULT_PARAMETER_INVALID; |
645 ret = XA_RESULT_PARAMETER_INVALID; |
644 } |
646 } |
645 |
647 |
646 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
648 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
647 DEBUG_API("<-XAMediaRecorderImpl_DoAddItf"); |
649 DEBUG_API("<-XAMediaRecorderImpl_DoAddItf"); |
648 return ret; |
650 return ret; |
649 } |
651 } |
650 |
652 |
651 /* XAMediaRecorderImpl_DoResumeItf |
653 /* XAMediaRecorderImpl_DoResumeItf |
652 * Try to resume lost interface, object specific parts |
654 * Try to resume lost interface, object specific parts |
653 */ |
655 */ |
654 XAresult XAMediaRecorderImpl_DoResumeItf(XAObjectItf self, XAObjItfMapEntry *mapEntry ) |
656 XAresult XAMediaRecorderImpl_DoResumeItf(XAObjectItf self, |
655 { |
657 XAObjItfMapEntry *mapEntry) |
|
658 { |
656 XAresult ret; |
659 XAresult ret; |
657 /* For now, no difference between suspended and unrealised itfs */ |
660 /* For now, no difference between suspended and unrealised itfs */ |
658 DEBUG_API("->XAMediaRecorderImpl_DoResumeItf"); |
661 DEBUG_API("->XAMediaRecorderImpl_DoResumeItf"); |
659 XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaRecorder ); |
662 XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaRecorder ); |
660 ret = XAMediaRecorderImpl_DoAddItf(self,mapEntry); |
663 ret = XAMediaRecorderImpl_DoAddItf(self, mapEntry); |
661 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
664 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
662 DEBUG_API("<-XAMediaRecorderImpl_DoResumeItf"); |
665 DEBUG_API("<-XAMediaRecorderImpl_DoResumeItf"); |
663 return ret; |
666 return ret; |
664 } |
667 } |
665 |
668 |
666 /* XAMediaRecorderImpl_DoRemoveItf |
669 /* XAMediaRecorderImpl_DoRemoveItf |
667 * Dynamically remove an interface, object specific parts |
670 * Dynamically remove an interface, object specific parts |
668 */ |
671 */ |
669 XAresult XAMediaRecorderImpl_DoRemoveItf(XAObjectItf self, XAObjItfMapEntry *mapEntry ) |
672 XAresult XAMediaRecorderImpl_DoRemoveItf(XAObjectItf self, |
670 { |
673 XAObjItfMapEntry *mapEntry) |
|
674 { |
671 XAresult ret = XA_RESULT_SUCCESS; |
675 XAresult ret = XA_RESULT_SUCCESS; |
672 DEBUG_API("->XAMediaRecorderImpl_DoRemoveItf"); |
676 DEBUG_API("->XAMediaRecorderImpl_DoRemoveItf"); |
673 XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaRecorder ); |
677 XA_IMPL_THREAD_SAFETY_ENTRY( XATSMediaRecorder ); |
674 if(mapEntry) |
678 if (mapEntry) |
675 { |
679 { |
676 switch( mapEntry->mapIdx ) |
680 switch (mapEntry->mapIdx) |
677 { |
681 { |
678 case MR_METADATAINSERTIONITF: |
682 case MR_METADATAINSERTIONITF: |
679 XAMetadataInsertionItfImpl_Free( mapEntry->pItf ); |
683 XAMetadataInsertionItfImpl_Free(mapEntry->pItf); |
680 break; |
684 break; |
681 case MR_EQUALIZERITF: |
685 case MR_EQUALIZERITF: |
682 XAEqualizerItfImpl_Free( mapEntry->pItf ); |
686 XAEqualizerItfImpl_Free(mapEntry->pItf); |
683 break; |
687 break; |
684 #ifdef OMAX_CAMERABIN |
688 #ifdef OMAX_CAMERABIN |
685 case MR_IMAGEEFFECTSITF: |
689 case MR_IMAGEEFFECTSITF: |
686 XAImageEffectsItfImpl_Free( mapEntry->pItf ); |
690 XAImageEffectsItfImpl_Free( mapEntry->pItf ); |
687 break; |
691 break; |
688 #endif |
692 #endif |
689 default: |
693 default: |
690 DEBUG_ERR("XAMediaRecorderImpl_DoRemoveItf unknown id"); |
694 DEBUG_ERR("XAMediaRecorderImpl_DoRemoveItf unknown id") |
691 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
695 ; |
692 break; |
696 ret = XA_RESULT_FEATURE_UNSUPPORTED; |
693 } |
697 break; |
|
698 } |
694 mapEntry->pItf = NULL; |
699 mapEntry->pItf = NULL; |
695 } |
700 } |
696 else |
701 else |
697 { |
702 { |
698 ret = XA_RESULT_PARAMETER_INVALID; |
703 ret = XA_RESULT_PARAMETER_INVALID; |
699 } |
704 } |
700 |
705 |
701 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
706 XA_IMPL_THREAD_SAFETY_EXIT( XATSMediaRecorder ); |
702 DEBUG_API("<-XAMediaRecorderImpl_DoRemoveItf"); |
707 DEBUG_API("<-XAMediaRecorderImpl_DoRemoveItf"); |
703 return ret; |
708 return ret; |
704 } |
709 } |
705 |
|
706 |
710 |
707 /* END OF FILE */ |
711 /* END OF FILE */ |