Screenshot instructions:
Windows
Mac
Red Hat Linux
Ubuntu
Click URL instructions:
Right-click on ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)
You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(10) |
Jun
(35) |
Jul
(11) |
Aug
(9) |
Sep
|
Oct
(9) |
Nov
(1) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(3) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(1) |
Sep
(1) |
Oct
(9) |
Nov
(3) |
Dec
|
2004 |
Jan
(2) |
Feb
|
Mar
(28) |
Apr
(5) |
May
|
Jun
(1) |
Jul
(5) |
Aug
(2) |
Sep
|
Oct
(2) |
Nov
|
Dec
(5) |
2005 |
Jan
(2) |
Feb
(8) |
Mar
|
Apr
|
May
|
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
(1) |
Nov
|
Dec
|
2007 |
Jan
|
Feb
|
Mar
(26) |
Apr
|
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
(5) |
Oct
|
Nov
|
Dec
|
2008 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2009 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
|
1
(1) |
2
(2) |
3
|
4
|
5
|
6
(4) |
7
|
8
(8) |
9
|
10
(2) |
11
(1) |
12
|
13
|
14
(1) |
15
|
16
|
17
|
18
|
19
(5) |
20
(1) |
21
|
22
(1) |
23
|
24
|
25
(1) |
26
|
27
(1) |
28
|
29
|
30
|
31
|
|
|
|
From: <nicosb@us...> - 2004-03-27 14:03:01
|
Update of /cvsroot/dvbtools/dvbtune In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25365/dvbtune Modified Files: dvbtune.c Log Message: shift diseqc parameter in the right range: [0..3] Index: dvbtune.c =================================================================== RCS file: /cvsroot/dvbtools/dvbtune/dvbtune.c,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** dvbtune.c 25 Mar 2004 00:16:37 -0000 1.28 --- dvbtune.c 27 Mar 2004 13:51:51 -0000 1.29 *************** *** 692,696 **** fprintf(stderr,"Usage: dvbtune [OPTIONS]\n\n"); fprintf(stderr,"Standard options:\n\n"); ! fprintf(stderr,"-f freq absolute Frequency (DVB-S in Hz or DVB-T in Hz)\n"); fprintf(stderr," or L-band Frequency (DVB-S in Hz or DVB-T in Hz)\n"); fprintf(stderr,"-p [H,V] Polarity (DVB-S only)\n"); --- 692,696 ---- fprintf(stderr,"Usage: dvbtune [OPTIONS]\n\n"); fprintf(stderr,"Standard options:\n\n"); ! fprintf(stderr,"-f freq absolute Frequency (DVB-S in KHz or DVB-T in Hz)\n"); fprintf(stderr," or L-band Frequency (DVB-S in Hz or DVB-T in Hz)\n"); fprintf(stderr,"-p [H,V] Polarity (DVB-S only)\n"); *************** *** 706,710 **** fprintf(stderr,"-tone [0|1] 0=22kHz off, 1=22kHz on\n"); fprintf(stderr,"-I [0|1|2] 0=Spectrum Inversion off, 1=Spectrum Inversion on, 2=auto\n"); ! fprintf(stderr,"-D [0-4] DiSEqC command (0=none)\n\n"); fprintf(stderr,"-qam X DVB-T modulation - 16%s, 32%s, 64%s, 128%s or 256%s\n",(CONSTELLATION_DEFAULT==QAM_16 ? " (default)" : ""),(CONSTELLATION_DEFAULT==QAM_32 ? " (default)" : ""),(CONSTELLATION_DEFAULT==QAM_64 ? " (default)" : ""),(CONSTELLATION_DEFAULT==QAM_128 ? " (default)" : ""),(CONSTELLATION_DEFAULT==QAM_256 ? " (default)" : "")); fprintf(stderr,"-gi N DVB-T guard interval 1_N (N=32%s, 16%s, 8%s or 4%s)\n",(GUARD_INTERVAL_DEFAULT==GUARD_INTERVAL_1_32 ? " (default)" : ""),(GUARD_INTERVAL_DEFAULT==GUARD_INTERVAL_1_16 ? " (default)" : ""),(GUARD_INTERVAL_DEFAULT==GUARD_INTERVAL_1_8 ? " (default)" : ""),(GUARD_INTERVAL_DEFAULT==GUARD_INTERVAL_1_4 ? " (default)" : "")); --- 706,710 ---- fprintf(stderr,"-tone [0|1] 0=22kHz off, 1=22kHz on\n"); fprintf(stderr,"-I [0|1|2] 0=Spectrum Inversion off, 1=Spectrum Inversion on, 2=auto\n"); ! fprintf(stderr,"-D [1-4] DiSEqC command\n\n"); fprintf(stderr,"-qam X DVB-T modulation - 16%s, 32%s, 64%s, 128%s or 256%s\n",(CONSTELLATION_DEFAULT==QAM_16 ? " (default)" : ""),(CONSTELLATION_DEFAULT==QAM_32 ? " (default)" : ""),(CONSTELLATION_DEFAULT==QAM_64 ? " (default)" : ""),(CONSTELLATION_DEFAULT==QAM_128 ? " (default)" : ""),(CONSTELLATION_DEFAULT==QAM_256 ? " (default)" : "")); fprintf(stderr,"-gi N DVB-T guard interval 1_N (N=32%s, 16%s, 8%s or 4%s)\n",(GUARD_INTERVAL_DEFAULT==GUARD_INTERVAL_1_32 ? " (default)" : ""),(GUARD_INTERVAL_DEFAULT==GUARD_INTERVAL_1_16 ? " (default)" : ""),(GUARD_INTERVAL_DEFAULT==GUARD_INTERVAL_1_8 ? " (default)" : ""),(GUARD_INTERVAL_DEFAULT==GUARD_INTERVAL_1_4 ? " (default)" : "")); *************** *** 832,839 **** i++; diseqc=atoi(argv[i]); ! if (diseqc > 4) { ! fprintf(stderr,"DiSEqC must be between 0 and 4\n"); exit(-1); } } else if (strcmp(argv[i],"-tone")==0) { i++; --- 832,840 ---- i++; diseqc=atoi(argv[i]); ! if ((diseqc < 1) || (diseqc > 4)) { ! fprintf(stderr,"DiSEqC must be between 1 and 4\n"); exit(-1); } + diseqc--; } else if (strcmp(argv[i],"-tone")==0) { i++; |
From: <linuxstb@us...> - 2004-03-25 00:27:20
|
Update of /cvsroot/dvbtools/dvbtune In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12986 Modified Files: Makefile dvbtune.c Added Files: si.c si.h Log Message: Split SI descriptor parsing to separate files --- NEW FILE: si.c --- #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> #include <ctype.h> #include "si.h" char xmlify_result[10]; char* xmlify (char c) { switch(c) { case '&': strcpy(xmlify_result,"&"); break; case '<': strcpy(xmlify_result,"<"); break; case '>': strcpy(xmlify_result,">"); break; case '\"': strcpy(xmlify_result,"""); break; case 0: xmlify_result[0]=0; break; default: xmlify_result[0]=c; xmlify_result[1]=0; break; } return(xmlify_result); } /* Get the first unscanned transponder (or return NULL) */ transponder_t* get_unscanned(transponder_t* transponders) { transponder_t* t; t=transponders; while (t!=NULL) { if (t->scanned==0) { return(t); }; t=t->next; } return NULL; } void add_transponder(transponder_t* transponder,transponder_t** transponders) { transponder_t* t; int found; if (*transponders==NULL) { *transponders=(transponder_t*)malloc(sizeof(transponder_t)); (*transponders)->freq=transponder->freq; (*transponders)->srate=transponder->srate; (*transponders)->pol=transponder->pol; (*transponders)->pos=transponder->pos; (*transponders)->we_flag=transponder->we_flag; (*transponders)->mod=transponder->mod; (*transponders)->scanned=0; (*transponders)->next=NULL; } else { t=(*transponders); found=0; while ((!found) && (t!=NULL)) { /* Some transponders appear with slightly different frequencies - ignore a new transponder if it is within 3MHz of another */ if ((abs(t->freq-transponder->freq)<=3000) && (t->pol==transponder->pol)) { found=1; } else { t=t->next; } } if (!found) { t=(transponder_t*)malloc(sizeof(transponder_t)); t->freq=transponder->freq; t->srate=transponder->srate; t->pol=transponder->pol; t->pos=transponder->pos; t->we_flag=transponder->we_flag; t->mod=transponder->mod; t->scanned=0; t->next=(*transponders); (*transponders)=t; } } } void parse_descriptors(int info_len,unsigned char *buf, transponder_t* transponder, transponder_t** transponders) { int i=0; int descriptor_tag,descriptor_length,j,k,pid,id; int service_type; char tmp[128]; unsigned int freq, pol, sr; while (i < info_len) { descriptor_tag=buf[i++]; descriptor_length=buf[i++]; // printf("Found descriptor: 0x%02x - length %02d\n",descriptor_tag,descriptor_length); while (descriptor_length > 0) { switch(descriptor_tag) { case 0x03: // audio_stream_descriptor printf("<audio_info tag=\"0x03\" info=\"%02x\" />\n",buf[i]); i+=descriptor_length; descriptor_length=0; break; case 0x06: // data_stream_alignmentdescriptor printf("<data_stream_alignment tag=\"0x06\" data=\"%02x\" />\n",buf[i]); i+=descriptor_length; descriptor_length=0; break; case 0x0a: // iso_639_language_descriptor for (j=0;j<((descriptor_length)/4);j++) { printf("<iso_639 language=\""); if (buf[i]!=0) printf("%c",buf[i]); if (buf[i+1]!=0) printf("%c",buf[i+1]); if (buf[i+2]!=0) printf("%c",buf[i+2]); printf("\" type=\"%d\" />\n",buf[i+3]); i+=4; descriptor_length-=4; } break; case 0x0b: // system_clock_descriptor printf("<system_clock tag=\"0x0b\" data=\"%02x%02x\" />\n",buf[i],buf[i+1]); i+=descriptor_length; descriptor_length=0; break; case 0x09: // ca_descriptor k=((buf[i]<<8)|buf[i+1]); switch(k&0xff00) { case SECA_CA_SYSTEM: for (j=2; j<descriptor_length; j+=15) { pid = ((buf[i+j] & 0x1f) << 8) | buf[i+j+1]; id = (buf[i+j+2] << 8) | buf[i+j+3]; printf("<ca_system_descriptor type=\"seca\" system_id=\"0x%04x\" ecm_pid=\"%d\" ecm_id=\"%06x\" />\n",k,pid,id); } break; case VIACCESS_CA_SYSTEM: j = 4; while (j < descriptor_length) { if (buf[i+j]==0x14) { pid = ((buf[i+2] & 0x1f) << 8) | buf[i+3]; id = (buf[i+j+2] << 16) | (buf[i+j+3] << 8) | (buf[i+j+4] & 0xf0); printf("<ca_system_descriptor type=\"viaccess\" system_id=\"0x%04x\" ecm_pid=\"%d\" ecm_id=\"%06x\" />\n",k,pid,id); } j += 2+buf[i+j+1]; } break; case IRDETO_CA_SYSTEM: case BETA_CA_SYSTEM: pid = ((buf[i+2] & 0x1f) << 8) | buf[i+3]; printf("<ca_system_descriptor type=\"irdeto\" system_id=\"0x%04x\" ecm_pid=\"%d\" />\n",k,pid); break; case NAGRA_CA_SYSTEM: pid = ((buf[i+2] & 0x1f) << 8) | buf[i+3]; printf("<ca_system_descriptor type=\"nagra\" system_id=\"0x%04x\" ecm_pid=\"%d\" />\n",k,pid); break; case CONAX_CA_SYSTEM: pid = ((buf[i+2] & 0x1f) << 8) | buf[i+3]; printf("<ca_system_descriptor type=\"conax\" system_id=\"0x%04x\" ecm_pid=\"%d\" />\n",k,pid); break; case VIDEOGUARD_CA_SYSTEM: pid = ((buf[i+2] & 0x1f) << 8) | buf[i+3]; printf("<ca_system_descriptor type=\"videoguard\" system_id=\"0x%04x\" ecm_pid=\"%d\" />\n",k,pid); break; default: pid = ((buf[i+2] & 0x1f) << 8) | buf[i+3]; printf("<ca_system_descriptor type=\"unknown\" system_id=\"0x%04x\" />\n",k); break; } i+=descriptor_length; descriptor_length=0; break; case 0x40: // network_name // printf("<network_name tag=\"0x40\">"); j=descriptor_length; while(j > 0) { // printf("%c",buf[i++]); j--; } descriptor_length=0; // printf("</network_name>\n"); break; case 0x41: // service_list // printf("<services tag=\"0x41\" n=\"%d\">\n",descriptor_length/3); while (descriptor_length > 0) { // printf("<service id=\"%d\" type=\"%d\" />\n",(buf[i]<<8)|buf[i+1],buf[i+2]); i+=3; descriptor_length-=3; } // printf("</services>\n"); break; case 0x43: // satellite_delivery_system freq=(unsigned int)(buf[i]<<24)|(buf[i+1]<<16)|(buf[i+2]<<8)|buf[i+3]; sprintf(tmp,"%x",freq); transponder->freq=atoi(tmp)*10; i+=4; transponder->pos=(buf[i]<<8)|buf[i+1]; i+=2; transponder->we_flag=(buf[i]&0x80)>>7; pol=(buf[i]&0x60)>>5; switch(pol) { case 0 : transponder->pol='H'; break; case 1 : transponder->pol='V'; break; case 2 : transponder->pol='L'; break; case 3 : transponder->pol='R'; break; } transponder->mod=buf[i]&0x1f; i++; sr=(unsigned int)(buf[i]<<24)|(buf[i+1]<<16)|(buf[i+2]<<8)|(buf[i+3]&0xf0); sr=(unsigned int)(sr >> 4); sprintf(tmp,"%x",sr); transponder->srate=atoi(tmp)*100; i+=4; descriptor_length=0; add_transponder(transponder,transponders); // printf("<satellite_delivery tag=\"0x43\" freq=\"%05d\" srate=\"%d\" pos=\"%04x\" we_flag=\"%d\" polarity=\"%c\" modulation=\"%d\" />\n",transponder->freq,transponder->srate,transponder->pos,transponder->we_flag,transponder->pol,transponder->mod); break; case 0x48: // service_description service_type=buf[i++]; printf("<description tag=\"0x48\" type=\"%d\"",service_type); descriptor_length--; j=buf[i++]; descriptor_length-=(j+1); printf(" provider_name=\"");; while(j > 0) { printf("%s",xmlify(buf[i++])); j--; } printf("\" service_name=\""); j=buf[i++]; descriptor_length-=(j+1); while(j > 0) { printf("%s",xmlify(buf[i])); i++; j--; } printf("\" />\n"); break; case 0x49: // country_availability: printf("<country_availability tag=\"0x49\" type=\"%d\" countries=\" ",(buf[i]&0x80)>>7); i++; j=descriptor_length-1; while (j > 0) { printf("%c",buf[i++]); j--; } printf("\" />\n"); descriptor_length=0; break; case 0x4c: printf("<time_shifted_copy_of tag=\"0x4c\" service_id=\"%d\" />\n",(buf[i]<<8)|buf[i+1]); i+=descriptor_length; descriptor_length=0; break; case 0x52: // stream_identifier_descriptor printf("<stream_id id=\"%d\" />\n",buf[i]); i+=descriptor_length; descriptor_length=0; break; case 0x53: printf("<ca_identifier tag=\"0x53\" length=\"%02x\">\n",descriptor_length); for (j=0;j<descriptor_length;j+=2) { k=(buf[i+j]<<8)|buf[i+j+1]; printf("<ca_system_id>%04x</ca_system_id>\n",k); } i+=descriptor_length; descriptor_length=0; printf("</ca_identifier>\n"); break; case 0x56: j=0; printf("<teletext tag=\"0x56\">\n"); while (j < descriptor_length) { printf("<teletext_info lang=\""); printf("%s",xmlify(buf[i])); printf("%s",xmlify(buf[i+1])); printf("%s",xmlify(buf[i+2])); k=(buf[i+3]&0x07); printf("\" type=\"%d\" page=\"%d%02x\" />\n",(buf[i+3]&0xf8)>>3,(k==0 ? 8 : k),buf[i+4]); i+=5; j+=5; } printf("</teletext>\n"); descriptor_length=0; break; case 0x59: j=0; printf("<subtitling_descriptor tag=\"0x59\">\n"); while (j < descriptor_length) { printf("<subtitle_stream lang=\""); printf("%s",xmlify(buf[i])); printf("%s",xmlify(buf[i+1])); printf("%s",xmlify(buf[i+2])); printf("\" type=\"%d\" composition_page_id=\"%04x\" ancillary_page_id=\"%04x\" />\n",buf[i+3],(buf[i+4]<<8)|buf[i+5],(buf[i+6]<<8)|buf[i+7]); i+=8; j+=8; } printf("</subtitling_descriptor>\n"); descriptor_length=0; break; case 0x6a: printf("<ac3_descriptor tag=\"0x6a\" data=\""); for (j=0;j<descriptor_length;j++) printf("%02x",buf[i+j]); printf("\" />\n"); i+=descriptor_length; descriptor_length=0; break; case 0xc5: // canal_satellite_radio_descriptor /* This is guessed from the data */ printf("<canal_radio tag=\"0x%02x\" id=\"%d\" name=\"",descriptor_tag,buf[i]); i++; for (j=0;j<descriptor_length;j++) if (buf[i+j]!=0) printf("%c",buf[i+j]); printf("\" />\n"); i+=descriptor_length; descriptor_length=0; break; default: printf("<descriptor tag=\"0x%02x\" data=\"",descriptor_tag); for (j=0;j<descriptor_length;j++) printf("%02x",buf[i+j]); printf("\" text=\""); for (j=0;j<descriptor_length;j++) printf("%c",(isalnum(buf[i+j]) ? buf[i+j] : '.')); printf("\" />\n"); i+=descriptor_length; descriptor_length=0; break; } } } } --- NEW FILE: si.h --- #ifndef _SI_H #define _SI_H #define SECA_CA_SYSTEM 0x0100 #define VIACCESS_CA_SYSTEM 0x0500 #define IRDETO_CA_SYSTEM 0x0600 #define VIDEOGUARD_CA_SYSTEM 0x0900 #define BETA_CA_SYSTEM 0x1700 #define NAGRA_CA_SYSTEM 0x1800 #define CONAX_CA_SYSTEM 0x0b00 typedef struct _transponder_t { int id; int onid; unsigned int freq; int srate; int pos; int we_flag; char pol; int mod; int scanned; struct _transponder_t* next; } transponder_t; void add_transponder(transponder_t* transponder, transponder_t** transponders); void parse_descriptors(int info_len,unsigned char *buf, transponder_t* transponder, transponder_t** transponders); transponder_t* get_unscanned(transponder_t* transponders); #endif Index: Makefile =================================================================== RCS file: /cvsroot/dvbtools/dvbtune/Makefile,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** Makefile 19 Mar 2004 16:49:32 -0000 1.7 --- Makefile 25 Mar 2004 00:16:37 -0000 1.8 *************** *** 1,4 **** --- 1,5 ---- INCS=-I /usr/include/libxml2 CFLAGS= -Wall $(INCS) + LDFLAGS=-lxml2 CC=gcc all: dvbtune *************** *** 19,27 **** tune.o: tune.c tune.h dvb_defaults.h ! dvbtune: dvbtune.c tune.o xml2vdr: xml2vdr.c - $(CC) $(CFLAGS) -o xml2vdr xml2vdr.c -lxml2 clean: --- 20,30 ---- tune.o: tune.c tune.h dvb_defaults.h + si.o: si.c si.h ! dvbtune.o: dvbtune.c tune.h si.h ! ! dvbtune: dvbtune.o tune.o si.o xml2vdr: xml2vdr.c clean: Index: dvbtune.c =================================================================== RCS file: /cvsroot/dvbtools/dvbtune/dvbtune.c,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** dvbtune.c 19 Mar 2004 16:51:14 -0000 1.27 --- dvbtune.c 25 Mar 2004 00:16:37 -0000 1.28 *************** *** 56,67 **** #include "tune.h" ! ! #define SECA_CA_SYSTEM 0x0100 ! #define VIACCESS_CA_SYSTEM 0x0500 ! #define IRDETO_CA_SYSTEM 0x0600 ! #define VIDEOGUARD_CA_SYSTEM 0x0900 ! #define BETA_CA_SYSTEM 0x1700 ! #define NAGRA_CA_SYSTEM 0x1800 ! #define CONAX_CA_SYSTEM 0x0b00 int fd_demuxv,fd_demuxa,fd_demuxtt,fd_demuxsi,fd_demuxrec,fd_demuxd; --- 56,60 ---- #include "tune.h" ! #include "si.h" int fd_demuxv,fd_demuxa,fd_demuxtt,fd_demuxsi,fd_demuxrec,fd_demuxd; *************** *** 77,94 **** char* demuxdev[4]={"/dev/dvb/adapter0/demux0","/dev/dvb/adapter1/demux0","/dev/dvb/adapter2/demux0","/dev/dvb/adapter3/demux0"}; - typedef struct _transponder_t { - int id; - int onid; - unsigned int freq; - int srate; - int pos; - int we_flag; - char pol; - int mod; - - int scanned; - struct _transponder_t* next; - } transponder_t; - transponder_t* transponders=NULL; int num_trans=0; --- 70,73 ---- *************** *** 105,186 **** pat_t* pats=NULL; - /* Get the first unscanned transponder (or return NULL) */ - transponder_t* get_unscanned() { - transponder_t* t; - - t=transponders; - - while (t!=NULL) { - if (t->scanned==0) { return(t); }; - t=t->next; - } - return NULL; - } - - char xmlify_result[10]; - char* xmlify (char c) { - switch(c) { - case '&': strcpy(xmlify_result,"&"); - break; - case '<': strcpy(xmlify_result,"<"); - break; - case '>': strcpy(xmlify_result,">"); - break; - case '\"': strcpy(xmlify_result,"""); - break; - case 0: xmlify_result[0]=0; - break; - default: xmlify_result[0]=c; - xmlify_result[1]=0; - break; - } - return(xmlify_result); - } - - void add_transponder(transponder_t transponder) { - transponder_t* t; - int found; - - if (transponders==NULL) { - transponders=(transponder_t*)malloc(sizeof(transponder)); - - transponders->freq=transponder.freq; - transponders->srate=transponder.srate; - transponders->pol=transponder.pol; - transponders->pos=transponder.pos; - transponders->we_flag=transponder.we_flag; - transponders->mod=transponder.mod; - transponders->scanned=0; - transponders->next=NULL; - } else { - t=transponders; - found=0; - while ((!found) && (t!=NULL)) { - /* Some transponders appear with slightly different frequencies - - ignore a new transponder if it is within 3MHz of another */ - if ((abs(t->freq-transponder.freq)<=3000) && (t->pol==transponder.pol)) { - found=1; - } else { - t=t->next; - } - } - - if (!found) { - t=(transponder_t*)malloc(sizeof(transponder)); - - t->freq=transponder.freq; - t->srate=transponder.srate; - t->pol=transponder.pol; - t->pos=transponder.pos; - t->we_flag=transponder.we_flag; - t->mod=transponder.mod; - t->scanned=0; - t->next=transponders; - - transponders=t; - } - } - } - void free_pat_list() { pat_t* t=pats; --- 84,87 ---- *************** *** 379,646 **** - void parse_descriptors(int info_len,unsigned char *buf) { - int i=0; - int descriptor_tag,descriptor_length,j,k,pid,id; - int service_type; - char tmp[128]; - unsigned int freq, pol, sr; - - while (i < info_len) { - descriptor_tag=buf[i++]; - descriptor_length=buf[i++]; - // printf("Found descriptor: 0x%02x - length %02d\n",descriptor_tag,descriptor_length); - while (descriptor_length > 0) { - switch(descriptor_tag) { - case 0x03: // audio_stream_descriptor - printf("<audio_info tag=\"0x03\" info=\"%02x\" />\n",buf[i]); - i+=descriptor_length; - descriptor_length=0; - break; - - case 0x06: // data_stream_alignmentdescriptor - printf("<data_stream_alignment tag=\"0x06\" data=\"%02x\" />\n",buf[i]); - i+=descriptor_length; - descriptor_length=0; - break; - - case 0x0a: // iso_639_language_descriptor - for (j=0;j<((descriptor_length)/4);j++) { - printf("<iso_639 language=\""); - if (buf[i]!=0) printf("%c",buf[i]); - if (buf[i+1]!=0) printf("%c",buf[i+1]); - if (buf[i+2]!=0) printf("%c",buf[i+2]); - printf("\" type=\"%d\" />\n",buf[i+3]); - i+=4; - descriptor_length-=4; - } - break; - - case 0x0b: // system_clock_descriptor - printf("<system_clock tag=\"0x0b\" data=\"%02x%02x\" />\n",buf[i],buf[i+1]); - i+=descriptor_length; - descriptor_length=0; - break; - - case 0x09: // ca_descriptor - k=((buf[i]<<8)|buf[i+1]); - switch(k&0xff00) { - case SECA_CA_SYSTEM: - for (j=2; j<descriptor_length; j+=15) - { - pid = ((buf[i+j] & 0x1f) << 8) | buf[i+j+1]; - id = (buf[i+j+2] << 8) | buf[i+j+3]; - printf("<ca_system_descriptor type=\"seca\" system_id=\"0x%04x\" ecm_pid=\"%d\" ecm_id=\"%06x\" />\n",k,pid,id); - } - break; - case VIACCESS_CA_SYSTEM: - j = 4; - while (j < descriptor_length) - { - if (buf[i+j]==0x14) - { - pid = ((buf[i+2] & 0x1f) << 8) | buf[i+3]; - id = (buf[i+j+2] << 16) | (buf[i+j+3] << 8) | (buf[i+j+4] & 0xf0); - printf("<ca_system_descriptor type=\"viaccess\" system_id=\"0x%04x\" ecm_pid=\"%d\" ecm_id=\"%06x\" />\n",k,pid,id); - } - j += 2+buf[i+j+1]; - } - break; - case IRDETO_CA_SYSTEM: - case BETA_CA_SYSTEM: - pid = ((buf[i+2] & 0x1f) << 8) | buf[i+3]; - printf("<ca_system_descriptor type=\"irdeto\" system_id=\"0x%04x\" ecm_pid=\"%d\" />\n",k,pid); - break; - case NAGRA_CA_SYSTEM: - pid = ((buf[i+2] & 0x1f) << 8) | buf[i+3]; - printf("<ca_system_descriptor type=\"nagra\" system_id=\"0x%04x\" ecm_pid=\"%d\" />\n",k,pid); - break; - case CONAX_CA_SYSTEM: - pid = ((buf[i+2] & 0x1f) << 8) | buf[i+3]; - printf("<ca_system_descriptor type=\"conax\" system_id=\"0x%04x\" ecm_pid=\"%d\" />\n",k,pid); - break; - case VIDEOGUARD_CA_SYSTEM: - pid = ((buf[i+2] & 0x1f) << 8) | buf[i+3]; - printf("<ca_system_descriptor type=\"videoguard\" system_id=\"0x%04x\" ecm_pid=\"%d\" />\n",k,pid); - break; - default: - pid = ((buf[i+2] & 0x1f) << 8) | buf[i+3]; - printf("<ca_system_descriptor type=\"unknown\" system_id=\"0x%04x\" />\n",k); - break; - } - i+=descriptor_length; - descriptor_length=0; - break; - - case 0x40: // network_name - // printf("<network_name tag=\"0x40\">"); - j=descriptor_length; - while(j > 0) { - // printf("%c",buf[i++]); - j--; - } - descriptor_length=0; - // printf("</network_name>\n"); - break; - - case 0x41: // service_list - // printf("<services tag=\"0x41\" n=\"%d\">\n",descriptor_length/3); - while (descriptor_length > 0) { - // printf("<service id=\"%d\" type=\"%d\" />\n",(buf[i]<<8)|buf[i+1],buf[i+2]); - i+=3; - descriptor_length-=3; - } - // printf("</services>\n"); - break; - - case 0x43: // satellite_delivery_system - freq=(unsigned int)(buf[i]<<24)|(buf[i+1]<<16)|(buf[i+2]<<8)|buf[i+3]; - sprintf(tmp,"%x",freq); - transponder.freq=atoi(tmp)*10; - i+=4; - transponder.pos=(buf[i]<<8)|buf[i+1]; - i+=2; - transponder.we_flag=(buf[i]&0x80)>>7; - pol=(buf[i]&0x60)>>5; - switch(pol) { - case 0 : transponder.pol='H'; break; - case 1 : transponder.pol='V'; break; - case 2 : transponder.pol='L'; break; - case 3 : transponder.pol='R'; break; - } - transponder.mod=buf[i]&0x1f; - i++; - sr=(unsigned int)(buf[i]<<24)|(buf[i+1]<<16)|(buf[i+2]<<8)|(buf[i+3]&0xf0); - sr=(unsigned int)(sr >> 4); - sprintf(tmp,"%x",sr); - transponder.srate=atoi(tmp)*100; - i+=4; - descriptor_length=0; - add_transponder(transponder); - // printf("<satellite_delivery tag=\"0x43\" freq=\"%05d\" srate=\"%d\" pos=\"%04x\" we_flag=\"%d\" polarity=\"%c\" modulation=\"%d\" />\n",transponder.freq,transponder.srate,transponder.pos,transponder.we_flag,transponder.pol,transponder.mod); - break; - - case 0x48: // service_description - service_type=buf[i++]; - printf("<description tag=\"0x48\" type=\"%d\"",service_type); - descriptor_length--; - j=buf[i++]; - descriptor_length-=(j+1); - printf(" provider_name=\"");; - while(j > 0) { - printf("%s",xmlify(buf[i++])); - j--; - } - printf("\" service_name=\""); - j=buf[i++]; - descriptor_length-=(j+1); - while(j > 0) { - printf("%s",xmlify(buf[i])); - i++; - j--; - } - printf("\" />\n"); - break; - - case 0x49: // country_availability: - printf("<country_availability tag=\"0x49\" type=\"%d\" countries=\" ",(buf[i]&0x80)>>7); - i++; - j=descriptor_length-1; - while (j > 0) { - printf("%c",buf[i++]); - j--; - } - printf("\" />\n"); - descriptor_length=0; - break; - - case 0x4c: - printf("<time_shifted_copy_of tag=\"0x4c\" service_id=\"%d\" />\n",(buf[i]<<8)|buf[i+1]); - i+=descriptor_length; - descriptor_length=0; - break; - - case 0x52: // stream_identifier_descriptor - printf("<stream_id id=\"%d\" />\n",buf[i]); - i+=descriptor_length; - descriptor_length=0; - break; - - case 0x53: - printf("<ca_identifier tag=\"0x53\" length=\"%02x\">\n",descriptor_length); - for (j=0;j<descriptor_length;j+=2) { - k=(buf[i+j]<<8)|buf[i+j+1]; - printf("<ca_system_id>%04x</ca_system_id>\n",k); - } - i+=descriptor_length; - descriptor_length=0; - printf("</ca_identifier>\n"); - break; - - case 0x56: - j=0; - printf("<teletext tag=\"0x56\">\n"); - while (j < descriptor_length) { - printf("<teletext_info lang=\""); - printf("%s",xmlify(buf[i])); - printf("%s",xmlify(buf[i+1])); - printf("%s",xmlify(buf[i+2])); - k=(buf[i+3]&0x07); - printf("\" type=\"%d\" page=\"%d%02x\" />\n",(buf[i+3]&0xf8)>>3,(k==0 ? 8 : k),buf[i+4]); - i+=5; - j+=5; - } - printf("</teletext>\n"); - descriptor_length=0; - break; - - case 0x59: - j=0; - printf("<subtitling_descriptor tag=\"0x59\">\n"); - while (j < descriptor_length) { - printf("<subtitle_stream lang=\""); - printf("%s",xmlify(buf[i])); - printf("%s",xmlify(buf[i+1])); - printf("%s",xmlify(buf[i+2])); - printf("\" type=\"%d\" composition_page_id=\"%04x\" ancillary_page_id=\"%04x\" />\n",buf[i+3],(buf[i+4]<<8)|buf[i+5],(buf[i+6]<<8)|buf[i+7]); - i+=8; - j+=8; - } - printf("</subtitling_descriptor>\n"); - descriptor_length=0; - break; - - case 0x6a: - printf("<ac3_descriptor tag=\"0x6a\" data=\""); - for (j=0;j<descriptor_length;j++) printf("%02x",buf[i+j]); - printf("\" />\n"); - i+=descriptor_length; - descriptor_length=0; - break; - - case 0xc5: // canal_satellite_radio_descriptor - /* This is guessed from the data */ - printf("<canal_radio tag=\"0x%02x\" id=\"%d\" name=\"",descriptor_tag,buf[i]); - i++; - for (j=0;j<descriptor_length;j++) - if (buf[i+j]!=0) printf("%c",buf[i+j]); - printf("\" />\n"); - i+=descriptor_length; - descriptor_length=0; - break; - - default: - printf("<descriptor tag=\"0x%02x\" data=\"",descriptor_tag); - for (j=0;j<descriptor_length;j++) printf("%02x",buf[i+j]); - printf("\" text=\""); - for (j=0;j<descriptor_length;j++) printf("%c",(isalnum(buf[i+j]) ? buf[i+j] : '.')); - printf("\" />\n"); - i+=descriptor_length; - descriptor_length=0; - break; - } - } - } - } - void dump(char* fname, int len, char* buf) { FILE* f; --- 280,283 ---- *************** *** 699,703 **** info_len=((buf[8]&0x0f)<<8)|buf[9]; i=10; ! parse_descriptors(info_len,&buf[i]); i+=info_len; i+=2; --- 336,340 ---- info_len=((buf[8]&0x0f)<<8)|buf[9]; i=10; ! parse_descriptors(info_len,&buf[i],&transponder,&transponders); i+=info_len; i+=2; *************** *** 710,714 **** info_len=((buf[i]&0x0f)<<8)|buf[i+1]; i+=2; ! parse_descriptors(info_len,&buf[i]); // printf("</transponder>\n"); i+=info_len; --- 347,351 ---- info_len=((buf[i]&0x0f)<<8)|buf[i+1]; i+=2; ! parse_descriptors(info_len,&buf[i],&transponder,&transponders); // printf("</transponder>\n"); i+=info_len; *************** *** 783,787 **** info_len=((buf[10]&0x0f)<<8)|buf[11]; i=12; ! parse_descriptors(info_len,&buf[i]); i+=info_len; while (i < (seclen-4)) { --- 420,424 ---- info_len=((buf[10]&0x0f)<<8)|buf[11]; i=12; ! parse_descriptors(info_len,&buf[i],&transponder,&transponders); i+=info_len; while (i < (seclen-4)) { *************** *** 801,805 **** info_len=((buf[i]&0x0f)<<8)|buf[i+1]; i+=2; ! parse_descriptors(info_len,&buf[i]); i+=info_len; printf("</stream>\n"); --- 438,442 ---- info_len=((buf[i]&0x0f)<<8)|buf[i+1]; i+=2; ! parse_descriptors(info_len,&buf[i],&transponder,&transponders); i+=info_len; printf("</stream>\n"); *************** *** 951,955 **** printf("<service id=\"%d\" ca=\"%d\">\n",service_id,ca); i+=2; ! parse_descriptors(loop_length,&buf[i]); i+=loop_length; scan_pmt(get_pmt_pid(service_id),service_id,(service_id==pnr)); --- 588,592 ---- printf("<service id=\"%d\" ca=\"%d\">\n",service_id,ca); i+=2; ! parse_descriptors(loop_length,&buf[i],&transponder,&transponders); i+=loop_length; scan_pmt(get_pmt_pid(service_id),service_id,(service_id==pnr)); |
From: <linuxstb@us...> - 2004-03-22 21:04:04
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22977 Modified Files: dvbsubs.c Log Message: Bug fix from Pasi Hietamaki Index: dvbsubs.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/dvbsubs.c,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** dvbsubs.c 11 Mar 2004 21:01:40 -0000 1.17 --- dvbsubs.c 22 Mar 2004 20:53:37 -0000 1.18 *************** *** 174,177 **** --- 174,178 ---- bits=0; + pixel_code=0; next_bits=next_nibble(); |
From: <linuxstb@us...> - 2004-03-20 00:39:56
|
Update of /cvsroot/dvbtools/dvbstream In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12523 Modified Files: dvbstream.c tune.c tune.h Log Message: Remove references to fd_sec - it is not used with NEWSTRUCT Index: dvbstream.c =================================================================== RCS file: /cvsroot/dvbtools/dvbstream/dvbstream.c,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** dvbstream.c 19 Mar 2004 09:59:32 -0000 1.18 --- dvbstream.c 19 Mar 2004 16:53:56 -0000 1.19 *************** *** 93,97 **** char pol=0; ! int open_fe(int* fd_frontend,int* fd_sec) { if((*fd_frontend = open(frontenddev[card],O_RDWR | O_NONBLOCK)) < 0){ --- 93,97 ---- char pol=0; ! int open_fe(int* fd_frontend) { if((*fd_frontend = open(frontenddev[card],O_RDWR | O_NONBLOCK)) < 0){ *************** *** 99,103 **** return -1; } - fd_sec=0; return 1; } --- 99,102 ---- *************** *** 164,168 **** unsigned char hi_mappids[8192]; unsigned char lo_mappids[8192]; - int fd_sec; int fd_frontend; int pid,pid2; --- 163,166 ---- *************** *** 313,317 **** srate=atoi(&cmd[i])*1000UL; fprintf(stderr,"Tuning to %ld,%ld,%c\n",freq,srate,pol); ! tune_it(fd_frontend,fd_sec,freq,srate,pol,tone,specInv,diseqc,modulation,HP_CodeRate,TransmissionMode,guardInterval,bandWidth); } } --- 311,315 ---- srate=atoi(&cmd[i])*1000UL; fprintf(stderr,"Tuning to %ld,%ld,%c\n",freq,srate,pol); ! tune_it(fd_frontend,freq,srate,pol,tone,specInv,diseqc,modulation,HP_CodeRate,TransmissionMode,guardInterval,bandWidth); } } *************** *** 715,725 **** if ( (freq>100000000)) { ! if (open_fe(&fd_frontend,0)) { ! i=tune_it(fd_frontend,0,freq,srate,0,tone,specInv,diseqc,modulation,HP_CodeRate,TransmissionMode,guardInterval,bandWidth); } } else if ((freq!=0) && (pol!=0) && (srate!=0)) { ! if (open_fe(&fd_frontend,&fd_sec)) { fprintf(stderr,"Tuning to %ld Hz\n",freq); ! i=tune_it(fd_frontend,fd_sec,freq,srate,pol,tone,specInv,diseqc,modulation,HP_CodeRate,TransmissionMode,guardInterval,bandWidth); } } --- 713,723 ---- if ( (freq>100000000)) { ! if (open_fe(&fd_frontend)) { ! i=tune_it(fd_frontend,freq,srate,0,tone,specInv,diseqc,modulation,HP_CodeRate,TransmissionMode,guardInterval,bandWidth); } } else if ((freq!=0) && (pol!=0) && (srate!=0)) { ! if (open_fe(&fd_frontend)) { fprintf(stderr,"Tuning to %ld Hz\n",freq); ! i=tune_it(fd_frontend,freq,srate,pol,tone,specInv,diseqc,modulation,HP_CodeRate,TransmissionMode,guardInterval,bandWidth); } } *************** *** 903,907 **** close(fd_dvr); close(fd_frontend); - if (fd_sec) close(fd_sec); if (do_analyse) { --- 901,904 ---- Index: tune.c =================================================================== RCS file: /cvsroot/dvbtools/dvbstream/tune.c,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** tune.c 19 Mar 2004 09:59:33 -0000 1.15 --- tune.c 19 Mar 2004 16:53:56 -0000 1.16 *************** *** 175,179 **** } ! int tune_it(int fd_frontend, int fd_sec, unsigned int freq, unsigned int srate, char pol, int tone, fe_spectral_inversion_t specInv, unsigned int diseqc,fe_modulation_t modulation,fe_code_rate_t HP_CodeRate,fe_transmit_mode_t TransmissionMode,fe_guard_interval_t guardInterval, fe_bandwidth_t bandwidth) { int res, hi_lo, dfd; struct dvb_frontend_parameters feparams; --- 175,179 ---- } ! int tune_it(int fd_frontend, unsigned int freq, unsigned int srate, char pol, int tone, fe_spectral_inversion_t specInv, unsigned int diseqc,fe_modulation_t modulation,fe_code_rate_t HP_CodeRate,fe_transmit_mode_t TransmissionMode,fe_guard_interval_t guardInterval, fe_bandwidth_t bandwidth) { int res, hi_lo, dfd; struct dvb_frontend_parameters feparams; Index: tune.h =================================================================== RCS file: /cvsroot/dvbtools/dvbstream/tune.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** tune.h 19 Mar 2004 09:59:33 -0000 1.6 --- tune.h 19 Mar 2004 16:53:56 -0000 1.7 *************** *** 6,10 **** #include "dvb_defaults.h" ! int tune_it(int fd_frontend, int fd_sec, unsigned int freq, unsigned int srate, char pol, int tone, fe_spectral_inversion_t specInv, unsigned int diseqc,fe_modulation_t modulation,fe_code_rate_t HP_CodeRate,fe_transmit_mode_t TransmissionMode,fe_guard_interval_t guardInterval, fe_bandwidth_t bandwidth); #endif --- 6,10 ---- #include "dvb_defaults.h" ! int tune_it(int fd_frontend, unsigned int freq, unsigned int srate, char pol, int tone, fe_spectral_inversion_t specInv, unsigned int diseqc,fe_modulation_t modulation,fe_code_rate_t HP_CodeRate,fe_transmit_mode_t TransmissionMode,fe_guard_interval_t guardInterval, fe_bandwidth_t bandwidth); #endif |
From: <linuxstb@us...> - 2004-03-19 17:08:18
|
Update of /cvsroot/dvbtools/dvbstream In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13411 Modified Files: tune.c Log Message: Remove unused variable "voltage" from tune_it() Index: tune.c =================================================================== RCS file: /cvsroot/dvbtools/dvbstream/tune.c,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** tune.c 19 Mar 2004 16:53:56 -0000 1.16 --- tune.c 19 Mar 2004 16:58:15 -0000 1.17 *************** *** 179,183 **** struct dvb_frontend_parameters feparams; struct dvb_frontend_info fe_info; - fe_sec_voltage_t voltage; if ( (res = ioctl(fd_frontend,FE_GET_INFO, &fe_info) < 0)){ --- 179,182 ---- |
From: <linuxstb@us...> - 2004-03-19 17:05:30
|
Update of /cvsroot/dvbtools/dvbtune In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12881 Modified Files: tune.c Log Message: Remove unused variable "voltage" from tune_it() Index: tune.c =================================================================== RCS file: /cvsroot/dvbtools/dvbtune/tune.c,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** tune.c 19 Mar 2004 16:51:14 -0000 1.23 --- tune.c 19 Mar 2004 16:55:34 -0000 1.24 *************** *** 179,183 **** struct dvb_frontend_parameters feparams; struct dvb_frontend_info fe_info; - fe_sec_voltage_t voltage; if ( (res = ioctl(fd_frontend,FE_GET_INFO, &fe_info) < 0)){ --- 179,182 ---- |
From: <linuxstb@us...> - 2004-03-19 17:01:04
|
Update of /cvsroot/dvbtools/dvbtune In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv12042 Modified Files: dvbtune.c tune.c tune.h Log Message: Remove references to fd_sec - it is not used with NEWSTRUCT Index: dvbtune.c =================================================================== RCS file: /cvsroot/dvbtools/dvbtune/dvbtune.c,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** dvbtune.c 19 Mar 2004 16:49:33 -0000 1.26 --- dvbtune.c 19 Mar 2004 16:51:14 -0000 1.27 *************** *** 1030,1034 **** { int fd_frontend=0; - int fd_sec=0; int fd_dvr=0; int do_info=0; --- 1030,1033 ---- *************** *** 1279,1283 **** set_ttpid(0); ! if (tune_it(fd_frontend,fd_sec,freq,srate,pol,tone,specInv,diseqc,modulation,HP_CodeRate,TransmissionMode,guardInterval,bandWidth) < 0) { return -1; } --- 1278,1282 ---- set_ttpid(0); ! if (tune_it(fd_frontend,freq,srate,pol,tone,specInv,diseqc,modulation,HP_CodeRate,TransmissionMode,guardInterval,bandWidth) < 0) { return -1; } *************** *** 1291,1295 **** free_pat_list(); fprintf(stderr,"Scanning %d%c %d\n",t->freq,t->pol,t->srate); ! tune_it(fd_frontend,fd_sec,t->freq,t->srate,t->pol,tone,specInv,0,modulation,HP_CodeRate,TransmissionMode,guardInterval,bandWidth); printf("<transponder id=\"%d\" onid=\"%d\" freq=\"%05d\" srate=\"%d\" pos=\"%04x\" we_flag=\"%d\" polarity=\"%c\" modulation=\"%d\">\n",t->id,t->onid,t->freq,t->srate,t->pos,t->we_flag,t->pol,t->mod); t->scanned=1; --- 1290,1294 ---- free_pat_list(); fprintf(stderr,"Scanning %d%c %d\n",t->freq,t->pol,t->srate); ! tune_it(fd_frontend,t->freq,t->srate,t->pol,tone,specInv,0,modulation,HP_CodeRate,TransmissionMode,guardInterval,bandWidth); printf("<transponder id=\"%d\" onid=\"%d\" freq=\"%05d\" srate=\"%d\" pos=\"%04x\" we_flag=\"%d\" polarity=\"%c\" modulation=\"%d\">\n",t->id,t->onid,t->freq,t->srate,t->pos,t->we_flag,t->pol,t->mod); t->scanned=1; Index: tune.c =================================================================== RCS file: /cvsroot/dvbtools/dvbtune/tune.c,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** tune.c 19 Mar 2004 16:49:33 -0000 1.22 --- tune.c 19 Mar 2004 16:51:14 -0000 1.23 *************** *** 175,179 **** } ! int tune_it(int fd_frontend, int fd_sec, unsigned int freq, unsigned int srate, char pol, int tone, fe_spectral_inversion_t specInv, unsigned int diseqc,fe_modulation_t modulation,fe_code_rate_t HP_CodeRate,fe_transmit_mode_t TransmissionMode,fe_guard_interval_t guardInterval, fe_bandwidth_t bandwidth) { int res, hi_lo, dfd; struct dvb_frontend_parameters feparams; --- 175,179 ---- } ! int tune_it(int fd_frontend, unsigned int freq, unsigned int srate, char pol, int tone, fe_spectral_inversion_t specInv, unsigned int diseqc,fe_modulation_t modulation,fe_code_rate_t HP_CodeRate,fe_transmit_mode_t TransmissionMode,fe_guard_interval_t guardInterval, fe_bandwidth_t bandwidth) { int res, hi_lo, dfd; struct dvb_frontend_parameters feparams; Index: tune.h =================================================================== RCS file: /cvsroot/dvbtools/dvbtune/tune.h,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** tune.h 19 Mar 2004 16:49:33 -0000 1.7 --- tune.h 19 Mar 2004 16:51:14 -0000 1.8 *************** *** 6,10 **** #include "dvb_defaults.h" ! int tune_it(int fd_frontend, int fd_sec, unsigned int freq, unsigned int srate, char pol, int tone, fe_spectral_inversion_t specInv, unsigned int diseqc,fe_modulation_t modulation,fe_code_rate_t HP_CodeRate,fe_transmit_mode_t TransmissionMode,fe_guard_interval_t guardInterval, fe_bandwidth_t bandwidth); #endif --- 6,10 ---- #include "dvb_defaults.h" ! int tune_it(int fd_frontend, unsigned int freq, unsigned int srate, char pol, int tone, fe_spectral_inversion_t specInv, unsigned int diseqc,fe_modulation_t modulation,fe_code_rate_t HP_CodeRate,fe_transmit_mode_t TransmissionMode,fe_guard_interval_t guardInterval, fe_bandwidth_t bandwidth); #endif |
From: <linuxstb@us...> - 2004-03-19 16:59:23
|
Update of /cvsroot/dvbtools/dvbtune In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11705 Modified Files: Makefile dvbtune.c tune.c tune.h Log Message: Bring dvbtune into line with Nico's dvbstream tuning patch Index: Makefile =================================================================== RCS file: /cvsroot/dvbtools/dvbtune/Makefile,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** Makefile 12 Oct 2002 11:59:31 -0000 1.6 --- Makefile 19 Mar 2004 16:49:32 -0000 1.7 *************** *** 4,19 **** all: dvbtune ! # Delete the following line if you are not using a ! # "NEWSTRUCT" driver. If you are using a "NEWSTRUCT" ! # driver, it must be later than October 10th 2002 ! ! NEWSTRUCT=1 ! ! ifdef NEWSTRUCT ! CFLAGS += -DNEWSTRUCT ! INCS += -I ../DVB/include ! else ! INCS += -I ../DVB/ost/include ! endif ifdef UK --- 4,8 ---- all: dvbtune ! INCS += -I ../DVB/include ifdef UK Index: dvbtune.c =================================================================== RCS file: /cvsroot/dvbtools/dvbtune/dvbtune.c,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** dvbtune.c 1 Mar 2004 20:59:11 -0000 1.25 --- dvbtune.c 19 Mar 2004 16:49:33 -0000 1.26 *************** *** 48,52 **** // DVB includes: - #ifdef NEWSTRUCT #include <linux/dvb/osd.h> #include <linux/dvb/dmx.h> --- 48,51 ---- *************** *** 55,67 **** #include <linux/dvb/audio.h> #include <linux/dvb/net.h> - #else - #include <ost/osd.h> - #include <ost/dmx.h> - #include <ost/sec.h> - #include <ost/frontend.h> - #include <ost/video.h> - #include <ost/audio.h> - #include <ost/net.h> - #endif #include "tune.h" --- 54,57 ---- *************** *** 83,96 **** int tone = -1; - #ifdef NEWSTRUCT char* frontenddev[4]={"/dev/dvb/adapter0/frontend0","/dev/dvb/adapter1/frontend0","/dev/dvb/adapter2/frontend0","/dev/dvb/adapter3/frontend0"}; char* dvrdev[4]={"/dev/dvb/adapter0/dvr0","/dev/dvb/adapter1/dvr0","/dev/dvb/adapter2/dvr0","/dev/dvb/adapter3/dvr0"}; char* demuxdev[4]={"/dev/dvb/adapter0/demux0","/dev/dvb/adapter1/demux0","/dev/dvb/adapter2/demux0","/dev/dvb/adapter3/demux0"}; - #else - char* frontenddev[4]={"/dev/ost/frontend0","/dev/ost/frontend1","/dev/ost/frontend2","/dev/ost/frontend3"}; - char* dvrdev[4]={"/dev/ost/dvr0","/dev/ost/dvr1","/dev/ost/dvr2","/dev/ost/dvr3"}; - char* secdev[4]={"/dev/ost/sec0","/dev/ost/sec1","/dev/ost/sec2","/dev/ost/sec3"}; - char* demuxdev[4]={"/dev/ost/demux0","/dev/ost/demux1","/dev/ost/demux2","/dev/ost/demux3"}; - #endif typedef struct _transponder_t { --- 73,79 ---- *************** *** 276,284 **** pesFilterParamsREC.input = DMX_IN_FRONTEND; pesFilterParamsREC.output = DMX_OUT_TAP; - #ifdef NEWSTRUCT pesFilterParamsREC.pes_type = DMX_PES_OTHER; - #else - pesFilterParamsREC.pesType = DMX_PES_OTHER; - #endif pesFilterParamsREC.flags = DMX_IMMEDIATE_START; if (ioctl(fd, DMX_SET_PES_FILTER, --- 259,263 ---- *************** *** 299,307 **** pesFilterParamsSI.input = DMX_IN_FRONTEND; pesFilterParamsSI.output = DMX_OUT_TS_TAP; - #ifdef NEWSTRUCT pesFilterParamsSI.pes_type = DMX_PES_OTHER; - #else - pesFilterParamsSI.pesType = DMX_PES_OTHER; - #endif pesFilterParamsSI.flags = DMX_IMMEDIATE_START; if (ioctl(fd_demuxsi, DMX_SET_PES_FILTER, --- 278,282 ---- *************** *** 322,330 **** pesFilterParamsTT.input = DMX_IN_FRONTEND; pesFilterParamsTT.output = DMX_OUT_DECODER; - #ifdef NEWSTRUCT pesFilterParamsTT.pes_type = DMX_PES_TELETEXT; - #else - pesFilterParamsTT.pesType = DMX_PES_TELETEXT; - #endif pesFilterParamsTT.flags = DMX_IMMEDIATE_START; if (ioctl(fd_demuxtt, DMX_SET_PES_FILTER, --- 297,301 ---- *************** *** 344,352 **** pesFilterParamsV.input = DMX_IN_FRONTEND; pesFilterParamsV.output = DMX_OUT_DECODER; - #ifdef NEWSTRUCT pesFilterParamsV.pes_type = DMX_PES_VIDEO; - #else - pesFilterParamsV.pesType = DMX_PES_VIDEO; - #endif pesFilterParamsV.flags = DMX_IMMEDIATE_START; if (ioctl(fd_demuxv, DMX_SET_PES_FILTER, --- 315,319 ---- *************** *** 365,373 **** pesFilterParamsA.input = DMX_IN_FRONTEND; pesFilterParamsA.output = DMX_OUT_DECODER; - #ifdef NEWSTRUCT pesFilterParamsA.pes_type = DMX_PES_AUDIO; - #else - pesFilterParamsA.pesType = DMX_PES_AUDIO; - #endif pesFilterParamsA.flags = DMX_IMMEDIATE_START; if (ioctl(fd_demuxa, DMX_SET_PES_FILTER, --- 332,336 ---- *************** *** 402,410 **** pesFilterParams.input = DMX_IN_FRONTEND; pesFilterParams.output = DMX_OUT_TS_TAP; - #ifdef NEWSTRUCT pesFilterParams.pes_type = DMX_PES_OTHER; ! #else ! pesFilterParams.pesType = DMX_PES_OTHER; ! #endif // A HACK TO DECODE STREAMS ON DVB-S CARD WHILST STREAMING // if (pid==255) pesFilterParams.pesType = DMX_PES_VIDEO; --- 365,370 ---- pesFilterParams.input = DMX_IN_FRONTEND; pesFilterParams.output = DMX_OUT_TS_TAP; pesFilterParams.pes_type = DMX_PES_OTHER; ! // A HACK TO DECODE STREAMS ON DVB-S CARD WHILST STREAMING // if (pid==255) pesFilterParams.pesType = DMX_PES_VIDEO; *************** *** 1271,1275 **** } ! if((fd_frontend = open(frontenddev[card],O_RDWR)) < 0){ fprintf(stderr,"frontend: %d",i); perror("FRONTEND DEVICE: "); --- 1231,1235 ---- } ! if((fd_frontend = open(frontenddev[card],O_RDWR|O_NONBLOCK)) < 0){ fprintf(stderr,"frontend: %d",i); perror("FRONTEND DEVICE: "); *************** *** 1277,1290 **** } - #ifndef NEWSTRUCT - /* Only open sec for DVB-S tuning */ - if (freq<100000000) { - if((fd_sec = open(secdev[card],O_RDWR)) < 0) { - fprintf(stderr,"FD %i: ",i); - perror("SEC DEVICE (warning) "); - } - } - #endif - if((fd_demuxrec = open(demuxdev[card],O_RDWR|O_NONBLOCK)) < 0){ fprintf(stderr,"FD %i: ",i); --- 1237,1240 ---- *************** *** 1386,1399 **** netif.if_num = 0; // always choosen the next free number - #ifdef NEWSTRUCT sprintf(devnamen,"/dev/dvb/adapter%d/net0",dev); - #else - sprintf(devnamen,"/dev/ost/net%d",dev); - #endif //printf("Trying to open %s\n",devnamen); if((fdn = open(devnamen,O_RDWR|O_NONBLOCK)) < 0) { fprintf(stderr, "Failed to open DVB NET DEVICE"); close(fd_frontend); - if (fd_sec) close(fd_sec); } else { // Add the network interface --- 1336,1344 ---- *************** *** 1409,1413 **** fe_status_t festatus; ! if((fd_frontend = open(frontenddev[card],O_RDONLY)) < 0){ fprintf(stderr,"frontend: %d",i); perror("FRONTEND DEVICE: "); --- 1354,1358 ---- fe_status_t festatus; ! if((fd_frontend = open(frontenddev[card],O_RDONLY|O_NONBLOCK)) < 0){ fprintf(stderr,"frontend: %d",i); perror("FRONTEND DEVICE: "); *************** *** 1424,1431 **** ioctl(fd_frontend,FE_READ_STATUS,&festatus); fprintf(stderr,"Signal=%d, Verror=%d, SNR=%ddB, BlockErrors=%d, (", strength, ber, snr, uncorr); - #ifndef NEWSTRUCT - if (festatus & FE_HAS_POWER) fprintf(stderr,"P|"); - if (festatus & FE_SPECTRUM_INV) fprintf(stderr,"I|"); - #endif if (festatus & FE_HAS_SIGNAL) fprintf(stderr,"S|"); if (festatus & FE_HAS_LOCK) fprintf(stderr,"L|"); --- 1369,1372 ---- *************** *** 1440,1446 **** close(fd_frontend); - if (fd_sec) close(fd_sec); return(0); } - - --- 1381,1384 ---- Index: tune.c =================================================================== RCS file: /cvsroot/dvbtools/dvbtune/tune.c,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** tune.c 1 Mar 2004 23:45:21 -0000 1.21 --- tune.c 19 Mar 2004 16:49:33 -0000 1.22 *************** *** 30,165 **** #include <errno.h> - #ifdef NEWSTRUCT #include <linux/dvb/dmx.h> #include <linux/dvb/frontend.h> - #else - #include <ost/dmx.h> - #include <ost/sec.h> - #include <ost/frontend.h> - #endif #include "tune.h" - #ifndef NEWSTRUCT - int OSTSelftest(int fd) - { - int ans; - - if ( (ans = ioctl(fd,FE_SELFTEST,0) < 0)){ - perror("FE SELF TEST: "); - return -1; - } - - return 0; - } - - int OSTSetPowerState(int fd, uint32_t state) - { - int ans; - - if ( (ans = ioctl(fd,FE_SET_POWER_STATE,state) < 0)){ - perror("OST SET POWER STATE: "); - return -1; - } - - return 0; - } - - int OSTGetPowerState(int fd, uint32_t *state) - { - int ans; - - if ( (ans = ioctl(fd,FE_GET_POWER_STATE,state) < 0)){ - perror("OST GET POWER STATE: "); - return -1; - } - - switch(*state){ - case FE_POWER_ON: - fprintf(stderr,"POWER ON (%d)\n",*state); - break; - case FE_POWER_STANDBY: - fprintf(stderr,"POWER STANDBY (%d)\n",*state); - break; - case FE_POWER_SUSPEND: - fprintf(stderr,"POWER SUSPEND (%d)\n",*state); - break; - case FE_POWER_OFF: - fprintf(stderr,"POWER OFF (%d)\n",*state); - break; - default: - fprintf(stderr,"unknown (%d)\n",*state); - break; - } - - return 0; - } - - int SecGetStatus (int fd, struct secStatus *state) - { - int ans; - - if ( (ans = ioctl(fd,SEC_GET_STATUS, state) < 0)){ - perror("SEC GET STATUS: "); - return -1; - } - - switch (state->busMode){ - case SEC_BUS_IDLE: - fprintf(stderr,"SEC BUS MODE: IDLE (%d)\n",state->busMode); - break; - case SEC_BUS_BUSY: - fprintf(stderr,"SEC BUS MODE: BUSY (%d)\n",state->busMode); - break; - case SEC_BUS_OFF: - fprintf(stderr,"SEC BUS MODE: OFF (%d)\n",state->busMode); - break; - case SEC_BUS_OVERLOAD: - fprintf(stderr,"SEC BUS MODE: OVERLOAD (%d)\n",state->busMode); - break; - default: - fprintf(stderr,"SEC BUS MODE: unknown (%d)\n",state->busMode); - break; - } - - switch (state->selVolt){ - case SEC_VOLTAGE_OFF: - fprintf(stderr,"SEC VOLTAGE: OFF (%d)\n",state->selVolt); - break; - case SEC_VOLTAGE_LT: - fprintf(stderr,"SEC VOLTAGE: LT (%d)\n",state->selVolt); - break; - case SEC_VOLTAGE_13: - fprintf(stderr,"SEC VOLTAGE: 13 (%d)\n",state->selVolt); - break; - case SEC_VOLTAGE_13_5: - fprintf(stderr,"SEC VOLTAGE: 13.5 (%d)\n",state->selVolt); - break; - case SEC_VOLTAGE_18: - fprintf(stderr,"SEC VOLTAGE: 18 (%d)\n",state->selVolt); - break; - case SEC_VOLTAGE_18_5: - fprintf(stderr,"SEC VOLTAGE: 18.5 (%d)\n",state->selVolt); - break; - default: - fprintf(stderr,"SEC VOLTAGE: unknown (%d)\n",state->selVolt); - break; - } - - fprintf(stderr,"SEC CONT TONE: %s\n", (state->contTone == SEC_TONE_ON ? "ON" : "OFF")); - return 0; - } - #endif void print_status(FILE* fd,fe_status_t festatus) { fprintf(fd,"FE_STATUS:"); if (festatus & FE_HAS_SIGNAL) fprintf(fd," FE_HAS_SIGNAL"); - #ifdef NEWSTRUCT if (festatus & FE_TIMEDOUT) fprintf(fd," FE_TIMEDOUT"); - #else - if (festatus & FE_HAS_POWER) fprintf(fd," FE_HAS_POWER"); - if (festatus & FE_SPECTRUM_INV) fprintf(fd," FE_SPECTRUM_INV"); - if (festatus & FE_TUNER_HAS_LOCK) fprintf(fd," FE_TUNER_HAS_LOCK"); - #endif if (festatus & FE_HAS_LOCK) fprintf(fd," FE_HAS_LOCK"); if (festatus & FE_HAS_CARRIER) fprintf(fd," FE_HAS_CARRIER"); --- 30,43 ---- *************** *** 169,173 **** } ! #ifdef NEWSTRUCT struct diseqc_cmd { struct dvb_diseqc_master_cmd cmd; --- 47,51 ---- } ! struct diseqc_cmd { struct dvb_diseqc_master_cmd cmd; *************** *** 175,202 **** }; ! void diseqc_send_msg(int fd, fe_sec_voltage_t v, struct diseqc_cmd *cmd, fe_sec_tone_mode_t t, fe_sec_mini_cmd_t b) { ! ioctl(fd, FE_SET_TONE, SEC_TONE_OFF); ! ioctl(fd, FE_SET_VOLTAGE, v); usleep(15 * 1000); ! ioctl(fd, FE_DISEQC_SEND_MASTER_CMD, &cmd->cmd); usleep(cmd->wait * 1000); usleep(15 * 1000); ! ioctl(fd, FE_DISEQC_SEND_BURST, b); usleep(15 * 1000); ! ioctl(fd, FE_SET_TONE, t); ! } ! ! /* digital satellite equipment control, * specification is available from http://www.eutelsat.com/ */ ! static int do_diseqc(int secfd, int sat_no, int pol, int hi_lo) { ! struct diseqc_cmd cmd = ! { {{0xe0, 0x10, 0x38, 0xf0, 0x00, 0x00}, 4}, 0 }; /* param: high nibble: reset bits, low nibble set bits, --- 53,84 ---- }; ! static int diseqc_send_msg(int fd, fe_sec_voltage_t v, struct diseqc_cmd *cmd, fe_sec_tone_mode_t t, fe_sec_mini_cmd_t b) { ! if(ioctl(fd, FE_SET_TONE, SEC_TONE_OFF) < 0) ! return -1; ! if(ioctl(fd, FE_SET_VOLTAGE, v) < 0) ! return -1; usleep(15 * 1000); ! if(ioctl(fd, FE_DISEQC_SEND_MASTER_CMD, &cmd->cmd) < 0) ! return -1; usleep(cmd->wait * 1000); usleep(15 * 1000); ! if(ioctl(fd, FE_DISEQC_SEND_BURST, b) < 0) ! return -1; usleep(15 * 1000); ! if(ioctl(fd, FE_SET_TONE, t) < 0) ! return -1; + return 0; + } /* digital satellite equipment control, * specification is available from http://www.eutelsat.com/ */ ! ! static int do_diseqc(int secfd, int sat_no, int polv, int hi_lo) { ! struct diseqc_cmd cmd = { {{0xe0, 0x10, 0x38, 0xf0, 0x00, 0x00}, 4}, 0 }; /* param: high nibble: reset bits, low nibble set bits, *************** *** 204,217 **** */ cmd.cmd.msg[3] = ! 0xf0 | (((sat_no * 4) & 0x0f) | (hi_lo ? 1 : 0) | (pol ? 0 : 2)); ! diseqc_send_msg(secfd, pol, ! &cmd, hi_lo, (sat_no / 4) % 2 ? SEC_MINI_B : SEC_MINI_A); - - return 1; } ! int check_status(int fd_frontend,struct dvb_frontend_info fe_info, struct dvb_frontend_parameters* feparams,int tone) { int32_t strength; fe_status_t festatus; --- 86,97 ---- */ cmd.cmd.msg[3] = ! 0xf0 | (((sat_no * 4) & 0x0f) | (hi_lo ? 1 : 0) | (polv ? 0 : 2)); ! return diseqc_send_msg(secfd, polv ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18, ! &cmd, hi_lo ? SEC_TONE_ON : SEC_TONE_OFF, (sat_no / 4) % 2 ? SEC_MINI_B : SEC_MINI_A); } ! int check_status(int fd_frontend,int type, struct dvb_frontend_parameters* feparams,int hi_lo) { int32_t strength; fe_status_t festatus; *************** *** 220,223 **** --- 100,108 ---- int status; + while(1) { + if (ioctl(fd_frontend, FE_GET_EVENT, &event) < 0) //EMPTY THE EVENT QUEUE + break; + } + if (ioctl(fd_frontend,FE_SET_FRONTEND,feparams) < 0) { perror("ERROR tuning channel\n"); *************** *** 226,236 **** pfd[0].fd = fd_frontend; ! pfd[0].events = POLLIN; event.status=0; while (((event.status & FE_TIMEDOUT)==0) && ((event.status & FE_HAS_LOCK)==0)) { fprintf(stderr,"polling....\n"); ! if (poll(pfd,1,10000)){ ! if (pfd[0].revents & POLLIN){ fprintf(stderr,"Getting frontend event\n"); if ((status = ioctl(fd_frontend, FE_GET_EVENT, &event)) < 0){ --- 111,121 ---- pfd[0].fd = fd_frontend; ! pfd[0].events = POLLPRI; event.status=0; while (((event.status & FE_TIMEDOUT)==0) && ((event.status & FE_HAS_LOCK)==0)) { fprintf(stderr,"polling....\n"); ! if (poll(pfd,1,10000) > 0){ ! if (pfd[0].revents & POLLPRI){ fprintf(stderr,"Getting frontend event\n"); if ((status = ioctl(fd_frontend, FE_GET_EVENT, &event)) < 0){ *************** *** 249,258 **** if (event.status & FE_HAS_LOCK) { ! switch(fe_info.type) { case FE_OFDM: fprintf(stderr,"Event: Frequency: %d\n",event.parameters.frequency); break; case FE_QPSK: ! fprintf(stderr,"Event: Frequency: %d\n",(unsigned int)((event.parameters.frequency)+(tone==SEC_TONE_OFF ? LOF1 : LOF2))); fprintf(stderr," SymbolRate: %d\n",event.parameters.u.qpsk.symbol_rate); fprintf(stderr," FEC_inner: %d\n",event.parameters.u.qpsk.fec_inner); --- 134,143 ---- if (event.status & FE_HAS_LOCK) { ! switch(type) { case FE_OFDM: fprintf(stderr,"Event: Frequency: %d\n",event.parameters.frequency); break; case FE_QPSK: ! fprintf(stderr,"Event: Frequency: %d\n",(unsigned int)((event.parameters.frequency)+(hi_lo ? LOF2 : LOF1))); fprintf(stderr," SymbolRate: %d\n",event.parameters.u.qpsk.symbol_rate); fprintf(stderr," FEC_inner: %d\n",event.parameters.u.qpsk.fec_inner); *************** *** 269,285 **** strength=0; ! ioctl(fd_frontend,FE_READ_BER,&strength); fprintf(stderr,"Bit error rate: %d\n",strength); strength=0; ! ioctl(fd_frontend,FE_READ_SIGNAL_STRENGTH,&strength); fprintf(stderr,"Signal strength: %d\n",strength); strength=0; ! ioctl(fd_frontend,FE_READ_SNR,&strength); fprintf(stderr,"SNR: %d\n",strength); festatus=0; ! ioctl(fd_frontend,FE_READ_STATUS,&festatus); print_status(stderr,festatus); } else { --- 154,170 ---- strength=0; ! if(ioctl(fd_frontend,FE_READ_BER,&strength) >= 0) fprintf(stderr,"Bit error rate: %d\n",strength); strength=0; ! if(ioctl(fd_frontend,FE_READ_SIGNAL_STRENGTH,&strength) >= 0) fprintf(stderr,"Signal strength: %d\n",strength); strength=0; ! if(ioctl(fd_frontend,FE_READ_SNR,&strength) >= 0) fprintf(stderr,"SNR: %d\n",strength); festatus=0; ! if(ioctl(fd_frontend,FE_READ_STATUS,&festatus) >= 0) print_status(stderr,festatus); } else { *************** *** 289,426 **** return 0; } - #else - int check_status(int fd_frontend,FrontendInfo fe_info, FrontendParameters* feparams,int tone) { - int i,res; - int32_t strength; - fe_status_t festatus; - FrontendEvent event; - struct pollfd pfd[1]; - - i = 0; res = -1; - while ((i < 3) && (res < 0)) { - if (ioctl(fd_frontend,FE_SET_FRONTEND,feparams) < 0) { - perror("ERROR tuning channel\n"); - return -1; - } - - pfd[0].fd = fd_frontend; - pfd[0].events = POLLIN; - - if (poll(pfd,1,10000)){ - if (pfd[0].revents & POLLIN){ - fprintf(stderr,"Getting frontend event\n"); - if ( ioctl(fd_frontend, FE_GET_EVENT, &event) < 0) { - perror("FE_GET_EVENT"); - return -1; - } - fprintf(stderr,"Received "); - switch(event.type){ - case FE_UNEXPECTED_EV: - fprintf(stderr,"unexpected event\n"); - res = -1; - break; - case FE_FAILURE_EV: - fprintf(stderr,"failure event\n"); - res = -1; - break; - case FE_COMPLETION_EV: - fprintf(stderr,"completion event\n"); - res = 0; - break; - } - } - i++; - } - } - - if (res > 0) - switch (event.type) { - case FE_UNEXPECTED_EV: fprintf(stderr,"FE_UNEXPECTED_EV\n"); - break; - case FE_COMPLETION_EV: fprintf(stderr,"FE_COMPLETION_EV\n"); - break; - case FE_FAILURE_EV: fprintf(stderr,"FE_FAILURE_EV\n"); - break; - } - - if (event.type == FE_COMPLETION_EV) { - switch(fe_info.type) { - case FE_OFDM: - fprintf(stderr,"Event: Frequency: %d\n",event.u.completionEvent.Frequency); - break; - case FE_QPSK: - fprintf(stderr,"Event: Frequency: %d\n",(unsigned int)((event.u.completionEvent.Frequency)+(tone==SEC_TONE_OFF ? LOF1 : LOF2))); - fprintf(stderr," SymbolRate: %d\n",event.u.completionEvent.u.qpsk.SymbolRate); - fprintf(stderr," FEC_inner: %d\n",event.u.completionEvent.u.qpsk.FEC_inner); - fprintf(stderr,"\n"); - break; - case FE_QAM: - fprintf(stderr,"Event: Frequency: %d\n",event.u.completionEvent.Frequency); - fprintf(stderr," SymbolRate: %d\n",event.u.completionEvent.u.qpsk.SymbolRate); - fprintf(stderr," FEC_inner: %d\n",event.u.completionEvent.u.qpsk.FEC_inner); - break; - default: - break; - } - - strength=0; - ioctl(fd_frontend,FE_READ_BER,&strength); - fprintf(stderr,"Bit error rate: %d\n",strength); - - strength=0; - ioctl(fd_frontend,FE_READ_SIGNAL_STRENGTH,&strength); - fprintf(stderr,"Signal strength: %d\n",strength); - - strength=0; - ioctl(fd_frontend,FE_READ_SNR,&strength); - fprintf(stderr,"SNR: %d\n",strength); - - festatus=0; - ioctl(fd_frontend,FE_READ_STATUS,&festatus); - - fprintf(stderr,"FE_STATUS:"); - if (festatus & FE_HAS_POWER) fprintf(stderr," FE_HAS_POWER"); - if (festatus & FE_HAS_SIGNAL) fprintf(stderr," FE_HAS_SIGNAL"); - if (festatus & FE_SPECTRUM_INV) fprintf(stderr," FE_SPECTRUM_INV"); - if (festatus & FE_HAS_LOCK) fprintf(stderr," FE_HAS_LOCK"); - if (festatus & FE_HAS_CARRIER) fprintf(stderr," FE_HAS_CARRIER"); - if (festatus & FE_HAS_VITERBI) fprintf(stderr," FE_HAS_VITERBI"); - if (festatus & FE_HAS_SYNC) fprintf(stderr," FE_HAS_SYNC"); - if (festatus & FE_TUNER_HAS_LOCK) fprintf(stderr," FE_TUNER_HAS_LOCK"); - fprintf(stderr,"\n"); - } else { - fprintf(stderr,"Not able to lock to the signal on the given frequency\n"); - return -1; - } - return 0; - } - #endif int tune_it(int fd_frontend, int fd_sec, unsigned int freq, unsigned int srate, char pol, int tone, fe_spectral_inversion_t specInv, unsigned int diseqc,fe_modulation_t modulation,fe_code_rate_t HP_CodeRate,fe_transmit_mode_t TransmissionMode,fe_guard_interval_t guardInterval, fe_bandwidth_t bandwidth) { ! int res; ! #ifdef NEWSTRUCT struct dvb_frontend_parameters feparams; struct dvb_frontend_info fe_info; fe_sec_voltage_t voltage; - #else - FrontendParameters feparams; - FrontendInfo fe_info; - secVoltage voltage; - struct secStatus sec_state; - #endif - /* discard stale frontend events */ - /* - pfd[0].fd = fd_frontend; - pfd[0].events = POLLIN; - - if (poll(pfd,1,500)){ - if (pfd[0].revents & POLLIN){ - while (1) { - if (ioctl (fd_frontend, FE_GET_EVENT, &event) == -1) { break; } - } - } - } - */ if ( (res = ioctl(fd_frontend,FE_GET_INFO, &fe_info) < 0)){ perror("FE_GET_INFO: "); --- 174,184 ---- return 0; } int tune_it(int fd_frontend, int fd_sec, unsigned int freq, unsigned int srate, char pol, int tone, fe_spectral_inversion_t specInv, unsigned int diseqc,fe_modulation_t modulation,fe_code_rate_t HP_CodeRate,fe_transmit_mode_t TransmissionMode,fe_guard_interval_t guardInterval, fe_bandwidth_t bandwidth) { ! int res, hi_lo, dfd; struct dvb_frontend_parameters feparams; struct dvb_frontend_info fe_info; fe_sec_voltage_t voltage; if ( (res = ioctl(fd_frontend,FE_GET_INFO, &fe_info) < 0)){ perror("FE_GET_INFO: "); *************** *** 428,442 **** } - // OSTSelftest(fd_frontend); - // OSTSetPowerState(fd_frontend, FE_POWER_ON); - // OSTGetPowerState(fd_frontend, &festatus); - - #ifdef NEWSTRUCT fprintf(stderr,"Using DVB card \"%s\"\n",fe_info.name); - #endif switch(fe_info.type) { case FE_OFDM: - #ifdef NEWSTRUCT if (freq < 1000000) freq*=1000UL; feparams.frequency=freq; --- 186,193 ---- *************** *** 449,572 **** feparams.u.ofdm.guard_interval=guardInterval; feparams.u.ofdm.hierarchy_information=HIERARCHY_DEFAULT; ! #else ! if (freq < 1000000) freq*=1000UL; ! feparams.Frequency=freq; ! feparams.Inversion=INVERSION_OFF; ! feparams.u.ofdm.bandWidth=bandwidth; ! feparams.u.ofdm.HP_CodeRate=HP_CodeRate; ! feparams.u.ofdm.LP_CodeRate=LP_CODERATE_DEFAULT; ! feparams.u.ofdm.Constellation=modulation; ! feparams.u.ofdm.TransmissionMode=TransmissionMode; ! feparams.u.ofdm.guardInterval=guardInterval; ! feparams.u.ofdm.HierarchyInformation=HIERARCHY_DEFAULT; ! #endif ! fprintf(stderr,"tuning DVB-T (%s) to %d Hz\n",DVB_T_LOCATION,freq); break; case FE_QPSK: ! #ifdef NEWSTRUCT ! fprintf(stderr,"tuning DVB-S to L-Band:%d, Pol:%c Srate=%d, 22kHz=%s\n",feparams.frequency,pol,srate,tone == SEC_TONE_ON ? "on" : "off"); ! #else ! fprintf(stderr,"tuning DVB-S to L-Band:%d, Pol:%c Srate=%d, 22kHz=%s\n",feparams.Frequency,pol,srate,tone == SEC_TONE_ON ? "on" : "off"); ! #endif ! if ((pol=='h') || (pol=='H')) { ! voltage = SEC_VOLTAGE_18; ! } else { ! voltage = SEC_VOLTAGE_13; ! } ! #ifdef NEWSTRUCT ! if (diseqc==0) if (ioctl(fd_frontend,FE_SET_VOLTAGE,voltage) < 0) { ! #else ! if (ioctl(fd_sec,SEC_SET_VOLTAGE,voltage) < 0) { ! #endif ! perror("ERROR setting voltage\n"); ! } ! ! if (freq > 2200000) { ! // this must be an absolute frequency if (freq < SLOF) { - #ifdef NEWSTRUCT feparams.frequency=(freq-LOF1); ! #else ! feparams.Frequency=(freq-LOF1); ! #endif ! if (tone < 0) tone = SEC_TONE_OFF; } else { - #ifdef NEWSTRUCT feparams.frequency=(freq-LOF2); ! #else ! feparams.Frequency=(freq-LOF2); ! #endif ! if (tone < 0) tone = SEC_TONE_ON; ! } ! } else { ! // this is an L-Band frequency ! #ifdef NEWSTRUCT ! feparams.frequency=freq; ! #else ! feparams.Frequency=freq; ! #endif } ! #ifdef NEWSTRUCT feparams.inversion=specInv; feparams.u.qpsk.symbol_rate=srate; feparams.u.qpsk.fec_inner=FEC_AUTO; ! #else ! feparams.Inversion=specInv; ! feparams.u.qpsk.SymbolRate=srate; ! feparams.u.qpsk.FEC_inner=FEC_AUTO; ! #endif ! ! #ifdef NEWSTRUCT ! if (diseqc==0) { ! if (ioctl(fd_frontend,FE_SET_TONE,tone) < 0) { ! perror("ERROR setting tone\n"); ! } ! } ! #else ! if (ioctl(fd_sec,SEC_SET_TONE,tone) < 0) { ! perror("ERROR setting tone\n"); ! } ! #endif ! ! #ifdef NEWSTRUCT ! if (diseqc > 0) { ! do_diseqc(fd_frontend, diseqc-1,voltage,tone); ! sleep(1); ! } ! #else ! if (diseqc > 0) { ! struct secCommand scmd; ! struct secCmdSequence scmds; ! ! scmds.continuousTone = tone; ! scmds.voltage = voltage; ! /* ! scmds.miniCommand = toneBurst ? SEC_MINI_B : SEC_MINI_A; ! */ ! scmds.miniCommand = SEC_MINI_NONE; ! ! scmd.type = 0; ! scmds.numCommands = 1; ! scmds.commands = &scmd; ! ! scmd.u.diseqc.addr = 0x10; ! scmd.u.diseqc.cmd = 0x38; ! scmd.u.diseqc.numParams = 1; ! scmd.u.diseqc.params[0] = 0xf0 | ! (((diseqc - 1) << 2) & 0x0c) | ! (voltage==SEC_VOLTAGE_18 ? 0x02 : 0) | ! (tone==SEC_TONE_ON ? 0x01 : 0); ! if (ioctl(fd_sec,SEC_SEND_SEQUENCE,&scmds) < 0) { ! perror("Error sending DisEqC"); return -1; } - } - #endif break; case FE_QAM: fprintf(stderr,"tuning DVB-C to %d, srate=%d\n",freq,srate); - #ifdef NEWSTRUCT feparams.frequency=freq; feparams.inversion=INVERSION_OFF; --- 200,230 ---- feparams.u.ofdm.guard_interval=guardInterval; feparams.u.ofdm.hierarchy_information=HIERARCHY_DEFAULT; ! fprintf(stderr,"tuning DVB-T (%s) to %d Hz, Bandwidth: %d\n",DVB_T_LOCATION,freq, bandwidth); break; case FE_QPSK: ! pol = toupper(pol); if (freq < SLOF) { feparams.frequency=(freq-LOF1); ! hi_lo = 0; } else { feparams.frequency=(freq-LOF2); ! hi_lo = 1; } ! fprintf(stderr,"tuning DVB-S to Freq: %u, Pol:%c Srate=%d, 22kHz tone=%s, LNB: %d\n",feparams.frequency,pol,srate,tone == SEC_TONE_ON ? "on" : "off", diseqc); feparams.inversion=specInv; feparams.u.qpsk.symbol_rate=srate; feparams.u.qpsk.fec_inner=FEC_AUTO; ! dfd = fd_frontend; ! if(do_diseqc(dfd, diseqc, (pol == 'V' ? 1 : 0), hi_lo) == 0) ! fprintf(stderr, "DISEQC SETTING SUCCEDED\n"); ! else { ! fprintf(stderr, "DISEQC SETTING FAILED\n"); return -1; } break; case FE_QAM: fprintf(stderr,"tuning DVB-C to %d, srate=%d\n",freq,srate); feparams.frequency=freq; feparams.inversion=INVERSION_OFF; *************** *** 574,584 **** feparams.u.qam.fec_inner = FEC_AUTO; feparams.u.qam.modulation = modulation; - #else - feparams.Frequency=freq; - feparams.Inversion=INVERSION_OFF; - feparams.u.qam.SymbolRate = srate; - feparams.u.qam.FEC_inner = FEC_AUTO; - feparams.u.qam.QAM = modulation; - #endif break; default: --- 232,235 ---- *************** *** 588,595 **** usleep(100000); ! #ifndef NEWSTRUCT ! if (fd_sec) SecGetStatus(fd_sec, &sec_state); ! #endif ! ! return(check_status(fd_frontend,fe_info,&feparams,tone)); } --- 239,242 ---- usleep(100000); ! return(check_status(fd_frontend,fe_info.type,&feparams,hi_lo)); } Index: tune.h =================================================================== RCS file: /cvsroot/dvbtools/dvbtune/tune.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** tune.h 13 Oct 2002 18:46:29 -0000 1.6 --- tune.h 19 Mar 2004 16:49:33 -0000 1.7 *************** *** 2,25 **** #define _TUNE_H ! #ifdef NEWSTRUCT ! #include <linux/dvb/frontend.h> ! #else ! ! // The following defines make the "OLDSTRUCT" driver more compatible with NEWSTRUCT. ! ! #include <ost/frontend.h> ! ! #define fe_status_t FrontendStatus ! #define fe_spectral_inversion_t SpectralInversion ! #define fe_modulation_t Modulation ! #define fe_code_rate_t CodeRate ! #define fe_transmit_mode_t TransmitMode ! #define fe_guard_interval_t GuardInterval ! #define fe_bandwidth_t BandWidth ! #define fe_sec_voltage_t SecVoltage ! #define dmx_pes_filter_params dmxPesFilterParams ! #define dmx_sct_filter_params dmxSctFilterParams ! #define dmx_pes_type_t dmxPesType_t ! #endif #include "dvb_defaults.h" --- 2,6 ---- #define _TUNE_H ! #include <linux/dvb/frontend.h> #include "dvb_defaults.h" |
From: <linuxstb@us...> - 2004-03-19 10:09:25
|
Update of /cvsroot/dvbtools/dvbstream In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16735 Modified Files: Makefile dvbstream.c rtpfeed.c tune.c tune.h Log Message: Major update from Nico - remove support for "OLDSTRUCT" drivers and clean up the tuning code Index: Makefile =================================================================== RCS file: /cvsroot/dvbtools/dvbstream/Makefile,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** Makefile 13 Oct 2002 18:39:53 -0000 1.5 --- Makefile 19 Mar 2004 09:59:32 -0000 1.6 *************** *** 1,7 **** - # Delete the following line if you are not using a - # "NEWSTRUCT" driver. If you are using a "NEWSTRUCT" - # driver, it must be later than October 10th 2002 - NEWSTRUCT=1 CC=gcc --- 1,3 ---- *************** *** 9,18 **** OBJS=dvbstream dumprtp ts_filter rtpfeed rtp.o ! ifdef NEWSTRUCT ! CFLAGS += -DNEWSTRUCT ! INCS=-I ../DVB/include ! else ! INCS=-I ../DVB/ost/include ! endif ifdef UK --- 5,9 ---- OBJS=dvbstream dumprtp ts_filter rtpfeed rtp.o ! INCS=-I ../DVB/include ifdef UK Index: dvbstream.c =================================================================== RCS file: /cvsroot/dvbtools/dvbstream/dvbstream.c,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** dvbstream.c 1 Mar 2004 21:13:58 -0000 1.17 --- dvbstream.c 19 Mar 2004 09:59:32 -0000 1.18 *************** *** 44,55 **** // DVB includes: - #ifdef NEWSTRUCT #include <linux/dvb/dmx.h> #include <linux/dvb/frontend.h> - #else - #include <ost/dmx.h> - #include <ost/sec.h> - #include <ost/frontend.h> - #endif #include "rtp.h" --- 44,49 ---- *************** *** 81,94 **** - see http://www.cadsoft.de/people/kls/vdr/index.htm */ - #ifdef NEWSTRUCT char* frontenddev[4]={"/dev/dvb/adapter0/frontend0","/dev/dvb/adapter1/frontend0","/dev/dvb/adapter2/frontend0","/dev/dvb/adapter3/frontend0"}; char* dvrdev[4]={"/dev/dvb/adapter0/dvr0","/dev/dvb/adapter1/dvr0","/dev/dvb/adapter2/dvr0","/dev/dvb/adapter3/dvr0"}; char* demuxdev[4]={"/dev/dvb/adapter0/demux0","/dev/dvb/adapter1/demux0","/dev/dvb/adapter2/demux0","/dev/dvb/adapter3/demux0"}; - #else - char* frontenddev[4]={"/dev/ost/frontend0","/dev/ost/frontend1","/dev/ost/frontend2","/dev/ost/frontend3"}; - char* dvrdev[4]={"/dev/ost/dvr0","/dev/ost/dvr1","/dev/ost/dvr2","/dev/ost/dvr3"}; - char* secdev[4]={"/dev/ost/sec0","/dev/ost/sec1","/dev/ost/sec2","/dev/ost/sec3"}; - char* demuxdev[4]={"/dev/ost/demux0","/dev/ost/demux1","/dev/ost/demux2","/dev/ost/demux3"}; - #endif int card=0; --- 75,81 ---- *************** *** 108,125 **** int open_fe(int* fd_frontend,int* fd_sec) { ! if((*fd_frontend = open(frontenddev[card],O_RDWR)) < 0){ perror("FRONTEND DEVICE: "); return -1; } - #ifdef NEWSTRUCT fd_sec=0; - #else - if (fd_sec!=0) { - if((*fd_sec = open(secdev[card],O_RDWR)) < 0){ - perror("SEC DEVICE: "); - return -1; - } - } - #endif return 1; } --- 95,103 ---- int open_fe(int* fd_frontend,int* fd_sec) { ! if((*fd_frontend = open(frontenddev[card],O_RDWR | O_NONBLOCK)) < 0){ perror("FRONTEND DEVICE: "); return -1; } fd_sec=0; return 1; } *************** *** 144,153 **** } ! // There seems to be a limit of 8 simultaneous filters in the driver ! #ifdef NEWSTRUCT ! #define MAX_CHANNELS 16 ! #else ! #define MAX_CHANNELS 8 ! #endif --- 122,127 ---- } ! // There seems to be a limit of 16 simultaneous filters in the driver ! #define MAX_CHANNELS 16 *************** *** 161,169 **** pesFilterParams.input = DMX_IN_FRONTEND; pesFilterParams.output = DMX_OUT_TS_TAP; - #ifdef NEWSTRUCT pesFilterParams.pes_type = pestype; - #else - pesFilterParams.pesType = pestype; - #endif pesFilterParams.flags = DMX_IMMEDIATE_START; --- 135,139 ---- *************** *** 557,561 **** i++; diseqc=atoi(argv[i]); ! if(diseqc < 0 || diseqc > 4) diseqc = 0; } else if (strcmp(argv[i],"-I")==0) { i++; --- 527,532 ---- i++; diseqc=atoi(argv[i]); ! if(diseqc < 1 || diseqc > 4) diseqc = 1; ! diseqc--; } else if (strcmp(argv[i],"-I")==0) { i++; Index: rtpfeed.c =================================================================== RCS file: /cvsroot/dvbtools/dvbstream/rtpfeed.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** rtpfeed.c 13 Oct 2002 18:39:53 -0000 1.3 --- rtpfeed.c 19 Mar 2004 09:59:33 -0000 1.4 *************** *** 40,51 **** // DVB includes: - #ifdef NEWSTRUCT #include <linux/dvb/dmx.h> #include <linux/dvb/frontend.h> - #else - #include <ost/dmx.h> - #include <ost/frontend.h> - #define dmx_pes_filter_params dmxPesFilterParams - #endif --- 40,45 ---- *************** *** 75,85 **** pesFilterParams.input = DMX_IN_DVR; pesFilterParams.output = DMX_OUT_DECODER; - #ifdef NEWSTRUCT if (type==1) pesFilterParams.pes_type = DMX_PES_VIDEO; if (type==2) pesFilterParams.pes_type = DMX_PES_AUDIO; - #else - if (type==1) pesFilterParams.pesType = DMX_PES_VIDEO; - if (type==2) pesFilterParams.pesType = DMX_PES_AUDIO; - #endif pesFilterParams.flags = DMX_IMMEDIATE_START; --- 69,74 ---- Index: tune.c =================================================================== RCS file: /cvsroot/dvbtools/dvbstream/tune.c,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** tune.c 1 Mar 2004 23:45:46 -0000 1.14 --- tune.c 19 Mar 2004 09:59:33 -0000 1.15 *************** *** 30,165 **** #include <errno.h> - #ifdef NEWSTRUCT #include <linux/dvb/dmx.h> #include <linux/dvb/frontend.h> - #else - #include <ost/dmx.h> - #include <ost/sec.h> - #include <ost/frontend.h> - #endif #include "tune.h" - #ifndef NEWSTRUCT - int OSTSelftest(int fd) - { - int ans; - - if ( (ans = ioctl(fd,FE_SELFTEST,0) < 0)){ - perror("FE SELF TEST: "); - return -1; - } - - return 0; - } - - int OSTSetPowerState(int fd, uint32_t state) - { - int ans; - - if ( (ans = ioctl(fd,FE_SET_POWER_STATE,state) < 0)){ - perror("OST SET POWER STATE: "); - return -1; - } - - return 0; - } - - int OSTGetPowerState(int fd, uint32_t *state) - { - int ans; - - if ( (ans = ioctl(fd,FE_GET_POWER_STATE,state) < 0)){ - perror("OST GET POWER STATE: "); - return -1; - } - - switch(*state){ - case FE_POWER_ON: - fprintf(stderr,"POWER ON (%d)\n",*state); - break; - case FE_POWER_STANDBY: - fprintf(stderr,"POWER STANDBY (%d)\n",*state); - break; - case FE_POWER_SUSPEND: - fprintf(stderr,"POWER SUSPEND (%d)\n",*state); - break; - case FE_POWER_OFF: - fprintf(stderr,"POWER OFF (%d)\n",*state); - break; - default: - fprintf(stderr,"unknown (%d)\n",*state); - break; - } - - return 0; - } - - int SecGetStatus (int fd, struct secStatus *state) - { - int ans; - - if ( (ans = ioctl(fd,SEC_GET_STATUS, state) < 0)){ - perror("SEC GET STATUS: "); - return -1; - } - - switch (state->busMode){ - case SEC_BUS_IDLE: - fprintf(stderr,"SEC BUS MODE: IDLE (%d)\n",state->busMode); - break; - case SEC_BUS_BUSY: - fprintf(stderr,"SEC BUS MODE: BUSY (%d)\n",state->busMode); - break; - case SEC_BUS_OFF: - fprintf(stderr,"SEC BUS MODE: OFF (%d)\n",state->busMode); - break; - case SEC_BUS_OVERLOAD: - fprintf(stderr,"SEC BUS MODE: OVERLOAD (%d)\n",state->busMode); - break; - default: - fprintf(stderr,"SEC BUS MODE: unknown (%d)\n",state->busMode); - break; - } - - switch (state->selVolt){ - case SEC_VOLTAGE_OFF: - fprintf(stderr,"SEC VOLTAGE: OFF (%d)\n",state->selVolt); - break; - case SEC_VOLTAGE_LT: - fprintf(stderr,"SEC VOLTAGE: LT (%d)\n",state->selVolt); - break; - case SEC_VOLTAGE_13: - fprintf(stderr,"SEC VOLTAGE: 13 (%d)\n",state->selVolt); - break; - case SEC_VOLTAGE_13_5: - fprintf(stderr,"SEC VOLTAGE: 13.5 (%d)\n",state->selVolt); - break; - case SEC_VOLTAGE_18: - fprintf(stderr,"SEC VOLTAGE: 18 (%d)\n",state->selVolt); - break; - case SEC_VOLTAGE_18_5: - fprintf(stderr,"SEC VOLTAGE: 18.5 (%d)\n",state->selVolt); - break; - default: - fprintf(stderr,"SEC VOLTAGE: unknown (%d)\n",state->selVolt); - break; - } - - fprintf(stderr,"SEC CONT TONE: %s\n", (state->contTone == SEC_TONE_ON ? "ON" : "OFF")); - return 0; - } - #endif void print_status(FILE* fd,fe_status_t festatus) { fprintf(fd,"FE_STATUS:"); if (festatus & FE_HAS_SIGNAL) fprintf(fd," FE_HAS_SIGNAL"); - #ifdef NEWSTRUCT if (festatus & FE_TIMEDOUT) fprintf(fd," FE_TIMEDOUT"); - #else - if (festatus & FE_HAS_POWER) fprintf(fd," FE_HAS_POWER"); - if (festatus & FE_SPECTRUM_INV) fprintf(fd," FE_SPECTRUM_INV"); - if (festatus & FE_TUNER_HAS_LOCK) fprintf(fd," FE_TUNER_HAS_LOCK"); - #endif if (festatus & FE_HAS_LOCK) fprintf(fd," FE_HAS_LOCK"); if (festatus & FE_HAS_CARRIER) fprintf(fd," FE_HAS_CARRIER"); --- 30,43 ---- *************** *** 169,173 **** } ! #ifdef NEWSTRUCT struct diseqc_cmd { struct dvb_diseqc_master_cmd cmd; --- 47,51 ---- } ! struct diseqc_cmd { struct dvb_diseqc_master_cmd cmd; *************** *** 175,202 **** }; ! void diseqc_send_msg(int fd, fe_sec_voltage_t v, struct diseqc_cmd *cmd, fe_sec_tone_mode_t t, fe_sec_mini_cmd_t b) { ! ioctl(fd, FE_SET_TONE, SEC_TONE_OFF); ! ioctl(fd, FE_SET_VOLTAGE, v); usleep(15 * 1000); ! ioctl(fd, FE_DISEQC_SEND_MASTER_CMD, &cmd->cmd); usleep(cmd->wait * 1000); usleep(15 * 1000); ! ioctl(fd, FE_DISEQC_SEND_BURST, b); usleep(15 * 1000); ! ioctl(fd, FE_SET_TONE, t); ! } ! ! /* digital satellite equipment control, * specification is available from http://www.eutelsat.com/ */ ! static int do_diseqc(int secfd, int sat_no, int pol, int hi_lo) { ! struct diseqc_cmd cmd = ! { {{0xe0, 0x10, 0x38, 0xf0, 0x00, 0x00}, 4}, 0 }; /* param: high nibble: reset bits, low nibble set bits, --- 53,84 ---- }; ! static int diseqc_send_msg(int fd, fe_sec_voltage_t v, struct diseqc_cmd *cmd, fe_sec_tone_mode_t t, fe_sec_mini_cmd_t b) { ! if(ioctl(fd, FE_SET_TONE, SEC_TONE_OFF) < 0) ! return -1; ! if(ioctl(fd, FE_SET_VOLTAGE, v) < 0) ! return -1; usleep(15 * 1000); ! if(ioctl(fd, FE_DISEQC_SEND_MASTER_CMD, &cmd->cmd) < 0) ! return -1; usleep(cmd->wait * 1000); usleep(15 * 1000); ! if(ioctl(fd, FE_DISEQC_SEND_BURST, b) < 0) ! return -1; usleep(15 * 1000); ! if(ioctl(fd, FE_SET_TONE, t) < 0) ! return -1; + return 0; + } /* digital satellite equipment control, * specification is available from http://www.eutelsat.com/ */ ! ! static int do_diseqc(int secfd, int sat_no, int polv, int hi_lo) { ! struct diseqc_cmd cmd = { {{0xe0, 0x10, 0x38, 0xf0, 0x00, 0x00}, 4}, 0 }; /* param: high nibble: reset bits, low nibble set bits, *************** *** 204,217 **** */ cmd.cmd.msg[3] = ! 0xf0 | (((sat_no * 4) & 0x0f) | (hi_lo ? 1 : 0) | (pol ? 0 : 2)); ! diseqc_send_msg(secfd, pol, ! &cmd, hi_lo, (sat_no / 4) % 2 ? SEC_MINI_B : SEC_MINI_A); - - return 1; } ! int check_status(int fd_frontend,struct dvb_frontend_info fe_info, struct dvb_frontend_parameters* feparams,int tone) { int32_t strength; fe_status_t festatus; --- 86,97 ---- */ cmd.cmd.msg[3] = ! 0xf0 | (((sat_no * 4) & 0x0f) | (hi_lo ? 1 : 0) | (polv ? 0 : 2)); ! return diseqc_send_msg(secfd, polv ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18, ! &cmd, hi_lo ? SEC_TONE_ON : SEC_TONE_OFF, (sat_no / 4) % 2 ? SEC_MINI_B : SEC_MINI_A); } ! int check_status(int fd_frontend,int type, struct dvb_frontend_parameters* feparams,int hi_lo) { int32_t strength; fe_status_t festatus; *************** *** 220,223 **** --- 100,108 ---- int status; + while(1) { + if (ioctl(fd_frontend, FE_GET_EVENT, &event) < 0) //EMPTY THE EVENT QUEUE + break; + } + if (ioctl(fd_frontend,FE_SET_FRONTEND,feparams) < 0) { perror("ERROR tuning channel\n"); *************** *** 226,236 **** pfd[0].fd = fd_frontend; ! pfd[0].events = POLLIN; event.status=0; while (((event.status & FE_TIMEDOUT)==0) && ((event.status & FE_HAS_LOCK)==0)) { fprintf(stderr,"polling....\n"); ! if (poll(pfd,1,10000)){ ! if (pfd[0].revents & POLLIN){ fprintf(stderr,"Getting frontend event\n"); if ((status = ioctl(fd_frontend, FE_GET_EVENT, &event)) < 0){ --- 111,121 ---- pfd[0].fd = fd_frontend; ! pfd[0].events = POLLPRI; event.status=0; while (((event.status & FE_TIMEDOUT)==0) && ((event.status & FE_HAS_LOCK)==0)) { fprintf(stderr,"polling....\n"); ! if (poll(pfd,1,10000) > 0){ ! if (pfd[0].revents & POLLPRI){ fprintf(stderr,"Getting frontend event\n"); if ((status = ioctl(fd_frontend, FE_GET_EVENT, &event)) < 0){ *************** *** 249,258 **** if (event.status & FE_HAS_LOCK) { ! switch(fe_info.type) { case FE_OFDM: fprintf(stderr,"Event: Frequency: %d\n",event.parameters.frequency); break; case FE_QPSK: ! fprintf(stderr,"Event: Frequency: %d\n",(unsigned int)((event.parameters.frequency)+(tone==SEC_TONE_OFF ? LOF1 : LOF2))); fprintf(stderr," SymbolRate: %d\n",event.parameters.u.qpsk.symbol_rate); fprintf(stderr," FEC_inner: %d\n",event.parameters.u.qpsk.fec_inner); --- 134,143 ---- if (event.status & FE_HAS_LOCK) { ! switch(type) { case FE_OFDM: fprintf(stderr,"Event: Frequency: %d\n",event.parameters.frequency); break; case FE_QPSK: ! fprintf(stderr,"Event: Frequency: %d\n",(unsigned int)((event.parameters.frequency)+(hi_lo ? LOF2 : LOF1))); fprintf(stderr," SymbolRate: %d\n",event.parameters.u.qpsk.symbol_rate); fprintf(stderr," FEC_inner: %d\n",event.parameters.u.qpsk.fec_inner); *************** *** 269,285 **** strength=0; ! ioctl(fd_frontend,FE_READ_BER,&strength); fprintf(stderr,"Bit error rate: %d\n",strength); strength=0; ! ioctl(fd_frontend,FE_READ_SIGNAL_STRENGTH,&strength); fprintf(stderr,"Signal strength: %d\n",strength); strength=0; ! ioctl(fd_frontend,FE_READ_SNR,&strength); fprintf(stderr,"SNR: %d\n",strength); festatus=0; ! ioctl(fd_frontend,FE_READ_STATUS,&festatus); print_status(stderr,festatus); } else { --- 154,170 ---- strength=0; ! if(ioctl(fd_frontend,FE_READ_BER,&strength) >= 0) fprintf(stderr,"Bit error rate: %d\n",strength); strength=0; ! if(ioctl(fd_frontend,FE_READ_SIGNAL_STRENGTH,&strength) >= 0) fprintf(stderr,"Signal strength: %d\n",strength); strength=0; ! if(ioctl(fd_frontend,FE_READ_SNR,&strength) >= 0) fprintf(stderr,"SNR: %d\n",strength); festatus=0; ! if(ioctl(fd_frontend,FE_READ_STATUS,&festatus) >= 0) print_status(stderr,festatus); } else { *************** *** 289,426 **** return 0; } - #else - int check_status(int fd_frontend,FrontendInfo fe_info, FrontendParameters* feparams,int tone) { - int i,res; - int32_t strength; - fe_status_t festatus; - FrontendEvent event; - struct pollfd pfd[1]; - - i = 0; res = -1; - while ((i < 3) && (res < 0)) { - if (ioctl(fd_frontend,FE_SET_FRONTEND,feparams) < 0) { - perror("ERROR tuning channel\n"); - return -1; - } - - pfd[0].fd = fd_frontend; - pfd[0].events = POLLIN; - - if (poll(pfd,1,10000)){ - if (pfd[0].revents & POLLIN){ - fprintf(stderr,"Getting frontend event\n"); - if ( ioctl(fd_frontend, FE_GET_EVENT, &event) < 0) { - perror("FE_GET_EVENT"); - return -1; - } - fprintf(stderr,"Received "); - switch(event.type){ - case FE_UNEXPECTED_EV: - fprintf(stderr,"unexpected event\n"); - res = -1; - break; - case FE_FAILURE_EV: - fprintf(stderr,"failure event\n"); - res = -1; - break; - case FE_COMPLETION_EV: - fprintf(stderr,"completion event\n"); - res = 0; - break; - } - } - i++; - } - } - - if (res > 0) - switch (event.type) { - case FE_UNEXPECTED_EV: fprintf(stderr,"FE_UNEXPECTED_EV\n"); - break; - case FE_COMPLETION_EV: fprintf(stderr,"FE_COMPLETION_EV\n"); - break; - case FE_FAILURE_EV: fprintf(stderr,"FE_FAILURE_EV\n"); - break; - } - - if (event.type == FE_COMPLETION_EV) { - switch(fe_info.type) { - case FE_OFDM: - fprintf(stderr,"Event: Frequency: %d\n",event.u.completionEvent.Frequency); - break; - case FE_QPSK: - fprintf(stderr,"Event: Frequency: %d\n",(unsigned int)((event.u.completionEvent.Frequency)+(tone==SEC_TONE_OFF ? LOF1 : LOF2))); - fprintf(stderr," SymbolRate: %d\n",event.u.completionEvent.u.qpsk.SymbolRate); - fprintf(stderr," FEC_inner: %d\n",event.u.completionEvent.u.qpsk.FEC_inner); - fprintf(stderr,"\n"); - break; - case FE_QAM: - fprintf(stderr,"Event: Frequency: %d\n",event.u.completionEvent.Frequency); - fprintf(stderr," SymbolRate: %d\n",event.u.completionEvent.u.qpsk.SymbolRate); - fprintf(stderr," FEC_inner: %d\n",event.u.completionEvent.u.qpsk.FEC_inner); - break; - default: - break; - } - - strength=0; - ioctl(fd_frontend,FE_READ_BER,&strength); - fprintf(stderr,"Bit error rate: %d\n",strength); - - strength=0; - ioctl(fd_frontend,FE_READ_SIGNAL_STRENGTH,&strength); - fprintf(stderr,"Signal strength: %d\n",strength); - - strength=0; - ioctl(fd_frontend,FE_READ_SNR,&strength); - fprintf(stderr,"SNR: %d\n",strength); - - festatus=0; - ioctl(fd_frontend,FE_READ_STATUS,&festatus); - - fprintf(stderr,"FE_STATUS:"); - if (festatus & FE_HAS_POWER) fprintf(stderr," FE_HAS_POWER"); - if (festatus & FE_HAS_SIGNAL) fprintf(stderr," FE_HAS_SIGNAL"); - if (festatus & FE_SPECTRUM_INV) fprintf(stderr," FE_SPECTRUM_INV"); - if (festatus & FE_HAS_LOCK) fprintf(stderr," FE_HAS_LOCK"); - if (festatus & FE_HAS_CARRIER) fprintf(stderr," FE_HAS_CARRIER"); - if (festatus & FE_HAS_VITERBI) fprintf(stderr," FE_HAS_VITERBI"); - if (festatus & FE_HAS_SYNC) fprintf(stderr," FE_HAS_SYNC"); - if (festatus & FE_TUNER_HAS_LOCK) fprintf(stderr," FE_TUNER_HAS_LOCK"); - fprintf(stderr,"\n"); - } else { - fprintf(stderr,"Not able to lock to the signal on the given frequency\n"); - return -1; - } - return 0; - } - #endif int tune_it(int fd_frontend, int fd_sec, unsigned int freq, unsigned int srate, char pol, int tone, fe_spectral_inversion_t specInv, unsigned int diseqc,fe_modulation_t modulation,fe_code_rate_t HP_CodeRate,fe_transmit_mode_t TransmissionMode,fe_guard_interval_t guardInterval, fe_bandwidth_t bandwidth) { ! int res; ! #ifdef NEWSTRUCT struct dvb_frontend_parameters feparams; struct dvb_frontend_info fe_info; fe_sec_voltage_t voltage; - #else - FrontendParameters feparams; - FrontendInfo fe_info; - secVoltage voltage; - struct secStatus sec_state; - #endif - /* discard stale frontend events */ - /* - pfd[0].fd = fd_frontend; - pfd[0].events = POLLIN; - - if (poll(pfd,1,500)){ - if (pfd[0].revents & POLLIN){ - while (1) { - if (ioctl (fd_frontend, FE_GET_EVENT, &event) == -1) { break; } - } - } - } - */ if ( (res = ioctl(fd_frontend,FE_GET_INFO, &fe_info) < 0)){ perror("FE_GET_INFO: "); --- 174,184 ---- return 0; } int tune_it(int fd_frontend, int fd_sec, unsigned int freq, unsigned int srate, char pol, int tone, fe_spectral_inversion_t specInv, unsigned int diseqc,fe_modulation_t modulation,fe_code_rate_t HP_CodeRate,fe_transmit_mode_t TransmissionMode,fe_guard_interval_t guardInterval, fe_bandwidth_t bandwidth) { ! int res, hi_lo, dfd; struct dvb_frontend_parameters feparams; struct dvb_frontend_info fe_info; fe_sec_voltage_t voltage; if ( (res = ioctl(fd_frontend,FE_GET_INFO, &fe_info) < 0)){ perror("FE_GET_INFO: "); *************** *** 428,442 **** } - // OSTSelftest(fd_frontend); - // OSTSetPowerState(fd_frontend, FE_POWER_ON); - // OSTGetPowerState(fd_frontend, &festatus); - - #ifdef NEWSTRUCT fprintf(stderr,"Using DVB card \"%s\"\n",fe_info.name); - #endif switch(fe_info.type) { case FE_OFDM: - #ifdef NEWSTRUCT if (freq < 1000000) freq*=1000UL; feparams.frequency=freq; --- 186,193 ---- *************** *** 449,572 **** feparams.u.ofdm.guard_interval=guardInterval; feparams.u.ofdm.hierarchy_information=HIERARCHY_DEFAULT; ! #else ! if (freq < 1000000) freq*=1000UL; ! feparams.Frequency=freq; ! feparams.Inversion=INVERSION_OFF; ! feparams.u.ofdm.bandWidth=bandwidth; ! feparams.u.ofdm.HP_CodeRate=HP_CodeRate; ! feparams.u.ofdm.LP_CodeRate=LP_CODERATE_DEFAULT; ! feparams.u.ofdm.Constellation=modulation; ! feparams.u.ofdm.TransmissionMode=TransmissionMode; ! feparams.u.ofdm.guardInterval=guardInterval; ! feparams.u.ofdm.HierarchyInformation=HIERARCHY_DEFAULT; ! #endif ! fprintf(stderr,"tuning DVB-T (%s) to %d Hz\n",DVB_T_LOCATION,freq); break; case FE_QPSK: ! #ifdef NEWSTRUCT ! fprintf(stderr,"tuning DVB-S to L-Band:%d, Pol:%c Srate=%d, 22kHz=%s\n",feparams.frequency,pol,srate,tone == SEC_TONE_ON ? "on" : "off"); ! #else ! fprintf(stderr,"tuning DVB-S to L-Band:%d, Pol:%c Srate=%d, 22kHz=%s\n",feparams.Frequency,pol,srate,tone == SEC_TONE_ON ? "on" : "off"); ! #endif ! if ((pol=='h') || (pol=='H')) { ! voltage = SEC_VOLTAGE_18; ! } else { ! voltage = SEC_VOLTAGE_13; ! } ! #ifdef NEWSTRUCT ! if (diseqc==0) if (ioctl(fd_frontend,FE_SET_VOLTAGE,voltage) < 0) { ! #else ! if (ioctl(fd_sec,SEC_SET_VOLTAGE,voltage) < 0) { ! #endif ! perror("ERROR setting voltage\n"); ! } ! ! if (freq > 2200000) { ! // this must be an absolute frequency if (freq < SLOF) { - #ifdef NEWSTRUCT feparams.frequency=(freq-LOF1); ! #else ! feparams.Frequency=(freq-LOF1); ! #endif ! if (tone < 0) tone = SEC_TONE_OFF; } else { - #ifdef NEWSTRUCT feparams.frequency=(freq-LOF2); ! #else ! feparams.Frequency=(freq-LOF2); ! #endif ! if (tone < 0) tone = SEC_TONE_ON; ! } ! } else { ! // this is an L-Band frequency ! #ifdef NEWSTRUCT ! feparams.frequency=freq; ! #else ! feparams.Frequency=freq; ! #endif } ! #ifdef NEWSTRUCT feparams.inversion=specInv; feparams.u.qpsk.symbol_rate=srate; feparams.u.qpsk.fec_inner=FEC_AUTO; ! #else ! feparams.Inversion=specInv; ! feparams.u.qpsk.SymbolRate=srate; ! feparams.u.qpsk.FEC_inner=FEC_AUTO; ! #endif ! ! #ifdef NEWSTRUCT ! if (diseqc==0) { ! if (ioctl(fd_frontend,FE_SET_TONE,tone) < 0) { ! perror("ERROR setting tone\n"); ! } ! } ! #else ! if (ioctl(fd_sec,SEC_SET_TONE,tone) < 0) { ! perror("ERROR setting tone\n"); ! } ! #endif ! ! #ifdef NEWSTRUCT ! if (diseqc > 0) { ! do_diseqc(fd_frontend, diseqc-1,voltage,tone); ! sleep(1); ! } ! #else ! if (diseqc > 0) { ! struct secCommand scmd; ! struct secCmdSequence scmds; ! ! scmds.continuousTone = tone; ! scmds.voltage = voltage; ! /* ! scmds.miniCommand = toneBurst ? SEC_MINI_B : SEC_MINI_A; ! */ ! scmds.miniCommand = SEC_MINI_NONE; ! ! scmd.type = 0; ! scmds.numCommands = 1; ! scmds.commands = &scmd; ! ! scmd.u.diseqc.addr = 0x10; ! scmd.u.diseqc.cmd = 0x38; ! scmd.u.diseqc.numParams = 1; ! scmd.u.diseqc.params[0] = 0xf0 | ! (((diseqc - 1) << 2) & 0x0c) | ! (voltage==SEC_VOLTAGE_18 ? 0x02 : 0) | ! (tone==SEC_TONE_ON ? 0x01 : 0); ! if (ioctl(fd_sec,SEC_SEND_SEQUENCE,&scmds) < 0) { ! perror("Error sending DisEqC"); return -1; } - } - #endif break; case FE_QAM: fprintf(stderr,"tuning DVB-C to %d, srate=%d\n",freq,srate); - #ifdef NEWSTRUCT feparams.frequency=freq; feparams.inversion=INVERSION_OFF; --- 200,230 ---- feparams.u.ofdm.guard_interval=guardInterval; feparams.u.ofdm.hierarchy_information=HIERARCHY_DEFAULT; ! fprintf(stderr,"tuning DVB-T (%s) to %d Hz, Bandwidth: %d\n",DVB_T_LOCATION,freq, bandwidth); break; case FE_QPSK: ! pol = toupper(pol); if (freq < SLOF) { feparams.frequency=(freq-LOF1); ! hi_lo = 0; } else { feparams.frequency=(freq-LOF2); ! hi_lo = 1; } ! fprintf(stderr,"tuning DVB-S to Freq: %u, Pol:%c Srate=%d, 22kHz tone=%s, LNB: %d\n",feparams.frequency,pol,srate,tone == SEC_TONE_ON ? "on" : "off", diseqc); feparams.inversion=specInv; feparams.u.qpsk.symbol_rate=srate; feparams.u.qpsk.fec_inner=FEC_AUTO; ! dfd = fd_frontend; ! if(do_diseqc(dfd, diseqc, (pol == 'V' ? 1 : 0), hi_lo) == 0) ! fprintf(stderr, "DISEQC SETTING SUCCEDED\n"); ! else { ! fprintf(stderr, "DISEQC SETTING FAILED\n"); return -1; } break; case FE_QAM: fprintf(stderr,"tuning DVB-C to %d, srate=%d\n",freq,srate); feparams.frequency=freq; feparams.inversion=INVERSION_OFF; *************** *** 574,584 **** feparams.u.qam.fec_inner = FEC_AUTO; feparams.u.qam.modulation = modulation; - #else - feparams.Frequency=freq; - feparams.Inversion=INVERSION_OFF; - feparams.u.qam.SymbolRate = srate; - feparams.u.qam.FEC_inner = FEC_AUTO; - feparams.u.qam.QAM = modulation; - #endif break; default: --- 232,235 ---- *************** *** 588,595 **** usleep(100000); ! #ifndef NEWSTRUCT ! if (fd_sec) SecGetStatus(fd_sec, &sec_state); ! #endif ! ! return(check_status(fd_frontend,fe_info,&feparams,tone)); } --- 239,242 ---- usleep(100000); ! return(check_status(fd_frontend,fe_info.type,&feparams,hi_lo)); } Index: tune.h =================================================================== RCS file: /cvsroot/dvbtools/dvbstream/tune.h,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** tune.h 13 Oct 2002 18:46:03 -0000 1.5 --- tune.h 19 Mar 2004 09:59:33 -0000 1.6 *************** *** 2,25 **** #define _TUNE_H ! #ifdef NEWSTRUCT ! #include <linux/dvb/frontend.h> ! #else ! ! // The following defines make the "OLDSTRUCT" driver more compatible with NEWSTRUCT. ! ! #include <ost/frontend.h> ! ! #define fe_status_t FrontendStatus ! #define fe_spectral_inversion_t SpectralInversion ! #define fe_modulation_t Modulation ! #define fe_code_rate_t CodeRate ! #define fe_transmit_mode_t TransmitMode ! #define fe_guard_interval_t GuardInterval ! #define fe_bandwidth_t BandWidth ! #define fe_sec_voltage_t SecVoltage ! #define dmx_pes_filter_params dmxPesFilterParams ! #define dmx_sct_filter_params dmxSctFilterParams ! #define dmx_pes_type_t dmxPesType_t ! #endif #include "dvb_defaults.h" --- 2,6 ---- #define _TUNE_H ! #include <linux/dvb/frontend.h> #include "dvb_defaults.h" |
From: <linuxstb@us...> - 2004-03-14 01:28:08
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13088 Modified Files: README Log Message: Bugfix and clarification suggested by Sean Carlos Index: README =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/README,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** README 6 Mar 2004 17:55:14 -0000 1.6 --- README 14 Mar 2004 01:19:16 -0000 1.7 *************** *** 34,38 **** or from a set of ".vdr" files recorded using VDR: ! cat 0*.vdr | dvbtextsubs pageno > subtitles.xml The "pid" is probably the same as the teletext PID for the channel. --- 34,38 ---- or from a set of ".vdr" files recorded using VDR: ! cat 0*.vdr | dvbtextsubs -vdr pageno > subtitles.xml The "pid" is probably the same as the teletext PID for the channel. *************** *** 40,45 **** PID to normal teletext. ! The "pageno" is the teletext page containing the subtitles. This is ! commonly page 888, but can be any page. You can then generate a set of PNG files from this XML file by using --- 40,46 ---- PID to normal teletext. ! The "pageno" is the teletext page containing the subtitles. This ! varies by country (and broadcaster), common choices are 888, 777 or ! 699 but it can be any page You can then generate a set of PNG files from this XML file by using |
From: <linuxstb@us...> - 2004-03-11 21:28:38
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28287 Modified Files: dvbsubs.c Log Message: Bug fix by Pekka Ahmavuo - update region structure if width or height are modified Index: dvbsubs.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/dvbsubs.c,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** dvbsubs.c 8 Mar 2004 21:12:58 -0000 1.16 --- dvbsubs.c 11 Mar 2004 21:01:40 -0000 1.17 *************** *** 359,362 **** --- 359,365 ---- } + regions[region_id].width=region_width; + regions[region_id].height=region_height; + if (region_fill_flag==1) { // fprintf(stderr,"filling region %d with %d\n",region_id,region_4_bit_pixel_code); |
From: <linuxstb@us...> - 2004-03-10 22:38:37
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13743 Modified Files: Makefile Log Message: Add manpages Index: Makefile =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/Makefile,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** Makefile 8 Mar 2004 19:15:13 -0000 1.4 --- Makefile 10 Mar 2004 22:12:25 -0000 1.5 *************** *** 1,9 **** CC=gcc OBJS=dvbsubs dvbtextsubs xml2spumux xml2srt CFLAGS+=-Wall INCS+=-I/usr/include/libxml2 -I/usr/include/freetype2 ! all: $(OBJS) dvbsubs: dvbsubs.c dvbsubs.h bitmap.o pes.o --- 1,10 ---- CC=gcc OBJS=dvbsubs dvbtextsubs xml2spumux xml2srt + MANPAGES=dvbtextsubs.1 CFLAGS+=-Wall INCS+=-I/usr/include/libxml2 -I/usr/include/freetype2 ! all: $(OBJS) $(MANPAGES) dvbsubs: dvbsubs.c dvbsubs.h bitmap.o pes.o *************** *** 29,32 **** chmod +x xml2srt clean: ! rm -f *.o *~ $(OBJS) --- 30,36 ---- chmod +x xml2srt + dvbtextsubs.1: dvbtextsubs.pod + pod2man --section 1 --release 0.3 --center dvbsubs dvbtextsubs.pod > dvbtextsubs.1 + clean: ! rm -f *.o *~ $(OBJS) $(MANPAGES) |
From: <linuxstb@us...> - 2004-03-10 22:38:01
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13484 Added Files: dvbtextsubs.pod Log Message: Man page contributed by Mattias Holmlund --- NEW FILE: dvbtextsubs.pod --- =pod =head1 NAME dvbtextsubs - extract subtitles stored as teletext-pages in an MPEG-file. =head1 SYNOPSIS dvbtextsubs [OPTIONS] pid pageno < recording.ts > subtitles.xml =head1 DESCRIPTION DVB broadcasts can include subtitles encoded in the teletext pages sent together with the video and audio in the MPEG transport stream. The teletext pages are sent on a separate pid and the subtitles are identified by their own pagenumber within the teletext stream. dvbtextsubs can extract the subtitles from within the MPEG transport stream and output it in either an xml-based format suitable for processing with L<xml2spumux> or in Subviewer format that can be read by most software video-players. dvbtextsubs takes two mandatory parameters. The first parameter is the pid for the teletext-stream in the input-file. The second parameter is the teletext pagenumber where the subtitles can be found. See the section B<FINDING PID AND PAGENUMBER> below for more information. If no options are passed to dvbtextsubs, the subtitles will be output in xml-format on standard out. =head2 Supported stream formats dvbtextsubs expects to receive a stream in MPEG-TS format on standard in. The stream does not have to contain any PAT or PMT, only the teletext pid is necessary (and an audio-pid if the -apts option is used). =head2 Options The following options can be passed to dvbtextsubs: =over 4 =item -srt Output data in Subviewer format. =item -pts <offset> Adjust each timestamp for the subtitles by adding <offset> milliseconds. =item -apts Ignore the timestamp on the teletext stream and use the timestamp of the audio-stream for the subtitles instead. =item -apid <pid> Use pid <pid> as the audio-pid to synchronize the subtitles to. This option is only valid together with the B<-apts> option. Normally, dvbtextsubs should be able to auto-detect the audio-pid. =item -keeppts Normally, dvbtextsubs outputs timestamps as an offset to the start of the MPEG stream. -keeppts tells dvbtextsubs to use the absolute value of the pts-field (Presentation Time-Stamp) instead. =back =head1 FINDING PID AND PAGENUMBER Information on which pid and pagenumber the subtitles can be found in is normally stored in the PMT (Program Map Table) inside the MPEG stream. One way to retrieve this information is to use L<dvbtune -i> to dump the PAT and PMT to xml-format. A channel with teletext subtitles contains an entry like this (indentation added for clarity: <stream type="6" pid="1244"> <teletext tag="0x56"> <teletext_info lang="swe" type="1" page="100"/> <teletext_info lang="swe" type="2" page="694"/> <teletext_info lang="swe" type="5" page="794"/> </teletext> </stream> In this example, the teletext is sent with pid 1244 and the subtitles are sent on page 694 (type=2). =head1 EXAMPLES To extract the teletext subtitles from a recorded TS-stream containing an audio-pid, a video-pid and the subtitles on pid 1024, page 692, use dvbtextsubs 1024 692 < recording.ts > subtitles.xml The generated xml-file is suitable for feeding to L<xml2spumux> To extract the teletext subtitles from the same file in a format suitable for displaying with xine, use dvbtextsubs -srt 1024 692 < recording.ts > recording.srt The file recording.srt will contain timestamps that are relative to the start of the file. If you want to play the file in mplayer instead, use dvbtextsubs -keeppts -srt -1024 692 < recording.ts > recording.srt This time the timestamps will be relative to the Presentation Timestamp in the MPEG-TS file. If the subtitles are not properly synchronized with the audio and video, it may be because the Presentation Timestamp for the teletext stream is different from the Presentation Timestamp for the audio/video. Try using the -apts and -apid options described above. They instruct dvbtextsubs to use the relative position of the teletext page in the stream as the timestamp rather than the PTS for the teletext stream. =head1 SEE ALSO L<xml2spumux>, L<dvbsubs> =head1 AUTHOR dvbtextsubs was written by Dave Chapman <dave -at- dchapman /dot/ com>. The latest version is available from http://www.linuxstb.org/dvbtextsubs/. This manual page was written by Mattias Holmlund, <mattias -at- holmlund /dot/ se> =cut |
From: <linuxstb@us...> - 2004-03-08 22:45:10
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5697 Modified Files: dvbtextsubs.c Log Message: Do not XML-ify output for .srt files Index: dvbtextsubs.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/dvbtextsubs.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** dvbtextsubs.c 8 Mar 2004 21:14:39 -0000 1.9 --- dvbtextsubs.c 8 Mar 2004 22:20:32 -0000 1.10 *************** *** 328,332 **** colour=7; // fprintf(fd,"<%s>",colours[colour]); } ! xml_output_char(fd,vtx2iso8559_1_table[subtitle->lang][ch-32]); j=1; } --- 328,332 ---- colour=7; // fprintf(fd,"<%s>",colours[colour]); } ! fprintf(fd,"%c",vtx2iso8559_1_table[subtitle->lang][ch-32]); j=1; } |
From: <linuxstb@us...> - 2004-03-08 21:39:14
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22299 Modified Files: dvbtextsubs.c Log Message: Fix command-line passing of -apid option Index: dvbtextsubs.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/dvbtextsubs.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** dvbtextsubs.c 8 Mar 2004 21:12:58 -0000 1.8 --- dvbtextsubs.c 8 Mar 2004 21:14:39 -0000 1.9 *************** *** 587,590 **** --- 587,591 ---- use_apts=1; } else if (strcmp(argv[i],"-apid")==0) { + i++; apid=atoi(argv[i]); } else if (strcmp(argv[i],"-pts")==0) { |
From: <linuxstb@us...> - 2004-03-08 21:37:33
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21859 Modified Files: pes.c dvbtextsubs.c dvbsubs.c Log Message: Add -apts and -apid options to dvbtextsubs Index: pes.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/pes.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** pes.c 8 Mar 2004 17:36:44 -0000 1.3 --- pes.c 8 Mar 2004 21:12:58 -0000 1.4 *************** *** 9,12 **** --- 9,13 ---- extern uint64_t audio_pts,first_audio_pts; + extern uint16_t apid; ssize_t safe_read(int fd, unsigned char* buf, size_t count) { *************** *** 101,118 **** packet_pid=(((tsbuf[1]&0x1f)<<8) | tsbuf[2]); if (packet_pid==pid) { // fprintf(stderr,"Read %d bytes from pid %d, synced=%d\n",count,pid,synced); - adaption_field_control=(tsbuf[3]&0x30)>>4; - discontinuity_indicator=0; - if (adaption_field_control==3) { - adaption_field_length=tsbuf[4]+1; - } else if (adaption_field_control==2) { - adaption_field_length=183+1; - } else { - adaption_field_length=0; - } - i=4+adaption_field_length; - ts_payload=184-adaption_field_length; - if (!synced) { if (tsbuf[1]&0x40) { --- 102,119 ---- packet_pid=(((tsbuf[1]&0x1f)<<8) | tsbuf[2]); + adaption_field_control=(tsbuf[3]&0x30)>>4; + discontinuity_indicator=0; + if (adaption_field_control==3) { + adaption_field_length=tsbuf[4]+1; + } else if (adaption_field_control==2) { + adaption_field_length=183+1; + } else { + adaption_field_length=0; + } + i=4+adaption_field_length; + ts_payload=184-adaption_field_length; + if (packet_pid==pid) { // fprintf(stderr,"Read %d bytes from pid %d, synced=%d\n",count,pid,synced); if (!synced) { if (tsbuf[1]&0x40) { *************** *** 133,136 **** --- 134,154 ---- } if ((synced) && (n >= PES_packet_length)) { finished=1; } + } else { + if ((tsbuf[1]&0x40) && (tsbuf[i]==0x00) && (tsbuf[i+1]==0x00) && (tsbuf[i+2]==0x01)) { + stream_id=tsbuf[i+3]; + + if (stream_id==0xc0) { + if (apid==0) { + apid=packet_pid; + fprintf(stderr,"INFO: Found audio stream %d\n",apid); + } + if (apid==packet_pid) { + tmp_pts=get_pes_pts(&tsbuf[i]); + // fprintf(stderr,"Found Audio stream, PID=%d, PTS=%s\n",packet_pid,pts2hmsu(last_tmp_pts,'.')); + if (tmp_pts > audio_pts) { audio_pts=tmp_pts; } + if ((first_audio_pts==0) || ((tmp_pts!=0) && (tmp_pts < first_audio_pts))) { first_audio_pts=tmp_pts; } + } + } + } } } Index: dvbtextsubs.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/dvbtextsubs.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** dvbtextsubs.c 8 Mar 2004 19:58:53 -0000 1.7 --- dvbtextsubs.c 8 Mar 2004 21:12:58 -0000 1.8 *************** *** 64,67 **** --- 64,70 ---- Options: -srt Output subtitles in Subviewer format\n\ -pts PTS offset (in ms) to add to every PTS in output file\n\ + -apts Use audio PTS timestamps instead of Teletext PTS\n\ + (for broadcasters that broadcast no or incorrect teletext PTS)\n\ + -apid Audio PID (for transport streams processed with -apts option)\n\ -keeppts Output original PTS values (do not offset from start of file)\n\n" *************** *** 76,79 **** --- 79,84 ---- int no_pts_warning=0; int keeppts=0; + uint16_t apid=0; + int use_apts=0; /* Structure of Transport Stream (from ISO/IEC 13818-1): *************** *** 492,496 **** if ((stream_id==0xbd) && ((buf[buf[8]+9]>=0x10) && (buf[buf[8]+9]<=0x1f))) { PTS_DTS_flags=(buf[7]&0xb0)>>6; ! if (PTS_DTS_flags==0x02) { // PTS is in bytes 9,10,11,12,13 p0=(buf[13]&0xfe)>>1|((buf[12]&1)<<7); --- 497,501 ---- if ((stream_id==0xbd) && ((buf[buf[8]+9]>=0x10) && (buf[buf[8]+9]<=0x1f))) { PTS_DTS_flags=(buf[7]&0xb0)>>6; ! if ((PTS_DTS_flags==0x02) && (!use_apts)) { // PTS is in bytes 9,10,11,12,13 p0=(buf[13]&0xfe)>>1|((buf[12]&1)<<7); *************** *** 505,511 **** } else { //fprintf(stdout,"stream_id=%02x, No PTS\n",stream_id); ! if (no_pts_warning==0) { fprintf(stderr,"WARNING: No PTS value in teletext packet - using audio PTS.\n"); fprintf(stderr,"First audio PTS=%lld ms\n",first_audio_pts); no_pts_warning=1; } --- 510,517 ---- } else { //fprintf(stdout,"stream_id=%02x, No PTS\n",stream_id); ! if ((no_pts_warning==0) && (!use_apts)) { fprintf(stderr,"WARNING: No PTS value in teletext packet - using audio PTS.\n"); fprintf(stderr,"First audio PTS=%lld ms\n",first_audio_pts); + use_apts=1; no_pts_warning=1; } *************** *** 578,581 **** --- 584,591 ---- } else if (strcmp(argv[i],"-keeppts")==0) { keeppts=1; + } else if (strcmp(argv[i],"-apts")==0) { + use_apts=1; + } else if (strcmp(argv[i],"-apid")==0) { + apid=atoi(argv[i]); } else if (strcmp(argv[i],"-pts")==0) { i++; Index: dvbsubs.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/dvbsubs.c,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** dvbsubs.c 8 Mar 2004 17:36:44 -0000 1.15 --- dvbsubs.c 8 Mar 2004 21:12:58 -0000 1.16 *************** *** 48,52 **** uint8_t colours[256*3]; uint8_t trans[256]; ! int y=0; int x=0; --- 48,52 ---- uint8_t colours[256*3]; uint8_t trans[256]; ! uint16_t apid; int y=0; int x=0; |
From: <linuxstb@us...> - 2004-03-08 20:23:25
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3846 Modified Files: dvbtextsubs.c Log Message: Cosmetic cleanups - remove dead code and improve USAGE summary Index: dvbtextsubs.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/dvbtextsubs.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** dvbtextsubs.c 8 Mar 2004 19:21:54 -0000 1.6 --- dvbtextsubs.c 8 Mar 2004 19:58:53 -0000 1.7 *************** *** 57,67 **** #define VERSION "0.3" #define USAGE "\n\ ! USAGE: dvbtextsubs pid pageno\n\ ! or dvbtextsubs -vdr pageno\n\n\ The DVB stream must be piped to dvbtextsubs. e.g.:\n\n\ ! cat 0*.vdr | dvbtextsubs > output.xml\n\n\ Options: -srt Output subtitles in Subviewer format\n\ -pts PTS offset (in ms) to add to every PTS in output file\n\ ! -keeppts Output original PTS values (do not offset from start of file)\n" typedef enum { --- 57,68 ---- #define VERSION "0.3" #define USAGE "\n\ ! USAGE: dvbtextsubs [options] pid pageno\n\ ! or dvbtextsubs [options] -vdr pageno\n\n\ The DVB stream must be piped to dvbtextsubs. e.g.:\n\n\ ! cat 0*.vdr | dvbtextsubs -vdr 888 > output.xml\n\ ! or: dvbtextsubs 2320 888 < file.ts > output.xml\n\n\ Options: -srt Output subtitles in Subviewer format\n\ -pts PTS offset (in ms) to add to every PTS in output file\n\ ! -keeppts Output original PTS values (do not offset from start of file)\n\n" typedef enum { *************** *** 134,139 **** fprintf(stderr,"PES ERROR: does not start with 0x000001\n"); return(0); - // } else { - // fprintf(stderr,"PES starts with 0x000001\n"); } i=3; --- 135,138 ---- *************** *** 163,170 **** }; - // There seems to be a limit of 8 teletext streams - OK for most (but - // not all) transponders. - #define MAX_CHANNELS 8 - typedef struct mag_struct_ { int valid; --- 162,165 ---- *************** *** 553,559 **** int pes_format=0; int PES_packet_length; ! int i,m; ! int pids[MAX_CHANNELS]; ! mag_struct mags[MAX_CHANNELS][8]; int count; int the_page; --- 548,553 ---- int pes_format=0; int PES_packet_length; ! int i; ! int theargs[2]; int count; int the_page; *************** *** 568,575 **** fprintf(stderr,"Latest version available from http://www.linuxstb.org\n";); - // params.iFrequency=; - // params.SymbolRate=; - // params.FEC_inner=; - subformat=SUBFORMAT_XML; --- 562,565 ---- *************** *** 593,598 **** fprintf(stderr,"Adding user PTS offset of %lld to every timestamp.\n",USER_PTS); } else { ! pids[count]=atoi(argv[i]); ! if (pids[count]) { count++ ; } } } --- 583,589 ---- fprintf(stderr,"Adding user PTS offset of %lld to every timestamp.\n",USER_PTS); } else { ! theargs[count]=atoi(argv[i]); ! if (theargs[count]) { count++ ; } ! if (count > 2) { break; } } } *************** *** 600,607 **** if ((pes_format==1) && (count==1)) { ! the_page=(pids[0]%10)|((((pids[0]-(100*(pids[0]/100)))%100)/10)<<4)|((pids[0]/100)<<8); } else if ((pes_format==0) && (count==2)) { ! the_pid=pids[0]; ! the_page=(pids[1]%10)|((((pids[1]-(100*(pids[1]/100)))%100)/10)<<4)|((pids[1]/100)<<8); } else { fprintf(stderr,USAGE); --- 591,598 ---- if ((pes_format==1) && (count==1)) { ! the_page=(theargs[0]%10)|((((theargs[0]-(100*(theargs[0]/100)))%100)/10)<<4)|((theargs[0]/100)<<8); } else if ((pes_format==0) && (count==2)) { ! the_pid=theargs[0]; ! the_page=(theargs[1]%10)|((((theargs[1]-(100*(theargs[1]/100)))%100)/10)<<4)|((theargs[1]/100)<<8); } else { fprintf(stderr,USAGE); *************** *** 609,619 **** } - m=0; - mags[m][0].mag=8; - for (i=1;i<8;i++) { - mags[m][i].mag=i; - mags[m][i].valid=0; - } - thepage.valid=0; --- 600,603 ---- |
From: <linuxstb@us...> - 2004-03-08 19:46:27
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27661 Modified Files: dvbtextsubs.c Log Message: Add -keeppts - useful for playing .vdr or .ts files with mplayer Index: dvbtextsubs.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/dvbtextsubs.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** dvbtextsubs.c 8 Mar 2004 17:36:44 -0000 1.5 --- dvbtextsubs.c 8 Mar 2004 19:21:54 -0000 1.6 *************** *** 62,66 **** cat 0*.vdr | dvbtextsubs > output.xml\n\n\ Options: -srt Output subtitles in Subviewer format\n\ ! -pts PTS offset (in ms) to add to every PTS in output file\n" typedef enum { --- 62,67 ---- cat 0*.vdr | dvbtextsubs > output.xml\n\n\ Options: -srt Output subtitles in Subviewer format\n\ ! -pts PTS offset (in ms) to add to every PTS in output file\n\ ! -keeppts Output original PTS values (do not offset from start of file)\n" typedef enum { *************** *** 73,76 **** --- 74,78 ---- int debug=0; int no_pts_warning=0; + int keeppts=0; /* Structure of Transport Stream (from ISO/IEC 13818-1): *************** *** 355,359 **** subtitle.num_lines=0; ! subtitle.start_PTS=mag->PTS-FIRST_PTS; subtitle.lang=mag->lang; --- 357,362 ---- subtitle.num_lines=0; ! subtitle.start_PTS=mag->PTS; ! if (!keeppts) { subtitle.start_PTS-=FIRST_PTS; } subtitle.lang=mag->lang; *************** *** 583,586 **** --- 586,591 ---- } else if (strcmp(argv[i],"-srt")==0) { subformat=SUBFORMAT_SUBVIEWER; + } else if (strcmp(argv[i],"-keeppts")==0) { + keeppts=1; } else if (strcmp(argv[i],"-pts")==0) { i++; |
From: <linuxstb@us...> - 2004-03-08 19:39:43
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26257 Modified Files: Makefile Log Message: Add pes.o dependency for dvbtextsubs Index: Makefile =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/Makefile,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Makefile 6 Mar 2004 17:55:13 -0000 1.3 --- Makefile 8 Mar 2004 19:15:13 -0000 1.4 *************** *** 10,14 **** $(CC) $(INCS) $(CFLAGS) -o dvbsubs dvbsubs.c bitmap.o pes.o -lpng -lm -lz ! dvbtextsubs: dvbtextsubs.c tables.h vtxdecode.h $(CC) $(INCS) $(CFLAGS) -o dvbtextsubs dvbtextsubs.c pes.o --- 10,14 ---- $(CC) $(INCS) $(CFLAGS) -o dvbsubs dvbsubs.c bitmap.o pes.o -lpng -lm -lz ! dvbtextsubs: dvbtextsubs.c tables.h vtxdecode.h pes.o $(CC) $(INCS) $(CFLAGS) -o dvbtextsubs dvbtextsubs.c pes.o |
From: <linuxstb@us...> - 2004-03-08 18:01:13
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5137 Modified Files: dvbsubs.c dvbtextsubs.c pes.c pes.h Log Message: Change seperator for SRT output - thanks to Mattias Holmlund Index: dvbsubs.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/dvbsubs.c,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** dvbsubs.c 4 Mar 2004 13:31:18 -0000 1.14 --- dvbsubs.c 8 Mar 2004 17:36:44 -0000 1.15 *************** *** 574,578 **** if (first_PTS==0) { first_PTS=PTS; } ! fprintf(stderr,"%s\r",pts2hmsu(PTS-first_PTS)); --- 574,578 ---- if (first_PTS==0) { first_PTS=PTS; } ! fprintf(stderr,"%s\r",pts2hmsu(PTS-first_PTS,'.')); *************** *** 641,645 **** if (n) { sprintf(filename,"sub%05d.png",fileno++); ! fprintf(stdout,"<spu start=\"%s\" image=\"%s\" />\n",pts2hmsu(PTS-first_PTS),filename); save_png(filename); } --- 641,645 ---- if (n) { sprintf(filename,"sub%05d.png",fileno++); ! fprintf(stdout,"<spu start=\"%s\" image=\"%s\" />\n",pts2hmsu(PTS-first_PTS,'.'),filename); save_png(filename); } Index: dvbtextsubs.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/dvbtextsubs.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** dvbtextsubs.c 8 Mar 2004 17:31:24 -0000 1.4 --- dvbtextsubs.c 8 Mar 2004 17:36:44 -0000 1.5 *************** *** 239,246 **** } ! fprintf(fd," <spu lang=\"%s\" start=\"%s\"",langs[subtitle->lang],pts2hmsu(subtitle->start_PTS)); ! fprintf(stderr,"%s\r",pts2hmsu(subtitle->start_PTS)); if (subtitle->has_end_pts) { ! fprintf(fd," end=\"%s\"",pts2hmsu(subtitle->end_PTS)); } fprintf(fd,">\n"); --- 239,246 ---- } ! fprintf(fd," <spu lang=\"%s\" start=\"%s\"",langs[subtitle->lang],pts2hmsu(subtitle->start_PTS,'.')); ! fprintf(stderr,"%s\r",pts2hmsu(subtitle->start_PTS,'.')); if (subtitle->has_end_pts) { ! fprintf(fd," end=\"%s\"",pts2hmsu(subtitle->end_PTS,'.')); } fprintf(fd,">\n"); *************** *** 312,318 **** } ! fprintf(stderr,"%s\r",pts2hmsu(subtitle->start_PTS)); ! fprintf(fd,"%d\n%s --> ",++sub_count,pts2hmsu(subtitle->start_PTS)); ! fprintf(fd,"%s\n",pts2hmsu(subtitle->end_PTS)); j=0; --- 312,318 ---- } ! fprintf(stderr,"%s\r",pts2hmsu(subtitle->start_PTS,',')); ! fprintf(fd,"%d\n%s --> ",++sub_count,pts2hmsu(subtitle->start_PTS,',')); ! fprintf(fd,"%s\n",pts2hmsu(subtitle->end_PTS,',')); j=0; Index: pes.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/pes.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** pes.c 6 Mar 2004 18:13:32 -0000 1.2 --- pes.c 8 Mar 2004 17:36:44 -0000 1.3 *************** *** 18,22 **** char pts_text[30]; ! char* pts2hmsu(uint64_t pts) { int h,m,s,u; --- 18,22 ---- char pts_text[30]; ! char* pts2hmsu(uint64_t pts,char sep) { int h,m,s,u; *************** *** 26,30 **** u=pts-(h*1000*60*60)-(m*1000*60)-(s*1000); ! sprintf(pts_text,"%d:%02d:%02d.%03d",h,m,s,u); return(pts_text); } --- 26,30 ---- u=pts-(h*1000*60*60)-(m*1000*60)-(s*1000); ! sprintf(pts_text,"%d:%02d:%02d%c%03d",h,m,s,sep,u); return(pts_text); } Index: pes.h =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/pes.h,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** pes.h 4 Mar 2004 13:31:18 -0000 1.1 --- pes.h 8 Mar 2004 17:36:44 -0000 1.2 *************** *** 4,8 **** #include <stdint.h> ! char* pts2hmsu(uint64_t pts); uint64_t get_pes_pts (unsigned char* buf); int read_pes_packet (int fd, uint16_t pid, uint8_t* buf, int vdrmode); --- 4,8 ---- #include <stdint.h> ! char* pts2hmsu(uint64_t pts, char sep); uint64_t get_pes_pts (unsigned char* buf); int read_pes_packet (int fd, uint16_t pid, uint8_t* buf, int vdrmode); |
From: <linuxstb@us...> - 2004-03-08 17:55:52
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3991 Modified Files: dvbtextsubs.c Log Message: Bugfix - SRT subtitles displaying same start and end time. Thanks to Mattias Holmlund Index: dvbtextsubs.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/dvbtextsubs.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** dvbtextsubs.c 6 Mar 2004 18:13:32 -0000 1.3 --- dvbtextsubs.c 8 Mar 2004 17:31:24 -0000 1.4 *************** *** 313,317 **** fprintf(stderr,"%s\r",pts2hmsu(subtitle->start_PTS)); ! fprintf(fd,"%d\n%s --> %s\n",++sub_count,pts2hmsu(subtitle->start_PTS),pts2hmsu(subtitle->end_PTS)); j=0; --- 313,318 ---- fprintf(stderr,"%s\r",pts2hmsu(subtitle->start_PTS)); ! fprintf(fd,"%d\n%s --> ",++sub_count,pts2hmsu(subtitle->start_PTS)); ! fprintf(fd,"%s\n",pts2hmsu(subtitle->end_PTS)); j=0; |
From: <linuxstb@us...> - 2004-03-06 18:36:27
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10124 Modified Files: dvbtextsubs.c pes.c Log Message: Align subtitles to first audio PTS Index: dvbtextsubs.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/dvbtextsubs.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** dvbtextsubs.c 6 Mar 2004 18:01:18 -0000 1.2 --- dvbtextsubs.c 6 Mar 2004 18:13:32 -0000 1.3 *************** *** 103,108 **** uint64_t audio_pts=0; uint64_t first_audio_pts=0; - uint64_t video_pts=0; - uint64_t first_video_pts=0; uint64_t FIRST_PTS=0; int sub_count=0; --- 103,106 ---- *************** *** 509,519 **** //fprintf(stdout,"stream_id=%02x, No PTS\n",stream_id); if (no_pts_warning==0) { ! fprintf(stderr,"WARNING: No PTS value in teletext packet - using audio or video PTS.\n"); ! fprintf(stderr,"First audio PTS=%lld ms, First video PTS=%lld ms\n",first_audio_pts,first_video_pts); no_pts_warning=1; } - // fprintf(stderr,"here: audio_pts=%lld ms, video_pts=%lld ms\n",audio_pts,video_pts); PTS=audio_pts; ! if (FIRST_PTS==0) { FIRST_PTS=first_video_pts-USER_PTS; } } k=buf[8]+9; --- 507,516 ---- //fprintf(stdout,"stream_id=%02x, No PTS\n",stream_id); if (no_pts_warning==0) { ! fprintf(stderr,"WARNING: No PTS value in teletext packet - using audio PTS.\n"); ! fprintf(stderr,"First audio PTS=%lld ms\n",first_audio_pts); no_pts_warning=1; } PTS=audio_pts; ! if (FIRST_PTS==0) { FIRST_PTS=first_audio_pts-USER_PTS; } } k=buf[8]+9; Index: pes.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/pes.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** pes.c 4 Mar 2004 13:31:18 -0000 1.1 --- pes.c 6 Mar 2004 18:13:32 -0000 1.2 *************** *** 8,12 **** #include "pes.h" ! extern uint64_t video_pts,first_video_pts,audio_pts,first_audio_pts; ssize_t safe_read(int fd, unsigned char* buf, size_t count) { --- 8,12 ---- #include "pes.h" ! extern uint64_t audio_pts,first_audio_pts; ssize_t safe_read(int fd, unsigned char* buf, size_t count) { *************** *** 78,85 **** if (stream_id==0xbd) { finished=1; - } else if (stream_id==0xe0) { - tmp_pts=get_pes_pts(buf); - if (tmp_pts > video_pts) { video_pts=tmp_pts; } - if (first_video_pts==0) { first_video_pts=video_pts; } } else if (stream_id==0xc0) { tmp_pts=get_pes_pts(buf); --- 78,81 ---- |
From: <linuxstb@us...> - 2004-03-06 18:24:48
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6887 Modified Files: CHANGES Log Message: Replace MicroDVD output with Subviewer format Index: CHANGES =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/CHANGES,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** CHANGES 4 Mar 2004 13:31:18 -0000 1.1 --- CHANGES 6 Mar 2004 18:01:53 -0000 1.2 *************** *** 4,8 **** Added "-pts" parameter to dvbtextsubs to specify a PTS offset Removed DVB tuning facilities (just pipe from dvbstream) ! Added "MicroDVD" subtitle format output for dvbtextsubs Version 0.2b - Corrected language encodings in vtxdecode.h and added support --- 4,8 ---- Added "-pts" parameter to dvbtextsubs to specify a PTS offset Removed DVB tuning facilities (just pipe from dvbstream) ! Added "Subviewer" subtitle format output for dvbtextsubs Version 0.2b - Corrected language encodings in vtxdecode.h and added support |
From: <linuxstb@us...> - 2004-03-06 18:24:13
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6730 Modified Files: dvbtextsubs.c Log Message: Replace MicroDVD output with Subviewer format Index: dvbtextsubs.c =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/dvbtextsubs.c,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** dvbtextsubs.c 4 Mar 2004 13:31:18 -0000 1.1 --- dvbtextsubs.c 6 Mar 2004 18:01:18 -0000 1.2 *************** *** 61,70 **** The DVB stream must be piped to dvbtextsubs. e.g.:\n\n\ cat 0*.vdr | dvbtextsubs > output.xml\n\n\ ! Options: -microdvd Output subtitles in MicroDVD format\n\ ! -pts PTS offset (in ms) to add to every PTS in output file\n" typedef enum { SUBFORMAT_XML, ! SUBFORMAT_MICRODVD } subformat_t; --- 61,70 ---- The DVB stream must be piped to dvbtextsubs. e.g.:\n\n\ cat 0*.vdr | dvbtextsubs > output.xml\n\n\ ! Options: -srt Output subtitles in Subviewer format\n\ ! -pts PTS offset (in ms) to add to every PTS in output file\n" typedef enum { SUBFORMAT_XML, ! SUBFORMAT_SUBVIEWER } subformat_t; *************** *** 106,109 **** --- 106,110 ---- uint64_t first_video_pts=0; uint64_t FIRST_PTS=0; + int sub_count=0; typedef struct { *************** *** 281,285 **** } ! void print_microdvd(FILE* fd, subtitle_t* subtitle) { int i; char ch; --- 282,286 ---- } ! void print_subviewer(FILE* fd, subtitle_t* subtitle) { int i; char ch; *************** *** 314,324 **** fprintf(stderr,"%s\r",pts2hmsu(subtitle->start_PTS)); ! fprintf(fd,"{%lld}",(subtitle->start_PTS+FIRST_PTS)/40); ! fprintf(fd,"{%lld}",((subtitle->end_PTS+FIRST_PTS)/40)-1); j=0; for (row=0;row<subtitle->num_lines;row++) { colour=-1; - if (j>0) { fprintf(fd,"|"); } for (i=1;i<=40;i++) { ch=subtitle->lines[row][i-1]&0x7f; --- 315,323 ---- fprintf(stderr,"%s\r",pts2hmsu(subtitle->start_PTS)); ! fprintf(fd,"%d\n%s --> %s\n",++sub_count,pts2hmsu(subtitle->start_PTS),pts2hmsu(subtitle->end_PTS)); j=0; for (row=0;row<subtitle->num_lines;row++) { colour=-1; for (i=1;i<=40;i++) { ch=subtitle->lines[row][i-1]&0x7f; *************** *** 348,352 **** } // if (colour!=-1) fprintf(fd,"</%s>",colours[colour]); ! // fprintf(fd,"</line>\n"); } fprintf(fd,"\n"); --- 347,351 ---- } // if (colour!=-1) fprintf(fd,"</%s>",colours[colour]); ! fprintf(fd,"\n"); } fprintf(fd,"\n"); *************** *** 378,382 **** switch (subformat) { case SUBFORMAT_XML: print_xml(stdout,&prev_subtitle); break; ! case SUBFORMAT_MICRODVD: print_microdvd(stdout,&prev_subtitle); break; default: break; } --- 377,381 ---- switch (subformat) { case SUBFORMAT_XML: print_xml(stdout,&prev_subtitle); break; ! case SUBFORMAT_SUBVIEWER: print_subviewer(stdout,&prev_subtitle); break; default: break; } *************** *** 584,589 **** } else if (strcmp(argv[i],"-vdr")==0) { pes_format=1; ! } else if (strcmp(argv[i],"-microdvd")==0) { ! subformat=SUBFORMAT_MICRODVD; } else if (strcmp(argv[i],"-pts")==0) { i++; --- 583,588 ---- } else if (strcmp(argv[i],"-vdr")==0) { pes_format=1; ! } else if (strcmp(argv[i],"-srt")==0) { ! subformat=SUBFORMAT_SUBVIEWER; } else if (strcmp(argv[i],"-pts")==0) { i++; |
From: <linuxstb@us...> - 2004-03-06 18:18:08
|
Update of /cvsroot/dvbtools/dvbsubs In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4846 Modified Files: Makefile README Added Files: xml2srt.sh xml2srt.xslt Log Message: Import of xml2srt contributed by Mattias Holmlund --- NEW FILE: xml2srt.sh --- #!/bin/bash if [ -z "$1" ] then echo "Convert a subtitle file generated by dvbtextsubs into an srt-file." echo "Usage: `basename $0` subtitles.xml > subtitles.srt" exit $E_ARGERROR fi sed --silent -e '/START_OF_XSLT$/,/^START_OF_XSLT$/p' $0 | sed -e '/START_OF_XSLT$/d' | xsltproc - $1 exit 0 : <<START_OF_XSLT --- NEW FILE: xml2srt.xslt --- <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" encoding="iso-8859-1" /> <xsl:template match="/"> <xsl:apply-templates select="//spu"/> </xsl:template> <xsl:template match="spu"><xsl:value-of select="position()"/><xsl:text> </xsl:text><xsl:value-of select="translate(@start,'.',',')"/> --> <xsl:value-of select="translate(@end,'.',',')"/><xsl:text> </xsl:text> <xsl:apply-templates/><xsl:text> </xsl:text> </xsl:template> <xsl:template match="line"><xsl:value-of select="."/><xsl:text> </xsl:text></xsl:template> <xsl:template match="text()"></xsl:template> </xsl:stylesheet> Index: Makefile =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/Makefile,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Makefile 4 Mar 2004 13:31:18 -0000 1.2 --- Makefile 6 Mar 2004 17:55:13 -0000 1.3 *************** *** 1,4 **** CC=gcc ! OBJS=dvbsubs dvbtextsubs xml2spumux CFLAGS+=-Wall --- 1,4 ---- CC=gcc ! OBJS=dvbsubs dvbtextsubs xml2spumux xml2srt CFLAGS+=-Wall *************** *** 25,28 **** --- 25,32 ---- $(CC) $(INCS) $(CFLAGS) -o xml2spumux xml2spumux.c bitmap.o render_freetype.o -lxml2 -lpng -lfreetype -lm -lz + xml2srt: xml2srt.xslt xml2srt.sh + cat xml2srt.sh xml2srt.xslt > xml2srt + chmod +x xml2srt + clean: rm -f *.o *~ $(OBJS) Index: README =================================================================== RCS file: /cvsroot/dvbtools/dvbsubs/README,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** README 4 Mar 2004 13:31:18 -0000 1.5 --- README 6 Mar 2004 17:55:14 -0000 1.6 *************** *** 144,147 **** --- 144,149 ---- This plugin is available from ftp://ftp.nada.kth.se/pub/home/ragge/vdr/ + xml2srt was contributed by Mattias Holmlund. + 5. COPYRIGHT NOTICE |