Merge branch 'multituner' into dvbsi++

This commit is contained in:
[CST] Focus
2012-03-11 16:30:38 +04:00
4 changed files with 34 additions and 124 deletions

View File

@@ -665,26 +665,26 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos)
spaceoffset = 7 * fontW; spaceoffset = 7 * fontW;
//onid //onid
ypos+= sheight; ypos+= sheight;
sprintf((char*) buf, "0x%04x (%i)", si.onid, si.onid); sprintf((char*) buf, "0x%04X (%i)", si.onid, si.onid);
g_Font[font_small]->RenderString(xpos, ypos, box_width, "ONid:" , COL_INFOBAR, 0, true); // UTF-8 g_Font[font_small]->RenderString(xpos, ypos, box_width, "ONid:" , COL_INFOBAR, 0, true); // UTF-8
g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8
//sid //sid
ypos+= sheight; ypos+= sheight;
sprintf((char*) buf, "0x%04x (%i)", si.sid, si.sid); sprintf((char*) buf, "0x%04X (%i)", si.sid, si.sid);
g_Font[font_small]->RenderString(xpos, ypos, box_width, "Sid:" , COL_INFOBAR, 0, true); // UTF-8 g_Font[font_small]->RenderString(xpos, ypos, box_width, "Sid:" , COL_INFOBAR, 0, true); // UTF-8
g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8
//tsid //tsid
ypos+= sheight; ypos+= sheight;
sprintf((char*) buf, "0x%04x (%i)", si.tsid, si.tsid); sprintf((char*) buf, "0x%04X (%i)", si.tsid, si.tsid);
g_Font[font_small]->RenderString(xpos, ypos, box_width, "TSid:" , COL_INFOBAR, 0, true); // UTF-8 g_Font[font_small]->RenderString(xpos, ypos, box_width, "TSid:" , COL_INFOBAR, 0, true); // UTF-8
g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8
//pmtpid //pmtpid
ypos+= sheight; ypos+= sheight;
pmt_version = si.pmt_version; pmt_version = si.pmt_version;
sprintf((char*) buf, "0x%04x (%i) [%i]", si.pmtpid, si.pmtpid,pmt_version); sprintf((char*) buf, "0x%04X (%i) [%i]", si.pmtpid, si.pmtpid,pmt_version);
g_Font[font_small]->RenderString(xpos, ypos, box_width, "PMTpid:", COL_INFOBAR, 0, true); // UTF-8 g_Font[font_small]->RenderString(xpos, ypos, box_width, "PMTpid:", COL_INFOBAR, 0, true); // UTF-8
g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8
@@ -692,7 +692,7 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos)
//vpid //vpid
ypos+= sheight; ypos+= sheight;
if ( g_RemoteControl->current_PIDs.PIDs.vpid > 0 ){ if ( g_RemoteControl->current_PIDs.PIDs.vpid > 0 ){
sprintf((char*) buf, "0x%04x (%i)", g_RemoteControl->current_PIDs.PIDs.vpid, g_RemoteControl->current_PIDs.PIDs.vpid ); sprintf((char*) buf, "0x%04X (%i)", g_RemoteControl->current_PIDs.PIDs.vpid, g_RemoteControl->current_PIDs.PIDs.vpid );
} else { } else {
sprintf((char*) buf, "%s", g_Locale->getText(LOCALE_STREAMINFO_NOT_AVAILABLE)); sprintf((char*) buf, "%s", g_Locale->getText(LOCALE_STREAMINFO_NOT_AVAILABLE));
} }
@@ -708,7 +708,7 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos)
unsigned int sw=spaceoffset; unsigned int sw=spaceoffset;
for (unsigned int li= 0; (li<g_RemoteControl->current_PIDs.APIDs.size()) && (li<10); li++) for (unsigned int li= 0; (li<g_RemoteControl->current_PIDs.APIDs.size()) && (li<10); li++)
{ {
sprintf((char*) buf, "0x%04x (%i)", g_RemoteControl->current_PIDs.APIDs[li].pid, g_RemoteControl->current_PIDs.APIDs[li].pid ); sprintf((char*) buf, "0x%04X (%i)", g_RemoteControl->current_PIDs.APIDs[li].pid, g_RemoteControl->current_PIDs.APIDs[li].pid );
if (li == g_RemoteControl->current_PIDs.PIDs.selected_apid){ if (li == g_RemoteControl->current_PIDs.PIDs.selected_apid){
g_Font[font_small]->RenderString(xpos+sw, ypos, box_width, buf, COL_MENUHEAD, 0, true); // UTF-8 g_Font[font_small]->RenderString(xpos+sw, ypos, box_width, buf, COL_MENUHEAD, 0, true); // UTF-8
} }
@@ -728,7 +728,7 @@ void CStreamInfo2::paint_techinfo(int xpos, int ypos)
if ( g_RemoteControl->current_PIDs.PIDs.vtxtpid == 0 ) if ( g_RemoteControl->current_PIDs.PIDs.vtxtpid == 0 )
sprintf((char*) buf, "%s", g_Locale->getText(LOCALE_STREAMINFO_NOT_AVAILABLE)); sprintf((char*) buf, "%s", g_Locale->getText(LOCALE_STREAMINFO_NOT_AVAILABLE));
else else
sprintf((char*) buf, "0x%04x (%i)", g_RemoteControl->current_PIDs.PIDs.vtxtpid, g_RemoteControl->current_PIDs.PIDs.vtxtpid ); sprintf((char*) buf, "0x%04X (%i)", g_RemoteControl->current_PIDs.PIDs.vtxtpid, g_RemoteControl->current_PIDs.PIDs.vtxtpid );
g_Font[font_small]->RenderString(xpos, ypos, box_width, "VTXTpid:" , COL_INFOBAR, 0, true); // UTF-8 g_Font[font_small]->RenderString(xpos, ypos, box_width, "VTXTpid:" , COL_INFOBAR, 0, true); // UTF-8
g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8 g_Font[font_small]->RenderString(xpos+spaceoffset, ypos, box_width, buf, COL_INFOBAR, 0, true); // UTF-8
if(box_h == 0) if(box_h == 0)

View File

@@ -147,11 +147,13 @@ void * sectionsd_main_thread(void *data);
extern bool timeset; // sectionsd extern bool timeset; // sectionsd
extern cVideo * videoDecoder; extern cVideo * videoDecoder;
extern cDemux *videoDemux;
extern cAudio * audioDecoder; extern cAudio * audioDecoder;
cPowerManager *powerManager; cPowerManager *powerManager;
cCpuFreqManager * cpuFreq; cCpuFreqManager * cpuFreq;
void stop_daemons(bool stopall = true); void stop_daemons(bool stopall = true);
void stop_video(void);
// uncomment if you want to have a "test" menue entry (rasc) // uncomment if you want to have a "test" menue entry (rasc)
//#define __EXPERIMENTAL_CODE__ //#define __EXPERIMENTAL_CODE__
@@ -2963,6 +2965,8 @@ void CNeutrinoApp::ExitRun(const bool /*write_si*/, int retcode)
standby.timer_minutes_hi = fp_timer >> 8;; standby.timer_minutes_hi = fp_timer >> 8;;
standby.timer_minutes_lo = fp_timer & 0xFF; standby.timer_minutes_lo = fp_timer & 0xFF;
stop_video();
int fd = open("/dev/display", O_RDONLY); int fd = open("/dev/display", O_RDONLY);
if (fd < 0) { if (fd < 0) {
perror("/dev/display"); perror("/dev/display");
@@ -3026,7 +3030,8 @@ void CNeutrinoApp::ExitRun(const bool /*write_si*/, int retcode)
delete funNotifier; delete funNotifier;
} }
//CVFD::getInstance()->ShowText(g_Locale->getText(LOCALE_MAINMENU_REBOOT)); //CVFD::getInstance()->ShowText(g_Locale->getText(LOCALE_MAINMENU_REBOOT));
//delete frameBuffer; stop_video();
#if 0 /* FIXME this next hack to test, until we find real crash on exit reason */ #if 0 /* FIXME this next hack to test, until we find real crash on exit reason */
system("/etc/init.d/rcK"); system("/etc/init.d/rcK");
system("/bin/sync"); system("/bin/sync");
@@ -3050,7 +3055,7 @@ void CNeutrinoApp::saveEpg()
neutrino_msg_data_t data; neutrino_msg_data_t data;
g_Sectionsd->writeSI2XML(g_settings.epg_dir.c_str()); g_Sectionsd->writeSI2XML(g_settings.epg_dir.c_str());
while( true ) { while( true ) {
g_RCInput->getMsg(&msg, &data, 300); // 30 secs.. g_RCInput->getMsg(&msg, &data, 1200); // 120 secs..
if (( msg == CRCInput::RC_timeout ) || (msg == NeutrinoMessages::EVT_SI_FINISHED)) { if (( msg == CRCInput::RC_timeout ) || (msg == NeutrinoMessages::EVT_SI_FINISHED)) {
//printf("Msg %x timeout %d EVT_SI_FINISHED %x\n", msg, CRCInput::RC_timeout, NeutrinoMessages::EVT_SI_FINISHED); //printf("Msg %x timeout %d EVT_SI_FINISHED %x\n", msg, CRCInput::RC_timeout, NeutrinoMessages::EVT_SI_FINISHED);
break; break;
@@ -3608,9 +3613,9 @@ int CNeutrinoApp::exec(CMenuTarget* parent, const std::string & actionKey)
delete g_fontRenderer; delete g_fontRenderer;
delete hintBox; delete hintBox;
delete frameBuffer;
stop_daemons(true); stop_daemons(true);
stop_video();
/* g_Timerd, g_Zapit and CVFD are used in stop_daemons */ /* g_Timerd, g_Zapit and CVFD are used in stop_daemons */
delete g_Timerd; delete g_Timerd;
delete g_Zapit; //do we really need this? delete g_Zapit; //do we really need this?
@@ -3726,10 +3731,17 @@ void stop_daemons(bool stopall)
delete powerManager; delete powerManager;
} }
cs_deregister_messenger(); cs_deregister_messenger();
cs_api_exit();
} }
} }
void stop_video()
{
delete videoDecoder;
delete videoDemux;
delete CFrameBuffer::getInstance();
cs_api_exit();
}
void sighandler (int signum) void sighandler (int signum)
{ {
signal (signum, SIG_IGN); signal (signum, SIG_IGN);
@@ -3739,6 +3751,7 @@ void sighandler (int signum)
delete CRecordManager::getInstance(); delete CRecordManager::getInstance();
CNeutrinoApp::getInstance()->saveSetup(NEUTRINO_SETTINGS_FILE); CNeutrinoApp::getInstance()->saveSetup(NEUTRINO_SETTINGS_FILE);
stop_daemons(); stop_daemons();
stop_video();
_exit(0); _exit(0);
default: default:
break; break;

View File

@@ -47,91 +47,7 @@
//static const char * iso639filename = "/usr/share/iso-codes/iso-639.tab"; //static const char * iso639filename = "/usr/share/iso-codes/iso-639.tab";
static const char * iso639filename = "/share/iso-codes/iso-639.tab"; static const char * iso639filename = "/share/iso-codes/iso-639.tab";
#if 0 #define DEFAULT_LOCALE "english"
#include <stdlib.h>
#include <stdio.h>
#define ISO639_TABLE_SIZE 489
typedef struct
{
char * iso_639_2_code;
char * name;
} iso639_t;
iso639_t iso639[ISO639_TABLE_SIZE];
int mycompare(const void * a, const void * b)
{
return strcmp(((iso639_t *)a)->iso_639_2_code, ((iso639_t *)b)->iso_639_2_code);
}
void initialize_iso639_map(void)
{
unsigned i = 0;
std::string s, t, v;
std::ifstream in(iso639filename);
if (in.is_open())
{
while (in.peek() == '#')
getline(in, s);
while (in >> s >> t >> v >> std::ws)
{
getline(in, v);
if (i == ISO639_TABLE_SIZE)
{
printf("ISO639 table overflow\n");
goto do_sorting;
}
iso639[i].iso_639_2_code = strdup(s.c_str());
iso639[i].name = strdup(v.c_str());
i++;
if (s != t)
{
if (i == ISO639_TABLE_SIZE)
{
printf("ISO639 table overflow\n");
goto do_sorting;
}
iso639[i].iso_639_2_code = strdup(t.c_str());
// iso639[i].name = strdup(v.c_str());
iso639[i].name = iso639[i - 1].name;
i++;
}
}
if (i != ISO639_TABLE_SIZE)
{
printf("ISO639 table underflow\n");
while(i < ISO639_TABLE_SIZE)
{
iso639[i].iso_639_2_code = iso639[i].name = (char *)iso639filename; // fill with junk
i++;
}
}
do_sorting:
qsort(iso639, ISO639_TABLE_SIZE, sizeof(iso639_t), mycompare);
}
else
printf("Loading %s failed.\n", iso639filename);
}
const char * getISO639Description(const char * const iso)
{
iso639_t tmp;
tmp.iso_639_2_code = (char *)iso;
void * value = bsearch(&tmp, iso639, ISO639_TABLE_SIZE, sizeof(iso639_t), mycompare);
if (value == NULL)
return iso;
else
return ((iso639_t *)value)->name;
}
#else
std::map<std::string, std::string> iso639; std::map<std::string, std::string> iso639;
std::map<std::string, std::string> iso639rev; std::map<std::string, std::string> iso639rev;
@@ -166,7 +82,6 @@ const char * getISO639Description(const char * const iso)
else else
return it->second.c_str(); return it->second.c_str();
} }
#endif
CLocaleManager::CLocaleManager() CLocaleManager::CLocaleManager()
{ {
@@ -178,7 +93,7 @@ CLocaleManager::CLocaleManager()
for (unsigned int i = 0; i < (sizeof(locale_real_names)/sizeof(const char *)); i++) for (unsigned int i = 0; i < (sizeof(locale_real_names)/sizeof(const char *)); i++)
defaultData[i] = (char *)locale_real_names[i]; defaultData[i] = (char *)locale_real_names[i];
loadLocale("english", true); loadLocale(DEFAULT_LOCALE, true);
} }
CLocaleManager::~CLocaleManager() CLocaleManager::~CLocaleManager()
@@ -198,7 +113,14 @@ CLocaleManager::loadLocale_ret_t CLocaleManager::loadLocale(const char * const l
FILE * fd; FILE * fd;
char ** loadData = asdefault ? defaultData : localeData; char ** loadData = asdefault ? defaultData : localeData;
//initialize_iso639_map(); if(!asdefault && !strcmp(locale, DEFAULT_LOCALE)) {
for (unsigned j = 0; j < (sizeof(locale_real_names)/sizeof(const char *)); j++) {
if (loadData[j] != locale_real_names[j] && loadData[j] != defaultData[j])
free(loadData[j]);
loadData[j] = defaultData[j];
}
return UNICODE_FONT;
}
for (i = 0; i < 2; i++) for (i = 0; i < 2; i++)
{ {
@@ -278,29 +200,6 @@ CLocaleManager::loadLocale_ret_t CLocaleManager::loadLocale(const char * const l
// printf("i=%d\n", i); // printf("i=%d\n", i);
if(i == sizeof(locale_real_names)/sizeof(const char *)) if(i == sizeof(locale_real_names)/sizeof(const char *))
printf("[%s.locale] superfluous entry: %s\n", locale, buf); printf("[%s.locale] superfluous entry: %s\n", locale, buf);
#if 0
while (1)
{
j = (i >= (sizeof(locale_real_names)/sizeof(const char *))) ? -1 : strcmp(buf, locale_real_names[i]);
if (j > 0)
{
printf("[%s.locale] missing entry: %s\n", locale, locale_real_names[i]);
i++;
}
else
break;
}
if (j == 0)
{
localeData[i] = strdup(text.c_str());
i++;
}
else
{
printf("[%s.locale] superfluous entry: %s\n", locale, buf);
}
#endif
} }
} }
fclose(fd); fclose(fd);

View File

@@ -2148,8 +2148,6 @@ void CZapit::run()
delete pcrDemux; delete pcrDemux;
delete pmtDemux; delete pmtDemux;
delete audioDecoder; delete audioDecoder;
delete videoDecoder;
delete videoDemux;
delete audioDemux; delete audioDemux;
INFO("demuxes/decoders deleted"); INFO("demuxes/decoders deleted");