Changeset 10957


Ignore:
Timestamp:
11/02/11 23:45:44 (11 years ago)
Author:
nit
Message:

[titan] change emu channel detection

Location:
titan/titan
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • titan/titan/cam.h

    r10896 r10957  
    295295        while(node != NULL)
    296296        {
    297                 if((node->type == CHANNEL || node->type == RECORDDIRECT || node ->type == RECORDTIMER || node->type == RECORDTIMESHIFT || node->type == RECORDSTREAM) && node->channel != NULL && node->channel->crypt == 1 && node->fedev != NULL && node->fedev->type != FRONTENDDEVDUMMY)
     297                if((node->type == CHANNEL || node->type == RECORDDIRECT || node ->type == RECORDTIMER || node->type == RECORDTIMESHIFT || node->type == RECORDSTREAM) && node->channel != NULL && node->channel->crypt == 1)
    298298                {
    299299                        ret = sockcheck(&node->camsockfd);
     300                       
     301                        if(node->fedev != NULL && node->fedev->type == FRONTENDDEVDUMMY)
     302                        {
     303                                node = node->next;
     304                                continue;
     305                        }
    300306
    301307                        if(ret != 0) // socket not connected
  • titan/titan/service.h

    r10896 r10957  
    2020                if(node->audiodev != NULL) printf("%s (%d)\n", node->audiodev->dev, node->audiodev->fd);
    2121                if(node->videodev != NULL) printf("%s (%d)\n", node->videodev->dev, node->videodev->fd);
     22                printf("camsockfd (%d)\n", node->camsockfd);
    2223                node = node->next;
    2324        }
     
    3940void akttolast()
    4041{
     42        if(status.aktservice->fedev != NULL && status.aktservice->fedev->type == FRONTENDDEVDUMMY) return;
    4143        status.lastservice->fedev = status.aktservice->fedev;
    4244        status.lastservice->dmxaudiodev = status.aktservice->dmxaudiodev;
     
    5557//flag 1: playback
    5658//flag 2: timeshift
     59//flag 3: same as 0 but don't check chnode
    5760int servicestart(struct channel* chnode, char* channellist, char* pin, int flag)
    5861{
     
    7275        m_lock(&status.servicemutex, 2);
    7376
    74         if(status.aktservice->type == CHANNEL && status.aktservice->channel != NULL && chnode == status.aktservice->channel)
     77        if(flag == 0 && status.aktservice->type == CHANNEL && status.aktservice->channel != NULL && chnode == status.aktservice->channel)
    7578        {
    7679                m_unlock(&status.servicemutex, 2);
    7780                return 20;
    7881        }
     82        if(flag == 3) flag = 0;
    7983
    8084        if(chnode == NULL)
     
    505509        while(snode != NULL)
    506510        {
    507                 if(snode != status.lastservice && snode != node && snode->channel == node->channel)
     511                if(snode != status.lastservice && snode != node && snode->channel == node->channel && snode->camsockfd > -1)
    508512                        return snode;
    509513                snode = snode->next;
    510 
    511514        }
    512515        return NULL;
    513516}
    514517
    515 //flag2: timeshift/player
    516 void camsockclose(struct service* node, int flag)
    517 {
    518         struct service* snode = NULL;
    519 
    520         if(flag == 2) return;
     518void camsockclose(struct service* node)
     519{
     520        struct service* snode = service;
    521521       
    522         snode = checkdoubleservice(node);
     522        if(node == NULL) return;
     523        if(node->camsockfd < 0) return;
     524       
     525        while(snode != NULL)
     526        {
     527                if(snode != status.lastservice && snode != node && snode->channel == node->channel)
     528                        break;
     529                snode = snode->next;
     530        }
     531       
    523532        if(snode == NULL)
    524533                sockclose(&node->camsockfd);
    525534        else
    526535        {
    527                 if(snode->camsockfd > -1) sockclose(&node->camsockfd);
     536                if(snode->camsockfd > -1) sockclose(&snode->camsockfd);
    528537                snode->camsockfd = node->camsockfd;
    529                 if(snode != node) node->camsockfd = -1;
     538                node->camsockfd = -1;
    530539        }
    531540}
     
    579588
    580589                if(node->type == CHANNEL && flag != 2) akttolast();
    581                 node->type = NOTHING;
     590                if(flag != 2) node->type = NOTHING;
    582591
    583592                audiostop(node->audiodev);
    584593                videostop(node->videodev, clear);
    585594
    586                 camsockclose(node, flag);
     595                if(flag != 2) camsockclose(node);
    587596               
    588597                if(flag == 1 || (flag == 0 && getconfigint("fastzap", NULL) == 0))
     
    711720                        close(node->recdstfd);
    712721                        close(node->recsrcfd);
    713                         camsockclose(node, 0);
     722                        camsockclose(node);
    714723
    715724                        //check if a rectimer is joined with a service
  • titan/titan/timeshift.h

    r10849 r10957  
    1515                        {
    1616                                status.timeshift = 0;
    17                                 struct channel* tmpchnode = status.aktservice->channel;
    18                                 status.aktservice->channel = NULL;
    19                                 servicecheckret(servicestart(tmpchnode, NULL, NULL, 0), 0);
     17                                servicecheckret(servicestart(status.aktservice->channel, NULL, NULL, 3), 0);
    2018                        }
    2119                        recordcheckret(NULL, ret, 6);
     
    5452                        i++; if(i > 20) break;
    5553                }
    56 
    57                 struct channel* tmpchnode = status.aktservice->channel;
    58                 status.aktservice->channel = NULL;
    59                 servicecheckret(servicestart(tmpchnode, NULL, NULL, 0), 0);
     54                servicecheckret(servicestart(status.aktservice->channel, NULL, NULL, 3), 0);
    6055        }
    6156}
Note: See TracChangeset for help on using the changeset viewer.