Changeset 11212
- Timestamp:
- 03/09/16 18:16:03 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/module-dvbapi.c
r11209 r11212 124 124 else 125 125 { 126 return "Reserved"; 126 return "Reserved"; 127 127 } 128 128 } … … 157 157 void *param = va_arg(args, void *); 158 158 ret = ioctl(fd, request, param); 159 } 160 else 159 } 160 else 161 161 { 162 162 switch(request) … … 167 167 168 168 //fix filter for samygo 169 //note: we only have 14 available filter bytes (instead of 16) on samygo 169 //note: we only have 14 available filter bytes (instead of 16) on samygo 170 170 memmove(&sFP->filter.filter[3], &sFP->filter.filter[1], 13); 171 171 memset(&sFP->filter.filter[1], 0, 2); … … 923 923 ll_append(ll_max_fd, open_fd); 924 924 } 925 925 926 926 if(filtercount > 0) 927 927 { … … 1063 1063 int32_t udp_port = 9000; 1064 1064 struct sockaddr_in saddr; 1065 memset(&saddr, 0, sizeof(saddr)); 1066 1067 1068 1065 memset(&saddr, 0, sizeof(saddr)); 1066 saddr.sin_family = AF_INET; 1067 saddr.sin_port = htons(udp_port + adapter); 1068 saddr.sin_addr.s_addr = inet_addr("127.0.0.1"); 1069 1069 dmx_fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); 1070 1071 1070 set_nonblock(dmx_fd, true); 1071 ret = connect(dmx_fd, (struct sockaddr *) &saddr, sizeof(saddr)); 1072 1072 if(ret < 0) 1073 { close(dmx_fd); } 1074 1073 { close(dmx_fd); } 1075 1074 cs_log_dbg(D_DVBAPI, "NET DEVICE open (port = %d) fd %d", udp_port + adapter, dmx_fd); 1076 1075 } … … 1264 1263 ca_index_t idx = demux[demux_index].ECMpids[oldpid].index[z]; 1265 1264 demux[demux_index].ECMpids[oldpid].index[z] = INDEX_INVALID; 1266 1265 1267 1266 if(idx != INDEX_INVALID) // if in use 1268 1267 { … … 1279 1278 continue; // found same stream on old and new ecmpid -> skip! (and leave it enabled!) 1280 1279 } 1281 1280 1282 1281 int32_t pidtobestopped = demux[demux_index].STREAMpids[i]; 1283 1282 int32_t j, k, otherdemuxpid; … … 1312 1311 } 1313 1312 } 1314 1313 1315 1314 if(!match) 1316 1315 { … … 1350 1349 demux[demux_id].demux_fd[o].filter[0] == table && 1351 1350 demux[demux_id].demux_fd[o].mask[0] == mask 1352 ) 1351 ) 1353 1352 { 1354 1353 return; … … 1492 1491 continue; 1493 1492 } 1494 1493 1495 1494 if(demux[demux_index].EMMpids[c].type & emmtype) 1496 1495 { … … 1745 1744 } 1746 1745 } 1747 1746 1748 1747 if(cfg.dvbapi_boxtype == BOXTYPE_PC || cfg.dvbapi_boxtype == BOXTYPE_PC_NODMX) 1749 1748 { … … 1760 1759 } 1761 1760 } 1762 1761 1763 1762 demux[demux_index].ECMpids[pid].index[stream_id] = idx; 1764 1765 1763 SAFE_MUTEX_UNLOCK(&lockindex); // and release it! 1766 1767 1764 return idx; 1768 1765 } … … 1831 1828 (newidx == DVBAPI_INDEX_DISABLE) ? (ca_pid2.index = -1) : (ca_pid2.index = newidx); 1832 1829 1833 cs_log_dbg(D_DVBAPI, "Demuxer %d %s stream %d pid=0x%04x by index=%d on ca%d", demux_id, 1830 cs_log_dbg(D_DVBAPI, "Demuxer %d %s stream %d pid=0x%04x by index=%d on ca%d", demux_id, 1834 1831 ((enable && action == FIRST_STREAMPID_INDEX) ? "enable" : "takeover"), num + 1, ca_pid2.pid, ca_pid2.index, i); 1835 1832 1836 1833 newidx = INDEX_INVALID; // flag this takeover / new index as handled 1837 1834 } … … 1859 1856 remove_streampid_from_list(i, ca_pid2.pid, INDEX_DISABLE_ALL); 1860 1857 } 1861 1862 1858 ca_index_t result = is_ca_used(i,0); // check if in use by any pid 1863 1864 1859 if(result == INDEX_INVALID) 1865 1860 { … … 1911 1906 if(i < 0) { i = 0; } 1912 1907 demux[demux_id].pidindex = -1; // no ecmpid is to be descrambling since we start stop descrambling! 1913 get_servicename(dvbapi_client, demux[demux_id].program_number, demux[demux_id].ECMpidcount > 0 ? demux[demux_id].ECMpids[i].PROVID : 0, demux[demux_id].ECMpidcount > 0 ? demux[demux_id].ECMpids[i].CAID : 0, channame, sizeof(channame));1908 get_servicename(dvbapi_client, demux[demux_id].program_number, demux[demux_id].ECMpidcount > 0 ? demux[demux_id].ECMpids[i].PROVID : NO_PROVID_VALUE, demux[demux_id].ECMpidcount > 0 ? demux[demux_id].ECMpids[i].CAID : NO_CAID_VALUE, channame, sizeof(channame)); 1914 1909 cs_log("Demuxer %d stop descrambling program number %04X (%s)", demux_id, demux[demux_id].program_number, channame); 1915 1910 1916 1911 dvbapi_stop_filter(demux_id, TYPE_EMM); 1917 1912 dvbapi_stop_filter(demux_id, TYPE_SDT); 1918 1913 dvbapi_stop_filter(demux_id, TYPE_PAT); 1919 1914 dvbapi_stop_filter(demux_id, TYPE_PMT); 1920 1915 1921 1916 for(i = 0; i < demux[demux_id].ECMpidcount && demux[demux_id].ECMpidcount > 0; i++) 1922 1917 { … … 2257 2252 { 2258 2253 token[i] = ':'; 2259 } 2260 } 2261 2254 } 2255 } 2256 2262 2257 for(i = 0; i < (int)strlen(token); i++) 2263 2258 { … … 2405 2400 { continue; } 2406 2401 memcpy(entry2, entry, sizeof(struct s_dvbapi_priority)); 2407 2408 2402 entry2->srvid = this->srvid; 2409 2410 cs_log_dbg(D_DVBAPI, "prio srvid: ret=%d | %c: %04X %06X %04X %04X %04X -> map %04X %06X %04X | prio %d | delay %d", 2411 ret, entry2->type, entry2->caid, entry2->provid, entry2->srvid, entry2->ecmpid, entry2->chid, 2412 entry2->mapcaid, entry2->mapprovid, entry2->mapecmpid, entry2->force, entry2->delay); 2403 cs_log_dbg(D_DVBAPI, "prio srvid: ret=%d | %c: %04X %06X %04X %04X %04X -> map %04X %06X %04X | prio %d | delay %d", ret, entry2->type, entry2->caid, entry2->provid, entry2->srvid, entry2->ecmpid, entry2->chid, entry2->mapcaid, entry2->mapprovid, entry2->mapecmpid, entry2->force, entry2->delay); 2413 2404 2414 2405 if(!dvbapi_priority) … … 2432 2423 entry->srvid = srvid; 2433 2424 } 2434 2435 cs_log_dbg(D_DVBAPI, "prio: ret=%d | %c: %04X %06X %04X %04X %04X -> map %04X %06X %04X | prio %d | delay %d", 2436 ret, entry->type, entry->caid, entry->provid, entry->srvid, entry->ecmpid, entry->chid, entry->mapcaid, 2437 entry->mapprovid, entry->mapecmpid, entry->force, entry->delay); 2425 cs_log_dbg(D_DVBAPI, "prio: ret=%d | %c: %04X %06X %04X %04X %04X -> map %04X %06X %04X | prio %d | delay %d", ret, entry->type, entry->caid, entry->provid, entry->srvid, entry->ecmpid, entry->chid, entry->mapcaid, entry->mapprovid, entry->mapecmpid, entry->force, entry->delay); 2438 2426 2439 2427 if(!dvbapi_priority) … … 3367 3355 3368 3356 char channame[CS_SERVICENAME_SIZE]; 3369 get_servicename(dvbapi_client, demux[demux_id].program_number, demux[demux_id].ECMpidcount > 0 ? demux[demux_id].ECMpids[0].PROVID : 0 , demux[demux_id].ECMpidcount > 0 ? demux[demux_id].ECMpids[0].CAID : NO_CAID_VALUE, channame, sizeof(channame)); 3370 cs_log("Demuxer %d serving srvid %04X (%s) on adapter %04X camask %04X index %04X pmtpid %04X", demux_id, 3371 demux[demux_id].program_number, channame, adapter_index, ca_mask, demux_index, pmtpid); 3372 3357 get_servicename(dvbapi_client, demux[demux_id].program_number, demux[demux_id].ECMpidcount > 0 ? demux[demux_id].ECMpids[0].PROVID : NO_PROVID_VALUE, demux[demux_id].ECMpidcount > 0 ? demux[demux_id].ECMpids[0].CAID : NO_CAID_VALUE, channame, sizeof(channame)); 3358 cs_log("Demuxer %d serving srvid %04X (%s) on adapter %04X camask %04X index %04X pmtpid %04X", demux_id, demux[demux_id].program_number, channame, adapter_index, ca_mask, demux_index, pmtpid); 3373 3359 demux[demux_id].stopdescramble = 0; // remove deletion mark! 3374 3360
Note:
See TracChangeset
for help on using the changeset viewer.