Changeset 9756


Ignore:
Timestamp:
06/03/14 23:17:07 (10 years ago)
Author:
theparasol
Message:

DVBAPI Enhancement:
It's same as the new TCP mode, but using the unix named socket (one socket covers whole communication requirements).
The tvheadend supports this access.

Tnx Perexg for providing patch!

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/module-dvbapi.c

    r9755 r9756  
    8888struct s_client *dvbapi_client;
    8989
    90 const char *boxdesc[] = { "none", "dreambox", "duckbox", "ufs910", "dbox2", "ipbox", "ipbox-pmt", "dm7000", "qboxhd", "coolstream", "neumo", "pc" };
     90const char *boxdesc[] = { "none", "dreambox", "duckbox", "ufs910", "dbox2", "ipbox", "ipbox-pmt", "dm7000", "qboxhd", "coolstream", "neumo", "pc", "pc-nodmx" };
    9191
    9292static const struct box_devices devices[BOX_COUNT] =
     
    449449    {
    450450    case DVBAPI_3:
    451         if (cfg.dvbapi_listenport)
     451        if (cfg.dvbapi_listenport || cfg.dvbapi_boxtype == BOXTYPE_PC_NODMX)
    452452            ret = demux[demux_id].demux_fd[n].fd = DUMMY_FD;
    453453        else
     
    487487            memcpy(sFP2.filter.filter, filt, 16);
    488488            memcpy(sFP2.filter.mask, mask, 16);
    489             if (cfg.dvbapi_listenport)
     489            if (cfg.dvbapi_listenport || cfg.dvbapi_boxtype == BOXTYPE_PC_NODMX)
    490490                ret = dvbapi_net_filter_request(demux_id, n, &sFP2);
    491491            else
     
    566566        return 1;
    567567    }
     568    if (cfg.dvbapi_boxtype == BOXTYPE_PC_NODMX) {
     569        selected_api = DVBAPI_3;
     570        selected_box = 1;
     571        cs_log("[DVBAPI] Using %s listen socket, API forced to DVBAPIv3 (%d), userconfig boxtype: %d", devices[selected_box].cam_socket_path, selected_api, cfg.dvbapi_boxtype);
     572        return 1;
     573    }
    568574    int32_t i = 0, n = 0, devnum = -1, dmx_fd = 0, boxnum = sizeof(devices) / sizeof(struct box_devices);
    569575    char device_path[128], device_path2[128];
     
    635641    char device_path[128], device_path2[128];
    636642
     643    if(cfg.dvbapi_boxtype == BOXTYPE_PC_NODMX)
     644        return DUMMY_FD;
     645   
    637646    if(type == 0)
    638647    {
     
    772781        {
    773782        case DVBAPI_3:
    774             if (cfg.dvbapi_listenport)
     783            if (cfg.dvbapi_listenport || cfg.dvbapi_boxtype == BOXTYPE_PC_NODMX)
    775784                retfilter = dvbapi_net_filter_request(demux_index, num, NULL);
    776785            else
     
    810819        }
    811820#ifndef WITH_COOLAPI // no fd close for coolapi and stapi, all others do close fd!
    812         if (!cfg.dvbapi_listenport)
     821        if (!cfg.dvbapi_listenport && cfg.dvbapi_boxtype != BOXTYPE_PC_NODMX)
    813822        {
    814823            retfd = close(fd);
     
    13601369                    ca_pid2.index = idx;
    13611370
    1362                     if(cfg.dvbapi_boxtype == BOXTYPE_PC)
     1371                    if(cfg.dvbapi_boxtype == BOXTYPE_PC || cfg.dvbapi_boxtype == BOXTYPE_PC_NODMX)
    13631372                    {
    13641373                        // preparing packet
     
    13701379
    13711380                        // sending data to UDP (deprecated, will be removed in the future)
    1372                         send(currentfd, &packet[1], sizeof(packet)-1, 0);
     1381                        if (cfg.dvbapi_boxtype != BOXTYPE_PC_NODMX)
     1382                          send(currentfd, &packet[1], sizeof(packet)-1, 0);
    13731383                        cs_debug_mask(D_DVBAPI, "[DVBAPI] Demuxer #%d %s stream #%d pid=0x%04x index=%d on ca%d", demux_id,
    13741384                            (enable ? "enable" : "disable"), num + 1, ca_pid2.pid, ca_pid2.index, i);
     
    23722382    }
    23732383#endif
     2384    cs_debug_mask(D_DVBAPI, "[DVBAPI] GET_CW");
    23742385    get_cw(client, er);
    23752386#if defined WITH_AZBOX || defined WITH_MCA
     
    24522463    }
    24532464
    2454     if(cfg.dvbapi_boxtype == BOXTYPE_PC && buffer[7] == 0x82 && buffer[8] == 0x02)
     2465    if((cfg.dvbapi_boxtype == BOXTYPE_PC || cfg.dvbapi_boxtype == BOXTYPE_PC_NODMX) && buffer[7] == 0x82 && buffer[8] == 0x02)
    24552466    {
    24562467        *demux_index = buffer[9]; // it is always 0 but you never know
     
    29522963    pthread_mutex_lock(&event_handler_lock);
    29532964
    2954     if(cfg.dvbapi_boxtype == BOXTYPE_PC)
     2965    if(cfg.dvbapi_boxtype == BOXTYPE_PC || cfg.dvbapi_boxtype == BOXTYPE_PC_NODMX)
    29552966        { pausecam = 0; }
    29562967    else
     
    36243635            for(g = 0; g < MAX_FILTER; g++)
    36253636            {
    3626                 if(!cfg.dvbapi_listenport && demux[i].demux_fd[g].fd > 0 && selected_api != STAPI && selected_api != COOLAPI)
     3637                if(!cfg.dvbapi_listenport && cfg.dvbapi_boxtype != BOXTYPE_PC_NODMX && demux[i].demux_fd[g].fd > 0 && selected_api != STAPI && selected_api != COOLAPI)
    36273638                {
    36283639                    pfd2[pfdcount].fd = demux[i].demux_fd[g].fd;
     
    38483859                            if (len > 0)
    38493860                                pmtlen += len;
    3850                             if (cfg.dvbapi_listenport && len == 0) {
     3861                            if ((cfg.dvbapi_listenport || cfg.dvbapi_boxtype == BOXTYPE_PC_NODMX) && len == 0) {
    38513862                                //client disconnects, stop all assigned decoding
    38523863                                for (j = 0; j < MAX_DEMUX; j++)
     
    38703881                                    if (pmtlen > chunksize)
    38713882                                        memmove(mbuf, mbuf + chunksize, pmtlen - chunksize);
     3883                                   
    38723884                                    pmtlen -= chunksize;
    38733885                                    continue;
     
    40294041                    }
    40304042
    4031                     if(cfg.dvbapi_boxtype == BOXTYPE_PC)
     4043                    if(cfg.dvbapi_boxtype == BOXTYPE_PC || cfg.dvbapi_boxtype == BOXTYPE_PC_NODMX)
    40324044                    {
    40334045                        // preparing packet
     
    45794591            memcpy(sFP2.filter.filter, filter, 16);
    45804592            memcpy(sFP2.filter.mask, mask, 16);
    4581             if (cfg.dvbapi_listenport)
     4593            if (cfg.dvbapi_listenport || cfg.dvbapi_boxtype == BOXTYPE_PC_NODMX)
    45824594                ret = dvbapi_net_filter_request(demux_index, num, &sFP2);
    45834595            else
  • trunk/module-dvbapi.h

    r9574 r9756  
    3838#define BOXTYPE_NEUMO   10
    3939#define BOXTYPE_PC      11
    40 #define BOXTYPES        11
     40#define BOXTYPE_PC_NODMX    12
     41#define BOXTYPES        12
    4142#define DMXMD5HASHSIZE  16  // use MD5()
    4243#define REMOVED_STREAMPID_LASTINDEX 2
Note: See TracChangeset for help on using the changeset viewer.