63 static BOOLEAN GetTapAssocTag( MemSeqRef addr, U16BIT targetTapUse, U16BIT *pAssocTag)
65 BOOLEAN tapFound = FALSE;
73 memSeqReadPos(addr, &initialOffset);
76 memSeqReadByte(addr, &taps_count);
78 for (i = 0; (i < taps_count) && (tapFound == FALSE); i++)
81 memSeqSetPosRel(addr, 2);
83 readUInt16Seq(addr, &tapUse);
86 if (tapUse == targetTapUse)
89 readUInt16Seq(addr, pAssocTag);
95 memSeqSetPosRel(addr, 2);
97 memSeqReadByte(addr, &ui8);
99 memSeqSetPosRel(addr, (U32BIT)ui8);
104 memSeqSetPosAbs(addr, initialOffset);
142 H_DsmObject streamObject,
void *userData1,
void *userData2,
148 U16BIT associationTag;
150 dsmDP2((
"dsmStreamGetDeferredService(%u)\n", streamObject));
152 if (!DSM_OBJECT_VALIDATE(pDsmObject))
154 dsmDP1((
"ERROR: Invalid object handle\n"));
155 err = CLDSM_ERR_INVALID_OBJECT_HANDLE;
158 else if (pDsmObject->kind != STREAM_OBJ &&
159 pDsmObject->kind != STREAM_OBJ_WITH_EVENTS)
161 dsmDP1((
"ERROR: Incorrect kind=%d\n", pDsmObject->kind));
162 err = CLDSM_ERR_INVALID_OBJECT_TYPE;
164 else if (pDsmObject->status != OBJ_LOAD_COMPLETED)
166 dsmDP1((
"ERROR: Object load not completed\n"));
167 err = CLDSM_ERR_OBJECT_NOT_LOADED;
169 else if (pDsmObject->objectDataSeq == NULL)
171 dsmDP1((
"ERROR: Object not open\n"));
172 err = CLDSM_ERR_OBJECT_NOT_OPEN;
174 else if (pDsmObject->data.so.retrieved == DEFFERED_SERVICE_RECEIVED)
177 *ppDeferredService = &pDsmObject->data.so.multiplex;
180 else if (!GetTapAssocTag(pDsmObject->objectDataSeq, BIOP_PROGRAM_USE, &associationTag))
182 dsmDP1((
"ERROR: Cannot find BIOP_PROGRAM_USE tap\n"));
183 err = CLDSM_ERR_UNABLE_TO_GET_PROGRAM_ASSOC_TAG;
191 siQueryData.kind = SIQUERY_DEFERRED_SERVICE;
192 siQueryData.serviceId = idp->dvbLocator.service_id;
193 siQueryData.associationTag = associationTag;
195 err =
siQueryStart( idp, &siQueryData, (
void *)streamObject, &siQueryResult );
201 pDsmObject->data.so.multiplex = siQueryResult.data.deferredService;
202 pDsmObject->data.so.retrieved = DEFFERED_SERVICE_RECEIVED;
203 *ppDeferredService = &pDsmObject->data.so.multiplex;
208 pDsmObject->r.pPendingSiQueryRef = siQueryResult.data.queryHandle;
209 pDsmObject->data.ds.userData1 = userData1;
210 pDsmObject->data.ds.userData2 = userData2;
215 pDsmObject->data.so.multiplex = idp->dvbLocator;
216 pDsmObject->data.so.retrieved = DEFFERED_SERVICE_RECEIVED;
217 *ppDeferredService = &pDsmObject->data.so.multiplex;
231 if (DSM_OBJECT_VALIDATE(pDsmObject) &&
232 (pDsmObject->status == OBJ_LOAD_COMPLETED) &&
233 (pDsmObject->kind == STREAM_OBJ || pDsmObject->kind == STREAM_OBJ_WITH_EVENTS) &&
234 (pDsmObject->r.pPendingSiQueryRef != NULL)
237 ds_ud1 = pDsmObject->data.ds.userData1;
238 ds_ud2 = pDsmObject->data.ds.userData2;
239 pDsmObject->data.so.multiplex = multiplex;
240 pDsmObject->data.so.retrieved = DEFFERED_SERVICE_RECEIVED;
241 pDsmObject->r.pPendingSiQueryRef = NULL;
242 if (idp->setup.notifyDeferredServiceFunc)
244 idp->setup.notifyDeferredServiceFunc( ds_ud1, ds_ud2, &pDsmObject->data.so.multiplex );
General include file for clDsm library internal definitions.
E_DscError siQueryStart(P_DsmCoreInst idp, P_SIQueryRequest pQueryData, void *queryTarget, P_SIQueryResult pResult)
Starts an SI Query. First tests if we have already made this query and the results are stored or stil...
Header to siQuery module - functions for managing SI queries.
E_DscError CDSM_StreamGetDeferredService(H_DsmCoreInst instance, H_DsmObject streamObject, void *userData1, void *userData2, S_DvbLocator **ppDeferredService)
The Client calls this function to obtain the Association Tag which can be used to determine the PID o...
Defines memory access utils to work with managed (MemMgr) memory.
eader to the clDsmUtils module.