All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [linux-dvb] Lite-On TVT-1060
@ 2008-05-08 10:55 tille
  2008-05-08 11:13 ` [linux-dvb] basic NLS support for scan util ldvb
  0 siblings, 1 reply; 2+ messages in thread
From: tille @ 2008-05-08 10:55 UTC (permalink / raw
  To: linux-dvb

Hi 

I am responding to your "If you own one or more devices from the following 
list and you want to help with support development" on 
http://linuxtv.org/wiki/index.php/DVB-T_PCIe_Cards.

I am owner of a Asus G2 Laptop with a Lite-On TVT-1060 TV card and I do not at 
all mind to support development or do some development myself.

Patrick

_______________________________________________
linux-dvb mailing list
linux-dvb@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [linux-dvb] basic NLS support for scan util
  2008-05-08 10:55 [linux-dvb] Lite-On TVT-1060 tille
@ 2008-05-08 11:13 ` ldvb
  0 siblings, 0 replies; 2+ messages in thread
From: ldvb @ 2008-05-08 11:13 UTC (permalink / raw
  To: linux-dvb

[-- Attachment #1: Type: TEXT/PLAIN, Size: 321 bytes --]


So, new option appears, -E encoding.
If not given, use no recoding (default, old behaviour).
Affects provider's name and services name, thus output is encoded in 
encoding (I see some progs using UTF or so in input channels.conf, and, 
also, there is no other way for progs to know which encoding was used by 
provider).

[-- Attachment #2: Type: TEXT/PLAIN, Size: 9670 bytes --]

*** scan.c.orig	2008-05-03 16:26:59.000000000 +0400
--- scan.c	2008-05-08 15:49:23.000000000 +0400
***************
*** 33,38 ****
--- 33,39 ----
  #include <assert.h>
  #include <glob.h>
  #include <ctype.h>
+ #include <iconv.h>
  
  #include <linux/dvb/frontend.h>
  #include <linux/dvb/dmx.h>
***************
*** 43,48 ****
--- 44,50 ----
  #include "dump-vdr.h"
  #include "scan.h"
  #include "lnb.h"
+ #include "../../lib/libucsi/dvb/types.h"
  
  #include "atsc_psip_section.h"
  
***************
*** 84,89 ****
--- 86,93 ----
  static enum format output_format = OUTPUT_ZAP;
  static int output_format_set = 0;
  
+ #define ICONV_ENC_LENGTH	32
+ static char output_encoding[ICONV_ENC_LENGTH]="";
  
  enum polarisation {
  	POLARISATION_HORIZONTAL     = 0x00,
***************
*** 107,113 ****
--- 111,119 ----
  	int transport_stream_id;
  	int service_id;
  	char *provider_name;
+ 	char *provider_name_enc;
  	char *service_name;
+ 	char *service_name_enc;	// recoded to the charset given
  	uint16_t pmt_pid;
  	uint16_t pcr_pid;
  	uint16_t video_pid;
***************
*** 126,131 ****
--- 132,138 ----
  	int channel_num;
  };
  
+ 
  struct transponder {
  	struct list_head list;
  	struct list_head services;
***************
*** 536,544 ****
  {
  	unsigned char len;
  	unsigned char *src, *dest;
  
  	s->type = buf[2];
! 
  	buf += 3;
  	len = *buf;
  	buf++;
--- 543,557 ----
  {
  	unsigned char len;
  	unsigned char *src, *dest;
+ 	int consumed=0;
+ 	iconv_t conv_;
+ 	char buv[1024], *buv_, *srv;
+ 	const char *chs;
+ 	
+ 	size_t inbytesleft=0, outbytesleft=0;
  
  	s->type = buf[2];
! 	
  	buf += 3;
  	len = *buf;
  	buf++;
***************
*** 550,566 ****
  	memcpy (s->provider_name, buf, len);
  	s->provider_name[len] = '\0';
  
  	/* remove control characters (FIXME: handle short/long name) */
  	/* FIXME: handle character set correctly (e.g. via iconv)
  	 * c.f. EN 300 468 annex A */
  	for (src = dest = (unsigned char *) s->provider_name; *src; src++)
! 		if (*src >= 0x20 && (*src < 0x80 || *src > 0x9f))
  			*dest++ = *src;
  	*dest = '\0';
  	if (!s->provider_name[0]) {
  		/* zap zero length names */
  		free (s->provider_name);
  		s->provider_name = 0;
  	}
  
  	if (s->service_name)
--- 563,598 ----
  	memcpy (s->provider_name, buf, len);
  	s->provider_name[len] = '\0';
  
+ 	// I do not know, if a provider would like to use NLS....
+ 	chs=dvb_charset(s->provider_name, len+1, &consumed);
  	/* remove control characters (FIXME: handle short/long name) */
  	/* FIXME: handle character set correctly (e.g. via iconv)
  	 * c.f. EN 300 468 annex A */
  	for (src = dest = (unsigned char *) s->provider_name; *src; src++)
! 		if (*src >= 0x20 && (*src < 0x80 || *src > 0x9f)) {
  			*dest++ = *src;
+ 			inbytesleft++;
+ 			}
  	*dest = '\0';
  	if (!s->provider_name[0]) {
  		/* zap zero length names */
  		free (s->provider_name);
  		s->provider_name = 0;
+ 	} 	else {
+ 	if(strlen(output_encoding) > 1) {
+ 	bzero(buv,1024);
+ 	if(s->provider_name_enc) free(s->provider_name_enc);
+ 	if(consumed > 0) {
+ 		conv_=iconv_open(output_encoding, chs);
+ 		inbytesleft++; // for '\0'
+ 		buv_=(char*)buv;
+ 		srv=s->provider_name;
+ 		outbytesleft=inbytesleft*4;
+ 		iconv(conv_,&srv, &inbytesleft,&buv_, &outbytesleft);
+ 		iconv_close(conv_);
+ 		s->provider_name_enc=strdup(buv);
+ 		}
+ 		}
  	}
  
  	if (s->service_name)
***************
*** 574,597 ****
  	memcpy (s->service_name, buf, len);
  	s->service_name[len] = '\0';
  
  	/* remove control characters (FIXME: handle short/long name) */
  	/* FIXME: handle character set correctly (e.g. via iconv)
  	 * c.f. EN 300 468 annex A */
  	for (src = dest = (unsigned char *) s->service_name; *src; src++)
! 		if (*src >= 0x20 && (*src < 0x80 || *src > 0x9f))
  			*dest++ = *src;
  	*dest = '\0';
  	if (!s->service_name[0]) {
  		/* zap zero length names */
  		free (s->service_name);
  		s->service_name = 0;
  	}
- 
  	info("0x%04x 0x%04x: pmt_pid 0x%04x %s -- %s (%s%s)\n",
  	    s->transport_stream_id,
  	    s->service_id,
  	    s->pmt_pid,
! 	    s->provider_name, s->service_name,
  	    s->running == RM_NOT_RUNNING ? "not running" :
  	    s->running == RM_STARTS_SOON ? "starts soon" :
  	    s->running == RM_PAUSING     ? "pausing" :
--- 606,648 ----
  	memcpy (s->service_name, buf, len);
  	s->service_name[len] = '\0';
  
+ 	chs=dvb_charset(s->service_name, len+1, &consumed);
+ 	inbytesleft=0;
  	/* remove control characters (FIXME: handle short/long name) */
  	/* FIXME: handle character set correctly (e.g. via iconv)
  	 * c.f. EN 300 468 annex A */
  	for (src = dest = (unsigned char *) s->service_name; *src; src++)
! 		if (*src >= 0x20 && (*src < 0x80 || *src > 0x9f)) {
  			*dest++ = *src;
+ 			inbytesleft++;
+ 			}
  	*dest = '\0';
  	if (!s->service_name[0]) {
  		/* zap zero length names */
  		free (s->service_name);
  		s->service_name = 0;
+ 	} else {
+ 	if(strlen(output_encoding) > 1) {
+ 	bzero(buv,1024);
+ 	if(s->service_name_enc) free(s->service_name_enc);
+ 	if(consumed > 0) {
+ 		conv_=iconv_open(output_encoding, chs);
+ 		inbytesleft++; // for '\0'
+ 		buv_=(char*)buv;
+ 		srv=s->service_name;
+ 		outbytesleft=inbytesleft*4;
+ 		iconv(conv_,&srv, &inbytesleft,&buv_, &outbytesleft);
+ 		iconv_close(conv_);
+ 		s->service_name_enc=strdup(buv);
+ 		}
+ 		}
  	}
  	info("0x%04x 0x%04x: pmt_pid 0x%04x %s -- %s (%s%s)\n",
  	    s->transport_stream_id,
  	    s->service_id,
  	    s->pmt_pid,
! 	    (s->provider_name_enc)?s->provider_name_enc:s->provider_name,
! 	    (s->service_name_enc)? s->service_name_enc: s->service_name,
  	    s->running == RM_NOT_RUNNING ? "not running" :
  	    s->running == RM_STARTS_SOON ? "starts soon" :
  	    s->running == RM_PAUSING     ? "pausing" :
***************
*** 829,835 ****
          debug("0x%04x 0x%04x: %s -- %s, pmt_pid 0x%04x, vpid 0x%04x, apid %s\n",
  	    s->transport_stream_id,
  	    s->service_id,
! 	    s->provider_name, s->service_name,
  	    s->pmt_pid, s->video_pid, msg_buf);
  }
  
--- 880,887 ----
          debug("0x%04x 0x%04x: %s -- %s, pmt_pid 0x%04x, vpid 0x%04x, apid %s\n",
  	    s->transport_stream_id,
  	    s->service_id,
! 	    (s->provider_name_enc)?s->provider_name_enc:s->provider_name,
! 	    (s->service_name_enc)?s->service_name_enc:s->service_name,
  	    s->pmt_pid, s->video_pid, msg_buf);
  }
  
***************
*** 1897,1903 ****
  {
          int i;
  
! 	fprintf(f, "%-24.24s (0x%04x) %02x: ", s->service_name, s->service_id, s->type);
  	if (!s->pcr_pid || (s->type > 2))
  		fprintf(f, "           ");
  	else if (s->pcr_pid == s->video_pid)
--- 1949,1955 ----
  {
          int i;
  
! 	fprintf(f, "%-24.24s (0x%04x) %02x: ", (s->service_name_enc)?s->service_name_enc:s->service_name, s->service_id, s->type);
  	if (!s->pcr_pid || (s->type > 2))
  		fprintf(f, "           ");
  	else if (s->pcr_pid == s->video_pid)
***************
*** 2001,2008 ****
  				break;
  			  case OUTPUT_VDR:
  				vdr_dump_service_parameter_set (stdout,
! 						    s->service_name,
! 						    s->provider_name,
  						    t->type,
  						    &t->param,
  						    sat_polarisation(t),
--- 2053,2060 ----
  				break;
  			  case OUTPUT_VDR:
  				vdr_dump_service_parameter_set (stdout,
! 						    (s->service_name_enc)?s->service_name_enc : s->service_name,
! 						    (s->provider_name_enc)?s->provider_name_enc:s->provider_name,
  						    t->type,
  						    &t->param,
  						    sat_polarisation(t),
***************
*** 2028,2034 ****
  				break;
  			  case OUTPUT_ZAP:
  				zap_dump_service_parameter_set (stdout,
! 						    s->service_name,
  						    t->type,
  						    &t->param,
  						    sat_polarisation(t),
--- 2080,2086 ----
  				break;
  			  case OUTPUT_ZAP:
  				zap_dump_service_parameter_set (stdout,
! 						    (s->service_name_enc)?s->service_name_enc : s->service_name,
  						    t->type,
  						    &t->param,
  						    sat_polarisation(t),
***************
*** 2107,2113 ****
  	"	-P do not use ATSC PSIP tables for scanning\n"
  	"	    (but only PAT and PMT) (applies for ATSC only)\n"
  	"	-A N	check for ATSC 1=Terrestrial [default], 2=Cable or 3=both\n"
! 	"	-U	Uniquely name unknown services\n";
  
  void
  bad_usage(char *pname, int problem)
--- 2159,2166 ----
  	"	-P do not use ATSC PSIP tables for scanning\n"
  	"	    (but only PAT and PMT) (applies for ATSC only)\n"
  	"	-A N	check for ATSC 1=Terrestrial [default], 2=Cable or 3=both\n"
! 	"	-U	Uniquely name unknown services\n"
! 	"	-E enc	Output encoding for iconv. Look at iconv -l.\n";
  
  void
  bad_usage(char *pname, int problem)
***************
*** 2155,2161 ****
  
  	/* start with default lnb type */
  	lnb_type = *lnb_enum(0);
! 	while ((opt = getopt(argc, argv, "5cnpa:f:d:s:o:x:e:t:i:l:vquPA:U")) != -1) {
  		switch (opt) {
  		case 'a':
  			adapter = strtoul(optarg, NULL, 0);
--- 2208,2214 ----
  
  	/* start with default lnb type */
  	lnb_type = *lnb_enum(0);
! 	while ((opt = getopt(argc, argv, "5cnpa:f:d:s:o:x:e:t:E:i:l:vquPA:U")) != -1) {
  		switch (opt) {
  		case 'a':
  			adapter = strtoul(optarg, NULL, 0);
***************
*** 2235,2240 ****
--- 2288,2296 ----
  		case 'U':
  			unique_anon_services = 1;
  			break;
+ 		case 'E':
+ 			strncpy(output_encoding,optarg,ICONV_ENC_LENGTH);
+ 			break;
  		default:
  			bad_usage(argv[0], 0);
  			return -1;

[-- Attachment #3: Type: TEXT/PLAIN, Size: 324 bytes --]

*** Makefile.orig	2008-05-03 16:26:59.000000000 +0400
--- Makefile	2008-05-06 17:46:24.000000000 +0400
***************
*** 15,20 ****
--- 15,21 ----
  removing = atsc_psip_section.c atsc_psip_section.h
  
  CPPFLAGS += -DDATADIR=\"$(prefix)/share\"
+ LOADLIBES +=  -L../../lib/libucsi -lucsi
  
  .PHONY: all
  

[-- Attachment #4: Type: text/plain, Size: 150 bytes --]

_______________________________________________
linux-dvb mailing list
linux-dvb@linuxtv.org
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-05-08 12:12 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-08 10:55 [linux-dvb] Lite-On TVT-1060 tille
2008-05-08 11:13 ` [linux-dvb] basic NLS support for scan util ldvb

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.