| 224 | | CFIndex maxlen; |
|---|
| 225 | | char *theName, *theObject; |
|---|
| 226 | | extern VLCEyeTVPluginOwnGlobals_t *nativeGlobals; |
|---|
| 227 | | |
|---|
| 228 | | maxlen = CFStringGetMaximumSizeForEncoding( CFStringGetLength( name ), |
|---|
| 229 | | kCFStringEncodingUTF8) + 1; |
|---|
| 230 | | theName = malloc(maxlen); |
|---|
| 231 | | CFStringGetCString( name, |
|---|
| 232 | | theName, |
|---|
| 233 | | maxlen, |
|---|
| 234 | | kCFStringEncodingUTF8); |
|---|
| 235 | | |
|---|
| 236 | | maxlen = CFStringGetMaximumSizeForEncoding( CFStringGetLength( name ), |
|---|
| 237 | | kCFStringEncodingUTF8) + 1; |
|---|
| 238 | | theObject = malloc(maxlen); |
|---|
| 239 | | CFStringGetCString( object, |
|---|
| 240 | | theObject, |
|---|
| 241 | | maxlen, |
|---|
| 242 | | kCFStringEncodingUTF8); |
|---|
| 243 | | printf( "notication received with name: %s and object: %s\n", theName, theObject ); |
|---|
| 244 | | |
|---|
| 268 | | nativeGlobals->messagePortToVLC = CFMessagePortCreateRemote( kCFAllocatorDefault, |
|---|
| 269 | | CFSTR("VLCEyeTVMsgPort") ); |
|---|
| 270 | | if( nativeGlobals->messagePortToVLC == NULL ) |
|---|
| 271 | | printf( "getting messagePortToVLC failed!\n" ); |
|---|
| 272 | | else |
|---|
| 273 | | { |
|---|
| 274 | | nativeGlobals->b_msgPortOpen = TRUE; |
|---|
| 275 | | printf( "msg port opened / data sending switched on\n" ); |
|---|
| | 204 | if( vlcSock == -1 ) |
|---|
| | 205 | { |
|---|
| | 206 | int peerSock; |
|---|
| | 207 | |
|---|
| | 208 | /* set-up data socket */ |
|---|
| | 209 | peerSock = socket(AF_UNIX, SOCK_STREAM, 0); |
|---|
| | 210 | if( peerSock != -1 ) |
|---|
| | 211 | { |
|---|
| | 212 | struct sockaddr_un peerAddr; |
|---|
| | 213 | /* set-up connection address */ |
|---|
| | 214 | memset(&peerAddr, 0, sizeof(peerAddr)); |
|---|
| | 215 | peerAddr.sun_family = AF_UNIX; |
|---|
| | 216 | strncpy(peerAddr.sun_path, "/tmp/.vlc-eyetv-bridge", sizeof(peerAddr.sun_path)-1); |
|---|
| | 217 | |
|---|
| | 218 | /* connect */ |
|---|
| | 219 | printf("data connect in progess...\n"); |
|---|
| | 220 | if( connect(peerSock, (struct sockaddr *)&peerAddr, sizeof(struct sockaddr_un)) != -1 ) |
|---|
| | 221 | { |
|---|
| | 222 | printf("data sending switched on\n"); |
|---|
| | 223 | vlcSock = peerSock; |
|---|
| | 224 | } |
|---|
| | 225 | else |
|---|
| | 226 | printf("connect data socket failed (errno=%d)\n", errno ); |
|---|
| | 227 | } |
|---|
| | 228 | else |
|---|
| | 229 | printf("create data socket failed (errno=%d)\n", errno ); |
|---|
| 327 | | printf("VLC media player Plug-In: DeviceRemoved\n"); |
|---|
| 328 | | |
|---|
| 329 | | extern VLCEyeTVPluginOwnGlobals_t *nativeGlobals; |
|---|
| 330 | | long result = 0; |
|---|
| 331 | | int i; |
|---|
| 332 | | |
|---|
| 333 | | if( globals ) |
|---|
| 334 | | { |
|---|
| 335 | | for( i = 0; i < globals->deviceCount; i++ ) |
|---|
| 336 | | { |
|---|
| 337 | | if ( globals->devices[i].deviceID == deviceID ) |
|---|
| 338 | | { |
|---|
| 339 | | globals->deviceCount--; |
|---|
| 340 | | |
|---|
| 341 | | if( i<globals->deviceCount ) |
|---|
| 342 | | { |
|---|
| 343 | | globals->devices[i] = globals->devices[globals->deviceCount]; |
|---|
| 344 | | } |
|---|
| 345 | | |
|---|
| 346 | | if( nativeGlobals ) |
|---|
| 347 | | nativeGlobals->i_deviceCount = globals->deviceCount; |
|---|
| 348 | | |
|---|
| 349 | | /* notify a potential VLC instance about the removal */ |
|---|
| 350 | | CFNotificationCenterPostNotification( CFNotificationCenterGetDistributedCenter(), |
|---|
| 351 | | CFSTR("DeviceRemoved"), |
|---|
| 352 | | CFSTR(VLC_NOTIFICATION_OBJECT), |
|---|
| 353 | | /*userInfo*/ NULL, |
|---|
| 354 | | TRUE ); |
|---|
| 355 | | } |
|---|
| 356 | | } |
|---|
| 357 | | } |
|---|
| 358 | | |
|---|
| 359 | | return result; |
|---|
| | 271 | printf("VLC media player Plug-In: DeviceRemoved\n"); |
|---|
| | 272 | |
|---|
| | 273 | long result = 0; |
|---|
| | 274 | |
|---|
| | 275 | --i_deviceCount; |
|---|
| | 276 | if( 0 == i_deviceCount ) |
|---|
| | 277 | { |
|---|
| | 278 | /* notify a potential VLC instance about the removal */ |
|---|
| | 279 | CFNotificationCenterPostNotification( CFNotificationCenterGetDistributedCenter(), |
|---|
| | 280 | CFSTR("DeviceRemoved"), |
|---|
| | 281 | CFSTR(VLC_NOTIFICATION_OBJECT), |
|---|
| | 282 | /*userInfo*/ NULL, |
|---|
| | 283 | TRUE ); |
|---|
| | 284 | } |
|---|
| | 285 | if( (vlcSock != -1) && (deviceID == globals->activeDeviceID) ) |
|---|
| | 286 | { |
|---|
| | 287 | close(vlcSock); |
|---|
| | 288 | vlcSock = -1; |
|---|
| | 289 | printf( "data sending switched off\n" ); |
|---|
| | 290 | } |
|---|
| | 291 | |
|---|
| | 292 | return result; |
|---|
| 368 | | long result = 0; |
|---|
| 369 | | int i, j, isNewPID; |
|---|
| 370 | | TransportStreamPacket *packet; |
|---|
| 371 | | extern VLCEyeTVPluginOwnGlobals_t *nativeGlobals; |
|---|
| 372 | | SInt32 i_returnValue; |
|---|
| 373 | | CFMutableDataRef theMutableRef; |
|---|
| 374 | | uint8_t *p_bufferForSending = malloc(4); |
|---|
| 375 | | bool b_nonSendData; |
|---|
| 376 | | int i_lastSentPacket; |
|---|
| 377 | | |
|---|
| 378 | | if( globals && nativeGlobals ) |
|---|
| 379 | | { |
|---|
| 380 | | DeviceInfo *deviceInfo = GetDeviceInfo(globals, deviceID); |
|---|
| 381 | | |
|---|
| 382 | | if( deviceInfo ) |
|---|
| 383 | | { |
|---|
| 384 | | /* alloc the buffer if wanted */ |
|---|
| 385 | | if( nativeGlobals->b_msgPortOpen == TRUE ) |
|---|
| 386 | | theMutableRef = CFDataCreateMutable( kCFAllocatorDefault, (188) ); |
|---|
| 387 | | |
|---|
| 388 | | for( i = 0; i < packetsCount; i++ ) |
|---|
| 389 | | { |
|---|
| 390 | | packet = ( TransportStreamPacket* )packets[i]; |
|---|
| 391 | | isNewPID = 1; |
|---|
| 392 | | |
|---|
| 393 | | /* search for PID */ |
|---|
| 394 | | for( j = 0; j < deviceInfo->pidsCount; j++ ) |
|---|
| 395 | | { |
|---|
| 396 | | if( packet->PID == deviceInfo->pids[j] ) |
|---|
| 397 | | { |
|---|
| 398 | | isNewPID = 0; |
|---|
| 399 | | break; |
|---|
| 400 | | } |
|---|
| 401 | | } |
|---|
| 402 | | |
|---|
| 403 | | /* add new PIDs to the DeviceInfo */ |
|---|
| 404 | | if( isNewPID ) |
|---|
| 405 | | { |
|---|
| 406 | | printf ("VLC media player Plug-In: SamplePacketsArrived, newPID = %6d\n", packet->PID); |
|---|
| 407 | | |
|---|
| 408 | | if( deviceInfo->pidsCount < MAX_PIDS ) |
|---|
| 409 | | { |
|---|
| 410 | | deviceInfo->pids[deviceInfo->pidsCount++] = packet->PID; |
|---|
| 411 | | } |
|---|
| 412 | | } |
|---|
| 413 | | else |
|---|
| | 300 | if( globals ) |
|---|
| | 301 | { |
|---|
| | 302 | /* check if data connection is active */ |
|---|
| | 303 | if( vlcSock != -1 ) |
|---|
| | 304 | { |
|---|
| | 305 | if( deviceID == globals->activeDeviceID ) |
|---|
| | 306 | { |
|---|
| | 307 | long pidCount = globals->activePIDsCount; |
|---|
| | 308 | if( pidCount ) |
|---|
| 431 | | /* in a good world, this wouldn't be necessary */ |
|---|
| 432 | | if( theMutableRef == NULL ) |
|---|
| 433 | | theMutableRef = CFDataCreateMutable( kCFAllocatorDefault, (188) ); |
|---|
| 434 | | |
|---|
| 435 | | /* collect data to send larger packets */ |
|---|
| 436 | | |
|---|
| 437 | | /* enlarge buffer if necessary */ |
|---|
| 438 | | if( i > 0 ) |
|---|
| 439 | | CFDataIncreaseLength( theMutableRef, 188 ); |
|---|
| 440 | | |
|---|
| 441 | | /* add missing header */ |
|---|
| 442 | | memcpy( p_bufferForSending, packet, 4 ); |
|---|
| 443 | | CFDataAppendBytes( theMutableRef, p_bufferForSending, sizeof(p_bufferForSending) ); |
|---|
| 444 | | |
|---|
| 445 | | free( p_bufferForSending ); |
|---|
| 446 | | p_bufferForSending = malloc(4); |
|---|
| 447 | | |
|---|
| 448 | | /* add payload */ |
|---|
| 449 | | CFDataAppendBytes( theMutableRef, packet->data, sizeof(packet->data) ); |
|---|
| 450 | | |
|---|
| 451 | | b_nonSendData = TRUE; |
|---|
| 452 | | |
|---|
| | 312 | /* apply PID filtering, only PIDs in active service for device are sent through */ |
|---|
| | 313 | long pid = (ntohl(**packets) & 0x001FFF00L)>>8; |
|---|
| | 314 | long i; |
|---|
| | 315 | for( i=0; i<pidCount; ++i ) |
|---|
| | 316 | { |
|---|
| | 317 | if( globals->activePIDs[i].pid == pid ) |
|---|
| | 318 | { |
|---|
| | 319 | ssize_t sent = write(vlcSock, *packets, sizeof(TransportStreamPacket)); |
|---|
| | 320 | if( sent != sizeof(TransportStreamPacket) ) |
|---|
| | 321 | { |
|---|
| | 322 | if( sent == -1 ) |
|---|
| | 323 | printf("data sending failed (errno=%d)\n", errno); |
|---|
| | 324 | else |
|---|
| | 325 | printf("data sending incomplete (sent=%d)\n", sent); |
|---|
| | 326 | close(vlcSock); |
|---|
| | 327 | vlcSock = -1; |
|---|
| | 328 | return 0; |
|---|
| | 329 | } |
|---|
| | 330 | ++(globals->seenPIDs[i]); |
|---|
| | 331 | #if 0 |
|---|
| | 332 | if( i > 0 ) |
|---|
| | 333 | { |
|---|
| | 334 | /* if we assume that consecutive packets should have the same PID, it would therefore |
|---|
| | 335 | speed up filtering to reorder activePIDs list based on pid occurrences */ |
|---|
| | 336 | EyeTVPluginPIDInfo swap = globals->activePIDs[i]; |
|---|
| | 337 | memmove(globals->activePIDs+1, globals->activePIDs, sizeof(EyeTVPluginPIDInfo)*i); |
|---|
| | 338 | globals->activePIDs[0] = swap; |
|---|
| | 339 | } |
|---|
| | 340 | |
|---|
| | 341 | if( pid && filterPidInfo.pidType != kEyeTVPIDType_PMT ) |
|---|
| | 342 | { |
|---|
| | 343 | /* to save on CPU, prevent EyeTV from mirroring that program by blocking video & audio packets |
|---|
| | 344 | by changing PID to NULL PID */ |
|---|
| | 345 | #if defined(WORDS_BIGENDIAN) |
|---|
| | 346 | **packets |= 0x001FFF00L; |
|---|
| | 347 | #else |
|---|
| | 348 | **packets |= 0x00FFF800L; |
|---|
| | 349 | #endif |
|---|
| | 350 | } |
|---|
| | 351 | #endif |
|---|
| | 352 | /* done filtering on this packet, move on to next packet */ |
|---|
| | 353 | break; |
|---|
| | 354 | } |
|---|
| | 355 | } |
|---|
| | 356 | if( i == pidCount ) |
|---|
| | 357 | printf("unexpected PID %ld\n", pid); |
|---|
| 454 | | } |
|---|
| 455 | | |
|---|
| 456 | | globals->packetCount++; |
|---|
| 457 | | |
|---|
| 458 | | if( globals->packetCount%10000 == 0 ) |
|---|
| 459 | | printf("-> %lld Packets received so far...\n",globals->packetCount); |
|---|
| 460 | | } |
|---|
| 461 | | |
|---|
| 462 | | if( nativeGlobals->b_msgPortOpen == TRUE ) |
|---|
| 463 | | { |
|---|
| 464 | | printf( "sending %i bytes of data\n", CFDataGetLength( theMutableRef ) ); |
|---|
| 465 | | i_returnValue = CFMessagePortSendRequest( nativeGlobals->messagePortToVLC, |
|---|
| 466 | | /* arbitrary int val */ globals->packetCount, |
|---|
| 467 | | /* the data */ theMutableRef, |
|---|
| 468 | | /* no timeout for sending */ 0, |
|---|
| 469 | | /* no timeout for resp */ 0, |
|---|
| 470 | | /* no resp. wanted */ NULL, |
|---|
| 471 | | NULL ); |
|---|
| 472 | | b_nonSendData = FALSE; |
|---|
| 473 | | i_lastSentPacket = globals->packetCount; |
|---|
| 474 | | if( i_returnValue == kCFMessagePortSendTimeout ) |
|---|
| 475 | | printf( "time out while sending\n" ); |
|---|
| 476 | | else if( i_returnValue == kCFMessagePortReceiveTimeout ) |
|---|
| 477 | | printf( "time out while waiting for resp\n" ); |
|---|
| 478 | | else if( i_returnValue == kCFMessagePortIsInvalid ) |
|---|
| 479 | | { |
|---|
| 480 | | /* suppress any further attemps */ |
|---|
| 481 | | printf( "message port is invalid!\n" ); |
|---|
| 482 | | nativeGlobals->b_msgPortOpen = FALSE; |
|---|
| 483 | | } |
|---|
| 484 | | else if( i_returnValue == kCFMessagePortTransportError ) |
|---|
| 485 | | printf( "transport error while sending!\n" ); |
|---|
| 486 | | else |
|---|
| 487 | | { |
|---|
| 488 | | //printf( "success, freeing resources\n" ); |
|---|
| 489 | | free( theMutableRef ); |
|---|
| 490 | | theMutableRef = CFDataCreateMutable( kCFAllocatorDefault, (188) ); |
|---|
| | 359 | --packetsCount; |
|---|
| | 360 | ++packets; |
|---|
| 521 | | EyeTVPluginDeviceID deviceID, |
|---|
| 522 | | long headendID, |
|---|
| 523 | | long transponderID, |
|---|
| 524 | | long serviceID, |
|---|
| 525 | | EyeTVPluginPIDInfo *pidList, |
|---|
| 526 | | long pidsCount) |
|---|
| 527 | | { |
|---|
| 528 | | long result = 0; |
|---|
| 529 | | int i; |
|---|
| 530 | | |
|---|
| 531 | | printf("\nVLC media player Plug-In: ServiceChanged:\n"); |
|---|
| 532 | | printf( "=====================================\n"); |
|---|
| 533 | | |
|---|
| 534 | | if( globals ) |
|---|
| 535 | | { |
|---|
| 536 | | DeviceInfo *deviceInfo = GetDeviceInfo( globals, deviceID ); |
|---|
| 537 | | if( deviceInfo ) |
|---|
| 538 | | { |
|---|
| 539 | | deviceInfo->headendID = headendID; |
|---|
| 540 | | printf("HeadendID: %ld, ", headendID); |
|---|
| 541 | | |
|---|
| 542 | | deviceInfo->transponderID = transponderID; |
|---|
| 543 | | printf("TransponderID: %ld, ", transponderID); |
|---|
| 544 | | |
|---|
| 545 | | deviceInfo->serviceID = serviceID; |
|---|
| 546 | | printf("ServiceID: %ld\n\n", serviceID); |
|---|
| 547 | | |
|---|
| 548 | | deviceInfo->activePIDsCount = pidsCount; |
|---|
| 549 | | |
|---|
| 550 | | for( i = 0; i < pidsCount; i++ ) |
|---|
| 551 | | { |
|---|
| 552 | | deviceInfo->activePIDs[i] = pidList[i]; |
|---|
| 553 | | printf("Active PID: %ld, type: %ld\n", pidList[i].pid, pidList[i].pidType); |
|---|
| 554 | | } |
|---|
| 555 | | |
|---|
| 556 | | deviceInfo->pidsCount = 0; |
|---|
| 557 | | |
|---|
| 558 | | } |
|---|
| 559 | | } |
|---|
| 560 | | printf( "=====================================\n"); |
|---|
| 561 | | |
|---|
| | 381 | EyeTVPluginDeviceID deviceID, |
|---|
| | 382 | long headendID, |
|---|
| | 383 | long transponderID, |
|---|
| | 384 | long serviceID, |
|---|
| | 385 | EyeTVPluginPIDInfo *pidList, |
|---|
| | 386 | long pidsCount) |
|---|
| | 387 | { |
|---|
| | 388 | long result = 0; |
|---|
| | 389 | int i; |
|---|
| | 390 | |
|---|
| | 391 | printf("\nVLC media player Plug-In: ServiceChanged:\n"); |
|---|
| | 392 | printf( "=====================================\n"); |
|---|
| | 393 | |
|---|
| | 394 | if( globals ) |
|---|
| | 395 | { |
|---|
| | 396 | printf("DeviceID: %ld, ", deviceID); |
|---|
| | 397 | printf("HeadendID: %ld, ", headendID); |
|---|
| | 398 | printf("TransponderID: %ld, ", transponderID); |
|---|
| | 399 | printf("ServiceID: %ld\n\n", serviceID); |
|---|
| | 400 | |
|---|
| | 401 | globals->activeDeviceID = deviceID; |
|---|
| | 402 | globals->activePIDsCount = pidsCount; |
|---|
| | 403 | |
|---|
| | 404 | for( i = 0; i < pidsCount; i++ ) |
|---|
| | 405 | { |
|---|
| | 406 | globals->activePIDs[i] = pidList[i]; |
|---|
| | 407 | globals->seenPIDs[i] = 0; |
|---|
| | 408 | printf("Active PID: %ld, type: %ld\n", pidList[i].pid, pidList[i].pidType); |
|---|
| | 409 | } |
|---|
| | 410 | } |
|---|
| | 411 | printf( "=====================================\n"); |
|---|
| | 412 | |
|---|
| 588 | | long result = 0; |
|---|
| 589 | | |
|---|
| 590 | | switch( params->selector ) |
|---|
| 591 | | { |
|---|
| 592 | | case kEyeTVPluginSelector_Initialize: |
|---|
| 593 | | result = VLCEyeTVPluginInitialize((VLCEyeTVPluginGlobals_t**)params->refCon, |
|---|
| 594 | | params->initialize.apiVersion, params->initialize.callback); |
|---|
| 595 | | break; |
|---|
| 596 | | |
|---|
| 597 | | case kEyeTVPluginSelector_Terminate: |
|---|
| 598 | | result = VLCEyeTVPluginTerminate((VLCEyeTVPluginGlobals_t*)params->refCon); |
|---|
| 599 | | break; |
|---|
| 600 | | |
|---|
| 601 | | case kEyeTVPluginSelector_GetInfo: |
|---|
| 602 | | result = VLCEyeTVPluginGetInformation((VLCEyeTVPluginGlobals_t*)params->refCon, |
|---|
| 603 | | params->info.pluginAPIVersion, params->info.pluginName, params->info.description); |
|---|
| 604 | | break; |
|---|
| 605 | | |
|---|
| 606 | | case kEyeTVPluginSelector_DeviceAdded: |
|---|
| 607 | | result = VLCEyeTVPluginDeviceAdded((VLCEyeTVPluginGlobals_t*)params->refCon, |
|---|
| 608 | | params->deviceID, params->deviceAdded.deviceType); |
|---|
| 609 | | break; |
|---|
| 610 | | |
|---|
| 611 | | case kEyeTVPluginSelector_DeviceRemoved: |
|---|
| 612 | | result = VLCEyeTVPluginDeviceRemoved((VLCEyeTVPluginGlobals_t*)params->refCon, params->deviceID); |
|---|
| 613 | | break; |
|---|
| 614 | | |
|---|
| 615 | | case kEyeTVPluginSelector_PacketsArrived: |
|---|
| 616 | | result = VLCEyeTVPluginPacketsArrived((VLCEyeTVPluginGlobals_t*)params->refCon, params->deviceID, |
|---|
| 617 | | params->packetsArrived.packets, params->packetsArrived.packetCount); |
|---|
| 618 | | break; |
|---|
| 619 | | |
|---|
| 620 | | case kEyeTVPluginSelector_ServiceChanged: |
|---|
| 621 | | result = VLCEyeTVPluginServiceChanged((VLCEyeTVPluginGlobals_t*)params->refCon, |
|---|
| 622 | | params->deviceID, params->serviceChanged.headendID, |
|---|
| 623 | | params->serviceChanged.transponderID, params->serviceChanged.serviceID, |
|---|
| 624 | | params->serviceChanged.pidList, params->serviceChanged.pidCount); |
|---|
| 625 | | break; |
|---|
| 626 | | } |
|---|
| 627 | | |
|---|
| 628 | | return result; |
|---|
| 629 | | } |
|---|
| | 439 | long result = 0; |
|---|
| | 440 | |
|---|
| | 441 | switch( params->selector ) |
|---|
| | 442 | { |
|---|
| | 443 | case kEyeTVPluginSelector_Initialize: |
|---|
| | 444 | result = VLCEyeTVPluginInitialize((VLCEyeTVPluginGlobals_t**)params->refCon, |
|---|
| | 445 | params->initialize.apiVersion, params->initialize.callback); |
|---|
| | 446 | break; |
|---|
| | 447 | |
|---|
| | 448 | case kEyeTVPluginSelector_Terminate: |
|---|
| | 449 | result = VLCEyeTVPluginTerminate((VLCEyeTVPluginGlobals_t*)params->refCon); |
|---|
| | 450 | break; |
|---|
| | 451 | |
|---|
| | 452 | case kEyeTVPluginSelector_GetInfo: |
|---|
| | 453 | result = VLCEyeTVPluginGetInformation((VLCEyeTVPluginGlobals_t*)params->refCon, |
|---|
| | 454 | params->info.pluginAPIVersion, params->info.pluginName, params->info.description); |
|---|
| | 455 | break; |
|---|
| | 456 | |
|---|
| | 457 | case kEyeTVPluginSelector_DeviceAdded: |
|---|
| | 458 | result = VLCEyeTVPluginDeviceAdded((VLCEyeTVPluginGlobals_t*)params->refCon, |
|---|
| | 459 | params->deviceID, params->deviceAdded.deviceType); |
|---|
| | 460 | break; |
|---|
| | 461 | |
|---|
| | 462 | case kEyeTVPluginSelector_DeviceRemoved: |
|---|
| | 463 | result = VLCEyeTVPluginDeviceRemoved((VLCEyeTVPluginGlobals_t*)params->refCon, params->deviceID); |
|---|
| | 464 | break; |
|---|
| | 465 | |
|---|
| | 466 | case kEyeTVPluginSelector_PacketsArrived: |
|---|
| | 467 | result = VLCEyeTVPluginPacketsArrived((VLCEyeTVPluginGlobals_t*)params->refCon, params->deviceID, |
|---|
| | 468 | params->packetsArrived.packets, params->packetsArrived.packetCount); |
|---|
| | 469 | break; |
|---|
| | 470 | |
|---|
| | 471 | case kEyeTVPluginSelector_ServiceChanged: |
|---|
| | 472 | result = VLCEyeTVPluginServiceChanged((VLCEyeTVPluginGlobals_t*)params->refCon, |
|---|
| | 473 | params->deviceID, params->serviceChanged.headendID, |
|---|
| | 474 | params->serviceChanged.transponderID, params->serviceChanged.serviceID, |
|---|
| | 475 | params->serviceChanged.pidList, params->serviceChanged.pidCount); |
|---|
| | 476 | break; |
|---|
| | 477 | } |
|---|
| | 478 | |
|---|
| | 479 | return result; |
|---|
| | 480 | } |
|---|