mirror of
https://github.com/tuxbox-fork-migrations/recycled-ni-neutrino.git
synced 2025-09-02 10:21:04 +02:00
Fastscan sort close to provider's way
git-svn-id: file:///home/bas/coolstream_public_svn/THIRDPARTY/applications/neutrino-experimental@473 e54a6e83-5905-42d5-8d5c-058d10e6a962
Origin commit data
------------------
Branch: ni/coolstream
Commit: 3fcf105374
Author: [CST] Focus <focus.cst@gmail.com>
Date: 2010-03-10 (Wed, 10 Mar 2010)
------------------
This commit was generated by Migit
This commit is contained in:
@@ -1,9 +1,6 @@
|
|||||||
#ifndef _FASTSCAN_H_
|
#ifndef _FASTSCAN_H_
|
||||||
#define _FASTSCAN_H_
|
#define _FASTSCAN_H_
|
||||||
|
|
||||||
int parse_fnt(unsigned short pid, unsigned short operator_id);
|
|
||||||
int parse_fst(unsigned short pid, unsigned short operator_id);
|
|
||||||
|
|
||||||
void * start_fast_scan(void * arg);
|
void * start_fast_scan(void * arg);
|
||||||
|
|
||||||
typedef enum fs_operator {
|
typedef enum fs_operator {
|
||||||
@@ -34,5 +31,8 @@ typedef struct fast_scan_type {
|
|||||||
} fast_scan_type_t;
|
} fast_scan_type_t;
|
||||||
|
|
||||||
extern fast_scan_operator_t fast_scan_operators [OPERATOR_MAX];
|
extern fast_scan_operator_t fast_scan_operators [OPERATOR_MAX];
|
||||||
|
int parse_fst(unsigned short pid, fast_scan_operator_t * op);
|
||||||
|
int parse_fnt(unsigned short pid, unsigned short operator_id);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -104,7 +104,7 @@ CZapitChannel* CZapitBouquet::getChannelByChannelID(const t_channel_id channel_i
|
|||||||
void CZapitBouquet::sortBouquet(void)
|
void CZapitBouquet::sortBouquet(void)
|
||||||
{
|
{
|
||||||
//printf("*************** sorting %s TV\n", Name.c_str());fflush(stdout);//FIXME
|
//printf("*************** sorting %s TV\n", Name.c_str());fflush(stdout);//FIXME
|
||||||
sort(tvChannels.begin(), tvChannels.end(), CmpChannelByChName());fflush(stdout);//FIXME
|
sort(tvChannels.begin(), tvChannels.end(), CmpChannelByChName());
|
||||||
//printf("*************** sorting %s RADIO\n", Name.c_str());
|
//printf("*************** sorting %s RADIO\n", Name.c_str());
|
||||||
sort(radioChannels.begin(), radioChannels.end(), CmpChannelByChName());
|
sort(radioChannels.begin(), radioChannels.end(), CmpChannelByChName());
|
||||||
}
|
}
|
||||||
|
@@ -47,9 +47,11 @@ extern t_channel_id live_channel_id;
|
|||||||
|
|
||||||
int process_satellite_delivery_system_descriptor(const unsigned char * const buffer, FrontendParameters * feparams, uint8_t * polarization, t_satellite_position * satellitePosition);
|
int process_satellite_delivery_system_descriptor(const unsigned char * const buffer, FrontendParameters * feparams, uint8_t * polarization, t_satellite_position * satellitePosition);
|
||||||
void process_service_list_descriptor(const unsigned char * const buffer, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq);
|
void process_service_list_descriptor(const unsigned char * const buffer, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq);
|
||||||
|
void process_logical_service_descriptor(const unsigned char * const buffer, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq);
|
||||||
|
|
||||||
std::map <t_channel_id, t_satellite_position> fast_services_sat;
|
std::map <t_channel_id, t_satellite_position> fast_services_sat;
|
||||||
std::map <t_channel_id, freq_id_t> fast_services_freq;
|
std::map <t_channel_id, freq_id_t> fast_services_freq;
|
||||||
|
std::map <t_channel_id, int> fast_services_number;
|
||||||
|
|
||||||
void * start_fast_scan(void * arg)
|
void * start_fast_scan(void * arg)
|
||||||
{
|
{
|
||||||
@@ -90,18 +92,19 @@ void * start_fast_scan(void * arg)
|
|||||||
|
|
||||||
fast_services_sat.clear();
|
fast_services_sat.clear();
|
||||||
fast_services_freq.clear();
|
fast_services_freq.clear();
|
||||||
|
fast_services_number.clear();
|
||||||
|
|
||||||
if(type & FAST_SCAN_SD) {
|
if(type & FAST_SCAN_SD) {
|
||||||
res = parse_fnt(op->sd_pid, op->id);
|
res = parse_fnt(op->sd_pid, op->id);
|
||||||
if(res == 0)
|
if(res == 0)
|
||||||
parse_fst(op->sd_pid, op->id);
|
parse_fst(op->sd_pid, op);
|
||||||
|
|
||||||
printf("[fast scan] pid %d (SD) scan done, found %d transponders and %d services\n", op->sd_pid, found_transponders, found_channels);
|
printf("[fast scan] pid %d (SD) scan done, found %d transponders and %d services\n", op->sd_pid, found_transponders, found_channels);
|
||||||
}
|
}
|
||||||
if(type & FAST_SCAN_HD) {
|
if(type & FAST_SCAN_HD) {
|
||||||
res = parse_fnt(op->hd_pid, op->id);
|
res = parse_fnt(op->hd_pid, op->id);
|
||||||
if(res == 0)
|
if(res == 0)
|
||||||
res = parse_fst(op->hd_pid, op->id);
|
res = parse_fst(op->hd_pid, op);
|
||||||
|
|
||||||
printf("[fast scan] pid %d (HD) scan done, found %d transponders and %d services\n", op->hd_pid, found_transponders, found_channels);
|
printf("[fast scan] pid %d (HD) scan done, found %d transponders and %d services\n", op->hd_pid, found_transponders, found_channels);
|
||||||
}
|
}
|
||||||
@@ -111,6 +114,7 @@ void * start_fast_scan(void * arg)
|
|||||||
SaveServices(true);
|
SaveServices(true);
|
||||||
scanBouquetManager->saveBouquets(bouquetMode, "");
|
scanBouquetManager->saveBouquets(bouquetMode, "");
|
||||||
g_bouquetManager->saveBouquets();
|
g_bouquetManager->saveBouquets();
|
||||||
|
g_bouquetManager->saveUBouquets();
|
||||||
g_bouquetManager->clearAll();
|
g_bouquetManager->clearAll();
|
||||||
g_bouquetManager->loadBouquets();
|
g_bouquetManager->loadBouquets();
|
||||||
stop_scan(true);
|
stop_scan(true);
|
||||||
@@ -122,6 +126,7 @@ void * start_fast_scan(void * arg)
|
|||||||
}
|
}
|
||||||
fast_services_sat.clear();
|
fast_services_sat.clear();
|
||||||
fast_services_freq.clear();
|
fast_services_freq.clear();
|
||||||
|
fast_services_number.clear();
|
||||||
|
|
||||||
printf("[fast scan] fast scan done, found %d transponders and %d services\n", found_transponders, found_channels);
|
printf("[fast scan] fast scan done, found %d transponders and %d services\n", found_transponders, found_channels);
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -130,10 +135,22 @@ _err:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int parse_fst(unsigned short pid, unsigned short operator_id)
|
struct CmpChannelByNum: public binary_function <const CZapitChannel * const, const CZapitChannel * const, bool>
|
||||||
|
{
|
||||||
|
bool operator() (const CZapitChannel * const c1, const CZapitChannel * const c2)
|
||||||
|
{
|
||||||
|
return c1->number < c2->number;
|
||||||
|
;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
int parse_fst(unsigned short pid, fast_scan_operator_t * op)
|
||||||
{
|
{
|
||||||
int secdone[255];
|
int secdone[255];
|
||||||
int sectotal = -1;
|
int sectotal = -1;
|
||||||
|
unsigned short operator_id = op->id;
|
||||||
|
CZapitBouquet* bouquet;
|
||||||
|
int bouquetId;
|
||||||
|
|
||||||
memset(secdone, 0, 255);
|
memset(secdone, 0, 255);
|
||||||
|
|
||||||
@@ -217,17 +234,26 @@ int parse_fst(unsigned short pid, unsigned short operator_id)
|
|||||||
|
|
||||||
t_satellite_position satellitePosition = 0;
|
t_satellite_position satellitePosition = 0;
|
||||||
freq_id_t freq = 0;
|
freq_id_t freq = 0;
|
||||||
|
int num = 0;
|
||||||
|
|
||||||
t_channel_id channel_id = CREATE_CHANNEL_ID64;
|
t_channel_id channel_id = CREATE_CHANNEL_ID64;
|
||||||
|
|
||||||
std::map <t_channel_id, t_satellite_position>::iterator sIt = fast_services_sat.find(channel_id);
|
std::map <t_channel_id, t_satellite_position>::iterator sIt = fast_services_sat.find(channel_id);
|
||||||
if(sIt != fast_services_sat.end())
|
if(sIt != fast_services_sat.end()) {
|
||||||
satellitePosition = sIt->second;
|
satellitePosition = sIt->second;
|
||||||
|
sat_iterator_t sit = satellitePositions.find(satellitePosition);
|
||||||
|
if(sit != satellitePositions.end())
|
||||||
|
sit->second.have_channels = true;
|
||||||
|
}
|
||||||
|
|
||||||
std::map <t_channel_id, freq_id_t>::iterator fIt = fast_services_freq.find(channel_id);
|
std::map <t_channel_id, freq_id_t>::iterator fIt = fast_services_freq.find(channel_id);
|
||||||
if(fIt != fast_services_freq.end())
|
if(fIt != fast_services_freq.end())
|
||||||
freq = fIt->second;
|
freq = fIt->second;
|
||||||
|
|
||||||
|
std::map <t_channel_id, int>::iterator nIt = fast_services_number.find(channel_id);
|
||||||
|
if(nIt != fast_services_number.end())
|
||||||
|
num = nIt->second;
|
||||||
|
|
||||||
//std::string providerName = CDVBString((const char*)&(dbuf[4]), service_provider_name_length).getContent();
|
//std::string providerName = CDVBString((const char*)&(dbuf[4]), service_provider_name_length).getContent();
|
||||||
//std::string serviceName = CDVBString((const char*)&(dbuf[4 + service_provider_name_length + 1]), (2 + dbuf[1]) - (4 + service_provider_name_length + 1)).getContent();
|
//std::string serviceName = CDVBString((const char*)&(dbuf[4 + service_provider_name_length + 1]), (2 + dbuf[1]) - (4 + service_provider_name_length + 1)).getContent();
|
||||||
|
|
||||||
@@ -236,7 +262,7 @@ int parse_fst(unsigned short pid, unsigned short operator_id)
|
|||||||
|
|
||||||
eventServer->sendEvent(CZapitClient::EVT_SCAN_PROVIDER, CEventServer::INITID_ZAPIT, (void *) providerName.c_str(), providerName.length() + 1);
|
eventServer->sendEvent(CZapitClient::EVT_SCAN_PROVIDER, CEventServer::INITID_ZAPIT, (void *) providerName.c_str(), providerName.length() + 1);
|
||||||
#ifdef SCAN_DEBUG
|
#ifdef SCAN_DEBUG
|
||||||
printf("[FST] sat %04d onid %04x tid %04x sid %04x vpid %04x apid %04x pcr %04x freq %05d type %d prov [%s] name [%s]\n", satellitePosition, original_network_id, transport_stream_id, service_id, video_pid, audio_pid, pcr_pid, freq, service_type, providerName.c_str(), serviceName.c_str());
|
printf("[FST] #%04d at %04d: net %04x tp %04x sid %04x v %04x a %04x pcr %04x frq %05d type %d prov [%s] name [%s]\n", num, satellitePosition, original_network_id, transport_stream_id, service_id, video_pid, audio_pid, pcr_pid, freq, service_type, providerName.c_str(), serviceName.c_str());
|
||||||
#endif
|
#endif
|
||||||
found_channels ++;
|
found_channels ++;
|
||||||
eventServer->sendEvent ( CZapitClient::EVT_SCAN_NUM_CHANNELS, CEventServer::INITID_ZAPIT, &found_channels, sizeof(found_channels));
|
eventServer->sendEvent ( CZapitClient::EVT_SCAN_NUM_CHANNELS, CEventServer::INITID_ZAPIT, &found_channels, sizeof(found_channels));
|
||||||
@@ -260,7 +286,6 @@ int parse_fst(unsigned short pid, unsigned short operator_id)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
eventServer->sendEvent(CZapitClient::EVT_SCAN_SERVICENAME, CEventServer::INITID_ZAPIT, (void *) serviceName.c_str(), serviceName.length() + 1);
|
eventServer->sendEvent(CZapitClient::EVT_SCAN_SERVICENAME, CEventServer::INITID_ZAPIT, (void *) serviceName.c_str(), serviceName.length() + 1);
|
||||||
//service_descriptor(buffer + pos2, service_id, transport_stream_id, original_network_id, satellitePosition, freq, free_CA_mode);
|
|
||||||
channel_id = CREATE_CHANNEL_ID64;
|
channel_id = CREATE_CHANNEL_ID64;
|
||||||
|
|
||||||
CZapitChannel * channel;
|
CZapitChannel * channel;
|
||||||
@@ -293,9 +318,8 @@ int parse_fst(unsigned short pid, unsigned short operator_id)
|
|||||||
channel->setAudioPid(audio_pid);
|
channel->setAudioPid(audio_pid);
|
||||||
channel->setPcrPid(pcr_pid);
|
channel->setPcrPid(pcr_pid);
|
||||||
channel->setPidsFlag();
|
channel->setPidsFlag();
|
||||||
|
channel->number = num;
|
||||||
|
|
||||||
CZapitBouquet* bouquet;
|
|
||||||
int bouquetId;
|
|
||||||
char pname[100];
|
char pname[100];
|
||||||
if (frontend->getInfo()->type == FE_QPSK)
|
if (frontend->getInfo()->type == FE_QPSK)
|
||||||
snprintf(pname, 100, "[%c%03d.%d] %s", satellitePosition > 0? 'E' : 'W', abs(satellitePosition)/10, abs(satellitePosition)%10, providerName.c_str());
|
snprintf(pname, 100, "[%c%03d.%d] %s", satellitePosition > 0? 'E' : 'W', abs(satellitePosition)/10, abs(satellitePosition)%10, providerName.c_str());
|
||||||
@@ -304,14 +328,23 @@ int parse_fst(unsigned short pid, unsigned short operator_id)
|
|||||||
|
|
||||||
bouquetId = scanBouquetManager->existsBouquet(pname);
|
bouquetId = scanBouquetManager->existsBouquet(pname);
|
||||||
|
|
||||||
if (bouquetId == -1)
|
if (bouquetId == -1) {
|
||||||
bouquet = scanBouquetManager->addBouquet(std::string(pname), false);
|
bouquet = scanBouquetManager->addBouquet(std::string(pname), false);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
bouquet = scanBouquetManager->Bouquets[bouquetId];
|
bouquet = scanBouquetManager->Bouquets[bouquetId];
|
||||||
bouquet->addService(channel);
|
bouquet->addService(channel);
|
||||||
|
|
||||||
if(channel->getServiceType() == 1)
|
if(channel->getServiceType() == 1)
|
||||||
live_channel_id = channel->getChannelID();
|
live_channel_id = channel->getChannelID();
|
||||||
|
|
||||||
|
bouquetId = g_bouquetManager->existsUBouquet(op->name);
|
||||||
|
if (bouquetId == -1) {
|
||||||
|
bouquet = g_bouquetManager->addBouquet(std::string(op->name), true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
bouquet = g_bouquetManager->Bouquets[bouquetId];
|
||||||
|
bouquet->addService(channel);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -323,6 +356,13 @@ int parse_fst(unsigned short pid, unsigned short operator_id)
|
|||||||
} while(sectotal < buffer[7]);
|
} while(sectotal < buffer[7]);
|
||||||
delete dmx;
|
delete dmx;
|
||||||
|
|
||||||
|
bouquetId = g_bouquetManager->existsUBouquet(op->name);
|
||||||
|
if (bouquetId >= 0) {
|
||||||
|
bouquet = g_bouquetManager->Bouquets[bouquetId];
|
||||||
|
sort(bouquet->tvChannels.begin(), bouquet->tvChannels.end(), CmpChannelByNum());
|
||||||
|
sort(bouquet->radioChannels.begin(), bouquet->radioChannels.end(), CmpChannelByNum());
|
||||||
|
}
|
||||||
|
|
||||||
printf("[FST] done\n\n");
|
printf("[FST] done\n\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -472,6 +512,7 @@ int parse_fnt(unsigned short pid, unsigned short operator_id)
|
|||||||
process_service_list_descriptor(buffer + pos2, transport_stream_id, original_network_id, 0, 0);
|
process_service_list_descriptor(buffer + pos2, transport_stream_id, original_network_id, 0, 0);
|
||||||
break;
|
break;
|
||||||
case 0x83: // logical_service_desciptor
|
case 0x83: // logical_service_desciptor
|
||||||
|
process_logical_service_descriptor(buffer + pos2, transport_stream_id, original_network_id, 0, 0);
|
||||||
break;
|
break;
|
||||||
case 0x44:
|
case 0x44:
|
||||||
//cable_delivery_system_descriptor(buffer + pos2, transport_stream_id, original_network_id, satellitePosition, freq);
|
//cable_delivery_system_descriptor(buffer + pos2, transport_stream_id, original_network_id, satellitePosition, freq);
|
||||||
@@ -501,6 +542,16 @@ int parse_fnt(unsigned short pid, unsigned short operator_id)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void process_logical_service_descriptor(const unsigned char * const buffer, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < buffer[1]; i += 4) {
|
||||||
|
t_service_id service_id = buffer[i + 2] << 8 | buffer[i + 3];
|
||||||
|
t_channel_id channel_id = CREATE_CHANNEL_ID64;
|
||||||
|
int num = (buffer[i + 4] & 0x3F) << 8 | buffer[i + 5];
|
||||||
|
fast_services_number[channel_id] = num;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void process_service_list_descriptor(const unsigned char * const buffer, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq)
|
void process_service_list_descriptor(const unsigned char * const buffer, const t_transport_stream_id transport_stream_id, const t_original_network_id original_network_id, t_satellite_position satellitePosition, freq_id_t freq)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < buffer[1]; i += 3) {
|
for (int i = 0; i < buffer[1]; i += 3) {
|
||||||
|
Reference in New Issue
Block a user