[PATCH] ATSC scanning support

View: New views
5 Messages — Rating Filter:   Alert me  

[PATCH] ATSC scanning support

by Bugzilla from devin.heitmueller@gmail.com :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello,

Attached is a patch to provide ATSC scanning support.  Tested with an
HVR-950 in New York, it is providing identical results to both the
scan provided in dvb-apps as well as Elgato EyeTV.  Also compared the
resulting output against the results of the atsc converter tool
referred to in README.atsc.

I would appreciate it if the patch could be reviewed and considered
for inclusion.  Comments are certainly welcomed.

Known issues:

* Closed captioning not yet supported.
* Expects there to be an "atsc" directory containing the transponder
files in .kde/share/apps/kaffeine (normally provided by
dvbdata.tar.gz).  I copied the content from the dvb-apps version of
the transponder files.  This solution would expect dvbdata.tar.gz to
start providing the ATSC transponder files.
* Not fully validated with multi-lingual AC3 audio streams (but
appears to be working at initial testing)
* Not validated with CVCT (Cable/QAM).  Only tested with over the air
ATSC (TVCT)
* An additional digit has been added to the channel number, so sorting
works properly (now 5 digits instead of 4).  We probably eventually
need a better way to support subchannels when it comes to sorting but
this works for now.

There is certainly some more cleanup/restructuring that could be done
in terms of sharing code between the ATSC and DVB support, but my goal
at this point was to provide a patch that incurs minimal impact on the
existing DVB functionality (since I can't test those parts).

Thanks,

--
Devin J. Heitmueller
http://www.devinheitmueller.com
AIM: devinheitmueller

[kaffeine_atsc_scanning.patch]

Index: src/input/dvb/scandialog.cpp
===================================================================
--- src/input/dvb/scandialog.cpp (revision 823757)
+++ src/input/dvb/scandialog.cpp (working copy)
@@ -425,7 +425,11 @@
  trans->type=FE_QAM;
  trans->source = "Cable";
  }
