SEARCH  

NEWS

2010.10.06:11:36:27
Nobel z fizyki za przełomowy materiał (wideo)
Szybsze komputery i przejrzyste ekrany dotykowe mogą pojawić się na rynku dzięki grafenowi. Jest to supermocny, cienki materiał odkryty w roku 2004. Wczoraj nagrodę Nobla z fizyki otrzymali Andriej Gejm i Konstantin Nowosiołow za przełomowe eksperymenty związane z grafenem.

 

messageID:512660007643
author:Andrew de Quincey
title: linux dvb Rationalising dvb apps lib s any
Johannes wanted not to have any malloc/freeing in that SI parser, since it will be used to handle very high data rates. I agree malloc/free elsewhere is ok; I use it myself in the dvbcfg libs, where it happens infrequently. Well, you could have a pointer to a buffer allocation strategy that the user could override. I guess I dont know enough about SI parsing to know why one would have to create a lot of buffers on the fly. Feel free to set me straight. ;-) I think he wanted to have it so it would do the minimum possible amount of copying/work on the SI data for highspeed datastreams. In the libsi2, it basically processes the received data in place. What I do doesnt actually need this efficiency, but the library already had it. Johannes would be the best person to ask for more info on this. A while back, I sent some comments about how the libraries work, and what might be done to improve them. For instance, having applications ask for a type of adapter, and having the system probe for all available (unused) adapters, detect their type, and returning the matching kind. Why? Imagine the following: youve got a tri-mode tuner card, and its connected to a Spaun Diseqc NxM switch... The source can be chosen dynamically from off-the-air, cable, or satellite, and the front-end can be dynamically selected to be DVB-T/ATSC, QAM256, or 8QPSK. Do you really want to burden the application with that logic? And do you want to have each application handle that configuration state differently? This is what the combination of all the dvbcfg file formats does (well I think; but I may be missing an important point - tell me if so!). I simply havent had the time to write the support yet. libdvb2 would have a high level tune() function simply taking a GSID which works as follows: 1) The GSID is parsed into source_id, UMID and USID. 2) It locates a free adapter in adapters.conf which supports that source_id. 3) The DISEQC command string is looked up in diseqc.conf for that source_id and sent to the switch. It might be a switch/positioner issue. Further, what happens if you have multiple steerable dishes or a toroidal dish with multiple LNBs? You might want to see if one of the LNBs is already locked up to the appropriate position and polarity... That would avoid using up resources unnecessarily (but then youd also have to manage locking, so that the first process couldnt decide to move the dish or change the polarity now that its being "shared"... so some sort of semaphores might be required). These are all good points. They need serious research, planning and thought. 4) Next, it looks up tuning information for the multiplex in multiplex.conf using the UMID, and tunes the card. 5) Finally, it looks up the channel information in multiplex.conf using the GSID and sets up the PID filters. Is this what you mean? Or am I missing a usage case. Bear in mind all the DVB hardware I have access to is single mode only, wired to pretty dumb switches; Im happy to add support/include patches for more complex things though... Hmmm.... this is a recurring theme... Most of the development is done by people with limited means to test more complicated set-ups... Unfortunately yeah. Although I do some of this work for my company, we dont require any more complex setup. I suppose this is what you get with people doing it in their spare time with little or no manufacturer support :( Id want to keep the more primitive API as well, since different uses have different requirements. Sure. Low-level diagnostics and scripting tools should have low-level access. Maybe even adding .xs stubs for Perl scripting. Now that is a good idea; now we are getting some kind of library, other language bindings would be cool. I can imagine there could be lots of interesting things if we have perl and python bindings... I also think that we could do a better job abstracting the various kinds of Diseqc support that applications use... whether one is using a toroidal dish with a switch or a single LNB with a rotor, this sort of detail should be contained in the configuration, but abstracted away from the application. Do you mean something beyond the libdvbcfg diseqc.conf file format? I was attempting to make that a way to specify that sort of thing.. do you have ideas for extending it/a better implementation? Yes. I propose using nesting... having a hierarchy of satellite/transponder/frequency/ streams... I also think that simple Diseqc strings to manipulate a switch arent sufficient... and that this isnt the place to put them. A satellites information isnt site-specific: the position, angle, frequencies, transponder ids, etc. are invariant WRT the user. (In fact, the CVS could have a single monolithic file that the user then extracts the useful lines from...) So we basically need another config file to describe the invariant technical details for each transmission system (I dont want to call it "satellite" since we need to support all systems). Could the "sources.conf" file be expanded to contain this? Currently it just contains an ID and a human readable description. I was envisaging the sources.conf to be a file held on a wellknown system (e.g. linuxtv.org) that applications downloaded when it was updated, much as you suggest. We _almost_ have that hierarchy; simply that the sources information is stored in a separate file (sources.conf) from the multiplexes (multiplex.conf)... Youre effectively suggesting merging these two? In that case, Im not sure I entirely agree the frequencies are totally identical; depending on the card/dish/cables/hardware etc you do get some variation... e.g. reading the actual frequency the card reported locked it locked to back and saving it out again in order to accelerate lock times. But I suppose it would just be a matter of a localised version of the file, autoupdated by the application. Hmm, will think about the merging idea; I think the main reason it isnt in the same file is because I got the idea originally from VDR which has a separate sources.conf. People might say they want to have seperate files for each transmission system; but theres nothing stopping them - the libdvbcfg library would support either method of doing things. On the other hand, the users hardware configuration is extremely site specific by definition. So information about manipulating voltages, tones, input ids, rotor angles, rotor presets, etc. should all go into a separate file. To me, this sounds almost exactly like the diseqc.conf file. I know the IDs that are currently used to key the information contain the orbital position of the sat, but they could be anything really; the orbital position was simply a good way to unqiuely identify each sat cluster since there didnt seem to be another system. The IDs were meant to be opaque - even though they might contain something like "S-13E", it could very well have been "S-Hotbird156". Lastly, the configuration files could be more flexible, and more human readable. Embedding "7" for the FEC rather than "7/8" is less clear than it could be, and risks breaking should the enum values change in a future release of the kernel. Which configuration format were you looking at? The libdvbcfg multiplex.conf ones use either 7 or FEC_7_8, depending on what the application wants (the first is for machine-readable-only files on STBs with limited space, the second is for human edited files). I was asked to add the "brief" format by STB manufacturers concerned about the space used by the new file formats. I really dont think that 40-100 bytes is going to break an STB (and yes, Ive worked making STBs). Having config files that are easy to create and verify make it easier for resellers/carriers/installers to tailor to their users... Hmm, its more than than 40-100; maybe 40-100 per multiplex, but if you have a lot of multiplexes it would add up. I dont actually need this saving myself, but I added it because there was a demand for it from several people. The library is switchable between both formats at runtime, so I felt it was best to leave it up to the users of the lib what they choose to do. All of the satellite information, position, positioning info for a rotor or toroidal dish (i.e. which switch input, what stored position, or what angular azimuth and elevation for a 1- or 2-axis position), the frequencies, transponder numbers, beacon frequencies, sids, aids, pids, vids, encoding and encryption methods, etc. should all go into a single configuration file (but a structured, heirarchical one). Most of that already is in the libdvbcfg multiplexes.conf file. I decided that keeping diseqc.conf, adapters.conf, and sources.conf seperate was better from my POV, since I want to share some data (i.e. multiplexes.conf), but keep other, machine specific data in seperate files. Is there a man page that discusses these file formats? I was looking at test/test_multiplex*.txt but couldnt figure out much just from looking at the same data... It should all be documented in the libdvbcfg header files. Priming and editting that file should be done by the dvb-apps package, not by applications. Applications should be patched to use a higher level abstraction of the libraries (and indeed, developping these patches and re-verifying that the applications continue to work would be a reasonable way to confirm that the libraries are correct and functionally adequate). I agree. However my current priority is to get these libraries working for my uses. The existing apps are working as they are currently; but if someone else wants to patch them... Im confused. Wont your changes break compatibility with the existing applications? If so then youll need to patch, at a minimum, the applications that you use... unless you use only in-house applications... Yeah, thats it exactly: I only use in-house applications. Can you explain how rotor dishes are commanded? I have no experience of them whatsoever. Would the current diseqc.conf format suffice? or could it be better? Depends on the type of positioner... Some move in a single axis, some move in two axes... Some will give you status information as they move (since various conditions such as dish weight, snow load, wind, angle, etc. can affect their stepping speed). Others wont. Have a look at: rel="nofollow" www.eutelsat.com/satellites/pdf/Diseqc/associated%20docs/position_ap www.eutelsat.com/satellites/pdf/Diseqc/associated%20docs/position_ap p_note_v1.pdf BTW: Some positioners will also turn a directional antenna to point the antenna for optimal signal strength and front/back discrimination on terrestrial antennas. They are programmed in a similar fashion. Cool, I shall have a read. Hmm, dishes that send DISEQC data back are not going to work that well - AFAIK we only have one supported card that might possibly support that, and no one AFAIK has actually tested if it actually works (I added the code just in case, but have no DISEQC 2.0 hardware). Its the new s5h1420 DVBS card if youre interested.
Index