|
View:
New views
5 Messages
—
Rating Filter:
Alert me
|
|
|
[PATCH] ATSC scanning supportHello,
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 supportLe 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 supportHello 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 supportHi 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 supportI 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 |
| Free embeddable forum powered by Nabble | Forum Help |