- else {
+ else if ( s.left(pos)=="A" ) {
+ trans->type=FE_ATSC;
+ trans->source = "ATSC Terrestrial";
+ }
+ else if ( s.left(pos)=="S" ) {
  trans->type=FE_QPSK;
  trans->source = src;
  }
@@ -439,14 +443,15 @@
  trans->freq = s.left(pos).toULong()/1000;
  s = s.right( s.length()-pos-1 );
  s = s.stripWhiteSpace();
- pos = s.find(" ");
+ if ( trans->type!=FE_ATSC )
+ pos = s.find(" ");
  if ( trans->type==FE_QPSK ) {
  trans->pol =  s.left(pos).lower()[0].latin1();
  s = s.right( s.length()-pos-1 );
  s = s.stripWhiteSpace();
  pos = s.find(" ");
  }
- if ( trans->type!=FE_OFDM ) {
+ if ( trans->type!=FE_OFDM && trans->type!=FE_ATSC ) {
  trans->sr = s.left(pos).toULong()/1000;
  }
  else {
@@ -459,6 +464,27 @@
  else
  trans->bandwidth = BANDWIDTH_AUTO;
  }
+ if ( trans->type==FE_ATSC ) {
+ if ( s.left(pos)=="8VSB" )
+ trans->modulation = VSB_8;
+ else if ( s.left(pos)=="16VSB" )
+ trans->modulation = VSB_16;
+ else if ( s.left(pos)=="QAM16" )
+ trans->modulation = QAM_16;
+ else if ( s.left(pos)=="QAM32" )
+ trans->modulation = QAM_32;
+ else if ( s.left(pos)=="QAM64" )
+ trans->modulation = QAM_64;
+ else if ( s.left(pos)=="QAM128" )
+ trans->modulation = QAM_128;
+ else if ( s.left(pos)=="QAM256" )
+ trans->modulation = QAM_256;
+ else
+ trans->modulation = QAM_AUTO;
+ transponders.append( trans );
+ return;
+ }
+
  s = s.right( s.length()-pos-1 );
  s = s.stripWhiteSpace();
  pos = s.find(" ");
@@ -605,7 +631,9 @@
  case FE_QPSK : s += "dvb-s/"; break;
  case FE_QAM : s += "dvb-c/"; break;
  case FE_OFDM : s += "dvb-t/"; break;
- case FE_ATSC : return false;
+ case FE_ATSC : s += "atsc/"; break;
+ default:
+ return false;
  }
  s += searchComb->currentText();
  QFile f( s );
@@ -713,7 +741,9 @@
  if(checkChannUpdate(chan)){
  checkDuplicateName( chan );
 
- chan->num = chandesc->count()+1;
+ if (chan->num == 0) {
+ chan->num = chandesc->count()+1;
+ }
  chandesc->append( new ChannelDesc( *chan ) );
  it = new QListViewItem( channelsList, chan->name );
  if ( chan->type==1 ) {
Index: src/input/dvb/dvbsi.h
===================================================================
--- src/input/dvb/dvbsi.h (revision 823757)
+++ src/input/dvb/dvbsi.h (working copy)
@@ -66,6 +66,11 @@
  bool tablePMT( unsigned char* buf );
  void serviceDesc( unsigned char* buf, ChannelDesc *desc );
 
+ // ATSC related methods
+ virtual bool handle_atsc_transponder();
+ virtual bool parseMGT( int pid, int tid, int timeout=5000, int sid=0 );
+ virtual bool parseVCT( int pid, int tid, int timeout=5000, int sid=0 );
+
  QPtrList<ChannelDesc> channels;
  QPtrList<Transponder> transponders;
  DvbStream *dvb;
@@ -90,6 +95,9 @@
  int scanMode;
  NitSection *ns;
 
+ /* ATSC related */
+ int vct_table;
+
 signals:
 
  void end( bool );
Index: src/input/dvb/dvbconfig.cpp
===================================================================
--- src/input/dvb/dvbconfig.cpp (revision 823757)
+++ src/input/dvb/dvbconfig.cpp (working copy)
@@ -292,9 +292,9 @@
 
 bool DVBconfig::haveData()
 {
- if ( !QDir( dvbConfigDir+"dvb-s" ).exists() || !QDir( dvbConfigDir+"dvb-c" ).exists() || !QDir( dvbConfigDir+"dvb-t" ).exists() ) {
+ if ( !QDir( dvbConfigDir+"dvb-s" ).exists() || !QDir( dvbConfigDir+"dvb-c" ).exists() || !QDir( dvbConfigDir+"dvb-t" ).exists() || !QDir( dvbConfigDir+"atsc" ).exists()) {
  loadDvbData(0);
- if ( !QDir( dvbConfigDir+"dvb-s" ).exists() || !QDir( dvbConfigDir+"dvb-c" ).exists() || !QDir( dvbConfigDir+"dvb-t" ).exists() ) {
+ if ( !QDir( dvbConfigDir+"dvb-s" ).exists() || !QDir( dvbConfigDir+"dvb-c" ).exists() || !QDir( dvbConfigDir+"dvb-t" ).exists() || !QDir( dvbConfigDir+"atsc" ).exists() ) {
  if ( !localData() )
  return false;
  }
@@ -313,6 +313,7 @@
  case FE_QPSK : s = "dvb-s"; break;
  case FE_QAM : s = "dvb-c"; break;
  case FE_OFDM : s = "dvb-t"; break;
+ case FE_ATSC : s = "atsc"; break;
  default : return list;
  }
  list = QDir( dvbConfigDir+s ).entryList( QDir::Files, QDir::Name );
Index: src/input/dvb/dvbsi.cpp
===================================================================
--- src/input/dvb/dvbsi.cpp (revision 823757)
+++ src/input/dvb/dvbsi.cpp (working copy)
@@ -2,6 +2,7 @@
  * dvbsi.cpp
  *
  * Copyright (C) 2003-2007 Christophe Thommeret <hftom@...>
+ * Copyright (C) 2008 Devin Heitmueller <devin.heitmueller@...>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -30,8 +31,22 @@
 
 #define TIMER_EVENT_SCAN_END 100
 
+// These values are taken from ATSC A/65C Sec 5
+#define PSIP_BASE_PID 0x1ffb
 
+// This shouldn't be necessary, but at least the HVR-950 doesn't seem to
+// find them in the time specified in the spec (needs more investigation)
+#define CYCLE_TIME_FUDGEFACTOR 1000
 
+// These values are taken from ATSC A/65C Sec 7.1
+// (all values in ms)
+#define PSIP_MAX_CYCLE_TIME_MGT 150 + CYCLE_TIME_FUDGEFACTOR
+#define PSIP_MAX_CYCLE_TIME_VCT 400 + CYCLE_TIME_FUDGEFACTOR
+
+// These values are taken from ATSC A/65C Sec 4.1
+#define PSIP_TABLE_TYPE_MGT     0xc7
+#define PSIP_TABLE_TYPE_TVCT    0xc8
+
 NitSection::NitSection( QPtrList<Transponder> *tp, bool *end, bool *ok, int anum, int tnum ) : KaffeineDVBsection( anum, tnum )
 {
  ended = end;
@@ -466,6 +481,11 @@
  if ( type==3 || type==4 ) {
  audio = true;
  }
+ if (type == 0x81) {
+  // AC3 was added in ATSC A/52B (See A3.1 "Stream Type")
+  audio = true;
+  ac3 = true;
+ }
  loop = getBits(buf,28,12);
  buf +=5;
  length -=(5+loop);
@@ -637,8 +657,205 @@
  return true;
 }
 
+bool DVBsi::parseMGT( int pid, int tid, int timeout, int sid )
+{
+ unsigned char buf[4096];
+ int n=0;
+ int skip=0;
+ bool vct_found = false;
 
+ fprintf(stderr, "parseMGT called for 0x%02x 0x%02x\n", pid, tid);
+ if ( !setFilter( pid, tid, timeout ) )
+ return false;
 
+ if ( poll(pf,1,timeout)>0 ){
+ if ( pf[0].revents & POLLIN ){
+ n = read( fdDemux, buf, 4096 );
+ skip = 0;
+ }
+ else
+ skip++;
+ }
+ else
+ skip++;
+
+ if ( skip || n<4 ) {
+ fprintf(stderr,"\nInvalid section length or timeout: pid=%d\n\n", pid);
+ stopFilter();
+ return false;
+ }
+
+ // Parse the Master Guide Table Section
+ unsigned int protocol_version = getBits(buf,64,8);
+ unsigned int tables_defined = getBits(buf,72,16);
+ fprintf(stderr, "protocol_version = %d\n", protocol_version);
+ fprintf(stderr, "tables_defined = %d\n", tables_defined);
+
+ // Now let's go through the table entries....
+ unsigned char *t_entry = &buf[88/8];
+ for (unsigned int t = 0; t < tables_defined; t++) {
+ unsigned int table_type;
+ unsigned int table_pid;
+ unsigned int table_version_number;
+ unsigned int table_number_bytes;
+ unsigned int table_number_des_length;
+ table_type = getBits(t_entry, 0, 16);
+ table_pid = getBits(t_entry, 19, 13);
+ table_version_number = getBits(t_entry, 35, 5);
+ table_number_bytes = getBits(t_entry, 40, 32);
+ table_number_des_length = getBits(t_entry, 76, 12);
+ fprintf(stderr,
+ "MGT entry type=0x%04x pid=0x%04x ver=%d sz=%d\n",
+ table_type, table_pid, table_version_number,
+ table_number_bytes);
+
+ if (table_type == 0x0000 || table_type == 0x0001) {
+ // TVCT table found
+ vct_table = table_type;
+ vct_found = true;
+ } else if (table_type == 0x0002 ||
+   table_type == 0x0003) {
+ // CVCT table found
+ vct_table = table_type;
+ vct_found = true;
+ }
+ t_entry += (11 + table_number_des_length);
+ }
+
+ stopFilter();
+ return vct_found;
+}
+
+bool DVBsi::parseVCT( int pid, int tid, int timeout, int sid )
+{
+ unsigned char buf[4096];
+ int n=0;
+ int skip=0;
+
+ fprintf(stderr, "parseVCT called for 0x%02x 0x%02x\n", pid, tid);
+ if ( !setFilter( pid, tid, timeout ) )
+ return false;
+
+ if ( poll(pf,1,timeout)>0 ){
+ if ( pf[0].revents & POLLIN ){
+ n = read( fdDemux, buf, 4096 );
+ skip = 0;
+ }
+ else
+ skip++;
+ }
+ else
+ skip++;
+
+ if ( skip || n<4 ) {
+ fprintf(stderr,"\nInvalid section length or timeout: pid=%d\n\n", pid);
+ stopFilter();
+ return false;
+ }
+
+ // Parse the Virtual Channel Table Section
+ unsigned int protocol_version = getBits(buf,64,8);
+ unsigned int num_channels = getBits(buf,72,8);
+ fprintf(stderr, "protocol_version = %d\n", protocol_version);
+ fprintf(stderr, "num_channels = %d\n", num_channels);
+
+ // Now let's go through the table entries....
+ unsigned char *t_entry = &buf[80/8];
+ for (unsigned int t = 0; t < num_channels; t++) {
+ char short_name[8];
+ unsigned int major_channel_num;
+ unsigned int minor_channel_num;
+ unsigned int modulation_mode;
+ unsigned int channel_tsid;
+ unsigned int program_number;
+ unsigned int access_controlled;
+ unsigned int hidden;
+ unsigned int service_type;
+ unsigned int source_id;
+ unsigned int reserved;
+ unsigned int descriptors_length;
+
+ // Short name
+ // Yes, I need a real UCS-2 to UTF-8 conversion here...
+ memset(short_name, 0, sizeof(short_name));
+ snprintf(short_name, sizeof(short_name), "%c%c%c%c%c%c%c",
+ t_entry[1],t_entry[3],t_entry[5],t_entry[7],
+ t_entry[9],t_entry[11],t_entry[13]);
+ reserved = getBits(t_entry, 112, 4);
+ major_channel_num = getBits(t_entry, 116, 10);
+ minor_channel_num = getBits(t_entry, 126, 10);
+ modulation_mode = getBits(t_entry, 136, 8);
+ channel_tsid = getBits(t_entry, 176, 16);
+ program_number = getBits(t_entry, 192, 16);
+ access_controlled = getBits(t_entry, 210, 1);
+ hidden = getBits(t_entry, 211, 1);
+ service_type = getBits(t_entry, 218, 6);
+ source_id = getBits(t_entry, 224, 16);
+ reserved = getBits(t_entry, 240, 6);
+ descriptors_length = getBits(t_entry, 246, 10);
+
+ fprintf(stderr, "short name=%s\n", short_name);
+ fprintf(stderr, "reserved=0x%04x\n", reserved);
+ fprintf(stderr, "major=%d\n", major_channel_num);
+ fprintf(stderr, "minor=%d\n", minor_channel_num);
+ fprintf(stderr, "modulation mode=0x%02x\n", modulation_mode);
+ fprintf(stderr, "channel_tsid=0x%04x\n", channel_tsid);
+ fprintf(stderr, "program_number=0x%04x\n", program_number);
+ fprintf(stderr, "access_controlled=0x%01x\n", access_controlled);
+ fprintf(stderr, "hidden=0x%01x\n", hidden);
+ fprintf(stderr, "service_type=0x%02x\n", service_type);
+ fprintf(stderr, "source_id=0x%04x\n", source_id);
+ fprintf(stderr, "des length=%d\n", descriptors_length);
+
+ ChannelDesc *desc = new ChannelDesc();
+ desc->tp.tsid = channel_tsid;
+ desc->name = QString("%1-%2 %3").arg(major_channel_num).arg(minor_channel_num).arg(short_name);
+ desc->sid = program_number;
+ if (access_controlled == 1)
+ desc->fta = 1;
+ else
+ desc->fta = 0; // 0 for free
+
+ // Algorithm taken from ATSC A/65C Sec 4.2
+ // However, the algorithm doesn't appear correct, as it
+ // truncates out data.  For example, both 68-1 and 4-1 would
+ // yield the same one_part_number
+ desc->num = (major_channel_num << 10) + minor_channel_num;
+ fprintf(stderr, "channel num=%d\n", desc->num);
+
+ // ATSC A/65C Sec 6.3.1 Table 6.7
+ if (service_type == 0x01) {
+ // Analog television (not supported)
+ } else if (service_type == 0x02) {
+ // ATSC Video
+ desc->type = 1;
+ } else if (service_type == 0x03) {
+ // ATSC Audio
+ desc->type = 2;
+ } else if (service_type == 0x02) {
+ // ATSC Data only service (not supported)
+ } else if (service_type > 0x05 && service_type < 0x3f) {
+ // Reserved (not supported)
+ } else {
+ // Unknown
+ }
+
+ // Now add the new channel to the list (if supported)
+ if ((desc->type == 1 || desc->type == 2) && hidden == 0) {
+ channels.append( desc );
+ } else {
+ fprintf(stderr, "Not adding channel\n");
+ delete desc;
+ }
+
+ // Advance to the next entry
+ t_entry += (32 + descriptors_length);
+ }
+
+ stopFilter();
+ return true;
+}
+
 void DVBsi::stop()
 {
  if ( !isRunning )
@@ -701,7 +918,24 @@
  }
 }
 
+// See ATSC standard A/65c for info on PSIP and what all these acronyms are...
+bool DVBsi::handle_atsc_transponder() {
+ // Loop through the MGT to get the list of PIDS for virtual channels
+ if (parseMGT(PSIP_BASE_PID, PSIP_TABLE_TYPE_MGT,
+     PSIP_MAX_CYCLE_TIME_MGT) == false) {
+ // We couldn't find the MGT
+ fprintf(stderr, "Could not find MGT in stream.  Cannot continue\n");
+ return false;
+ };
 
+ // Now look at the TVCT for info on the individual channels found
+ if (parseVCT(PSIP_BASE_PID, PSIP_TABLE_TYPE_TVCT,
+     PSIP_MAX_CYCLE_TIME_VCT) == false) {
+ fprintf(stderr, "Could not parse VCT in stream.  Cannot continue\n");
+ return false;
+ }
+ return true;
+}
 
 void DVBsi::run()
 {
@@ -744,12 +978,21 @@
 
  indexChannels = j;
  fprintf(stderr,"Transponders: %d/%d\n", i+1, transponders.count() );
+ fprintf(stderr,"scanMode=%d\n", scanMode);
  if ( scanMode ) {
  nitEnded = false;
  ns = new NitSection( &transponders, &nitEnded, &ok, adapter, tuner ); //NIT
  }
- if ( !getSection( 0x11, 0x42 ) )         //SDT
- continue;
+ if ( chan.tp.type == FE_ATSC ) {
+ // Separate out the ATSC scanning so that we
+ // don't interfere with existing DVB support
+ if (!handle_atsc_transponder())
+ continue;
+ } else {
+ printf("it's dvb %d!\n", chan.tp.type);
+ if ( !getSection( 0x11, 0x42 ) )         //SDT
+ continue;
+ }
  if ( !isRunning ) {
  out();
  return;
@@ -831,8 +1074,10 @@
 
  for ( i=0; i<(int)channels.count(); i++ ) {
  ac3 = false;
+#ifdef DJH_WHY_ONLY_ALLOW_H264
  if ( channels.at( i )->vType<16 )
  continue;
+#endif
  /*if ( channels.at( i )->nsubpid==0 )
  continue;
  if ( channels.at( i )->pmtpid==0 )
Index: src/input/dvb/dvbpanel.cpp
===================================================================
--- src/input/dvb/dvbpanel.cpp (revision 823757)
+++ src/input/dvb/dvbpanel.cpp (working copy)
@@ -1176,7 +1176,7 @@
  }
  else if ( currentCategory!="All" && chan->category!=currentCategory )
  continue;
- it = new KListViewItem( channelsCb, QString().sprintf("%04d", chan->num), chan->name, chan->tp.source );
+ it = new KListViewItem( channelsCb, QString().sprintf("%05d", chan->num), chan->name, chan->tp.source );
  if ( ch && ch==chan )
  visible = it;
  it->setDragEnabled( true );
@@ -1880,7 +1880,7 @@
 
  QListViewItem* nextItem;
 
- QListViewItem* playingItem = channelsCb->findItem( QString().sprintf("%04d", dvbConfig->lastChannel), 0 );
+ QListViewItem* playingItem = channelsCb->findItem( QString().sprintf("%05d", dvbConfig->lastChannel), 0 );
 
  if ( !playingItem == 0 ) // yes, it's in the current category
  {
@@ -1906,7 +1906,7 @@
 
  QListViewItem* prevItem;
 
- QListViewItem* playingItem = channelsCb->findItem( QString().sprintf("%04d", dvbConfig->lastChannel), 0 );
+ QListViewItem* playingItem = channelsCb->findItem( QString().sprintf("%05d", dvbConfig->lastChannel), 0 );
 
  if ( !playingItem == 0 ) // yes, it's in the current category
  {
@@ -2363,7 +2363,7 @@
  }
 
  chan->pix.load( dvbConfig->dvbConfigIconsDir+chan->name );
- it = new KListViewItem( channelsCb, QString().sprintf("%04d", chan->num), chan->name, chan->tp.source );
+ it = new KListViewItem( channelsCb, QString().sprintf("%05d", chan->num), chan->name, chan->tp.source );
  it->setDragEnabled( true );
  if ( !chan->pix.isNull() )
  it->setPixmap( 1, chan->pix );


-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
kaffeine-devel mailing list
kaffeine-devel@...
https://lists.sourceforge.net/lists/listinfo/kaffeine-devel

Re: [PATCH] ATSC scanning support

by Bugzilla from hftom@free.fr :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Le Tuesday 24 June 2008 03:19:22 Devin Heitmueller, vous avez écrit :

> Hello,
>
> Attached is a patch to provide ATSC scanning support.  Tested with an
> HVR-950 in New York, it is providing identical results to both the
> scan provided in dvb-apps as well as Elgato EyeTV.  Also compared the
> resulting output against the results of the atsc converter tool
> referred to in README.atsc.
>
> I would appreciate it if the patch could be reviewed and considered
> for inclusion.  Comments are certainly welcomed.
>
> Known issues:
>
> * Closed captioning not yet supported.
> * Expects there to be an "atsc" directory containing the transponder
> files in .kde/share/apps/kaffeine (normally provided by
> dvbdata.tar.gz).  I copied the content from the dvb-apps version of
> the transponder files.  This solution would expect dvbdata.tar.gz to
> start providing the ATSC transponder files.
> * Not fully validated with multi-lingual AC3 audio streams (but
> appears to be working at initial testing)
> * Not validated with CVCT (Cable/QAM).  Only tested with over the air
> ATSC (TVCT)
> * An additional digit has been added to the channel number, so sorting
> works properly (now 5 digits instead of 4).  We probably eventually
> need a better way to support subchannels when it comes to sorting but
> this works for now.
>
> There is certainly some more cleanup/restructuring that could be done
> in terms of sharing code between the ATSC and DVB support, but my goal
> at this point was to provide a patch that incurs minimal impact on the
> existing DVB functionality (since I can't test those parts).
>
> Thanks,

Hi Devin,

this patch is very much appreciated, finally an atsc user did it :)
Kaffeine kde3 branch was closed with 0.8.6, but i will release a 0.8.6b to
give atsc users full atsc support.
I'm ccing Christoph Pfister so hopefully he finds some time to update the
dvbdata with atsc dir ;)

Thanx again.

--
Christophe Thommeret


-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
kaffeine-devel mailing list
kaffeine-devel@...
https://lists.sourceforge.net/lists/listinfo/kaffeine-devel

Re: [PATCH] ATSC scanning support

by Bugzilla from devin.heitmueller@gmail.com :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello Christoph,

On Tue, Jun 24, 2008 at 2:58 AM, Christophe Thommeret <hftom@...> wrote:
> this patch is very much appreciated, finally an atsc user did it :)

Yeah, I discovered the "hard way" when I got support working for my
first ATSC device (the HVR-950), loaded Kaffeine and then spent
several minutes thinking my driver was broken before I did a search
for "Kaffeine ATSC".

Certainly I can appreciate the reason it wasn't done up to this point.
 I have the opposite problem where I can't do any DVB related
development.

> Kaffeine kde3 branch was closed with 0.8.6, but i will release a 0.8.6b to
> give atsc users full atsc support.
> I'm ccing Christoph Pfister so hopefully he finds some time to update the
> dvbdata with atsc dir ;)

I would appreciate that.  My goal was to get the functionality into
the next major Ubuntu release, and they're still on 0.8.6.

Is there a non-KDE3 branch where active development is ongoing?  I had
assumed I was on the trunk, but if there is a different tree for KDE4,
I would like to make some more contributions so it would be useful if
you could point me to the appropriate repository.

On a separate note, do the sourceforge kaffeine-devel archives only
updated on a daily basis?  I'm still not seeing my original post there
and it has been 12 hours.

Thanks,

--
Devin J. Heitmueller
http://www.devinheitmueller.com
AIM: devinheitmueller

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
kaffeine-devel mailing list
kaffeine-devel@...
https://lists.sourceforge.net/lists/listinfo/kaffeine-devel

Re: [PATCH] ATSC scanning support

by Bugzilla from christophpfister@gmail.com :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi clone,

Am Dienstag 24 Juni 2008 08:58:18 schrieb Christophe Thommeret:
<snip>
> Hi Devin,
>
> this patch is very much appreciated, finally an atsc user did it :)
> Kaffeine kde3 branch was closed with 0.8.6, but i will release a 0.8.6b to
> give atsc users full atsc support.
> I'm ccing Christoph Pfister so hopefully he finds some time to update the
> dvbdata with atsc dir ;)

CC doesn't change anything on my side when I'm already subscribed ;) Anyway,
uploaded an extended version to both kde & free.fr ...

Sorry, no time to review the patch (I'm sure you'll do it) or to do other
things right now, but will take care of it at the weekend - also with regards
to the next kaffeine version.

> Thanx again.
>
> --
> Christophe Thommeret

Christoph

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
kaffeine-devel mailing list
kaffeine-devel@...
https://lists.sourceforge.net/lists/listinfo/kaffeine-devel

Re: [PATCH] ATSC scanning support

by Bugzilla from devin.heitmueller@gmail.com :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I forgot to put it in the patch, but it probably makes sense to change
README.atsc to no longer say scanning is not supported and referring
people to the converter tool.

Devin

On Tue, Jun 24, 2008 at 2:58 AM, Christophe Thommeret <hftom@...> wrote:

> Le Tuesday 24 June 2008 03:19:22 Devin Heitmueller, vous avez écrit :
>> Hello,
>>
>> Attached is a patch to provide ATSC scanning support.  Tested with an
>> HVR-950 in New York, it is providing identical results to both the
>> scan provided in dvb-apps as well as Elgato EyeTV.  Also compared the
>> resulting output against the results of the atsc converter tool
>> referred to in README.atsc.
>>
>> I would appreciate it if the patch could be reviewed and considered
>> for inclusion.  Comments are certainly welcomed.
>>
>> Known issues:
>>
>> * Closed captioning not yet supported.
>> * Expects there to be an "atsc" directory containing the transponder
>> files in .kde/share/apps/kaffeine (normally provided by
>> dvbdata.tar.gz).  I copied the content from the dvb-apps version of
>> the transponder files.  This solution would expect dvbdata.tar.gz to
>> start providing the ATSC transponder files.
>> * Not fully validated with multi-lingual AC3 audio streams (but
>> appears to be working at initial testing)
>> * Not validated with CVCT (Cable/QAM).  Only tested with over the air
>> ATSC (TVCT)
>> * An additional digit has been added to the channel number, so sorting
>> works properly (now 5 digits instead of 4).  We probably eventually
>> need a better way to support subchannels when it comes to sorting but
>> this works for now.
>>
>> There is certainly some more cleanup/restructuring that could be done
>> in terms of sharing code between the ATSC and DVB support, but my goal
>> at this point was to provide a patch that incurs minimal impact on the
>> existing DVB functionality (since I can't test those parts).
>>
>> Thanks,
>
> Hi Devin,
>
> this patch is very much appreciated, finally an atsc user did it :)
> Kaffeine kde3 branch was closed with 0.8.6, but i will release a 0.8.6b to
> give atsc users full atsc support.
> I'm ccing Christoph Pfister so hopefully he finds some time to update the
> dvbdata with atsc dir ;)
>
> Thanx again.
>
> --
> Christophe Thommeret
>
>



--
Devin J. Heitmueller
http://www.devinheitmueller.com
AIM: devinheitmueller

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
kaffeine-devel mailing list
kaffeine-devel@...
https://lists.sourceforge.net/lists/listinfo/kaffeine-devel