* DVB-S2 multistream support @ 2011-12-25 1:06 Georgi Chorbadzhiyski 2011-12-25 8:23 ` Antti Palosaari 0 siblings, 1 reply; 26+ messages in thread From: Georgi Chorbadzhiyski @ 2011-12-25 1:06 UTC (permalink / raw) To: linux-media Guys are there any news on DVB-S2 multistream support. I have found test patches at http://www.tbsdtv.com/forum/viewtopic.php?f=26&t=1874 and judging by report on dvblast-devel ML they seem to work. What is holding them back, perhaps nobody submitted them? -- Georgi Chorbadzhiyski http://georgi.unixsol.org/ ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2011-12-25 1:06 DVB-S2 multistream support Georgi Chorbadzhiyski @ 2011-12-25 8:23 ` Antti Palosaari 2011-12-25 10:17 ` Mauro Carvalho Chehab 0 siblings, 1 reply; 26+ messages in thread From: Antti Palosaari @ 2011-12-25 8:23 UTC (permalink / raw) To: Georgi Chorbadzhiyski; +Cc: linux-media On 12/25/2011 03:06 AM, Georgi Chorbadzhiyski wrote: > Guys are there any news on DVB-S2 multistream support. I have > found test patches at http://www.tbsdtv.com/forum/viewtopic.php?f=26&t=1874 > and judging by report on dvblast-devel ML they seem to work. > > What is holding them back, perhaps nobody submitted them? Ok, there seems to be now TS IDs for ISDB-S, DVB-T2 and DVB-S2. I wonder who those are defined in our DVB API as own parameter for each standard... Antti -- http://palosaari.fi/ ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2011-12-25 8:23 ` Antti Palosaari @ 2011-12-25 10:17 ` Mauro Carvalho Chehab 2011-12-25 10:55 ` Konstantin Dimitrov 0 siblings, 1 reply; 26+ messages in thread From: Mauro Carvalho Chehab @ 2011-12-25 10:17 UTC (permalink / raw) To: Antti Palosaari; +Cc: Georgi Chorbadzhiyski, linux-media On 25-12-2011 06:23, Antti Palosaari wrote: > On 12/25/2011 03:06 AM, Georgi Chorbadzhiyski wrote: >> Guys are there any news on DVB-S2 multistream support. I have >> found test patches at http://www.tbsdtv.com/forum/viewtopic.php?f=26&t=1874 >> and judging by report on dvblast-devel ML they seem to work. >> >> What is holding them back, perhaps nobody submitted them? I don't remember seeing any patches submitted for it. The patch "budget-omicom.patch" seems to be a hack that will likely break support for other supported devices. The patch stv090x-mis.patch also seems wrong, as "props->dvbs2_mis_id" is probably initialized with 0 by the core, so, by default, the MIS filter will be enabled. That's said, the approach there assumes that just one mis can be filtered. I'm wandering if it wouldn't be better to use the same approach taken inside dvb-core for PIP filtering. In any case, the dvb properties cache should be initialized to have the MIS filter disabled, and only enable it if userspace requests it via FE_SET_PROPERTY. > Ok, there seems to be now TS IDs for ISDB-S, DVB-T2 and DVB-S2. I wonder who those are > defined in our DVB API as own parameter for each standard... The per-standard parameters were introduced by ISDB-T. It probably makes sense for the ISDB specific parameters, as no other delivery system looks like that, but we should avoid propagating it for other delivery systems, expecially DVB-*, as the new parameters may be used on other delivery systems on that family. It would be great to fix this as soon as possible, in order to avoid propagating it. The fix should be simple: just rename the parameter, and create an alias to the previous name. Regards, Mauro > > Antti > > ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2011-12-25 10:17 ` Mauro Carvalho Chehab @ 2011-12-25 10:55 ` Konstantin Dimitrov 2011-12-25 11:18 ` Mauro Carvalho Chehab 0 siblings, 1 reply; 26+ messages in thread From: Konstantin Dimitrov @ 2011-12-25 10:55 UTC (permalink / raw) To: Mauro Carvalho Chehab; +Cc: Antti Palosaari, Georgi Chorbadzhiyski, linux-media On Sun, Dec 25, 2011 at 12:17 PM, Mauro Carvalho Chehab <mchehab@redhat.com> wrote: > That's said, the approach there assumes that just one mis can be filtered. I'm wandering > if it wouldn't be better to use the same approach taken inside dvb-core for PIP filtering. i'm not sure that i understand correctly what you mean, but i can't see way how to filter more that one mis stream at the same time, because their id is stored in the bbheader. so, even if we assume it's possible to send two ids for filtering to the hardware and then it outputs ts packets from both of them there is still no way to know which ts packet to which mis stream belongs, because the bbheader is stripped inside the demodulator before the data are outputted. in fact if you don't set any id for filtering to mis capable hardware then usually it outputs the ts packets from all of the streams and that's why the outputted stream looks corrupted, because it contains ts packets from all mis streams and that's why you what to set id for filtering to the hardware in the first place - to make it output ts packets just from one selected stream. however, if dvb-core has support for bbframes like the following unfortunately lost work: http://www.linuxtv.org/pipermail/linux-dvb/2007-December/022217.html then instead setting mis filtering in the hardware you can force it to output bbframes (at least currently all mis capable hardware is supposed to be able to output bbframes) and then filter all streams in the software, which would be significantly more flexible, because that way all streams can be filtered and used in the same time. ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2011-12-25 10:55 ` Konstantin Dimitrov @ 2011-12-25 11:18 ` Mauro Carvalho Chehab 2011-12-25 12:37 ` Konstantin Dimitrov 2011-12-27 10:12 ` Christian Prähauser 0 siblings, 2 replies; 26+ messages in thread From: Mauro Carvalho Chehab @ 2011-12-25 11:18 UTC (permalink / raw) To: Konstantin Dimitrov; +Cc: Antti Palosaari, Georgi Chorbadzhiyski, linux-media On 25-12-2011 08:55, Konstantin Dimitrov wrote: > On Sun, Dec 25, 2011 at 12:17 PM, Mauro Carvalho Chehab > <mchehab@redhat.com> wrote: > >> That's said, the approach there assumes that just one mis can be filtered. I'm wandering >> if it wouldn't be better to use the same approach taken inside dvb-core for PIP filtering. > > i'm not sure that i understand correctly what you mean, but i can't > see way how to filter more that one mis stream at the same time, > because their id is stored in the bbheader. so, even if we assume it's > possible to send two ids for filtering to the hardware and then it > outputs ts packets from both of them there is still no way to know > which ts packet to which mis stream belongs, because the bbheader is > stripped inside the demodulator before the data are outputted. in fact > if you don't set any id for filtering to mis capable hardware then > usually it outputs the ts packets from all of the streams and that's > why the outputted stream looks corrupted, because it contains ts > packets from all mis streams and that's why you what to set id for > filtering to the hardware in the first place - to make it output ts > packets just from one selected stream. however, if dvb-core has > support for bbframes like the following unfortunately lost work: > > http://www.linuxtv.org/pipermail/linux-dvb/2007-December/022217.html Yes, I'm meaning something like what it was described there. I think that the code written by Christian were never submitted upstream. > then instead setting mis filtering in the hardware you can force it to > output bbframes (at least currently all mis capable hardware is > supposed to be able to output bbframes) and then filter all streams in > the software, which would be significantly more flexible, because that > way all streams can be filtered and used in the same time. While your hardware supports filtering only one MIS, other hardware may support more. Anyway, it makes sense to add a software filter, and to add a way to deliver the mis information to userspace, if more than one mis is filtered. Regards, Mauro ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2011-12-25 11:18 ` Mauro Carvalho Chehab @ 2011-12-25 12:37 ` Konstantin Dimitrov 2011-12-27 10:12 ` Christian Prähauser 1 sibling, 0 replies; 26+ messages in thread From: Konstantin Dimitrov @ 2011-12-25 12:37 UTC (permalink / raw) To: Mauro Carvalho Chehab; +Cc: Antti Palosaari, Georgi Chorbadzhiyski, linux-media On Sun, Dec 25, 2011 at 1:18 PM, Mauro Carvalho Chehab <mchehab@redhat.com> wrote: > On 25-12-2011 08:55, Konstantin Dimitrov wrote: >> On Sun, Dec 25, 2011 at 12:17 PM, Mauro Carvalho Chehab >> <mchehab@redhat.com> wrote: >> >>> That's said, the approach there assumes that just one mis can be filtered. I'm wandering >>> if it wouldn't be better to use the same approach taken inside dvb-core for PIP filtering. >> >> i'm not sure that i understand correctly what you mean, but i can't >> see way how to filter more that one mis stream at the same time, >> because their id is stored in the bbheader. so, even if we assume it's >> possible to send two ids for filtering to the hardware and then it >> outputs ts packets from both of them there is still no way to know >> which ts packet to which mis stream belongs, because the bbheader is >> stripped inside the demodulator before the data are outputted. in fact >> if you don't set any id for filtering to mis capable hardware then >> usually it outputs the ts packets from all of the streams and that's >> why the outputted stream looks corrupted, because it contains ts >> packets from all mis streams and that's why you what to set id for >> filtering to the hardware in the first place - to make it output ts >> packets just from one selected stream. however, if dvb-core has >> support for bbframes like the following unfortunately lost work: >> >> http://www.linuxtv.org/pipermail/linux-dvb/2007-December/022217.html > > Yes, I'm meaning something like what it was described there. I think > that the code written by Christian were never submitted upstream. > no doubt, a lot of work could be saved if the repository of Christian's project wasn't dead or his work was upstream, but it is how it is. BTW, Christian is also co-author of an article called "A Second Generation Architecture for Linux DVB Networking" : http://202.194.20.8/proc/ASMS2008/DATA/B-14-03.PDF which in my opinion could be used as source of both ideas and general information. >> then instead setting mis filtering in the hardware you can force it to >> output bbframes (at least currently all mis capable hardware is >> supposed to be able to output bbframes) and then filter all streams in >> the software, which would be significantly more flexible, because that >> way all streams can be filtered and used in the same time. > > While your hardware supports filtering only one MIS, other hardware may > support more. i agree, that's of course true in theory, but in my opinion in practice it entirely depends on how you're going to treat hardware having more than one data output at the same time - currently such hardware is treated as creating as many /dev/dvb/adapterX for it as there are data outputs. so, if that way is assumed, thinking about it, there are only few possible cases: 1) the hardware has one data output: 1.1) which is set to output bbframes - then if there is bbframe support in dvb-core, that's the best case, because all streams can be used at the same time with software filtering, otherwise we're stuck with setting the output to either ts mode (case 1.2) or some custom/proprietary mode (case 1.3) 1.2) it is set to output ts (or dvb-core doesn't have bbframe support) then we're limited to only one ts stream and that's what actually is even currently possible, i.e. this case is the closest to the current status of dvb-core no matter of any existing or future hardware 1.3) it can be set to filter and output more than one ts stream : then to do it via one data output the hardware must use some custom/proprietary output format to preserve the ids. so, in such case the driver must be responsible to deal with that custom/proprietary output format and output the different streams as separate ts streams, but then my point is we're in case 2, which is the initial assumption 2) the hardware has 2 or more data outputs: then for each of them there is separate adapterX created to handle the data for each output 3) something else, i'm missing to think about it if we're talking for real and existing hardware only, what i've seen so far is: - no mis filtering is set: then all streams are outputted by the hardware, but the data are useless, because it's not possible to tell which ts packet to which stream belongs, i.e. it's not possible to reconstruct the different ts streams - no mis filtering is set: then the hardware sets as default id for the filter the id of the first bbheader that is received and only ts packets of that steam are outputted, i.e. one ts output - mis filter is set: one id is selected and one ts stream of that selected id is outputted in any case at least from my point of view case 1 and 2 cover all options. > Anyway, it makes sense to add a software filter, and to > add a way to deliver the mis information to userspace, if more than one > mis is filtered. > > Regards, > Mauro ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2011-12-25 11:18 ` Mauro Carvalho Chehab 2011-12-25 12:37 ` Konstantin Dimitrov @ 2011-12-27 10:12 ` Christian Prähauser 2011-12-27 16:08 ` Antti Palosaari ` (3 more replies) 1 sibling, 4 replies; 26+ messages in thread From: Christian Prähauser @ 2011-12-27 10:12 UTC (permalink / raw) To: linux-media > > Yes, I'm meaning something like what it was described there. I think > that the code written by Christian were never submitted upstream. > Hello Mauro, Konstantin drew my attention to this discussion. Indeed, some time ago I wrote a base-band demux for LinuxDVB. It was part of a project to integrate support for second-generation IP/DVB encapsulations (GSE). The BB-demux allows to register filters for different ISIs and data types (raw, generic stream, transport stream). I realized that the repo hosted at our University is down. If there is interest, I can update my patches to the latest LinuxDVB version and we can put them on a public repo e.g. at linuxdvb.org. Kind regards, Christian. ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2011-12-27 10:12 ` Christian Prähauser @ 2011-12-27 16:08 ` Antti Palosaari 2012-01-19 13:34 ` Marek Ochaba ` (2 subsequent siblings) 3 siblings, 0 replies; 26+ messages in thread From: Antti Palosaari @ 2011-12-27 16:08 UTC (permalink / raw) To: Christian Prähauser; +Cc: linux-media On 12/27/2011 12:12 PM, Christian Prähauser wrote: >> >> Yes, I'm meaning something like what it was described there. I think >> that the code written by Christian were never submitted upstream. >> > > Hello Mauro, > > Konstantin drew my attention to this discussion. Indeed, some time ago I wrote > a base-band demux for LinuxDVB. It was part of a project to integrate support > for second-generation IP/DVB encapsulations (GSE). The BB-demux allows to > register filters for different ISIs and data types (raw, generic stream, > transport stream). > > I realized that the repo hosted at our University is down. If there is interest, > I can update my patches to the latest LinuxDVB version and we can put them on a > public repo e.g. at linuxdvb.org. > > Kind regards, > Christian. I have a question which is a little bit off-topic for that thread but I would like to ask since I think you could have some idea. FEC Code Rate is often given as k/n, for example FEC 1/4. But nowadays there is also seen 0.x like FEC 0.8. I have feeling that this is due to new inner coding used, LDPC instead of traditional convolutional codes. When convolution codes were used it was correct to define 1/2 as basic rate and puncture rest from that. But as now with LDPC we have larger blocks we cannot represent so easily. For example DTMB uses LDPC(7488,6016) = 6016/7488 = ~0.8034 => FEC 0.8 is used. I am adding DTMB support for DVB API and that's why I have to think if I extend old k/n FECs or define new ones as FEC 0.4/0.6/0.8. regards Antti -- http://palosaari.fi/ ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2011-12-27 10:12 ` Christian Prähauser 2011-12-27 16:08 ` Antti Palosaari @ 2012-01-19 13:34 ` Marek Ochaba 2012-01-21 10:29 ` Christian Prähauser 2012-01-22 2:13 ` Mauro Carvalho Chehab [not found] ` <CAF0Ff2mf0tYs3UG3M6Cahep+_kMToVaGgPhTqR7zhRG0UXWuig@mail.gmail.com> 3 siblings, 1 reply; 26+ messages in thread From: Marek Ochaba @ 2012-01-19 13:34 UTC (permalink / raw) To: linux-media; +Cc: cpraehaus Hello Christian, we interest to your patch for BBFrame demux (we want to read some BBF header flags and read GS decapsulated data). Could you please publish latest version of it ? And send link to it ? Is there also need adaptation in device driver ? We want to us it by DVB-S2 card TBS-6925, which use STV0900 chip. -- Marek Ochaba ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2012-01-19 13:34 ` Marek Ochaba @ 2012-01-21 10:29 ` Christian Prähauser 2012-01-23 13:58 ` Marek Ochaba 0 siblings, 1 reply; 26+ messages in thread From: Christian Prähauser @ 2012-01-21 10:29 UTC (permalink / raw) To: Marek Ochaba; +Cc: linux-media, Konstantin Dimitrov Dear Marek, Konstantin and I are currently work on making the BB-demux work with recent version of Linux DVB and the TBS 6925. We well let you know as soon as a working patch is available (early february). In the meantime, maybe you want to tell me more about your use-case, for helping us understand what the user-space API requirements are. I assume you need the data in user-space? Would it be enough for you if you receive the BBFrames (header + data field)? Kind regards, Christian. Am 19.01.2012 um 14:34 schrieb Marek Ochaba: > Hello Christian, > > we interest to your patch for BBFrame demux (we want to read some BBF > header flags and read GS decapsulated data). Could you please publish > latest version of it ? And send link to it ? > > Is there also need adaptation in device driver ? We want to us it by > DVB-S2 > card TBS-6925, which use STV0900 chip. > > -- > Marek Ochaba --- Dipl.-Ing. Christian Praehauser <cpraehaus@cosy.sbg.ac.at> || //\\//\\ || Multimedia Communications Group, ||// \/ \\|| Department of Computer Sciences, University of Salzburg http://www.cosy.sbg.ac.at/~cpraehaus/ http://www.network-research.org/ http://www.uni-salzburg.at/ ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2012-01-21 10:29 ` Christian Prähauser @ 2012-01-23 13:58 ` Marek Ochaba 0 siblings, 0 replies; 26+ messages in thread From: Marek Ochaba @ 2012-01-23 13:58 UTC (permalink / raw) To: Christian Prähauser Cc: linux-media, Konstantin Dimitrov, statelov@maindata.sk Hello Christian & Konstantin, we look forward for your patch. Here are some hints, what we want to do. Now we read TS packets from standard userspace API (/dev/dvb/adapter0/dvr0, for video data processing) or use libdvbapi/dvbnet.h (for IP over DVB data, MPE decapsulation). In future we want to receive ACM/GSE data. So we plan to read whole BBFrame data and decapsulate it. But if there will be GSE decapsulation in linuxtv.org kernel layer, then we don't need whole BBFrame. It would be nice to have acces to some usefull data from BBF headers particularly: TS/GS field, SIS/MIS flag, CCM/ACM flag, it should be statical value throught several BBF. Other usefull data which is diffrent from more BBF is Imput stream ID (ISI). Can it be accesible as list of received values ? This values could be accessible throught standard S2API sytem call ioctl(FE_GET_PROPERTY, struct dtv_property) or if whole BBFrame/BBFheader will be accessible, we can read it ourself from BBF header. BTW: We have GPL source code for GSE decapsulation from Karsten Siebert. If you don't have implement yet, this one can be used, it is in "kernel space" compatible format. -- Marek Ochaba ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2011-12-27 10:12 ` Christian Prähauser 2011-12-27 16:08 ` Antti Palosaari 2012-01-19 13:34 ` Marek Ochaba @ 2012-01-22 2:13 ` Mauro Carvalho Chehab 2012-01-22 12:44 ` Christian Prähauser [not found] ` <CAF0Ff2mf0tYs3UG3M6Cahep+_kMToVaGgPhTqR7zhRG0UXWuig@mail.gmail.com> 3 siblings, 1 reply; 26+ messages in thread From: Mauro Carvalho Chehab @ 2012-01-22 2:13 UTC (permalink / raw) To: Christian Prähauser; +Cc: linux-media Hi Christian, Em 27-12-2011 08:12, Christian Prähauser escreveu: >> >> Yes, I'm meaning something like what it was described there. I think >> that the code written by Christian were never submitted upstream. >> > > Hello Mauro, > > Konstantin drew my attention to this discussion. Indeed, some time ago I wrote > a base-band demux for LinuxDVB. It was part of a project to integrate support > for second-generation IP/DVB encapsulations (GSE). The BB-demux allows to > register filters for different ISIs and data types (raw, generic stream, > transport stream). > > I realized that the repo hosted at our University is down. If there is interest, > I can update my patches to the latest LinuxDVB version and we can put them on a > public repo e.g. at linuxdvb.org. Sorry, I didn't notice your comment on this thread until today. It sounds interesting. Please post the patches at the ML, when they're available, for us to review. Thanks! Mauro > > Kind regards, > Christian. > > > > > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-media" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2012-01-22 2:13 ` Mauro Carvalho Chehab @ 2012-01-22 12:44 ` Christian Prähauser 0 siblings, 0 replies; 26+ messages in thread From: Christian Prähauser @ 2012-01-22 12:44 UTC (permalink / raw) To: Mauro Carvalho Chehab; +Cc: linux-media Hello Mauro, Am 22.01.2012 um 03:13 schrieb Mauro Carvalho Chehab: > Hi Christian, > > Em 27-12-2011 08:12, Christian Prähauser escreveu: >>> >>> Yes, I'm meaning something like what it was described there. I think >>> that the code written by Christian were never submitted upstream. >>> >> >> Hello Mauro, >> >> Konstantin drew my attention to this discussion. Indeed, some time >> ago I wrote >> a base-band demux for LinuxDVB. It was part of a project to >> integrate support >> for second-generation IP/DVB encapsulations (GSE). The BB-demux >> allows to >> register filters for different ISIs and data types (raw, generic >> stream, >> transport stream). >> >> I realized that the repo hosted at our University is down. If there >> is interest, >> I can update my patches to the latest LinuxDVB version and we can >> put them on a >> public repo e.g. at linuxdvb.org. > > Sorry, I didn't notice your comment on this thread until today. It > sounds > interesting. Please post the patches at the ML, when they're > available, for > us to review. No problem, I'll keep you informed about the status of the patches. Thanks and kind regards, Christian. > > Thanks! > Mauro >> >> Kind regards, >> Christian. >> >> >> >> >> >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux- >> media" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html --- Dipl.-Ing. Christian Praehauser <cpraehaus@cosy.sbg.ac.at> || //\\//\\ || Multimedia Communications Group, ||// \/ \\|| Department of Computer Sciences, University of Salzburg http://www.cosy.sbg.ac.at/~cpraehaus/ http://www.network-research.org/ http://www.uni-salzburg.at/ ^ permalink raw reply [flat|nested] 26+ messages in thread
[parent not found: <CAF0Ff2mf0tYs3UG3M6Cahep+_kMToVaGgPhTqR7zhRG0UXWuig@mail.gmail.com>]
[parent not found: <85A7A8FC-150C-4463-B09C-85EED6F851A8@cosy.sbg.ac.at>]
[parent not found: <CAF0Ff2ncv0PJWSOOw=7WeGyqX3kKiQitY52uEOztfC8Bwj6LgQ@mail.gmail.com>]
* Re: DVB-S2 multistream support [not found] ` <CAF0Ff2ncv0PJWSOOw=7WeGyqX3kKiQitY52uEOztfC8Bwj6LgQ@mail.gmail.com> @ 2012-01-25 13:12 ` Christian Prähauser 2012-02-01 18:49 ` Konstantin Dimitrov 0 siblings, 1 reply; 26+ messages in thread From: Christian Prähauser @ 2012-01-25 13:12 UTC (permalink / raw) To: Konstantin Dimitrov; +Cc: linux-media Hi Konstantin! I received your "present" :-) - many thanks! I already ported my base- band demux code to the current linux media master branch (in the v4l-dvb git repo). It currently allows drivers/frontends to pass base-band frames to the bb-demux. The bb-demux allows user-space filtering for BBFrames, TS packets, etc via the demux handle or dvr device. It also allows other kernel components to do base-band filtering (e.g. receive BBFrames on a specific ISI). Currently, the bb-demux only accepts a single, complete BBFrame in a single buffer, but I think it should also be able to cope with a stream of data (for ease of driver integration), including synchronization (search for frame start) and buffering (for assembling frames). Besides checking whether the current user-space API for base-band filtering is useful, there are a few remaining design questions to think about: * How to allow pes/section filtering when receiving multiple TSs in parallel (on different ISIs) - allow to "stack" filters, e.g. a bb-demux filter delivers TS from a certain ISI and forwards it to a section filter (which then passes sections to user-space). - dmx / dvr device for each? * When and how to bring frontend into base-band data mode (a mode where it delivers BBFrames instead of TS)? - Should this be set by the user or happen automatically? * How to set ISI on demux if we receive TS on a channel with MIS (if this is not already possible, didn't check it yet) - this could be covered by the bb-demux filtering API, although the base-band demux is not directly involved in this case (since TS data is delivered to dvb-core). For now, I'm working to setup a public GIT repository, so you can have a look at the current status. Do you have a repository for the TBS drivers or should I use the official ones? Do you have an idea of how to program the STV900 to output BBFrames? Thanks again and kind regards, Christian. Am 17.01.2012 um 21:04 schrieb Konstantin Dimitrov: > hi Christian, > > it's great that you find it interesting too. i already prepared the > package and i will send it tomorrow - you should get in shorty - i > believe even with the most inexpensive shipping service within Europe > you will get in just a week or so. i hope you will have fun with the > TBS 6925 board - even if not for anything else just to receive DVB-S2 > in Linux. > > kind regards, > konstantin > > On Thu, Jan 12, 2012 at 3:06 PM, Christian Prähauser > <cpraehaus@cosy.sbg.ac.at> wrote: >> Hi Konstantin! >> >> Thank you, and a happy new year to you too! >> >> The way to proceed you suggested sounds very interesting too me! I'd >> be more than happy if you could send me the TBS 6925 card to my >> university >> address: >> >> Christian Prähauser >> c/o Department of Computer Sciences >> University of Salzburg >> Jakob Haringer Str. 2 >> A 5020 Salzburg >> AUSTRIA >> >> I will start to update my patches to match recent LinuxDVB sources >> and >> try to integrate Baseband demux support into the TBS linux driver. >> If this works, we can also put in GSE-support (S2-native >> encapsulation for >> carrying IP packets in DVB). This would then probably start to be >> interesting >> for some people... >> >> Thanks and kind regards, >> Christian. >> >> Am 10.01.2012 um 20:40 schrieb Konstantin Dimitrov: >> >> >>> hello Christian, >>> >>> and Happy New Year to you! >>> >>> thank you for joining the discussion, but apparently and >>> unfortunately >>> Mauro current priorities are not to bring V4L to a next-level, as >>> you >>> call it in your article to next-generation. anyway, i think your >>> work >>> is very interesting and the least i can do is to offer you, if you >>> agree and give me your address, to send you as gift one TBS 6925 >>> card >>> - i had two samples of such card, because i made the Linux drivers >>> for >>> it and i can send you one of those two boards to you. what is >>> interesting about the card that in Windows TBS has tool called "TBS >>> Recorder" that can capture BBFrames - i'm not sure if the capture is >>> entirely correct, but at least checking with hex-editor the BBFrames >>> headers are present in the data dump. also, datasheets of the >>> demodulator in use on the board confirm that it can output >>> BBFreames. >>> so, we can try just for fun to merge your work on BB-demux to V4L >>> tree >>> with TBS 6925 support and see if we can get real hardware take use >>> of >>> the BB-demux. what you think about such idea? >>> >>> kind regards, >>> konstantin >>> >>> On Tue, Dec 27, 2011 at 12:12 PM, Christian Prähauser >>> <cpraehaus@cosy.sbg.ac.at> wrote: >>>>> >>>>> >>>>> Yes, I'm meaning something like what it was described there. I >>>>> think >>>>> that the code written by Christian were never submitted upstream. >>>>> >>>> >>>> Hello Mauro, >>>> >>>> Konstantin drew my attention to this discussion. Indeed, some >>>> time ago I >>>> wrote >>>> a base-band demux for LinuxDVB. It was part of a project to >>>> integrate >>>> support >>>> for second-generation IP/DVB encapsulations (GSE). The BB-demux >>>> allows to >>>> register filters for different ISIs and data types (raw, generic >>>> stream, >>>> transport stream). >>>> >>>> I realized that the repo hosted at our University is down. If >>>> there is >>>> interest, >>>> I can update my patches to the latest LinuxDVB version and we can >>>> put >>>> them on a >>>> public repo e.g. at linuxdvb.org. >>>> >>>> Kind regards, >>>> Christian. >>>> >>>> >>>> >>>> >>>> >>>> >>>> -- >>>> To unsubscribe from this list: send the line "unsubscribe linux- >>>> media" in >>>> the body of a message to majordomo@vger.kernel.org >>>> More majordomo info at http://vger.kernel.org/majordomo-info.html >> >> >> --- >> Dipl.-Ing. Christian Praehauser <cpraehaus@cosy.sbg.ac.at> >> >> || //\\//\\ || Multimedia Communications Group, >> ||// \/ \\|| Department of Computer Sciences, University of >> Salzburg >> http://www.cosy.sbg.ac.at/~cpraehaus/ >> http://www.network-research.org/ >> http://www.uni-salzburg.at/ --- Dipl.-Ing. Christian Praehauser <cpraehaus@cosy.sbg.ac.at> || //\\//\\ || Multimedia Communications Group, ||// \/ \\|| Department of Computer Sciences, University of Salzburg http://www.cosy.sbg.ac.at/~cpraehaus/ http://www.network-research.org/ http://www.uni-salzburg.at/ ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2012-01-25 13:12 ` Christian Prähauser @ 2012-02-01 18:49 ` Konstantin Dimitrov 2012-02-18 19:06 ` Christian Prähauser 0 siblings, 1 reply; 26+ messages in thread From: Konstantin Dimitrov @ 2012-02-01 18:49 UTC (permalink / raw) To: Christian Prähauser; +Cc: linux-media hi Christian, sorry for the very late reply - unfortunately i'm very busy lately. so, what i can tell you about your questions: * for setting MIS filter you can follow the link in the first email that started the discussion here: http://comments.gmane.org/gmane.linux.drivers.video-input-infrastructure/42312 or more specifically what's posted here: http://www.tbsdtv.com/forum/viewtopic.php?f=26&t=1874 i don't know if you have access to some signal modulator/generator with MIS support, but if not there are several good live MIS signals, e.g. Atlantic Bird 1 @ 12.5 W, 12718 H, 36510, FEC 5/6 it's 8PSK MIS transponder with four TS, ISIs of them are: 33, 34, 35 36 if you can't get 12.5W let me know and i will look for some other live signal useful for test purposes. * STV900AAC needs to be put on BBFrame mode, by default it strips the BB data and outputs TS. however, the necessary settings for are BBFrame mode not very clear - i need to do some trial and errors until i hopefully get the BBFrame mode working. however, what is useful as a starter is to parse/analyze for errors data dump made in Windows with "TBS Recorder" tool - i believe i mentioned it to you - the data dump made with that tool seems as valid BBFrames at least at first glance with hex-editor, i.e. valid BBHeader data are observed. so, is there some tool from your work (maybe 'bb-demux') that can parse/analyze data dump of supposedly BBFrames. anyway, let me know what help you need - i will look at BBFrame mode for STV900AAC, because i can identify that task as open. best wishes, konstantin On Wed, Jan 25, 2012 at 3:12 PM, Christian Prähauser <cpraehaus@cosy.sbg.ac.at> wrote: > Hi Konstantin! > > I received your "present" :-) - many thanks! I already ported my base-band > demux code to the current linux media master branch (in the v4l-dvb git > repo). > It currently allows drivers/frontends to pass base-band frames to the > bb-demux. > The bb-demux allows user-space filtering for BBFrames, TS packets, etc via > the demux handle or dvr device. It also allows other kernel components to do > base-band filtering (e.g. receive BBFrames on a specific ISI). > > Currently, the bb-demux only accepts a single, complete BBFrame in a single > buffer, but I think > it should also be able to cope with a stream of data (for ease of driver > integration), including > synchronization (search for frame start) and buffering (for assembling > frames). > > Besides checking whether the current user-space API for base-band filtering > is useful, > there are a few remaining design questions to think about: > > * How to allow pes/section filtering when receiving multiple TSs in > parallel (on different ISIs) > - allow to "stack" filters, e.g. a bb-demux filter delivers TS from a > certain > ISI and forwards it to a section filter (which then passes sections > to user-space). > - dmx / dvr device for each? > * When and how to bring frontend into base-band data mode (a mode where it > delivers > BBFrames instead of TS)? > - Should this be set by the user or happen automatically? > * How to set ISI on demux if we receive TS on a channel with MIS > (if this is not already possible, didn't check it yet) > - this could be covered by the bb-demux filtering API, although the > base-band > demux is not directly involved in this case (since TS data is > delivered to dvb-core). > > For now, I'm working to setup a public GIT repository, so you can have a > look at the current status. > Do you have a repository for the TBS drivers or should I use the official > ones? Do you have > an idea of how to program the STV900 to output BBFrames? > > Thanks again and kind regards, > Christian. > > Am 17.01.2012 um 21:04 schrieb Konstantin Dimitrov: > > >> hi Christian, >> >> it's great that you find it interesting too. i already prepared the >> package and i will send it tomorrow - you should get in shorty - i >> believe even with the most inexpensive shipping service within Europe >> you will get in just a week or so. i hope you will have fun with the >> TBS 6925 board - even if not for anything else just to receive DVB-S2 >> in Linux. >> >> kind regards, >> konstantin >> >> On Thu, Jan 12, 2012 at 3:06 PM, Christian Prähauser >> <cpraehaus@cosy.sbg.ac.at> wrote: >>> >>> Hi Konstantin! >>> >>> Thank you, and a happy new year to you too! >>> >>> The way to proceed you suggested sounds very interesting too me! I'd >>> be more than happy if you could send me the TBS 6925 card to my >>> university >>> address: >>> >>> Christian Prähauser >>> c/o Department of Computer Sciences >>> University of Salzburg >>> Jakob Haringer Str. 2 >>> A 5020 Salzburg >>> AUSTRIA >>> >>> I will start to update my patches to match recent LinuxDVB sources and >>> try to integrate Baseband demux support into the TBS linux driver. >>> If this works, we can also put in GSE-support (S2-native encapsulation >>> for >>> carrying IP packets in DVB). This would then probably start to be >>> interesting >>> for some people... >>> >>> Thanks and kind regards, >>> Christian. >>> >>> Am 10.01.2012 um 20:40 schrieb Konstantin Dimitrov: >>> >>> >>>> hello Christian, >>>> >>>> and Happy New Year to you! >>>> >>>> thank you for joining the discussion, but apparently and unfortunately >>>> Mauro current priorities are not to bring V4L to a next-level, as you >>>> call it in your article to next-generation. anyway, i think your work >>>> is very interesting and the least i can do is to offer you, if you >>>> agree and give me your address, to send you as gift one TBS 6925 card >>>> - i had two samples of such card, because i made the Linux drivers for >>>> it and i can send you one of those two boards to you. what is >>>> interesting about the card that in Windows TBS has tool called "TBS >>>> Recorder" that can capture BBFrames - i'm not sure if the capture is >>>> entirely correct, but at least checking with hex-editor the BBFrames >>>> headers are present in the data dump. also, datasheets of the >>>> demodulator in use on the board confirm that it can output BBFreames. >>>> so, we can try just for fun to merge your work on BB-demux to V4L tree >>>> with TBS 6925 support and see if we can get real hardware take use of >>>> the BB-demux. what you think about such idea? >>>> >>>> kind regards, >>>> konstantin >>>> >>>> On Tue, Dec 27, 2011 at 12:12 PM, Christian Prähauser >>>> <cpraehaus@cosy.sbg.ac.at> wrote: >>>>>> >>>>>> >>>>>> >>>>>> Yes, I'm meaning something like what it was described there. I think >>>>>> that the code written by Christian were never submitted upstream. >>>>>> >>>>> >>>>> Hello Mauro, >>>>> >>>>> Konstantin drew my attention to this discussion. Indeed, some time ago >>>>> I >>>>> wrote >>>>> a base-band demux for LinuxDVB. It was part of a project to integrate >>>>> support >>>>> for second-generation IP/DVB encapsulations (GSE). The BB-demux allows >>>>> to >>>>> register filters for different ISIs and data types (raw, generic >>>>> stream, >>>>> transport stream). >>>>> >>>>> I realized that the repo hosted at our University is down. If there is >>>>> interest, >>>>> I can update my patches to the latest LinuxDVB version and we can put >>>>> them on a >>>>> public repo e.g. at linuxdvb.org. >>>>> >>>>> Kind regards, >>>>> Christian. >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> To unsubscribe from this list: send the line "unsubscribe linux-media" >>>>> in >>>>> the body of a message to majordomo@vger.kernel.org >>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html >>> >>> >>> >>> --- >>> Dipl.-Ing. Christian Praehauser <cpraehaus@cosy.sbg.ac.at> >>> >>> || //\\//\\ || Multimedia Communications Group, >>> ||// \/ \\|| Department of Computer Sciences, University of Salzburg >>> http://www.cosy.sbg.ac.at/~cpraehaus/ >>> http://www.network-research.org/ >>> http://www.uni-salzburg.at/ > > > --- > Dipl.-Ing. Christian Praehauser <cpraehaus@cosy.sbg.ac.at> > > || //\\//\\ || Multimedia Communications Group, > ||// \/ \\|| Department of Computer Sciences, University of Salzburg > http://www.cosy.sbg.ac.at/~cpraehaus/ > http://www.network-research.org/ > http://www.uni-salzburg.at/ ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2012-02-01 18:49 ` Konstantin Dimitrov @ 2012-02-18 19:06 ` Christian Prähauser 2012-02-19 23:12 ` Konstantin Dimitrov 0 siblings, 1 reply; 26+ messages in thread From: Christian Prähauser @ 2012-02-18 19:06 UTC (permalink / raw) To: Konstantin Dimitrov; +Cc: linux-media Hello Konstantin! I was on holiday, so no problem at all. I wanted to tell you that I managed to get the base-band demux working with the TBS6925 card. Actually, I needed to modify the configuration of the STV0900 packet delineator to switch the circuit to frame mode. The SAA716x PCI adapter chip seems to forward the base-band frame without errors. I haven't verified if all frames are received, will do that in the next couple of days. From that point on, I'm going to complete some open issues and clean up the rest of the stuff and open a public repository for the bb-demux. Thanks for the link to the MIS filter patch. I will include it in the base-band filtering code and try to enhance it to support filtering on multiple ISIs, as the STV0900 seems to support this. Thanks and kind regards, Christian. Am 01.02.2012 um 19:49 schrieb Konstantin Dimitrov: > hi Christian, > > sorry for the very late reply - unfortunately i'm very busy lately. > so, what i can tell you about your questions: > > * for setting MIS filter you can follow the link in the first email > that started the discussion here: > > http://comments.gmane.org/gmane.linux.drivers.video-input-infrastructure/42312 > > or more specifically what's posted here: > > http://www.tbsdtv.com/forum/viewtopic.php?f=26&t=1874 > > i don't know if you have access to some signal modulator/generator > with MIS support, but if not there are several good live MIS signals, > e.g. > > Atlantic Bird 1 @ 12.5 W, 12718 H, 36510, FEC 5/6 > > it's 8PSK MIS transponder with four TS, ISIs of them are: 33, 34, 35 > 36 > > if you can't get 12.5W let me know and i will look for some other live > signal useful for test purposes. > > * STV900AAC needs to be put on BBFrame mode, by default it strips the > BB data and outputs TS. however, the necessary settings for are > BBFrame mode not very clear - i need to do some trial and errors until > i hopefully get the BBFrame mode working. however, what is useful as a > starter is to parse/analyze for errors data dump made in Windows with > "TBS Recorder" tool - i believe i mentioned it to you - the data dump > made with that tool seems as valid BBFrames at least at first glance > with hex-editor, i.e. valid BBHeader data are observed. so, is there > some tool from your work (maybe 'bb-demux') that can parse/analyze > data dump of supposedly BBFrames. > > anyway, let me know what help you need - i will look at BBFrame mode > for STV900AAC, because i can identify that task as open. > > best wishes, > konstantin > > On Wed, Jan 25, 2012 at 3:12 PM, Christian Prähauser > <cpraehaus@cosy.sbg.ac.at> wrote: >> Hi Konstantin! >> >> I received your "present" :-) - many thanks! I already ported my >> base-band >> demux code to the current linux media master branch (in the v4l-dvb >> git >> repo). >> It currently allows drivers/frontends to pass base-band frames to the >> bb-demux. >> The bb-demux allows user-space filtering for BBFrames, TS packets, >> etc via >> the demux handle or dvr device. It also allows other kernel >> components to do >> base-band filtering (e.g. receive BBFrames on a specific ISI). >> >> Currently, the bb-demux only accepts a single, complete BBFrame in >> a single >> buffer, but I think >> it should also be able to cope with a stream of data (for ease of >> driver >> integration), including >> synchronization (search for frame start) and buffering (for >> assembling >> frames). >> >> Besides checking whether the current user-space API for base-band >> filtering >> is useful, >> there are a few remaining design questions to think about: >> >> * How to allow pes/section filtering when receiving multiple TSs in >> parallel (on different ISIs) >> - allow to "stack" filters, e.g. a bb-demux filter delivers >> TS from a >> certain >> ISI and forwards it to a section filter (which then passes >> sections >> to user-space). >> - dmx / dvr device for each? >> * When and how to bring frontend into base-band data mode (a mode >> where it >> delivers >> BBFrames instead of TS)? >> - Should this be set by the user or happen automatically? >> * How to set ISI on demux if we receive TS on a channel with MIS >> (if this is not already possible, didn't check it yet) >> - this could be covered by the bb-demux filtering API, >> although the >> base-band >> demux is not directly involved in this case (since TS data is >> delivered to dvb-core). >> >> For now, I'm working to setup a public GIT repository, so you can >> have a >> look at the current status. >> Do you have a repository for the TBS drivers or should I use the >> official >> ones? Do you have >> an idea of how to program the STV900 to output BBFrames? >> >> Thanks again and kind regards, >> Christian. >> >> Am 17.01.2012 um 21:04 schrieb Konstantin Dimitrov: >> >> >>> hi Christian, >>> >>> it's great that you find it interesting too. i already prepared the >>> package and i will send it tomorrow - you should get in shorty - i >>> believe even with the most inexpensive shipping service within >>> Europe >>> you will get in just a week or so. i hope you will have fun with the >>> TBS 6925 board - even if not for anything else just to receive DVB- >>> S2 >>> in Linux. >>> >>> kind regards, >>> konstantin >>> >>> On Thu, Jan 12, 2012 at 3:06 PM, Christian Prähauser >>> <cpraehaus@cosy.sbg.ac.at> wrote: >>>> >>>> Hi Konstantin! >>>> >>>> Thank you, and a happy new year to you too! >>>> >>>> The way to proceed you suggested sounds very interesting too me! >>>> I'd >>>> be more than happy if you could send me the TBS 6925 card to my >>>> university >>>> address: >>>> >>>> Christian Prähauser >>>> c/o Department of Computer Sciences >>>> University of Salzburg >>>> Jakob Haringer Str. 2 >>>> A 5020 Salzburg >>>> AUSTRIA >>>> >>>> I will start to update my patches to match recent LinuxDVB >>>> sources and >>>> try to integrate Baseband demux support into the TBS linux driver. >>>> If this works, we can also put in GSE-support (S2-native >>>> encapsulation >>>> for >>>> carrying IP packets in DVB). This would then probably start to be >>>> interesting >>>> for some people... >>>> >>>> Thanks and kind regards, >>>> Christian. >>>> >>>> Am 10.01.2012 um 20:40 schrieb Konstantin Dimitrov: >>>> >>>> >>>>> hello Christian, >>>>> >>>>> and Happy New Year to you! >>>>> >>>>> thank you for joining the discussion, but apparently and >>>>> unfortunately >>>>> Mauro current priorities are not to bring V4L to a next-level, >>>>> as you >>>>> call it in your article to next-generation. anyway, i think your >>>>> work >>>>> is very interesting and the least i can do is to offer you, if you >>>>> agree and give me your address, to send you as gift one TBS 6925 >>>>> card >>>>> - i had two samples of such card, because i made the Linux >>>>> drivers for >>>>> it and i can send you one of those two boards to you. what is >>>>> interesting about the card that in Windows TBS has tool called >>>>> "TBS >>>>> Recorder" that can capture BBFrames - i'm not sure if the >>>>> capture is >>>>> entirely correct, but at least checking with hex-editor the >>>>> BBFrames >>>>> headers are present in the data dump. also, datasheets of the >>>>> demodulator in use on the board confirm that it can output >>>>> BBFreames. >>>>> so, we can try just for fun to merge your work on BB-demux to >>>>> V4L tree >>>>> with TBS 6925 support and see if we can get real hardware take >>>>> use of >>>>> the BB-demux. what you think about such idea? >>>>> >>>>> kind regards, >>>>> konstantin >>>>> >>>>> On Tue, Dec 27, 2011 at 12:12 PM, Christian Prähauser >>>>> <cpraehaus@cosy.sbg.ac.at> wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>> Yes, I'm meaning something like what it was described there. I >>>>>>> think >>>>>>> that the code written by Christian were never submitted >>>>>>> upstream. >>>>>>> >>>>>> >>>>>> Hello Mauro, >>>>>> >>>>>> Konstantin drew my attention to this discussion. Indeed, some >>>>>> time ago >>>>>> I >>>>>> wrote >>>>>> a base-band demux for LinuxDVB. It was part of a project to >>>>>> integrate >>>>>> support >>>>>> for second-generation IP/DVB encapsulations (GSE). The BB-demux >>>>>> allows >>>>>> to >>>>>> register filters for different ISIs and data types (raw, generic >>>>>> stream, >>>>>> transport stream). >>>>>> >>>>>> I realized that the repo hosted at our University is down. If >>>>>> there is >>>>>> interest, >>>>>> I can update my patches to the latest LinuxDVB version and we >>>>>> can put >>>>>> them on a >>>>>> public repo e.g. at linuxdvb.org. >>>>>> >>>>>> Kind regards, >>>>>> Christian. >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> To unsubscribe from this list: send the line "unsubscribe linux- >>>>>> media" >>>>>> in >>>>>> the body of a message to majordomo@vger.kernel.org >>>>>> More majordomo info at http://vger.kernel.org/majordomo- >>>>>> info.html >>>> >>>> >>>> >>>> --- >>>> Dipl.-Ing. Christian Praehauser <cpraehaus@cosy.sbg.ac.at> >>>> >>>> || //\\//\\ || Multimedia Communications Group, >>>> ||// \/ \\|| Department of Computer Sciences, University of >>>> Salzburg >>>> http://www.cosy.sbg.ac.at/~cpraehaus/ >>>> http://www.network-research.org/ >>>> http://www.uni-salzburg.at/ >> >> >> --- >> Dipl.-Ing. Christian Praehauser <cpraehaus@cosy.sbg.ac.at> >> >> || //\\//\\ || Multimedia Communications Group, >> ||// \/ \\|| Department of Computer Sciences, University of >> Salzburg >> http://www.cosy.sbg.ac.at/~cpraehaus/ >> http://www.network-research.org/ >> http://www.uni-salzburg.at/ > -- > To unsubscribe from this list: send the line "unsubscribe linux- > media" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html --- Dipl.-Ing. Christian Praehauser <cpraehaus@cosy.sbg.ac.at> || //\\//\\ || Multimedia Communications Group, ||// \/ \\|| Department of Computer Sciences, University of Salzburg http://www.cosy.sbg.ac.at/~cpraehaus/ http://www.network-research.org/ http://www.uni-salzburg.at/ ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2012-02-18 19:06 ` Christian Prähauser @ 2012-02-19 23:12 ` Konstantin Dimitrov 2012-03-07 16:33 ` Bob Winslow 0 siblings, 1 reply; 26+ messages in thread From: Konstantin Dimitrov @ 2012-02-19 23:12 UTC (permalink / raw) To: Christian Prähauser; +Cc: linux-media hello Christian, that's really great news! i'm looking forward to look at the code when the public repository is ready. i'm sure i'm not the only one and the news would be especially exciting for TBS 6925 owners, which use Linux, but it's away beyond that, because the real news here is working base-band support in 'dvb-core' of V4L. also, it's really good that SAA716x code seems to just work with BBFrames and no further changes are required there. kind regards, konstantin On Sat, Feb 18, 2012 at 9:06 PM, Christian Prähauser <cpraehaus@cosy.sbg.ac.at> wrote: > Hello Konstantin! > > I was on holiday, so no problem at all. I wanted to tell you that I > managed to get the base-band demux working with the TBS6925 card. > Actually, I needed to modify the configuration of the STV0900 > packet delineator to switch the circuit to frame mode. The SAA716x > PCI adapter chip seems to forward the base-band frame without errors. > I haven't verified if all frames are received, will do that in the next > couple of days. From that point on, I'm going to complete some open issues > and clean up the rest of the stuff and open a public repository for the > bb-demux. > > Thanks for the link to the MIS filter patch. I will include it in the > base-band filtering code > and try to enhance it to support filtering on multiple ISIs, as the STV0900 > seems to support this. > > > Thanks and kind regards, > Christian. > > Am 01.02.2012 um 19:49 schrieb Konstantin Dimitrov: > > >> hi Christian, >> >> sorry for the very late reply - unfortunately i'm very busy lately. >> so, what i can tell you about your questions: >> >> * for setting MIS filter you can follow the link in the first email >> that started the discussion here: >> >> >> http://comments.gmane.org/gmane.linux.drivers.video-input-infrastructure/42312 >> >> or more specifically what's posted here: >> >> http://www.tbsdtv.com/forum/viewtopic.php?f=26&t=1874 >> >> i don't know if you have access to some signal modulator/generator >> with MIS support, but if not there are several good live MIS signals, >> e.g. >> >> Atlantic Bird 1 @ 12.5 W, 12718 H, 36510, FEC 5/6 >> >> it's 8PSK MIS transponder with four TS, ISIs of them are: 33, 34, 35 36 >> >> if you can't get 12.5W let me know and i will look for some other live >> signal useful for test purposes. >> >> * STV900AAC needs to be put on BBFrame mode, by default it strips the >> BB data and outputs TS. however, the necessary settings for are >> BBFrame mode not very clear - i need to do some trial and errors until >> i hopefully get the BBFrame mode working. however, what is useful as a >> starter is to parse/analyze for errors data dump made in Windows with >> "TBS Recorder" tool - i believe i mentioned it to you - the data dump >> made with that tool seems as valid BBFrames at least at first glance >> with hex-editor, i.e. valid BBHeader data are observed. so, is there >> some tool from your work (maybe 'bb-demux') that can parse/analyze >> data dump of supposedly BBFrames. >> >> anyway, let me know what help you need - i will look at BBFrame mode >> for STV900AAC, because i can identify that task as open. >> >> best wishes, >> konstantin >> >> On Wed, Jan 25, 2012 at 3:12 PM, Christian Prähauser >> <cpraehaus@cosy.sbg.ac.at> wrote: >>> >>> Hi Konstantin! >>> >>> I received your "present" :-) - many thanks! I already ported my >>> base-band >>> demux code to the current linux media master branch (in the v4l-dvb git >>> repo). >>> It currently allows drivers/frontends to pass base-band frames to the >>> bb-demux. >>> The bb-demux allows user-space filtering for BBFrames, TS packets, etc >>> via >>> the demux handle or dvr device. It also allows other kernel components to >>> do >>> base-band filtering (e.g. receive BBFrames on a specific ISI). >>> >>> Currently, the bb-demux only accepts a single, complete BBFrame in a >>> single >>> buffer, but I think >>> it should also be able to cope with a stream of data (for ease of driver >>> integration), including >>> synchronization (search for frame start) and buffering (for assembling >>> frames). >>> >>> Besides checking whether the current user-space API for base-band >>> filtering >>> is useful, >>> there are a few remaining design questions to think about: >>> >>> * How to allow pes/section filtering when receiving multiple TSs in >>> parallel (on different ISIs) >>> - allow to "stack" filters, e.g. a bb-demux filter delivers TS from >>> a >>> certain >>> ISI and forwards it to a section filter (which then passes sections >>> to user-space). >>> - dmx / dvr device for each? >>> * When and how to bring frontend into base-band data mode (a mode where >>> it >>> delivers >>> BBFrames instead of TS)? >>> - Should this be set by the user or happen automatically? >>> * How to set ISI on demux if we receive TS on a channel with MIS >>> (if this is not already possible, didn't check it yet) >>> - this could be covered by the bb-demux filtering API, although the >>> base-band >>> demux is not directly involved in this case (since TS data is >>> delivered to dvb-core). >>> >>> For now, I'm working to setup a public GIT repository, so you can have a >>> look at the current status. >>> Do you have a repository for the TBS drivers or should I use the official >>> ones? Do you have >>> an idea of how to program the STV900 to output BBFrames? >>> >>> Thanks again and kind regards, >>> Christian. >>> >>> Am 17.01.2012 um 21:04 schrieb Konstantin Dimitrov: >>> >>> >>>> hi Christian, >>>> >>>> it's great that you find it interesting too. i already prepared the >>>> package and i will send it tomorrow - you should get in shorty - i >>>> believe even with the most inexpensive shipping service within Europe >>>> you will get in just a week or so. i hope you will have fun with the >>>> TBS 6925 board - even if not for anything else just to receive DVB-S2 >>>> in Linux. >>>> >>>> kind regards, >>>> konstantin >>>> >>>> On Thu, Jan 12, 2012 at 3:06 PM, Christian Prähauser >>>> <cpraehaus@cosy.sbg.ac.at> wrote: >>>>> >>>>> >>>>> Hi Konstantin! >>>>> >>>>> Thank you, and a happy new year to you too! >>>>> >>>>> The way to proceed you suggested sounds very interesting too me! I'd >>>>> be more than happy if you could send me the TBS 6925 card to my >>>>> university >>>>> address: >>>>> >>>>> Christian Prähauser >>>>> c/o Department of Computer Sciences >>>>> University of Salzburg >>>>> Jakob Haringer Str. 2 >>>>> A 5020 Salzburg >>>>> AUSTRIA >>>>> >>>>> I will start to update my patches to match recent LinuxDVB sources and >>>>> try to integrate Baseband demux support into the TBS linux driver. >>>>> If this works, we can also put in GSE-support (S2-native encapsulation >>>>> for >>>>> carrying IP packets in DVB). This would then probably start to be >>>>> interesting >>>>> for some people... >>>>> >>>>> Thanks and kind regards, >>>>> Christian. >>>>> >>>>> Am 10.01.2012 um 20:40 schrieb Konstantin Dimitrov: >>>>> >>>>> >>>>>> hello Christian, >>>>>> >>>>>> and Happy New Year to you! >>>>>> >>>>>> thank you for joining the discussion, but apparently and unfortunately >>>>>> Mauro current priorities are not to bring V4L to a next-level, as you >>>>>> call it in your article to next-generation. anyway, i think your work >>>>>> is very interesting and the least i can do is to offer you, if you >>>>>> agree and give me your address, to send you as gift one TBS 6925 card >>>>>> - i had two samples of such card, because i made the Linux drivers for >>>>>> it and i can send you one of those two boards to you. what is >>>>>> interesting about the card that in Windows TBS has tool called "TBS >>>>>> Recorder" that can capture BBFrames - i'm not sure if the capture is >>>>>> entirely correct, but at least checking with hex-editor the BBFrames >>>>>> headers are present in the data dump. also, datasheets of the >>>>>> demodulator in use on the board confirm that it can output BBFreames. >>>>>> so, we can try just for fun to merge your work on BB-demux to V4L tree >>>>>> with TBS 6925 support and see if we can get real hardware take use of >>>>>> the BB-demux. what you think about such idea? >>>>>> >>>>>> kind regards, >>>>>> konstantin >>>>>> >>>>>> On Tue, Dec 27, 2011 at 12:12 PM, Christian Prähauser >>>>>> <cpraehaus@cosy.sbg.ac.at> wrote: >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> Yes, I'm meaning something like what it was described there. I think >>>>>>>> that the code written by Christian were never submitted upstream. >>>>>>>> >>>>>>> >>>>>>> Hello Mauro, >>>>>>> >>>>>>> Konstantin drew my attention to this discussion. Indeed, some time >>>>>>> ago >>>>>>> I >>>>>>> wrote >>>>>>> a base-band demux for LinuxDVB. It was part of a project to integrate >>>>>>> support >>>>>>> for second-generation IP/DVB encapsulations (GSE). The BB-demux >>>>>>> allows >>>>>>> to >>>>>>> register filters for different ISIs and data types (raw, generic >>>>>>> stream, >>>>>>> transport stream). >>>>>>> >>>>>>> I realized that the repo hosted at our University is down. If there >>>>>>> is >>>>>>> interest, >>>>>>> I can update my patches to the latest LinuxDVB version and we can put >>>>>>> them on a >>>>>>> public repo e.g. at linuxdvb.org. >>>>>>> >>>>>>> Kind regards, >>>>>>> Christian. >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> To unsubscribe from this list: send the line "unsubscribe >>>>>>> linux-media" >>>>>>> in >>>>>>> the body of a message to majordomo@vger.kernel.org >>>>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html >>>>> >>>>> >>>>> >>>>> >>>>> --- >>>>> Dipl.-Ing. Christian Praehauser <cpraehaus@cosy.sbg.ac.at> >>>>> >>>>> || //\\//\\ || Multimedia Communications Group, >>>>> ||// \/ \\|| Department of Computer Sciences, University of Salzburg >>>>> http://www.cosy.sbg.ac.at/~cpraehaus/ >>>>> http://www.network-research.org/ >>>>> http://www.uni-salzburg.at/ >>> >>> >>> >>> --- >>> Dipl.-Ing. Christian Praehauser <cpraehaus@cosy.sbg.ac.at> >>> >>> || //\\//\\ || Multimedia Communications Group, >>> ||// \/ \\|| Department of Computer Sciences, University of Salzburg >>> http://www.cosy.sbg.ac.at/~cpraehaus/ >>> http://www.network-research.org/ >>> http://www.uni-salzburg.at/ >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-media" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html > > > --- > Dipl.-Ing. Christian Praehauser <cpraehaus@cosy.sbg.ac.at> > > || //\\//\\ || Multimedia Communications Group, > ||// \/ \\|| Department of Computer Sciences, University of Salzburg > http://www.cosy.sbg.ac.at/~cpraehaus/ > http://www.network-research.org/ > http://www.uni-salzburg.at/ ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2012-02-19 23:12 ` Konstantin Dimitrov @ 2012-03-07 16:33 ` Bob Winslow 2012-03-13 9:36 ` Marek Ochaba 2012-03-13 15:22 ` Konstantin Dimitrov 0 siblings, 2 replies; 26+ messages in thread From: Bob Winslow @ 2012-03-07 16:33 UTC (permalink / raw) To: linux-media > that's really great news! i'm looking forward to look at the code when > the public repository is ready. i'm sure i'm not the only one and the > news would be especially exciting for TBS 6925 owners, which use > Linux, but it's away beyond that, because the real news here is > working base-band support in 'dvb-core' of V4L. also, it's really good > that SAA716x code seems to just work with BBFrames and no further > changes are required there. > Hi Christian, Konstantin, Well, my TBS 6925 just came in the mail yesterday and I am excited to plug it in and start playing with it. Your work on the bb-demux looks like a good place to start playing with the card under linux. Have you setup a public repo yet for the band band support (bb-demux) ? Also, I downloaded the linux drivers for the card from the TBS dtv site, and put them on my ubuntu 11.10 pc. They seem to work. Is this the best place to get drivers for the card?? the front end driver files seem to be just .o's and the source is not in the tarball. Sorry, I'm a bit new to the dvb world and I am still learning where to find stuff. Any pointers/help to finding the latest code/drivers would be very much appreciated. Kind regards, Bob ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2012-03-07 16:33 ` Bob Winslow @ 2012-03-13 9:36 ` Marek Ochaba 2012-03-13 12:30 ` Bob W 2012-03-13 15:22 ` Konstantin Dimitrov 1 sibling, 1 reply; 26+ messages in thread From: Marek Ochaba @ 2012-03-13 9:36 UTC (permalink / raw) To: bob.news; +Cc: linux-media Compilation and instalation process is described in README_TBS6921 file. - extract linux-tbs-drivers.tar.bz2 archive - run configuration script v4l/tbs-x86_r3.sh or v4l/tbs-x86_64.sh - compile by make - make install this put driver to right place I downloaded source of driver from TBS dtv site and it work well for me (on Debian 5.0) -- Marek Ochaba ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2012-03-13 9:36 ` Marek Ochaba @ 2012-03-13 12:30 ` Bob W 0 siblings, 0 replies; 26+ messages in thread From: Bob W @ 2012-03-13 12:30 UTC (permalink / raw) To: Marek Ochaba; +Cc: linux-media On 3/13/2012 4:36 AM, Marek Ochaba wrote: > Compilation and instalation process is described in README_TBS6921 file. > Thanks Marek. Yep, that is what I did and it worked just fine for me on Ubuntu. I was just wondering where the .c files were for the precompiled .o's that those scripts are moving around. Then after posting I realized I just wasnt' looking hard enough.. I think all the source is in the tarball and I just need to get the kernel source to compile. So in the end, my fault for not looking before typing. Still hoping that Christian will put the bb-demux code up somewhere so can start playing with it. Bob ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2012-03-07 16:33 ` Bob Winslow 2012-03-13 9:36 ` Marek Ochaba @ 2012-03-13 15:22 ` Konstantin Dimitrov 2012-03-13 15:47 ` Bob W 1 sibling, 1 reply; 26+ messages in thread From: Konstantin Dimitrov @ 2012-03-13 15:22 UTC (permalink / raw) To: Bob Winslow; +Cc: linux-media, Christian Prähauser hi Bob, all work to support BBFrames in the Linux kernel is done by Christian - in fact it's a long lost work from 5 years ago: http://www.linuxtv.org/pipermail/linux-dvb/2007-December/022217.html and i hope it won't be lost again. i just encouraged Christian that his work is important and there are people interested in it - you're one such example. so, i offered Christian to help him with i can. i guess more people appreciating what his doing and encourage him will give him better motivation to release the code to the public. however, i guess the delay is more, because it's not easy and it requires time to prepare the code for initial public release and that's why the delay. so, i don't have Christian's code and i'm eager as you're to be able to try it out, but we need to be patient. i'm sure that after there is some public release and repository more people will be interested to contribute to that work. best regards, konstantin On Wed, Mar 7, 2012 at 6:33 PM, Bob Winslow <bob.news@non-elite.com> wrote: > >> that's really great news! i'm looking forward to look at the code when >> the public repository is ready. i'm sure i'm not the only one and the >> news would be especially exciting for TBS 6925 owners, which use >> Linux, but it's away beyond that, because the real news here is >> working base-band support in 'dvb-core' of V4L. also, it's really good >> that SAA716x code seems to just work with BBFrames and no further >> changes are required there. >> > > Hi Christian, Konstantin, > > > Well, my TBS 6925 just came in the mail yesterday and I am excited to plug it > in and start playing with it. Your work on the bb-demux looks like a good place > to start playing with the card under linux. > > Have you setup a public repo yet for the band band support (bb-demux) ? > > Also, I downloaded the linux drivers for the card from the TBS dtv site, and put > them on my ubuntu 11.10 pc. They seem to work. Is this the best place to get > drivers for the card?? the front end driver files seem to be just .o's and the > source is not in the tarball. > > Sorry, I'm a bit new to the dvb world and I am still learning where to find > stuff. Any pointers/help to finding the latest code/drivers would be very much > appreciated. > > > Kind regards, > > Bob > > > > > > -- > To unsubscribe from this list: send the line "unsubscribe linux-media" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2012-03-13 15:22 ` Konstantin Dimitrov @ 2012-03-13 15:47 ` Bob W 2012-03-15 9:40 ` Christian Prähauser 0 siblings, 1 reply; 26+ messages in thread From: Bob W @ 2012-03-13 15:47 UTC (permalink / raw) To: Konstantin Dimitrov; +Cc: linux-media, Christian Prähauser Hi Konstantin, > all work to support BBFrames in the Linux kernel is done by Christian > - in fact it's a long lost work from 5 years ago: > > http://www.linuxtv.org/pipermail/linux-dvb/2007-December/022217.html yep, I have followed the history back... and like Christian said, the old repo is nolonger working. :( > > and i hope it won't be lost again. i just encouraged Christian that > his work is important and there are people interested in it - you're > one such example. so, i offered Christian to help him with i can. i > guess more people appreciating what his doing and encourage him will > give him better motivation to release the code to the public. however, > i guess the delay is more, because it's not easy and it requires time > to prepare the code for initial public release and that's why the > delay. so, i don't have Christian's code and i'm eager as you're to be > able to try it out, but we need to be patient. i'm sure that after > there is some public release and repository more people will be > interested to contribute to that work. > > best regards, > konstantin Agreed, I understand the pressure of releasing publicly. Once released, the nit picking begins.. lol. I will keep watch on the list. Christian, if you want an extra tester to help yah, count me in. I'll help also with what I can. Bob ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2012-03-13 15:47 ` Bob W @ 2012-03-15 9:40 ` Christian Prähauser 2012-03-19 8:46 ` Christian Prähauser 0 siblings, 1 reply; 26+ messages in thread From: Christian Prähauser @ 2012-03-15 9:40 UTC (permalink / raw) To: Bob W; +Cc: Konstantin Dimitrov, linux-media Dear all, First, thanks for your interest in this functionality. I think the modifications are in a shape where they begin to be useful for others. Currently I'm (still) trying to get some GIT repo where I can host the whole stuff. Thank you all for your support, testing will indeed by important after the first version is "in the wild" :-). I definitely want to keep this going and be sure that I tell you as soon as the code can be accessed. Kind regards, Christian. Am 13.03.2012 um 16:47 schrieb Bob W: > > > Hi Konstantin, > > >> all work to support BBFrames in the Linux kernel is done by Christian >> - in fact it's a long lost work from 5 years ago: >> >> http://www.linuxtv.org/pipermail/linux-dvb/2007-December/022217.html > > yep, I have followed the history back... and like Christian said, the > old repo is nolonger working. :( > >> >> and i hope it won't be lost again. i just encouraged Christian that >> his work is important and there are people interested in it - you're >> one such example. so, i offered Christian to help him with i can. i >> guess more people appreciating what his doing and encourage him will >> give him better motivation to release the code to the public. >> however, >> i guess the delay is more, because it's not easy and it requires time >> to prepare the code for initial public release and that's why the >> delay. so, i don't have Christian's code and i'm eager as you're to >> be >> able to try it out, but we need to be patient. i'm sure that after >> there is some public release and repository more people will be >> interested to contribute to that work. >> >> best regards, >> konstantin > > > Agreed, I understand the pressure of releasing publicly. Once > released, > the nit picking begins.. lol. I will keep watch on the list. > Christian, if you want an extra tester to help yah, count me in. I'll > help also with what I can. > > Bob > > > > > -- > To unsubscribe from this list: send the line "unsubscribe linux- > media" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html --- Dipl.-Ing. Christian Praehauser <cpraehaus@cosy.sbg.ac.at> || //\\//\\ || Multimedia Communications Group, ||// \/ \\|| Department of Computer Sciences, University of Salzburg http://www.cosy.sbg.ac.at/~cpraehaus/ http://www.network-research.org/ http://www.uni-salzburg.at/ ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2012-03-15 9:40 ` Christian Prähauser @ 2012-03-19 8:46 ` Christian Prähauser 2012-03-19 15:19 ` Konstantin Dimitrov 0 siblings, 1 reply; 26+ messages in thread From: Christian Prähauser @ 2012-03-19 8:46 UTC (permalink / raw) To: linux-media; +Cc: Bob W, Konstantin Dimitrov, Marek Ochaba Dear all, I decided to post a patch against the TBS drivers for all those who want to experiment with the very preliminary base-band demultiplexer until I have a repository to properly host this stuff. Currently it only works for the TBS 6925 card. The bb-dmx was created for Linux v3.3, so the patch also contains some changes that made it into Linux since TBS driver release v111118. You can get the TBS source code via this direct link (I know there's a newer version but the patch is against the old driver package): http://www.tbsdtv.com/download/document/common/tbs-linux-drivers_v111118.zip And then you can download the bb-dmx patch from here: http://www.cosy.sbg.ac.at/~cpraehaus/download/tbs_v111118_bb-dmx_2012-03-19.patch.gz Tuning and configuration of the card is as normal, notice however that the card is currently put in base-band data mode irrespective of any configuration. This means that you probably wont be able to receive DVB-S. To test the bb-dmx support, there is a patch against dvbsnoop 1.4.5. You can get the source from the SF site: http://dvbsnoop.sourceforge.net/ and the patch from here: http://www.cosy.sbg.ac.at/~cpraehaus/download/dvbsnoop-1.4.50_bb-dmx_2012-03-19.patch Usage: dvbsnoop -s bb <ISI> (receive bbframes from <ISI>) dvbsnoop -s bb -tsraw (receive everything) Sorry, its still all very experimental and DVB-S2 specific, but I'd be happy to get feedback from those interested. Thanks and kind regards, Christian. Am 15.03.2012 um 10:40 schrieb Christian Prähauser: > Dear all, > > First, thanks for your interest in this functionality. I think the > modifications > are in a shape where they begin to be useful for others. Currently > I'm (still) trying to get some GIT repo where I can host the whole > stuff. > > Thank you all for your support, testing will indeed by important > after the first > version is "in the wild" :-). I definitely want to keep this going > and be sure > that I tell you as soon as the code can be accessed. > > Kind regards, > Christian. > > Am 13.03.2012 um 16:47 schrieb Bob W: > >> >> >> Hi Konstantin, >> >> >>> all work to support BBFrames in the Linux kernel is done by >>> Christian >>> - in fact it's a long lost work from 5 years ago: >>> >>> http://www.linuxtv.org/pipermail/linux-dvb/2007-December/022217.html >> >> yep, I have followed the history back... and like Christian said, >> the >> old repo is nolonger working. :( >> >>> >>> and i hope it won't be lost again. i just encouraged Christian that >>> his work is important and there are people interested in it - you're >>> one such example. so, i offered Christian to help him with i can. i >>> guess more people appreciating what his doing and encourage him will >>> give him better motivation to release the code to the public. >>> however, >>> i guess the delay is more, because it's not easy and it requires >>> time >>> to prepare the code for initial public release and that's why the >>> delay. so, i don't have Christian's code and i'm eager as you're >>> to be >>> able to try it out, but we need to be patient. i'm sure that after >>> there is some public release and repository more people will be >>> interested to contribute to that work. >>> >>> best regards, >>> konstantin >> >> >> Agreed, I understand the pressure of releasing publicly. Once >> released, >> the nit picking begins.. lol. I will keep watch on the list. >> Christian, if you want an extra tester to help yah, count me in. >> I'll >> help also with what I can. >> >> Bob >> >> >> >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux- >> media" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html > > --- > Dipl.-Ing. Christian Praehauser <cpraehaus@cosy.sbg.ac.at> > > || //\\//\\ || Multimedia Communications Group, > ||// \/ \\|| Department of Computer Sciences, University of Salzburg > http://www.cosy.sbg.ac.at/~cpraehaus/ > http://www.network-research.org/ > http://www.uni-salzburg.at/ > -- > To unsubscribe from this list: send the line "unsubscribe linux- > media" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html --- Dipl.-Ing. Christian Praehauser <cpraehaus@cosy.sbg.ac.at> || //\\//\\ || Multimedia Communications Group, ||// \/ \\|| Department of Computer Sciences, University of Salzburg http://www.cosy.sbg.ac.at/~cpraehaus/ http://www.network-research.org/ http://www.uni-salzburg.at/ ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2012-03-19 8:46 ` Christian Prähauser @ 2012-03-19 15:19 ` Konstantin Dimitrov 2012-04-24 22:18 ` Bob W 0 siblings, 1 reply; 26+ messages in thread From: Konstantin Dimitrov @ 2012-03-19 15:19 UTC (permalink / raw) To: Christian Prähauser; +Cc: linux-media, Bob W, Marek Ochaba [-- Attachment #1: Type: text/plain, Size: 8068 bytes --] hello Christian, first of all thank you for the great work. so, i have few follow-ups about it: 1. since your current patch contains patches that are kernel-specific changes (i.e. some general changes to the V4L code for the kernel you use), changes related to the BBFrame-support and hardware-specific changes (i.e. related to the TBS 6925 card, which at the moment is the only affordable hardware at least i know that can handle BBFrames) in order for more easy use in different kernels as well for the purpose of others to review the changes related to the BBFrame-support in V4L 'dvb-core' i split your patch to 3 separate patches (they are attached to this email): - 01-bb-dmx.patch : it's supposed to contains all changes you made to the demux part of V4L 'dvb-core' - i didn't make any further changes - just collected your original changes in the patch; it should apply clean to all recent kernel released in the last several months (i believe at least in the last 6 months), because no changes in this parts of 'dvb-core' were made recently - 02-bb-fe.patch : those are changes for BBFrame-support related to the frontend - i separated those changes and i didn't include them in '01-bb-dmx.patch', because recently a lot of changes were made to that part of V4L. so, this patch will apply clean to "tbs-linux-drivers_v120206" and to other V4L trees most probably it will require to manually apply the changes to the respective files, but since it changes less than 10 lines in only 3 files that's just fine for manual patching - 03-bb-tbs.patch : those are all changes specific to the TBS 6925 hardware. additionally to your changes i defined "tsout" module parameter to both 'stv090x' and 'saa716x_tbs-dvb' - that's convenient to change between TS and BB mode just with reloading the modules with rmmod/modprobe 2. so i used the above 3 patches with "tbs-linux-drivers_v120206" and after i applied them: # cd linux-tbs-drivers # patch -p1 < ../01-bb-dmx.patch # patch -p1 < ../02-bb-fe.patch # patch -p1 < ../03-bb-tbs.patch the driver builds successfully, but i'm not sure if i didn't miss something from your original patch. also, i put file called 'tbs6925.conf' in /etc/modprobe.d with lines in it: options stv090x tsout=0 options saa716x_tbs-dvb tsout=0 for easy enable/disable of the BB mode with just reloading the modules in order to make the testing easier. 3. so on the test i did every few seconds i get the following errors: _dvb_dmx_swfilter_bbframe: invalid use of reserved TS/GS value 1 _dvb_dmx_swfilter_bbframe: invalid data field length (length 0, left 10) and hex-dump of the BBFrame data. is that supposed to happen? please, can you confirm if it happens or not in your environment with your original patch or i messed-up something when i prepared the 3 patches from point 1. so, that request is in relation to my seconds request - please, review the 3 patches from point 1 and confirm they are correct and i didn't miss anything - if they are correct patch 01 and 02 can be used for review of the code. many thanks, konstantin On Mon, Mar 19, 2012 at 10:46 AM, Christian Prähauser <cpraehaus@cosy.sbg.ac.at> wrote: > Dear all, > > I decided to post a patch against the TBS drivers for all those who want to > experiment > with the very preliminary base-band demultiplexer until I have a repository > to properly host > this stuff. Currently it only works for the > TBS 6925 card. The bb-dmx was created for Linux v3.3, so the patch also > contains some > changes that made it into Linux since TBS driver release v111118. You can > get the TBS source > code via this direct link (I know there's a newer version but the patch is > against the old driver package): > > http://www.tbsdtv.com/download/document/common/tbs-linux-drivers_v111118.zip > > And then you can download the bb-dmx patch from here: > > http://www.cosy.sbg.ac.at/~cpraehaus/download/tbs_v111118_bb-dmx_2012-03-19.patch.gz > > > Tuning and configuration of the card is as normal, notice however that the > card is currently > put in base-band data mode irrespective of any configuration. This means > that you probably wont > be able to receive DVB-S. > > To test the bb-dmx support, there is a patch against dvbsnoop 1.4.5. You can > get the source from the SF site: > > http://dvbsnoop.sourceforge.net/ > > and the patch from here: > > http://www.cosy.sbg.ac.at/~cpraehaus/download/dvbsnoop-1.4.50_bb-dmx_2012-03-19.patch > > Usage: > dvbsnoop -s bb <ISI> (receive bbframes from <ISI>) > > dvbsnoop -s bb -tsraw (receive everything) > > > Sorry, its still all very experimental and DVB-S2 specific, but I'd be happy > to get feedback from those interested. > > Thanks and kind regards, > Christian. > > > Am 15.03.2012 um 10:40 schrieb Christian Prähauser: > > >> Dear all, >> >> First, thanks for your interest in this functionality. I think the >> modifications >> are in a shape where they begin to be useful for others. Currently >> I'm (still) trying to get some GIT repo where I can host the whole stuff. >> >> Thank you all for your support, testing will indeed by important after the >> first >> version is "in the wild" :-). I definitely want to keep this going and be >> sure >> that I tell you as soon as the code can be accessed. >> >> Kind regards, >> Christian. >> >> Am 13.03.2012 um 16:47 schrieb Bob W: >> >>> >>> >>> Hi Konstantin, >>> >>> >>>> all work to support BBFrames in the Linux kernel is done by Christian >>>> - in fact it's a long lost work from 5 years ago: >>>> >>>> http://www.linuxtv.org/pipermail/linux-dvb/2007-December/022217.html >>> >>> >>> yep, I have followed the history back... and like Christian said, the >>> old repo is nolonger working. :( >>> >>>> >>>> and i hope it won't be lost again. i just encouraged Christian that >>>> his work is important and there are people interested in it - you're >>>> one such example. so, i offered Christian to help him with i can. i >>>> guess more people appreciating what his doing and encourage him will >>>> give him better motivation to release the code to the public. however, >>>> i guess the delay is more, because it's not easy and it requires time >>>> to prepare the code for initial public release and that's why the >>>> delay. so, i don't have Christian's code and i'm eager as you're to be >>>> able to try it out, but we need to be patient. i'm sure that after >>>> there is some public release and repository more people will be >>>> interested to contribute to that work. >>>> >>>> best regards, >>>> konstantin >>> >>> >>> >>> Agreed, I understand the pressure of releasing publicly. Once released, >>> the nit picking begins.. lol. I will keep watch on the list. >>> Christian, if you want an extra tester to help yah, count me in. I'll >>> help also with what I can. >>> >>> Bob >>> >>> >>> >>> >>> -- >>> To unsubscribe from this list: send the line "unsubscribe linux-media" in >>> the body of a message to majordomo@vger.kernel.org >>> More majordomo info at http://vger.kernel.org/majordomo-info.html >> >> >> --- >> Dipl.-Ing. Christian Praehauser <cpraehaus@cosy.sbg.ac.at> >> >> || //\\//\\ || Multimedia Communications Group, >> ||// \/ \\|| Department of Computer Sciences, University of Salzburg >> http://www.cosy.sbg.ac.at/~cpraehaus/ >> http://www.network-research.org/ >> http://www.uni-salzburg.at/ >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-media" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html > > > --- > Dipl.-Ing. Christian Praehauser <cpraehaus@cosy.sbg.ac.at> > > || //\\//\\ || Multimedia Communications Group, > ||// \/ \\|| Department of Computer Sciences, University of Salzburg > http://www.cosy.sbg.ac.at/~cpraehaus/ > http://www.network-research.org/ > http://www.uni-salzburg.at/ [-- Attachment #2: 01-bb-dmx.patch --] [-- Type: text/x-patch, Size: 36366 bytes --] --- a/linux/include/linux/dvb/dmx.h 2012-03-19 14:39:46.185144879 +0200 +++ b/linux/include/linux/dvb/dmx.h 2012-03-19 14:38:26.913145875 +0200 @@ -141,6 +141,52 @@ __u64 stc; /* output: stc in 'base'*90 kHz units */ }; +/** + * Base-band filter output types. + */ +typedef enum { + /// Only deliver Transport Stream packets received with frames using TS compatibility mode + DMX_BB_TSCOMPAT = 0, + /// Output raw BBFrames + DMX_BB_FRAME, + /// Only deliver generic continuous stream data (not including BBFrame header) + DMX_BB_CONT, + /// Only deliver generic packetized stream data (not including BBFrame header) + DMX_BB_PACK +} dmx_bb_type_t; + +/** + * @brief Special ISI value for receiving only SIS-mode streams. + * @note this filter wont deliver any data if the channel uses multiple + * input stream mode (MIS-mode), + */ +#define DMX_ISI_SIS -1 +/** + * @brief Special ISI value for receiving all available input sreams. + * @note This value is only allowed for base-band filter type DMX_BB_FRAME + */ +#define DMX_ISI_ALL -2 + +struct dmx_bb_filter_params +{ + /** + * @brief Identifies a single base-band stream multiplexed on a single channel. + * This may be an input stream for DVB-S2 or a physical layer pipe (PLP) in the case + * of DVB-T2. + */ + __s16 isi; + dmx_input_t input; + /** + * @brief Tells the filter where the data should be routed to (e.g. dvr device or + * demux file handle. + */ + dmx_output_t output; + /** + * @brief Specifies what type of data should be delivered by this filter. + */ + dmx_bb_type_t type; + __u32 flags; +}; #define DMX_START _IO('o', 41) #define DMX_STOP _IO('o', 42) @@ -153,5 +199,6 @@ #define DMX_GET_STC _IOWR('o', 50, struct dmx_stc) #define DMX_ADD_PID _IOW('o', 51, __u16) #define DMX_REMOVE_PID _IOW('o', 52, __u16) +#define DMX_SET_BB_FILTER _IOW('o', 53, struct dmx_bb_filter_params) #endif /*_DVBDMX_H_*/ --- a/linux/drivers/media/dvb/dvb-core/demux.h 2012-03-19 14:39:46.117144880 +0200 +++ b/linux/drivers/media/dvb/dvb-core/demux.h 2012-03-19 14:38:26.893145875 +0200 @@ -173,6 +173,32 @@ }; /*--------------------------------------------------------------------------*/ +/* Base-band frame reception */ +/*--------------------------------------------------------------------------*/ + +/// @brief Deliver full BBFrames (incl. header) to demux feed (default) +#define BB_FRAME 0x01 +/// @brief Deliver Packetized Generic Stream to demux feed +#define BB_PACK_GS 0x00 +/// @brief Deliver Continues Generic Stream to demux feed +#define BB_CONT_GS 0x40 +/// @brief Deliver Transport Stream (if stream is using TS-Compatibility mode) to demux feed +#define BB_TS 0xc0 + +#define BB_ISI_ALL DMX_ISI_ALL +#define BB_ISI_SIS DMX_ISI_SIS + +struct dmx_bb_feed { + int is_filtering; /* Set to non-zero when filtering in progress */ + struct dmx_demux *parent; /* Back-pointer */ + void *priv; /* Pointer to private data of the API client */ + int (*set) (struct dmx_bb_feed *feed, int isi, int type, + size_t circular_buffer_size, struct timespec timeout); + int (*start_filtering) (struct dmx_bb_feed* feed); + int (*stop_filtering) (struct dmx_bb_feed* feed); +}; + +/*--------------------------------------------------------------------------*/ /* Callback functions */ /*--------------------------------------------------------------------------*/ @@ -190,6 +216,9 @@ struct dmx_section_filter * source, enum dmx_success success); +typedef void (*dmx_bb_cb)(const u8 *buffer, size_t len, size_t upl, + struct dmx_bb_feed* source, enum dmx_success success); + /*--------------------------------------------------------------------------*/ /* DVB Front-End */ /*--------------------------------------------------------------------------*/ @@ -258,6 +287,11 @@ dmx_section_cb callback); int (*release_section_feed) (struct dmx_demux* demux, struct dmx_section_feed* feed); + int (*allocate_bb_feed) (struct dmx_demux* demux, + struct dmx_bb_feed** feed, + dmx_bb_cb callback); + int (*release_bb_feed) (struct dmx_demux* demux, + struct dmx_bb_feed* feed); int (*add_frontend) (struct dmx_demux* demux, struct dmx_frontend* frontend); int (*remove_frontend) (struct dmx_demux* demux, --- a/linux/drivers/media/dvb/dvb-core/dmxdev.c 2012-03-19 14:39:46.117144880 +0200 +++ b/linux/drivers/media/dvb/dvb-core/dmxdev.c 2012-03-19 14:38:26.893145875 +0200 @@ -428,6 +428,36 @@ return 0; } +static void dvb_dmxdev_bb_callback(const u8 *buf, size_t len, size_t upl, + struct dmx_bb_feed *feed, enum dmx_success success) +{ + struct dmxdev_filter *dmxdevfilter = feed->priv; + struct dvb_ringbuffer *buffer; + int ret; + + dprintk("dmxdev: bb callback len=%u, upl=%u\n", + (unsigned) len, (unsigned) upl); + + spin_lock(&dmxdevfilter->dev->lock); + + if (dmxdevfilter->params.bb.output == DMX_OUT_TAP) + buffer = &dmxdevfilter->buffer; + else + buffer = &dmxdevfilter->dev->dvr_buffer; + if (buffer->error) { + spin_unlock(&dmxdevfilter->dev->lock); + wake_up(&buffer->queue); + return; + } + ret = dvb_dmxdev_buffer_write(buffer, buf, len); + if (ret < 0) { + dvb_ringbuffer_flush(buffer); + buffer->error = ret; + } + spin_unlock(&dmxdevfilter->dev->lock); + wake_up(&buffer->queue); +} + /* stop feed but only mark the specified filter as stopped (state set) */ static int dvb_dmxdev_feed_stop(struct dmxdev_filter *dmxdevfilter) { @@ -444,6 +474,9 @@ list_for_each_entry(feed, &dmxdevfilter->feed.ts, next) feed->ts->stop_filtering(feed->ts); break; + case DMXDEV_TYPE_BB: + dmxdevfilter->feed.bb->stop_filtering(dmxdevfilter->feed.bb); + break; default: return -EINVAL; } @@ -470,6 +503,8 @@ } } break; + case DMXDEV_TYPE_BB: + return filter->feed.bb->start_filtering(filter->feed.bb); default: return -EINVAL; } @@ -527,6 +562,15 @@ feed->ts = NULL; } break; + case DMXDEV_TYPE_BB: + if (!dmxdevfilter->feed.bb) + break; + dvb_dmxdev_feed_stop(dmxdevfilter); + dmxdevfilter->dev->demux-> + release_bb_feed(dmxdevfilter->dev->demux, + dmxdevfilter->feed.bb); + dmxdevfilter->feed.bb = NULL; + break; default: if (dmxdevfilter->state == DMXDEV_STATE_ALLOCATED) return 0; @@ -724,6 +768,46 @@ } } break; + case DMXDEV_TYPE_BB: + { + static const int bb_types[] = { BB_TS, BB_FRAME, BB_CONT_GS, BB_PACK_GS }; + struct timespec timeout = { 0 }; + struct dmx_bb_filter_params *para = &filter->params.bb; + struct dmx_demux *demux = dmxdev->demux; + int ret; + struct dmx_bb_feed **feed = &filter->feed.bb; + + ret = demux->allocate_bb_feed(demux, feed, dvb_dmxdev_bb_callback); + if (ret < 0) { + printk("DVB (%s): could not alloc bb feed\n", + __FUNCTION__); + return ret; + } + + (*feed)->priv = filter; + ret = (*feed)->set(*feed, + para->isi, /* isi */ + bb_types[para->type], /* type */ + 10*7274, /* circular buffer size */ + timeout /* timeout */ + ); + if (ret < 0) { + printk("DVB (%s): could not set bb feed\n", + __FUNCTION__); + demux->release_bb_feed(demux, *feed); + return ret; + } + + ret = (*feed)->start_filtering(*feed); + if (ret < 0) { + printk("DVB (%s): could not start filtering on bb feed\n", + __FUNCTION__); + dmxdev->demux->release_bb_feed(dmxdev->demux, + *feed); + return ret; + } + break; + } default: return -EINVAL; } @@ -901,6 +985,29 @@ return 0; } +static int dvb_dmxdev_bb_filter_set(struct dmxdev *dmxdev, + struct dmxdev_filter *dmxdevfilter, + struct dmx_bb_filter_params *params) +{ + dvb_dmxdev_filter_stop(dmxdevfilter); + + if (params->output != DMX_OUT_TAP && params->output != DMX_OUT_TS_TAP) + return -EINVAL; + else if (params->type < DMX_BB_TSCOMPAT || params->type > DMX_BB_PACK) + return -EINVAL; + + dmxdevfilter->type = DMXDEV_TYPE_BB; + memcpy(&dmxdevfilter->params, params, + sizeof(struct dmx_bb_filter_params)); + + dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET); + + if (params->flags & DMX_IMMEDIATE_START) + return dvb_dmxdev_filter_start(dmxdevfilter); + + return 0; +} + static ssize_t dvb_dmxdev_read_sec(struct dmxdev_filter *dfil, struct file *file, char __user *buf, size_t count, loff_t *ppos) @@ -1014,6 +1121,15 @@ mutex_unlock(&dmxdevfilter->mutex); break; + case DMX_SET_BB_FILTER: + if (mutex_lock_interruptible(&dmxdevfilter->mutex)) { + mutex_unlock(&dmxdev->mutex); + return -ERESTARTSYS; + } + ret = dvb_dmxdev_bb_filter_set(dmxdev, dmxdevfilter, parg); + mutex_unlock(&dmxdevfilter->mutex); + break; + case DMX_SET_BUFFER_SIZE: if (mutex_lock_interruptible(&dmxdevfilter->mutex)) { mutex_unlock(&dmxdev->mutex); --- a/linux/drivers/media/dvb/dvb-core/dmxdev.h 2012-03-19 14:39:46.117144880 +0200 +++ b/linux/drivers/media/dvb/dvb-core/dmxdev.h 2012-03-19 14:38:26.893145875 +0200 @@ -43,6 +43,7 @@ DMXDEV_TYPE_NONE, DMXDEV_TYPE_SEC, DMXDEV_TYPE_PES, + DMXDEV_TYPE_BB }; enum dmxdev_state { @@ -69,11 +70,13 @@ /* list of TS and PES feeds (struct dmxdev_feed) */ struct list_head ts; struct dmx_section_feed *sec; + struct dmx_bb_feed *bb; } feed; union { struct dmx_sct_filter_params sec; struct dmx_pes_filter_params pes; + struct dmx_bb_filter_params bb; } params; enum dmxdev_type type; --- a/linux/drivers/media/dvb/dvb-core/dvb_demux.c 2012-03-19 14:39:46.117144880 +0200 +++ b/linux/drivers/media/dvb/dvb-core/dvb_demux.c 2012-03-19 14:38:26.897145875 +0200 @@ -21,6 +21,7 @@ * */ +#include <linux/version.h> #include <linux/sched.h> #include <linux/spinlock.h> #include <linux/slab.h> @@ -32,6 +33,8 @@ #include <asm/uaccess.h> #include <asm/div64.h> +#include <linux/dvb/frontend.h> + #include "dvb_demux.h" #define NOBUFS @@ -40,6 +43,16 @@ */ // #define DVB_DEMUX_SECTION_LOSS_LOG +/** + * @brief Use table-driven CRC-8 calculation for Base-band demultiplexer + */ +#define BB_CRC8_TABLE_DRIVEN 1 + +/** + * Define this to enable verbose debugging information from the Base-band demux + */ +//#define DVB_DEMUX_DEBUG_BB + static int dvb_demux_tscheck; module_param(dvb_demux_tscheck, int, 0644); MODULE_PARM_DESC(dvb_demux_tscheck, @@ -55,6 +68,35 @@ printk(x); \ } while (0) +#ifdef BB_CRC8_TABLE_DRIVEN + +/* CRC-8 table for generator polynom 0xd5 + * Created with PYCRC (http://www.tty1.net/pycrc/) using the following commandline: + * python pycrc.py --generate table -o /tmp/bb-crc8-table.c --width=8 --poly=0xd5 + * --reflect-in=false --reflect-out=false --xor-in=0xff --xor-out=0x00 + */ +static const u8 bb_crc8_table[256] = { + 0x00, 0xd5, 0x7f, 0xaa, 0xfe, 0x2b, 0x81, 0x54, 0x29, 0xfc, 0x56, 0x83, 0xd7, 0x02, 0xa8, 0x7d, + 0x52, 0x87, 0x2d, 0xf8, 0xac, 0x79, 0xd3, 0x06, 0x7b, 0xae, 0x04, 0xd1, 0x85, 0x50, 0xfa, 0x2f, + 0xa4, 0x71, 0xdb, 0x0e, 0x5a, 0x8f, 0x25, 0xf0, 0x8d, 0x58, 0xf2, 0x27, 0x73, 0xa6, 0x0c, 0xd9, + 0xf6, 0x23, 0x89, 0x5c, 0x08, 0xdd, 0x77, 0xa2, 0xdf, 0x0a, 0xa0, 0x75, 0x21, 0xf4, 0x5e, 0x8b, + 0x9d, 0x48, 0xe2, 0x37, 0x63, 0xb6, 0x1c, 0xc9, 0xb4, 0x61, 0xcb, 0x1e, 0x4a, 0x9f, 0x35, 0xe0, + 0xcf, 0x1a, 0xb0, 0x65, 0x31, 0xe4, 0x4e, 0x9b, 0xe6, 0x33, 0x99, 0x4c, 0x18, 0xcd, 0x67, 0xb2, + 0x39, 0xec, 0x46, 0x93, 0xc7, 0x12, 0xb8, 0x6d, 0x10, 0xc5, 0x6f, 0xba, 0xee, 0x3b, 0x91, 0x44, + 0x6b, 0xbe, 0x14, 0xc1, 0x95, 0x40, 0xea, 0x3f, 0x42, 0x97, 0x3d, 0xe8, 0xbc, 0x69, 0xc3, 0x16, + 0xef, 0x3a, 0x90, 0x45, 0x11, 0xc4, 0x6e, 0xbb, 0xc6, 0x13, 0xb9, 0x6c, 0x38, 0xed, 0x47, 0x92, + 0xbd, 0x68, 0xc2, 0x17, 0x43, 0x96, 0x3c, 0xe9, 0x94, 0x41, 0xeb, 0x3e, 0x6a, 0xbf, 0x15, 0xc0, + 0x4b, 0x9e, 0x34, 0xe1, 0xb5, 0x60, 0xca, 0x1f, 0x62, 0xb7, 0x1d, 0xc8, 0x9c, 0x49, 0xe3, 0x36, + 0x19, 0xcc, 0x66, 0xb3, 0xe7, 0x32, 0x98, 0x4d, 0x30, 0xe5, 0x4f, 0x9a, 0xce, 0x1b, 0xb1, 0x64, + 0x72, 0xa7, 0x0d, 0xd8, 0x8c, 0x59, 0xf3, 0x26, 0x5b, 0x8e, 0x24, 0xf1, 0xa5, 0x70, 0xda, 0x0f, + 0x20, 0xf5, 0x5f, 0x8a, 0xde, 0x0b, 0xa1, 0x74, 0x09, 0xdc, 0x76, 0xa3, 0xf7, 0x22, 0x88, 0x5d, + 0xd6, 0x03, 0xa9, 0x7c, 0x28, 0xfd, 0x57, 0x82, 0xff, 0x2a, 0x80, 0x55, 0x01, 0xd4, 0x7e, 0xab, + 0x84, 0x51, 0xfb, 0x2e, 0x7a, 0xaf, 0x05, 0xd0, 0xad, 0x78, 0xd2, 0x07, 0x53, 0x86, 0x2c, 0xf9 +}; + +#endif + + /****************************************************************************** * static inlined helper functions ******************************************************************************/ @@ -95,6 +137,44 @@ memcpy(d, s, len); } +#ifndef BB_CRC8_TABLE_DRIVEN + +// CRC8 bit-by-bit + +#define BB_CRC8_POLY 0xd5 +static u8 bb_crc8_single(u8 crc, u8 data) +{ + int i; + for (i = 0x80; i > 0; i >>= 1) { + bit = crc & 0x80; + if (data & i) { + bit = !bit; + } + crc <<= 1; + if (bit) { + crc ^= BB_CRC8_POLY; + } + } + return crc; +} + +#endif + +/** + * @brief CRC-8 for DVB-S2 Base-band demultiplexer + */ +static u8 bb_crc8(u8 crc, const u8 *src, size_t len) +{ + const unsigned char *end = src + len; + while(src < end) +#ifdef BB_CRC8_TABLE_DRIVEN + crc = bb_crc8_table[crc ^ *src++]; +#else + crc = bb_crc8_single(crc, *src++); +#endif + return crc; +} + /****************************************************************************** * Software filter functions ******************************************************************************/ @@ -447,7 +527,8 @@ }; list_for_each_entry(feed, &demux->feed_list, list_head) { - if ((feed->pid != pid) && (feed->pid != 0x2000)) + if (feed->type != DMX_TYPE_TS || ( + (feed->pid != pid) && (feed->pid != 0x2000))) continue; /* copy each packet only once to the dvr device, even @@ -455,8 +536,11 @@ if ((DVR_FEED(feed)) && (dvr_done++)) continue; - if (feed->pid == pid) + if (feed->pid == pid) { dvb_dmx_swfilter_packet_type(feed, buf); + if (DVR_FEED(feed)) + continue; + } else if (feed->pid == 0x2000) feed->cb.ts(buf, 188, NULL, 0, &feed->feed.ts, DMX_OK); } @@ -568,6 +652,362 @@ } EXPORT_SYMBOL(dvb_dmx_swfilter_204); +/*********************************** + * DVB-S2 Base-band demultiplexer * + ***********************************/ + +#define dprintk(x...) do { printk(x); } while (0) +/** + * @brief Process a stream of (possibly fragmented) User Packets (UPs) from a + * Generic Packetized Stream or Transport Sream for a specific demux feed. + * @param feed The feed on which the UPs should be delivered + * @param df Pointer to the data field (df) of a BBFrame containing (fragments of) UPs + * @param dfl The length of the data field + * @param upl User Packet Length as stated in the BBHEADER + * @param upl Sync Distance as stated in the BBHEADER + * @param upl Sync Byte as stated in the BBHEADER + * @return + * @retval 0 in case of success + * @retval <0 in case of errors + * @todo Add support for feed callback timeouts + */ +int dvb_dmx_swfilter_bbups(struct dvb_demux_feed *feed, const u8 *df, u16 dfl, + u16 upl, u16 syncd, u8 sync) +{ + u8 crc8; + u16 rupl = !sync ? upl-1 : upl; /*real upl */ + size_t len, maxlen; +#ifdef DVB_DEMUX_DEBUG_BB + dprintk("%s: feed=%p, df=%p, dfl=%hu, upl=%hu, syncd=%hu, sync=%02x\n", + __FUNCTION__, feed, df, dfl, upl, syncd, + (unsigned int) sync); +#endif + if (!upl || syncd >= dfl) + return -EINVAL; + else if (!feed->buffer || upl > feed->buffer_size) + return -ENOBUFS; + + /* NOTE: if the original input stream does not contain a sync byte, + * the DVB-S2 mode adaptation layer inserts a dummy sync byte (value 0) + * for holding the CRC-8 and also increments the upl. + * We respect that by using the "real upl" (rupl) variable for packets + * in the feed buffer. + */ + + // Limit size of usable buffer part to always store an integral number of packets + maxlen = (feed->buffer_size/upl) * upl; + + if (syncd == (u16) -1) { + // No packet starts here, so just copy the df to our buffer + len = min((size_t) dfl, maxlen-feed->bb.bufpos); + if (len > 0) { + memcpy(&feed->buffer[feed->bb.bufpos], df, len); + feed->bb.bufpos += len; + } else + feed->bb.bufpos = 0; + } else { + const u8 *pkt = df; + const u8 *const dfend = df+dfl; + size_t partlen = feed->bb.bufpos % rupl; + /* If at least one packet starts in this data field, + * check, if the data until the start of this packet + * completes a partial packet in our buffer + */ + if (syncd > 0) { + if ((partlen+syncd) == rupl && syncd <= (maxlen-feed->bb.bufpos)) { + memcpy(&feed->buffer[feed->bb.bufpos], pkt, syncd); + feed->bb.bufpos += syncd; + } else { + /* Assume that we lost a fragment of the partial + * packet contained in the buffer and thus + * drop the partial packet. + */ + BUG_ON(feed->bb.bufpos < partlen); + feed->bb.bufpos -= partlen; + } + pkt += syncd; + } else if (partlen > 0) { + /* Assume that we lost a fragment of the partial + * packet contained in the buffer and thus + * drop the partial packet. + */ + feed->bb.bufpos -= partlen; + } + + + /* NOTE: pkt is synced to a packet start, i.e. *pkt contains the + * CRC-8 of the last packet on this feed. + */ + while (pkt < dfend) { +#ifdef DVB_DEMUX_DEBUG_BB + dprintk("%s: pkt=%p, dfend=%p, bufpos=%u (of %u), upl=%hu, rupl=%hu\n", + __FUNCTION__, pkt, dfend, feed->bb.bufpos, maxlen, upl, rupl); +#endif + if ((feed->bb.bufpos-feed->bb.crcpos) >= rupl) { + /* verify the last packet in the buffer (not including the sync byte) */ + crc8 = bb_crc8(0x00, + &feed->buffer[feed->bb.crcpos+1], upl-1); + if (crc8 != *pkt) { + // discard packet + feed->bb.bufpos -= upl; + } else if (feed->bb.bufpos >= maxlen) { + // Flush feed buffer + + /* NOTE: at this point, all packets in the feed + * buffer have been verified, so we're allowed to deliver + * them to the feed callback. + */ + + // Invoke feed callback + feed->cb.bb(feed->buffer, feed->bb.bufpos, + rupl, &feed->feed.bb, DMX_OK); + + feed->bb.crcpos = feed->bb.bufpos = 0; + } + else + feed->bb.crcpos = feed->bb.bufpos; + } + + BUG_ON(feed->bb.bufpos+rupl > maxlen); + + if (sync) // Sync byte present? + feed->buffer[feed->bb.bufpos++] = sync; + pkt++; + + len = min((u16) (upl-1), (u16) (dfend-pkt)); + /* NOTE: we do not check for len == 0, as it hopefully does not + * happen too often. + */ + memcpy(&feed->buffer[feed->bb.bufpos], pkt, len); + pkt += len; + feed->bb.bufpos += len; + } + } + return 0; +} + +/* Structure of a Base-Band frame: + + * < ------------------------------ BBFrame ----------------------------------- > + * 2 bytes 2 bytes 2 bytes 1 B 2 bytes 1 B DFL bits + * |--------|--------|--------|----|--------|----|------------------------------| + * +--------+--------+--------+----+--------+----+-------------//---------------+ + * | MATYPE | UPL | DFL |SYNC| SYNCD |CRC8| Data Field | + * +--------+--------+--------+----+--------+----+-------------//---------------+ + * + * Sub-structure of the MATYPE field: + * +--------+----+----+----+----+--------+------------------------------------+ + * | TS/GS |SIS/|CCM/|IS- |NPD | RO | ISI or unused | + * | |MIS |ACM |SYI | | | | + * +--------+----+----+----+----+--------+------------------------------------+ + * + */ + + +/** + * @todo Invoke feed callbacks in case of an error + * @todo If mode == BB_TS and SIS-mode is active then we could by default forward + * the TS to the TS demux. This would avoid the need to explicitely setup + * TS compatibility mode using dvb_dmx_set_ts_compat(). + * @note assumes that the caller has locked demux->lock. + */ +ssize_t _dvb_dmx_swfilter_bbframe(struct dvb_demux *demux, const u8 *frame, size_t len) +{ + ssize_t rv = -1; + u16 framelen; + int isi, mode; + struct dvb_demux_feed *feed; + u8 crc8; + + if (len < 10 || len > 7274) { + // No complete BBHEADER present + rv = -EINVAL; + goto done; + } + + // Verify CRC-8 of BBHEADER (frame[9]) + crc8 = bb_crc8(0x00, frame, 9); + if (crc8 != frame[9]) { + printk(KERN_NOTICE "%s: CRC check failed for BBHEADER " + "(calculated %02x, received %02x)\n", __FUNCTION__, + (int) crc8, (int) frame[9]); + goto done; + } + + if (frame[0] & 0x20) { // Single Input Stream (SIS) + isi = -1; + } else { // Multiple Input Stream (MIS) + isi = frame[1]; + } + mode = (frame[0] & 0xc0); + + // length values are measured in bits -> convert to bytes + framelen = (frame[4] << 8) | frame[5]; + framelen >>= 3; + + if (!framelen || ((len-10) < framelen)) { + printk(KERN_NOTICE "%s: invalid data field length (length %hu, left %u)\n", + __FUNCTION__, framelen, len); + rv = -1; + goto done; + } +#ifdef DVB_DEMUX_DEBUG_BB + dprintk("%s: received frame for input stream %d (df length %u)\n", + __FUNCTION__, isi, (unsigned int) framelen); +#endif + // First, give the raw frame to all BB_FRAME feeds + list_for_each_entry(feed, &demux->feed_list, list_head) { + if (feed->type != DMX_TYPE_BB || feed->bb.type != BB_FRAME) + continue; + else if (feed->bb.isi != isi && feed->bb.isi != BB_ISI_ALL) + continue; + else + feed->cb.bb(frame, framelen+10, 0, &feed->feed.bb, DMX_OK); + } + + if (mode == BB_TS || mode == BB_PACK_GS) { + // Packetized stream + u16 upl = ((frame[2] << 8) | frame[3]) >> 3; + u16 syncd = ((frame[7] << 8) | frame[8]) >> 3; + if (!upl) { + if (mode == BB_TS) + upl = 188; + else { + printk(KERN_NOTICE "%s: invalid user packet length of zero\n", + __FUNCTION__); + goto done; + } + } + + list_for_each_entry(feed, &demux->feed_list, list_head) { + if (feed->type != DMX_TYPE_BB || feed->bb.type != mode) + continue; + else if (feed->bb.isi != isi && feed->bb.isi != BB_ISI_ALL) + continue; + else + dvb_dmx_swfilter_bbups(feed, frame+10, framelen, + upl, syncd, frame[6]); + } + } else if (mode == BB_CONT_GS) { + // Continuos stream + list_for_each_entry(feed, &demux->feed_list, list_head) { + if (feed->type != DMX_TYPE_BB || feed->bb.type != BB_CONT_GS) + continue; + else if (feed->bb.isi != isi && feed->bb.isi != BB_ISI_ALL) + continue; + else + feed->cb.bb(frame+10, framelen, 0, &feed->feed.bb, DMX_OK); + } + } else { + printk(KERN_NOTICE "%s: invalid use of reserved TS/GS value 1\n", + __FUNCTION__); + goto done; + } + + rv = framelen+10; + +done: +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) + ///@todo Make this configurable via sysfs or module param + if (rv < 0) { + print_hex_dump(KERN_DEBUG, "[BBFrame] ", DUMP_PREFIX_OFFSET, 16, + 1, (void*) frame, len, 0); + } +#endif + return rv; +} + +ssize_t dvb_dmx_swfilter_bbframe(struct dvb_demux *demux, const u8 *frame, size_t len) +{ + ssize_t rv; + spin_lock(&demux->lock); + rv = _dvb_dmx_swfilter_bbframe(demux, frame, len); + spin_unlock(&demux->lock); + return rv; +} +EXPORT_SYMBOL(dvb_dmx_swfilter_bbframe); + +#define BB_FRAME_LEN(ptr) (10 + ((((ptr)[4] << 8) | (ptr)[5]) >> 3)) +void dvb_dmx_swfilter_data(struct dvb_demux *demux, fe_data_format_t dfmt, + const u8 *data, size_t len) +{ +#ifdef DVB_DEMUX_DEBUG_BB + dprintk("%s: demux=%p, dfmt=%d, data=%p, len=%u\n", + __FUNCTION__, demux, dfmt, data, + (unsigned int) len); +#endif + spin_lock(&demux->lock); + + if(dfmt == FE_DFMT_BB_FRAME) { + // A sequence of base-band frames as a stream of bytes + u16 bblen; + ssize_t res; + size_t clen; + while(demux->bb.wr > 0 && len > 0) { +#ifdef DVB_DEMUX_DEBUG_BB + dprintk("%s: wr=%u, data=%p, len=%u\n", + __FUNCTION__, demux->bb.wr, data, (unsigned int) len); +#endif + if(demux->bb.wr < 10) { + clen = min(10-demux->bb.wr, len); + clen = min(clen, DMX_BB_BUFSZ-demux->bb.wr); + memcpy(&demux->bb.buf[demux->bb.wr], data, clen); + demux->bb.wr += clen; + data += clen; + len -= clen; + } else { + if(bb_crc8(0x00, &demux->bb.buf[0], 10) != 0) { + demux->bb.wr -= 1; + memmove(&demux->bb.buf[0], &demux->bb.buf[1], demux->bb.wr); + continue; + } + bblen = BB_FRAME_LEN(demux->bb.buf); + if(demux->bb.wr < bblen) { + clen = min(bblen-demux->bb.wr, len); + clen = min(clen, DMX_BB_BUFSZ-demux->bb.wr); + memcpy(&demux->bb.buf[demux->bb.wr], data, clen); + demux->bb.wr += clen; + data += clen; + len -= clen; + } + if(demux->bb.wr >= bblen) { + res = _dvb_dmx_swfilter_bbframe(demux, &demux->bb.buf[0], bblen); + demux->bb.wr -= bblen; + if(demux->bb.wr > 0) + memmove(&demux->bb.buf[0], &demux->bb.buf[bblen], demux->bb.wr); + } + } + if(demux->bb.wr == DMX_BB_BUFSZ) + demux->bb.wr = 0; + } + if(demux->bb.wr == 0) { + while(len > 9) { + if(bb_crc8(0x00, data, 10) != 0) { + bblen = 1; + } else { + bblen = BB_FRAME_LEN(data); + if(len < bblen) { + break; + } + res = _dvb_dmx_swfilter_bbframe(demux, data, bblen); + } + data += bblen; + len -= bblen; + } + } + // copy remaining part to buffer + BUG_ON((demux->bb.wr + len) > DMX_BB_BUFSZ); + memcpy(&demux->bb.buf[demux->bb.wr], data, len); + demux->bb.wr += len; + } else { + ///@todo implement TS path + } + + spin_unlock(&demux->lock); +} + +EXPORT_SYMBOL(dvb_dmx_swfilter_data); + static struct dvb_demux_filter *dvb_dmx_filter_alloc(struct dvb_demux *demux) { int i; @@ -1093,6 +1533,180 @@ } /****************************************************************************** + * dmx_bb_feed calls + ******************************************************************************/ + +static int dmx_bb_feed_set(struct dmx_bb_feed *bb_feed, int isi, int mode, + size_t circular_buffer_size, struct timespec timeout) +{ + struct dvb_demux_feed *feed = (struct dvb_demux_feed*) bb_feed; + struct dvb_demux *demux = feed->demux; + +#ifdef DVB_DEMUX_DEBUG_BB + dprintk("%s: bb_feed=%p, isi=%d, mode=%d, bufsz=%u\n", + __FUNCTION__, bb_feed, isi, mode, circular_buffer_size); +#endif + ///@todo Max ISI may be dependent on delivery system + if (isi > 255 || (isi < 0 && isi != BB_ISI_ALL && isi != BB_ISI_SIS)) + return -EINVAL; + else if (mode != BB_FRAME && mode != BB_PACK_GS && mode != BB_CONT_GS && + mode != BB_TS) + return -EINVAL; + else if (isi == BB_ISI_ALL && mode != BB_FRAME) + return -EINVAL; + + feed->buffer_size = circular_buffer_size; + if (feed->buffer_size) { + feed->buffer = vmalloc(feed->buffer_size); + if (!feed->buffer) { + return -ENOMEM; + } + } else if (mode == BB_PACK_GS || mode == BB_TS) { + // we need a buffer for packetized streams! + return -EINVAL; + } + + feed->bb.isi = isi; + feed->bb.type = mode; + feed->state = DMX_STATE_READY; + + if (mutex_lock_interruptible(&demux->mutex)) + return -ERESTARTSYS; + + dvb_demux_feed_add(feed); + + mutex_unlock(&demux->mutex); + return 0; +} + +static int dmx_bb_feed_start_filtering(struct dmx_bb_feed *bb_feed) +{ + struct dvb_demux_feed *feed = (struct dvb_demux_feed *)bb_feed; + struct dvb_demux *demux = feed->demux; + int ret; + + if (mutex_lock_interruptible(&demux->mutex)) + return -ERESTARTSYS; + + if (feed->state != DMX_STATE_READY || feed->type != DMX_TYPE_BB) { + mutex_unlock(&demux->mutex); + return -EINVAL; + } + + if (!demux->start_feed) { + mutex_unlock(&demux->mutex); + return -ENODEV; + } + + if ((ret = demux->start_feed(feed)) < 0) { + mutex_unlock(&demux->mutex); + return ret; + } + + spin_lock_irq(&demux->lock); + bb_feed->is_filtering = 1; + feed->state = DMX_STATE_GO; + spin_unlock_irq(&demux->lock); + mutex_unlock(&demux->mutex); + + return 0; +} + +static int dmx_bb_feed_stop_filtering(struct dmx_bb_feed *bb_feed) +{ + struct dvb_demux_feed *feed = (struct dvb_demux_feed *)bb_feed; + struct dvb_demux *demux = feed->demux; + int ret; + + mutex_lock(&demux->mutex); + + if (feed->state < DMX_STATE_GO) { + mutex_unlock(&demux->mutex); + return -EINVAL; + } + + if (!demux->stop_feed) { + mutex_unlock(&demux->mutex); + return -ENODEV; + } + + ret = demux->stop_feed(feed); + + spin_lock_irq(&demux->lock); + bb_feed->is_filtering = 0; + feed->state = DMX_STATE_READY; + spin_unlock_irq(&demux->lock); + mutex_unlock(&demux->mutex); + + return ret; +} + +static int dvbdmx_allocate_bb_feed(struct dmx_demux *dmx, struct dmx_bb_feed **bb_feed, + dmx_bb_cb callback) +{ + struct dvb_demux *demux = (struct dvb_demux *)dmx; + struct dvb_demux_feed *feed; + +#ifdef DVB_DEMUX_DEBUG_BB + dprintk("%s: dmx=%p, bb_feed=%p, callback=%p\n", + __FUNCTION__, dmx, bb_feed, callback); +#endif + + if (mutex_lock_interruptible(&demux->mutex)) + return -ERESTARTSYS; + + if (!(feed = dvb_dmx_feed_alloc(demux))) { + mutex_unlock(&demux->mutex); + return -EBUSY; + } + + feed->type = DMX_TYPE_BB; + feed->cb.bb = callback; + feed->demux = demux; + feed->bb.isi = BB_ISI_SIS; + feed->bb.type = BB_FRAME; + feed->buffer = NULL; + feed->bb.bufpos = 0; + feed->bb.crcpos = 0; + + *bb_feed = &feed->feed.bb; + (*bb_feed)->parent = dmx; + (*bb_feed)->priv = NULL; + (*bb_feed)->is_filtering = 0; + (*bb_feed)->start_filtering = dmx_bb_feed_start_filtering; + (*bb_feed)->stop_filtering = dmx_bb_feed_stop_filtering; + (*bb_feed)->set = dmx_bb_feed_set; + + mutex_unlock(&demux->mutex); + return 0; +} + +static int dvbdmx_release_bb_feed(struct dmx_demux *dmx, struct dmx_bb_feed *bb_feed) +{ + struct dvb_demux *demux = (struct dvb_demux *)dmx; + struct dvb_demux_feed *feed = (struct dvb_demux_feed*) bb_feed; + +#ifdef DVB_DEMUX_DEBUG_BB + dprintk("%s: dmx=%p, bb_feed=%p\n", + __FUNCTION__, dmx, bb_feed); +#endif + + mutex_lock(&demux->mutex); + + if (feed->state == DMX_STATE_FREE) { + mutex_unlock(&demux->mutex); + return -EINVAL; + } + + feed->state = DMX_STATE_FREE; + + dvb_demux_feed_del(feed); + + mutex_unlock(&demux->mutex); + return 0; +} + +/****************************************************************************** * dvb_demux kernel data API calls ******************************************************************************/ @@ -1214,6 +1828,104 @@ return 0; } +static void dvb_dmx_ts_compat_bb_callback(const u8 *buf, size_t len, size_t upl, + struct dmx_bb_feed* source, enum dmx_success success) +{ + unsigned int count; +#ifdef DVB_DEMUX_DEBUG_BB + dprintk("%s: buf=%p, len=%u, upl=%u, source=%p, success=%d\n", + __FUNCTION__, buf, len, upl, source, success); +#endif + if (success != DMX_OK || upl != 188) + return; + for(count=len/188; count > 0; count--, buf+=188) + dvb_dmx_swfilter_packet((struct dvb_demux*) source->parent, buf); + +} + +/** + * @brief Enable or disable TS compatibility mode on the specified input stream (ISI). + */ +static int dvb_dmx_set_ts_compat(struct dvb_demux *dvbdemux, int isi, int enable) +{ + int rv = -1, found = 0; + struct dmx_demux *demux = &dvbdemux->dmx; + struct dmx_bb_feed *feed; + struct dvb_demux_feed *dvbfeed; + struct timespec timeout = {0, 1*1000*1000}; /* 1 ms */ + + if (!demux->allocate_bb_feed) { + printk(KERN_ERR "%s: demux does not support bb feeds\n", + __FUNCTION__); + goto done; + } + + spin_lock(&dvbdemux->lock); + list_for_each_entry(dvbfeed, &dvbdemux->feed_list, list_head) { + if ((dvbfeed->type != DMX_TYPE_BB) || (dvbfeed->bb.type != BB_TS) || + (dvbfeed->bb.isi != isi) || + (dvbfeed->cb.bb != dvb_dmx_ts_compat_bb_callback)) + continue; + found = 1; + break; + } + spin_unlock(&dvbdemux->lock); + + if (enable && !found) { + dprintk("%s: alloc bb feed\n", __FUNCTION__); + + rv = demux->allocate_bb_feed(demux, &feed, dvb_dmx_ts_compat_bb_callback); + if (rv < 0) { + printk(KERN_ERR "%s: could not allocate bb feed\n", + __FUNCTION__); + goto done; + } + + feed->priv = NULL; + rv = feed->set(feed, + isi, /* isi */ + BB_TS, /* type */ + 7274, /* circular buffer size */ + timeout /* timeout */ + ); + if (rv < 0) { + printk(KERN_ERR "%s: could not set bb feed\n", __FUNCTION__); + demux->release_bb_feed(demux, feed); + goto done; + } + + dprintk("%s: start filtering\n", __FUNCTION__); + + if (isi == BB_ISI_ALL) + printk("%s: enabled TS-Compatibility mode on all ISIs\n", + __FUNCTION__); + else + printk("%s: enabled TS-Compatibility mode on ISI %d\n", + __FUNCTION__, isi); + + feed->start_filtering(feed); + } else if (!enable && found) { + feed = &dvbfeed->feed.bb; + if (feed->is_filtering) { + dprintk("%s: stop filtering\n", __FUNCTION__); + feed->stop_filtering(feed); + } + dprintk("%s: release bb feed\n", __FUNCTION__); + demux->release_bb_feed(demux, feed); + + if (isi == BB_ISI_ALL) + printk("%s: disabled TS-Compatibility mode on all ISIs\n", + __FUNCTION__); + else + printk("%s: disabled TS-Compatibility mode on ISI %d\n", + __FUNCTION__, isi); + } + + rv = 0; +done: + return rv; +} + int dvb_dmx_init(struct dvb_demux *dvbdemux) { int i; @@ -1273,6 +1985,8 @@ dmx->release_ts_feed = dvbdmx_release_ts_feed; dmx->allocate_section_feed = dvbdmx_allocate_section_feed; dmx->release_section_feed = dvbdmx_release_section_feed; + dmx->allocate_bb_feed = dvbdmx_allocate_bb_feed; + dmx->release_bb_feed = dvbdmx_release_bb_feed; dmx->add_frontend = dvbdmx_add_frontend; dmx->remove_frontend = dvbdmx_remove_frontend; @@ -1284,6 +1998,14 @@ mutex_init(&dvbdemux->mutex); spin_lock_init(&dvbdemux->lock); + dvbdemux->bb.buf = vmalloc(DMX_BB_BUFSZ); + if (!dvbdemux->bb.buf) + return -ENOMEM; + dvbdemux->bb.wr = 0; + + + /* Activate TS-Compat mode for single-input stream channels */ + //dvb_dmx_set_ts_compat(dvbdemux, BB_ISI_SIS, 1); return 0; } @@ -1291,9 +2013,11 @@ void dvb_dmx_release(struct dvb_demux *dvbdemux) { + dvb_dmx_set_ts_compat(dvbdemux, BB_ISI_SIS, 0); vfree(dvbdemux->cnt_storage); vfree(dvbdemux->filter); vfree(dvbdemux->feed); + vfree(dvbdemux->bb.buf); } EXPORT_SYMBOL(dvb_dmx_release); --- a/linux/drivers/media/dvb/dvb-core/dvb_demux.h 2012-03-19 14:39:46.117144880 +0200 +++ b/linux/drivers/media/dvb/dvb-core/dvb_demux.h 2012-03-19 14:38:26.897145875 +0200 @@ -28,11 +28,14 @@ #include <linux/spinlock.h> #include <linux/mutex.h> +#include <linux/dvb/frontend.h> + #include "demux.h" #define DMX_TYPE_TS 0 #define DMX_TYPE_SEC 1 #define DMX_TYPE_PES 2 +#define DMX_TYPE_BB 3 #define DMX_STATE_FREE 0 #define DMX_STATE_ALLOCATED 1 @@ -68,11 +71,13 @@ union { struct dmx_ts_feed ts; struct dmx_section_feed sec; + struct dmx_bb_feed bb; } feed; union { dmx_ts_cb ts; dmx_section_cb sec; + dmx_bb_cb bb; } cb; struct dvb_demux *demux; @@ -94,6 +99,21 @@ u16 peslen; + /* Data for the Base-band demux */ + struct { + /// Input Stream Identifier. A value of -1 indicates Single Input Stream operation + int isi; + /// Feed type (BB_FRAME, BB_PACK_GS, BB_CONT_GS or BB_TS) + u8 type; + /// Position in buffer (feed->buffer) + unsigned int bufpos; + /** + * This is the offset of the last packet in the buffer which needs CRC validation. + * @note All packets in the buffer with offsets < crcpos have already been validated. + */ + unsigned int crcpos; + } bb; + struct list_head list_head; unsigned int index; /* a unique index for each feed (can be used as hardware pid filter index) */ }; @@ -129,6 +149,16 @@ u8 tsbuf[204]; int tsbufp; + + /** + * Members which are specific to the BB-Demux + */ + struct { +#define DMX_BB_BUFSZ 8192 + u8 *buf; + unsigned int wr; + } bb; + struct mutex mutex; spinlock_t lock; @@ -145,5 +175,17 @@ void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count); void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf, size_t count); +/** + * Pass a single Base-band frame (BBFrame) to the demultiplexer + * @param demux Pointer to DVB demux context + * @param frame Buffer containing the full BBFrame + * @param len Length of the BBFrame in \c frame + * @return The length of the BBFrame or a value < 0 in case of an error + * @note This function MUST NOT be call from inside a feed callback + */ +ssize_t dvb_dmx_swfilter_bbframe(struct dvb_demux *demux, const u8 *frame, size_t len); + +void dvb_dmx_swfilter_data(struct dvb_demux *demux, fe_data_format_t dfmt, + const u8 *data, size_t len); #endif /* _DVB_DEMUX_H_ */ [-- Attachment #3: 02-bb-fe.patch --] [-- Type: text/x-patch, Size: 1199 bytes --] --- a/linux/include/linux/dvb/frontend.h 2011-05-21 02:59:30.000000000 +0300 +++ b/linux/include/linux/dvb/frontend.h 2012-03-19 15:01:11.533128721 +0200 @@ -351,6 +351,14 @@ SYS_DVBT2, } fe_delivery_system_t; +/* + * Format of data transferred from DVB adapter (frontend) to host. +*/ +typedef enum fe_data_format { + FE_DFMT_TS_PACKET, + FE_DFMT_BB_FRAME +} fe_data_format_t; + struct dtv_cmds_h { char *name; /* A display name for debugging purposes */ --- a/linux/drivers/media/dvb/dvb-core/dvb_frontend.c 2011-10-09 22:20:56.000000000 +0300 +++ b/linux/drivers/media/dvb/dvb-core/dvb_frontend.c 2012-03-19 15:05:57.273125129 +0200 @@ -878,6 +878,7 @@ c->symbol_rate = QAM_AUTO; c->code_rate_HP = FEC_AUTO; c->code_rate_LP = FEC_AUTO; + c->dfmt = FE_DFMT_TS_PACKET; c->isdbt_partial_reception = -1; c->isdbt_sb_mode = -1; --- a/linux/drivers/media/dvb/dvb-core/dvb_frontend.h 2011-05-21 02:59:30.000000000 +0300 +++ b/linux/drivers/media/dvb/dvb-core/dvb_frontend.h 2012-03-19 15:06:47.441124498 +0200 @@ -342,6 +342,8 @@ fe_delivery_system_t delivery_system; + fe_data_format_t dfmt; + /* ISDB-T specifics */ u8 isdbt_partial_reception; u8 isdbt_sb_mode; [-- Attachment #4: 03-bb-tbs.patch --] [-- Type: text/x-patch, Size: 3245 bytes --] --- a/linux/drivers/media/common/saa716x/saa716x_tbs.c 2012-02-06 15:05:41.000000000 +0200 +++ b/linux/drivers/media/common/saa716x/saa716x_tbs.c 2012-03-19 16:34:35.344928347 +0200 @@ -76,6 +76,10 @@ module_param(ci_mode, int, 0644); MODULE_PARM_DESC(ci_mode, "for internal use only: default 0"); +static int tsout = 1; +module_param(tsout, int, 0644); +MODULE_PARM_DESC(tsout, "TBS 6925 output format 1=TS, 0=BB (default:1)"); + #define DRIVER_NAME "SAA716x TBS" static int __devinit saa716x_tbs_pci_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id) @@ -356,7 +360,11 @@ u8 * data = (u8 *)saa716x->fgpi[3].dma_buf[activeBuffer].mem_virt; dprintk(SAA716x_DEBUG, 1, "%02X%02X%02X%02X", data[0], data[1], data[2], data[3]); - dvb_dmx_swfilter_packets(&saa716x->saa716x_adap[0].demux, data, 348); + if (tsout == 0) + dvb_dmx_swfilter_data(&saa716x->saa716x_adap[0].demux, + FE_DFMT_BB_FRAME, data, 348*188); + else + dvb_dmx_swfilter_packets(&saa716x->saa716x_adap[0].demux, data, 348); } if (fgpiStatus) { SAA716x_EPWR(FGPI3, INT_CLR_STATUS, fgpiStatus); --- a/linux/drivers/media/dvb/frontends/stv090x.c 2011-10-09 23:15:32.000000000 +0300 +++ b/linux/drivers/media/dvb/frontends/stv090x.c 2012-03-19 18:00:03.690919513 +0200 @@ -38,6 +38,10 @@ static unsigned int verbose; module_param(verbose, int, 0644); +static int tsout = 1; +module_param(tsout, int, 0644); +MODULE_PARM_DESC(tsout, "Output data 1=TS, 0=BB (default:1)"); + /* internal params node */ struct stv090x_dev { /* pointer for internal params, one for each pair of demods */ @@ -3166,6 +3170,40 @@ return -1; } +/* Set data output format of Transport Stream Merger. + * This function configures the packet delineator and the stream merger units + * of the STV0900 for frame (Base-band frame) or packet (Transport Stream) output. + */ +static int stv090x_set_dfmt(struct stv090x_state *state, fe_data_format_t dfmt) +{ + u32 reg; + + // Px_PDELCTRL2: Packet delineator additional configuration + switch(dfmt) + { + case FE_DFMT_TS_PACKET: + reg = STV090x_READ_DEMOD(state, PDELCTRL2); + STV090x_SETFIELD_Px(reg, FRAME_MODE_FIELD, 0); + if (STV090x_WRITE_DEMOD(state, PDELCTRL2, reg) < 0) + goto err; + break; + case FE_DFMT_BB_FRAME: + reg = STV090x_READ_DEMOD(state, PDELCTRL2); + STV090x_SETFIELD_Px(reg, FRAME_MODE_FIELD, 1); + if (STV090x_WRITE_DEMOD(state, PDELCTRL2, reg) < 0) + goto err; + break; + default: + dprintk(FE_ERROR, 1, "Invalid data format %d", dfmt); + goto err; + } + + // + return 0; +err: + dprintk(FE_ERROR, 1, "Failed to set FE data format"); + return -1; +} static enum stv090x_signal_state stv090x_algo(struct stv090x_state *state) { @@ -3434,6 +3472,15 @@ if (p->frequency == 0) return DVBFE_ALGO_SEARCH_INVALID; + if (tsout == 0) { /* bb mode enabled */ + //if(stv090x_set_dfmt(state, props->dfmt) != 0) + if(stv090x_set_dfmt(state, FE_DFMT_BB_FRAME) != 0) + return DVBFE_ALGO_SEARCH_ERROR; + } else { + if(stv090x_set_dfmt(state, FE_DFMT_TS_PACKET) != 0) + return DVBFE_ALGO_SEARCH_ERROR; + } + state->delsys = props->delivery_system; state->frequency = p->frequency; state->srate = p->u.qpsk.symbol_rate; ^ permalink raw reply [flat|nested] 26+ messages in thread
* Re: DVB-S2 multistream support 2012-03-19 15:19 ` Konstantin Dimitrov @ 2012-04-24 22:18 ` Bob W 0 siblings, 0 replies; 26+ messages in thread From: Bob W @ 2012-04-24 22:18 UTC (permalink / raw) To: Konstantin Dimitrov; +Cc: Christian Prähauser, linux-media, Marek Ochaba Hi all, in playing with these patches, I am noticing the bbframes are only partially being delivered by the hardware. I am only getting the first 188 bytes of the frame. I think it is related to the programming of the saa716xx. In this function: saa716x_dma_start the params stuct is filled out, with 188 in the samples and pitch elements.. does anyone know a little more about this saa716x and how to program it correctly to receive more data to account for the big bbframes? thanks Bob On 3/19/2012 10:19 AM, Konstantin Dimitrov wrote: > hello Christian, > > first of all thank you for the great work. so, i have few follow-ups about it: > > 1. since your current patch contains patches that are kernel-specific > changes (i.e. some general changes to the V4L code for the kernel you > use), changes related to the BBFrame-support and hardware-specific > changes (i.e. related to the TBS 6925 card, which at the moment is the > only affordable hardware at least i know that can handle BBFrames) in > order for more easy use in different kernels as well for the purpose > of others to review the changes related to the BBFrame-support in V4L > 'dvb-core' i split your patch to 3 separate patches (they are attached > to this email): > > - 01-bb-dmx.patch : it's supposed to contains all changes you made to > the demux part of V4L 'dvb-core' - i didn't make any further changes - > just collected your original changes in the patch; it should apply > clean to all recent kernel released in the last several months (i > believe at least in the last 6 months), because no changes in this > parts of 'dvb-core' were made recently > > - 02-bb-fe.patch : those are changes for BBFrame-support related to > the frontend - i separated those changes and i didn't include them in > '01-bb-dmx.patch', because recently a lot of changes were made to that > part of V4L. so, this patch will apply clean to > "tbs-linux-drivers_v120206" and to other V4L trees most probably it > will require to manually apply the changes to the respective files, > but since it changes less than 10 lines in only 3 files that's just > fine for manual patching > > - 03-bb-tbs.patch : those are all changes specific to the TBS 6925 > hardware. additionally to your changes i defined "tsout" module > parameter to both 'stv090x' and 'saa716x_tbs-dvb' - that's convenient > to change between TS and BB mode just with reloading the modules with > rmmod/modprobe > > 2. so i used the above 3 patches with "tbs-linux-drivers_v120206" and > after i applied them: > > # cd linux-tbs-drivers > # patch -p1 < ../01-bb-dmx.patch > # patch -p1 < ../02-bb-fe.patch > # patch -p1 < ../03-bb-tbs.patch > > the driver builds successfully, but i'm not sure if i didn't miss > something from your original patch. also, i put file called > 'tbs6925.conf' in /etc/modprobe.d with lines in it: > > options stv090x tsout=0 > options saa716x_tbs-dvb tsout=0 > > for easy enable/disable of the BB mode with just reloading the modules > in order to make the testing easier. > > 3. so on the test i did every few seconds i get the following errors: > > _dvb_dmx_swfilter_bbframe: invalid use of reserved TS/GS value 1 > > _dvb_dmx_swfilter_bbframe: invalid data field length (length 0, left 10) > > and hex-dump of the BBFrame data. is that supposed to happen? please, > can you confirm if it happens or not in your environment with your > original patch or i messed-up something when i prepared the 3 patches > from point 1. so, that request is in relation to my seconds request - > please, review the 3 patches from point 1 and confirm they are correct > and i didn't miss anything - if they are correct patch 01 and 02 can > be used for review of the code. > > many thanks, > konstantin > ^ permalink raw reply [flat|nested] 26+ messages in thread
end of thread, other threads:[~2012-04-24 23:09 UTC | newest]
Thread overview: 26+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-12-25 1:06 DVB-S2 multistream support Georgi Chorbadzhiyski
2011-12-25 8:23 ` Antti Palosaari
2011-12-25 10:17 ` Mauro Carvalho Chehab
2011-12-25 10:55 ` Konstantin Dimitrov
2011-12-25 11:18 ` Mauro Carvalho Chehab
2011-12-25 12:37 ` Konstantin Dimitrov
2011-12-27 10:12 ` Christian Prähauser
2011-12-27 16:08 ` Antti Palosaari
2012-01-19 13:34 ` Marek Ochaba
2012-01-21 10:29 ` Christian Prähauser
2012-01-23 13:58 ` Marek Ochaba
2012-01-22 2:13 ` Mauro Carvalho Chehab
2012-01-22 12:44 ` Christian Prähauser
[not found] ` <CAF0Ff2mf0tYs3UG3M6Cahep+_kMToVaGgPhTqR7zhRG0UXWuig@mail.gmail.com>
[not found] ` <85A7A8FC-150C-4463-B09C-85EED6F851A8@cosy.sbg.ac.at>
[not found] ` <CAF0Ff2ncv0PJWSOOw=7WeGyqX3kKiQitY52uEOztfC8Bwj6LgQ@mail.gmail.com>
2012-01-25 13:12 ` Christian Prähauser
2012-02-01 18:49 ` Konstantin Dimitrov
2012-02-18 19:06 ` Christian Prähauser
2012-02-19 23:12 ` Konstantin Dimitrov
2012-03-07 16:33 ` Bob Winslow
2012-03-13 9:36 ` Marek Ochaba
2012-03-13 12:30 ` Bob W
2012-03-13 15:22 ` Konstantin Dimitrov
2012-03-13 15:47 ` Bob W
2012-03-15 9:40 ` Christian Prähauser
2012-03-19 8:46 ` Christian Prähauser
2012-03-19 15:19 ` Konstantin Dimitrov
2012-04-24 22:18 ` Bob W
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).