void GetSDT(FILE *infile, SVT_CONTROL *svttop, SECcache *secs,
- int count, STATION **station, int * station_count, char *header, int is_bs_cs_logo)
+ int count, STATION **station, int * station_count, char *header, int is_logo)
{
SECcache *bsecs;
int pmtpids[SECCOUNT];
else if((bsecs->pid & 0xFF) == 0x29) {
dumpCDT(bsecs->buf, *station, *station_count);
}
- else if ( is_bs_cs_logo ) {
+ else if ( is_logo ) {
/* PAT */
if((bsecs->pid & 0xFF) == 0x00) {
dumpPAT(bsecs->buf, secs, count, pmtpids);
STATION *pStas ;
int act = 0;
int i , j, k ;
- int is_bs_cs_logo = 0;
+ int is_logo = 0;
SDTTdata sdtd;
SDTTdataLoop *loop;
SDTTdataService *service;
- /* 興味のあるpidを指定 */
- memset(secs, 0, sizeof(SECcache) * SECCOUNT);
- secs[0].pid = 0x00; /* PAT */
- secs[1].pid = 0x11; /* SDT */
- secs[2].pid = 0x23; /* SDTT */
- secs[3].pid = 0x29; /* CDT */
-
memset(dsmctl, 0, sizeof(dsmctl));
+ if(argc == 5 && strcmp(argv[1], "/LOGO") == 0){
+ argc--;
+ argv[1] = argv[2];
+ argv[2] = argv[3];
+ argv[3] = argv[4];
+ is_logo = 1;
+ }
if(argc == 4){
arg_onTV = argv[1];
if(strcmp(argv[2], "-")) {
outfile = stdout;
}
}else{
- fprintf(stdout, "Usage : %s {/BS|/CS} <tsFile> <xmlFile>\n", argv[0]);
- fprintf(stdout, "Usage : %s <id> <tsFile> <xmlFile>\n", argv[0]);
+ fprintf(stdout, "Usage : %s (/LOGO) {/BS|/CS|<id>} <tsFile> <outfile>\n", argv[0]);
fprintf(stdout, "\n");
+ fprintf(stdout, "/LOGO ロゴ取得モード。独立して指定し、番組表の出力を行ないません。\n");
fprintf(stdout, "id チャンネル識別子。地上波の物理チャンネルを与えます。\n");
fprintf(stdout, "/BS BSモード。一つのTSからBS全局のデータを読み込みます。\n");
fprintf(stdout, "/CS CSモード。一つのTSから複数局のデータを読み込みます。\n");
svttop = calloc(1, sizeof(SVT_CONTROL));
act = 0 ;
+ /* 興味のあるpidを指定 */
+ if ( is_logo ) {
+ memset(secs, 0, sizeof(SECcache) * SECCOUNT);
+ secs[0].pid = 0x00; /* PAT */
+ secs[1].pid = 0x11; /* SDT */
+ secs[2].pid = 0x29; /* CDT */
+ }
+ else {
+ memset(secs, 0, sizeof(SECcache) * SECCOUNT);
+ secs[0].pid = 0x00; /* PAT */
+ secs[1].pid = 0x11; /* SDT */
+ secs[2].pid = 0x12; /* EIT */
+ secs[3].pid = 0x23; /* SDTT */
+ secs[4].pid = 0x26; /* EIT */
+ secs[5].pid = 0x27; /* EIT */
+ secs[6].pid = 0x29; /* CDT */
+ }
+
if(strcmp(arg_onTV, "/TIME") == 0){
printf("TSに載っている時刻データは2秒ほど早めてあるのかもしれません。\n");
memset(secs, 0, sizeof(SECcache) * SECCOUNT);
}else if(strcmp(arg_onTV, "/CS") == 0){
char *head = "CS";
GetSDT(infile, svttop, secs, SECCOUNT, &pStas, &staCount, head, 0);
- }else if(strcmp(arg_onTV, "/BSCSLOGO") == 0){
- is_bs_cs_logo = 1;
- GetSDT(infile, svttop, secs, SECCOUNT, &pStas, &staCount, "", 1);
}else if(strcmp(arg_onTV, "/TEST") == 0){
char *head = "TEST";
GetSDT(infile, svttop, secs, SECCOUNT, &pStas, &staCount, head, 0);
fprintf(outfile, "<!DOCTYPE tv SYSTEM \"xmltv.dtd\">\n\n");
fprintf(outfile, "<tv generator-info-name=\"tsEPG2xml\" generator-info-url=\"http://localhost/\">\n");
- for ( i = 0; i < 1024; i++) {
- if ( dsmctl[i].isUsed == 0 ) break;
- parseSDTTdata(dsmctl[i].blockData, &sdtd);
-
- for (j = 0; j < sdtd.number_of_loop; j++) {
- loop = sdtd.loop + sizeof(SDTTdataLoop) * j;
-
- for ( k = 0; k < loop->number_of_services; k++) {
- service = loop->services + sizeof(SDTTdataService) * k;
-
- /*
- for(lp = 0 ; lp < staCount ; lp++){
- if (
- pStas[lp].tsId == service->transport_stream_id &&
- pStas[lp].onId == service->original_network_id &&
- pStas[lp].svId == service->service_id
- ) {
- clt2png(loop->data,
- &pStas[lp].logo_array[sdtd.logo_type].logo,
- &pStas[lp].logo_array[sdtd.logo_type].logo_size);
- }
+ if ( is_logo ) {
+ memset(Logo, '\0', sizeof(Logo));
+ for(lp = 0 ; lp < staCount ; lp++){
+ for ( i = 0 ; i < 6 ; i++) {
+ if (pStas[lp].logo_array[i].logo) {
+ base64_encode(Logo, pStas[lp].logo_array[i].logo, pStas[lp].logo_array[i].logo_size);
+ xmlspecialchars(Logo);
+ fprintf(outfile, " <logo ts=\"%d\" on=\"%d\" sv=\"%d\" type=\"%d\">%s</logo>\n",
+ pStas[lp].tsId,
+ pStas[lp].onId,
+ pStas[lp].svId,
+ i,
+ Logo);
}
- */
-
- #if 0
- printf( "SDTTdataLoop (%d:%d) %d:%d[%d:%d:%d]%d\n",
- i, j,
- sdtd.logo_type,
- loop->logo_id,
- service->transport_stream_id,
- service->original_network_id,
- service->service_id,
- loop->data_size
- );
- #endif
-
- if ( is_bs_cs_logo ) {
- fprintf(outfile, " <logo ts=\"%d\" on=\"%d\" sv=\"%d\" type=\"%d\">%d</logo>\n",
+ }
+ }
+
+ for ( i = 0; i < 1024; i++) {
+ if ( dsmctl[i].isUsed == 0 ) break;
+ parseSDTTdata(dsmctl[i].blockData, &sdtd);
+
+ for (j = 0; j < sdtd.number_of_loop; j++) {
+ loop = sdtd.loop + sizeof(SDTTdataLoop) * j;
+
+ for ( k = 0; k < loop->number_of_services; k++) {
+ service = loop->services + sizeof(SDTTdataService) * k;
+
+ /*
+ for(lp = 0 ; lp < staCount ; lp++){
+ if (
+ pStas[lp].tsId == service->transport_stream_id &&
+ pStas[lp].onId == service->original_network_id &&
+ pStas[lp].svId == service->service_id
+ ) {
+ clt2png(loop->data,
+ &pStas[lp].logo_array[sdtd.logo_type].logo,
+ &pStas[lp].logo_array[sdtd.logo_type].logo_size);
+ }
+ }
+ */
+
+ #if 0
+ printf( "SDTTdataLoop (%d:%d) %d:%d[%d:%d:%d]%d\n",
+ i, j,
+ sdtd.logo_type,
+ loop->logo_id,
+ service->transport_stream_id,
+ service->original_network_id,
+ service->service_id,
+ loop->data_size
+ );
+ #endif
+
+
+ void* logo = NULL;
+ int logo_size = 0;
+
+ clt2png(loop->data, &logo, &logo_size);
+ memset(Logo, '\0', sizeof(Logo));
+ base64_encode(Logo, logo, logo_size);
+ xmlspecialchars(Logo);
+
+ fprintf(outfile, " <logo ts=\"%d\" on=\"%d\" sv=\"%d\" type=\"%d\" dlid=\"%d\">%s</logo>\n",
service->transport_stream_id,
service->original_network_id,
service->service_id,
sdtd.logo_type,
- loop->logo_id);
+ loop->logo_id,
+ Logo);
}
- }
- if ( is_bs_cs_logo ) {
- void* logo = NULL;
- int logo_size = 0;
-
- clt2png(loop->data, &logo, &logo_size);
- memset(Logo, '\0', sizeof(Logo));
- base64_encode(Logo, logo, logo_size);
- xmlspecialchars(Logo);
- fprintf(outfile, " <logodata id=\"%d\">%s</logodata>\n",
- loop->logo_id,
- Logo);
}
}
}
fprintf(outfile, " <display-name lang=\"ja_JP\">%s</display-name>\n", ServiceName);
fprintf(outfile, " <id ts=\"%d\" on=\"%d\" sv=\"%d\"/>\n", pStas[lp].tsId, pStas[lp].onId, pStas[lp].svId);
- memset(Logo, '\0', sizeof(Logo));
- for ( i = 0 ; i < 6 ; i++) {
- if (pStas[lp].logo_array[i].logo) {
- base64_encode(Logo, pStas[lp].logo_array[i].logo, pStas[lp].logo_array[i].logo_size);
- xmlspecialchars(Logo);
- fprintf(outfile, " <logo type=\"%02d\">%s</logo>\n", i, Logo);
- }
- }
-
fprintf(outfile, " </channel>\n");
}
- if ( is_bs_cs_logo ) {
+ if ( is_logo ) {
fprintf(outfile, "</tv>\n");
goto cleanup;
}