diff options
Diffstat (limited to 'libdtv/libsi')
-rw-r--r-- | libdtv/libsi/COPYING | 339 | ||||
-rw-r--r-- | libdtv/libsi/Makefile | 83 | ||||
-rw-r--r-- | libdtv/libsi/README | 2 | ||||
-rw-r--r-- | libdtv/libsi/include/libsi.h | 1248 | ||||
-rw-r--r-- | libdtv/libsi/include/si_tables.h | 1403 | ||||
-rw-r--r-- | libdtv/libsi/si_debug_services.c | 674 | ||||
-rw-r--r-- | libdtv/libsi/si_debug_services.h | 245 | ||||
-rw-r--r-- | libdtv/libsi/si_parser.c | 1335 |
8 files changed, 0 insertions, 5329 deletions
diff --git a/libdtv/libsi/COPYING b/libdtv/libsi/COPYING deleted file mode 100644 index a43ea212..00000000 --- a/libdtv/libsi/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) 19yy <name of author> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/libdtv/libsi/Makefile b/libdtv/libsi/Makefile deleted file mode 100644 index 4f278a09..00000000 --- a/libdtv/libsi/Makefile +++ /dev/null @@ -1,83 +0,0 @@ -############################################################## -### ### -### Makefile: local makefile for libsi ### -### ### -############################################################## - -## $Revision: 1.4 $ -## $Date: 2001/10/07 10:24:46 $ -## $Author: hakenes $ -## -## (C) 2001 Rolf Hakenes <hakenes@hippomi.de>, under the GNU GPL. -## -## dtv_scan is free software; you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 2, or (at your option) -## any later version. -## -## dtv_scan is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. -## -## You may have received a copy of the GNU General Public License -## along with dtv_scan; see the file COPYING. If not, write to the -## Free Software Foundation, Inc., 59 Temple Place - Suite 330, -## Boston, MA 02111-1307, USA. -# -# -# - -.DELETE_ON_ERROR: - -CC ?= gcc -CFLAGS ?= -O2 -g -Wmissing-prototypes -Wstrict-prototypes \ - -DNAPI -Wimplicit -D__USE_FIXED_PROTOTYPES__ # -ansi -pedantic - -INCDIRS = -Iinclude -I../include -DISTDIR = ../lib -DISTINCDIR = ../include -INCLUDES = include/libsi.h include/si_tables.h -MAKEDEPEND = gcc -M - -LIBDIRS = -L. -L../lib -LIBS = -lsi -llx - -AR = ar -ARFLAGS = ru -RANLIB = ranlib - -SILIB = libsi.a -OBJS = si_parser.o si_debug_services.o - -all : $(SILIB) - -clean : - @echo cleaning workspace... - @rm -f $(OBJS) $(SILIB) *~ - @rm -f Makefile.dep - -depend : Makefile.dep -Makefile.dep : - @echo "updating dependencies..." - @$(MAKEDEPEND) $(INCDIRS) $(OBJS:%.o=%.c) $(SITEST_OBJS:%.o=%.c) \ - $(SISCAN_OBJS:%.o=%.c) > Makefile.dep - -new : clean depend all - -dist: all - @echo "distributing $(SILIB) to $(DISTDIR)..." - @cp $(SILIB) $(DISTDIR) - @cp $(INCLUDES) $(DISTINCDIR) - @$(RANLIB) $(DISTDIR)/$(SILIB) - -$(SILIB) : $(OBJS) - @echo updating library... - @$(AR) $(ARFLAGS) $(SILIB) $(OBJS) - @$(RANLIB) $(SILIB) - -.c.o : - @echo compiling $<... - @$(CC) $(DEFINES) $(CFLAGS) $(INCDIRS) -c $< - --include Makefile.dep diff --git a/libdtv/libsi/README b/libdtv/libsi/README deleted file mode 100644 index 4f1be1ab..00000000 --- a/libdtv/libsi/README +++ /dev/null @@ -1,2 +0,0 @@ -DVB - System Information Library -================================ diff --git a/libdtv/libsi/include/libsi.h b/libdtv/libsi/include/libsi.h deleted file mode 100644 index b4dad887..00000000 --- a/libdtv/libsi/include/libsi.h +++ /dev/null @@ -1,1248 +0,0 @@ -////////////////////////////////////////////////////////////// -/// /// -/// libsi.h: definitions for data structures of libsi /// -/// /// -////////////////////////////////////////////////////////////// - -// $Revision: 1.7 $ -// $Date: 2003/04/12 11:27:31 $ -// $Author: hakenes $ -// -// (C) 2001-03 Rolf Hakenes <hakenes@hippomi.de>, under the -// GNU GPL with contribution of Oleg Assovski, -// www.satmania.com -// -// libsi is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or (at your option) -// any later version. -// -// libsi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You may have received a copy of the GNU General Public License -// along with libsi; see the file COPYING. If not, write to the -// Free Software Foundation, Inc., 59 Temple Place - Suite 330, -// Boston, MA 02111-1307, USA. - -#ifndef LIBSI_H -#define LIBSI_H - -#include <time.h> -#include <sys/types.h> -#include <asm/types.h> - -#define dvb_pid_t int - - - /* Program Identifier */ - -#define PID_PAT 0x00 /* Program Association Table */ -#define PID_CAT 0x01 /* Conditional Access Table */ -#define PID_NIT 0x10 /* Network Information Table */ -#define PID_BAT 0x11 /* Bouquet Association Table */ -#define PID_SDT 0x11 /* Service Description Table */ -#define PID_EIT 0x12 /* Event Information Table */ -#define PID_RST 0x13 /* Running Status Table */ -#define PID_TDT 0x14 /* Time Date Table */ -#define PID_TOT 0x14 /* Time Offset Table */ -#define PID_ST 0x14 /* Stuffing Table */ - /* 0x15 - 0x1F */ /* Reserved for future use */ - - /* Table Identifier */ - -#define TID_PAT 0x00 /* Program Association Section */ -#define TID_CAT 0x01 /* Conditional Access Section */ -#define TID_PMT 0x02 /* Conditional Access Section */ - /* 0x03 - 0x3F */ /* Reserved for future use */ -#define TID_NIT_ACT 0x40 /* Network Information Section - - actual */ -#define TID_NIT_OTH 0x41 /* Network Information Section - - other */ -#define TID_SDT_ACT 0x42 /* Service Description Section - - actual */ -#define TID_SDT_OTH 0x46 /* Service Description Section - - other */ -#define TID_EIT_ACT 0x4E /* Event Information Section - - actual */ -#define TID_EIT_OTH 0x4F /* Event Information Section - - other */ -#define TID_EIT_ACT_SCH 0x50 /* Event Information Section - - actual, schedule */ -#define TID_EIT_OTH_SCH 0x60 /* Event Information Section - - other, schedule */ -#define TID_TDT 0x70 /* Time Date Section */ -#define TID_TOT 0x73 /* Time Offset Section */ -#define TID_CA_ECM_0 0x80 -#define TID_CA_ECM_1 0x81 -#define TID_CA_EMM 0x82 - -#define TID_BAT 0x4A /* Bouquet Association Section */ - -#define TID_EIT 0x12 /* Event Information Section */ -#define TID_RST 0x71 /* Running Status Section */ -#define TID_ST 0x72 /* Stuffing Section */ - /* 0xFF */ /* Reserved for future use */ - - /* Descriptor Identifier */ - - /* defined by ISO/IEC 13818-1 */ - -#define DESCR_VIDEO_STREAM 0x02 -#define DESCR_AUDIO_STREAM 0x03 -#define DESCR_HIERARCHY 0x04 -#define DESCR_REGISTRATION 0x05 -#define DESCR_DATA_STREAM_ALIGN 0x06 -#define DESCR_TARGET_BACKGRID 0x07 -#define DESCR_VIDEO_WINDOW 0x08 -#define DESCR_CA 0x09 -#define DESCR_ISO_639_LANGUAGE 0x0A -#define DESCR_SYSTEM_CLOCK 0x0B -#define DESCR_MULTIPLEX_BUFFER_UTIL 0x0C -#define DESCR_COPYRIGHT 0x0D -#define DESCR_MAXIMUM_BITRATE 0x0E -#define DESCR_PRIVATE_DATA_IND 0x0F -#define DESCR_SMOOTHING_BUFFER 0x10 -#define DESCR_STD 0x11 -#define DESCR_IBP 0x12 - /* 0x13 - 0x3F */ /* Reserved */ - - /* defined by ETSI */ - -#define DESCR_NW_NAME 0x40 -#define DESCR_SERVICE_LIST 0x41 -#define DESCR_STUFFING 0x42 -#define DESCR_SAT_DEL_SYS 0x43 -#define DESCR_CABLE_DEL_SYS 0x44 -#define DESCR_VBI_DATA 0x45 -#define DESCR_VBI_TELETEXT 0x46 -#define DESCR_BOUQUET_NAME 0x47 -#define DESCR_SERVICE 0x48 -#define DESCR_COUNTRY_AVAIL 0x49 -#define DESCR_LINKAGE 0x4A -#define DESCR_NVOD_REF 0x4B -#define DESCR_TIME_SHIFTED_SERVICE 0x4C -#define DESCR_SHORT_EVENT 0x4D -#define DESCR_EXTENDED_EVENT 0x4E -#define DESCR_TIME_SHIFTED_EVENT 0x4F -#define DESCR_COMPONENT 0x50 -#define DESCR_MOSAIC 0x51 -#define DESCR_STREAM_ID 0x52 -#define DESCR_CA_IDENT 0x53 -#define DESCR_CONTENT 0x54 -#define DESCR_PARENTAL_RATING 0x55 -#define DESCR_TELETEXT 0x56 -#define DESCR_TELEPHONE 0x57 -#define DESCR_LOCAL_TIME_OFF 0x58 -#define DESCR_SUBTITLING 0x59 -#define DESCR_TERR_DEL_SYS 0x5A -#define DESCR_ML_NW_NAME 0x5B -#define DESCR_ML_BQ_NAME 0x5C -#define DESCR_ML_SERVICE_NAME 0x5D -#define DESCR_ML_COMPONENT 0x5E -#define DESCR_PRIV_DATA_SPEC 0x5F -#define DESCR_SERVICE_MOVE 0x60 -#define DESCR_SHORT_SMOOTH_BUF 0x61 -#define DESCR_FREQUENCY_LIST 0x62 -#define DESCR_PARTIAL_TP_STREAM 0x63 -#define DESCR_DATA_BROADCAST 0x64 -#define DESCR_CA_SYSTEM 0x65 -#define DESCR_DATA_BROADCAST_ID 0x66 -#define DESCR_TRANSPORT_STREAM 0x67 -#define DESCR_DSNG 0x68 -#define DESCR_PDC 0x69 -#define DESCR_AC3 0x6A -#define DESCR_ANCILLARY_DATA 0x6B -#define DESCR_CELL_LIST 0x6C -#define DESCR_CELL_FREQ_LINK 0x6D -#define DESCR_ANNOUNCEMENT_SUPPORT 0x6E - - -#define MAX_SECTION_BUFFER 4096 - - -/* NetworkInfo structure (used to store NIT/BAT information) */ - -struct NetworkInfo { - struct NODE Node; - unsigned short ID; // NetworkID / BouquetID - struct LIST *Descriptors; - struct LIST *TransportStreams; -}; - -#define CreateNetworkInfo(ni, id) \ - do { \ - xCreateNode (ni, NULL); \ - (ni)->ID = id; \ - (ni)->Descriptors = xNewList(NULL); \ - (ni)->TransportStreams = NULL; \ - } while(0) - -/* TransportStream structure (NIT/BAT TS loop member) */ - -struct TransportStream { - struct NODE Node; - int TransportStreamID; - unsigned short OriginalNetworkID; - struct LIST *Descriptors; -}; - -#define CreateTransportStream(ts, tsid, onid) \ - do { \ - xCreateNode (ts, NULL); \ - (ts)->TransportStreamID = tsid; \ - (ts)->OriginalNetworkID = onid; \ - (ts)->Descriptors = xNewList(NULL); \ - } while(0) - -/* Strukturen zur Aufnahme der SDT und EIT Informationen */ - -struct Service { - struct NODE Node; - int ServiceID; - int TransportStreamID; - int OriginalNetworkID; - int SdtVersion; - unsigned short Status; - struct LIST *Descriptors; - struct LIST *Events; -}; - -#define EIT_SCHEDULE_FLAG 0x0001 -#define GetScheduleFlag(x) ((x)&EIT_SCHEDULE_FLAG) -#define SetScheduleFlag(x) ((x)|=EIT_SCHEDULE_FLAG) -#define EIT_PRESENT_FOLLOWING_FLAG 0x0002 -#define GetPresentFollowing(x) ((x)&EIT_PRESENT_FOLLOWING_FLAG) -#define SetPresentFollowing(x) ((x)|=EIT_PRESENT_FOLLOWING_FLAG) -#define RUNNING_STATUS_NOT_RUNNING 0x0000 -#define RUNNING_STATUS_AWAITING 0x0004 -#define RUNNING_STATUS_PAUSING 0x0008 -#define RUNNING_STATUS_RUNNING 0x000C -#define GetRunningStatus(x) ((x)&RUNNING_STATUS_RUNNING) -#define SetRunningStatus(x,s) ((x)|=((s)&RUNNING_STATUS_RUNNING)) -#define FREE_TO_AIR 0x0000 -#define CONDITIONAL_ACCESS 0x0010 -#define GetConditionalAccess(x) ((x)&CONDITIONAL_ACCESS) -#define SetConditionalAccess(x) ((x)|=CONDITIONAL_ACCESS) - -#define CreateService(service, svid, tsid, onid, vers, sta) \ - do \ - { \ - xCreateNode (service, NULL); \ - service->ServiceID = svid; \ - service->TransportStreamID = tsid; \ - service->OriginalNetworkID = onid; \ - service->SdtVersion = vers; \ - service->Status = sta; \ - service->Descriptors = xNewList (NULL); \ - service->Events = xNewList (NULL); \ - } while (0) - - -struct Event { - struct NODE Node; - int EventID; - int ServiceID; - int EitVersion; - int TransportStreamID; - int OriginalNetworkID; - time_t StartTime; - time_t Duration; - unsigned short Status; - struct LIST *Descriptors; -}; - -#define CreateEvent(event, evid, svid, tsid, onid, vers, sta) \ - do \ - { \ - xCreateNode (event, NULL); \ - event->EventID = evid; \ - event->ServiceID = svid; \ - event->TransportStreamID = tsid; \ - event->OriginalNetworkID = onid; \ - event->EitVersion = vers; \ - event->Status = sta; \ - event->Descriptors = xNewList (NULL); \ - } while (0) - - -/* Strukturen zur Aufnahme der PAT und PMT Informationen */ - -struct Program { - struct NODE Node; - int ProgramID; - int TransportStreamID; - int NetworkPID; - int PatVersion; - struct LIST *Pids; -}; - -#define CreateProgram(program, pgid, tsid, npid, vers) \ - do \ - { \ - xCreateNode (program, NULL); \ - program->ProgramID = pgid; \ - program->TransportStreamID = tsid; \ - program->NetworkPID = npid; \ - program->PatVersion = vers; \ - program->Pids = xNewList (NULL); \ - } while (0) - -struct Pid { - struct NODE Node; - int ProgramID; - int PcrPID; - int PmtVersion; - struct LIST *Descriptors; - struct LIST *InfoList; -}; - -#define CreatePid(pid, pgid, pcid, vers) \ - do \ - { \ - xCreateNode (pid, NULL); \ - pid->ProgramID = pgid; \ - pid->PcrPID = pcid; \ - pid->PmtVersion = vers; \ - pid->Descriptors = xNewList (NULL); \ - pid->InfoList = xNewList (NULL); \ - } while (0) - -struct PidInfo { - struct NODE Node; - int StreamType; - dvb_pid_t ElementaryPid; - struct LIST *Descriptors; -}; - -#define CreatePidInfo(pidinfo, styp, epid) \ - do \ - { \ - xCreateNode (pidinfo, NULL); \ - pidinfo->StreamType = styp; \ - pidinfo->ElementaryPid = (dvb_pid_t) epid; \ - pidinfo->Descriptors = xNewList (NULL); \ - } while (0) - - -#define STREAMTYPE_11172_VIDEO 1 -#define STREAMTYPE_13818_VIDEO 2 -#define STREAMTYPE_11172_AUDIO 3 -#define STREAMTYPE_13818_AUDIO 4 -#define STREAMTYPE_13818_PRIVATE 5 -#define STREAMTYPE_13818_PES_PRIVATE 6 -#define STREAMTYPE_13522_MHPEG 7 -#define STREAMTYPE_13818_DSMCC 8 -#define STREAMTYPE_ITU_222_1 9 -#define STREAMTYPE_13818_A 10 -#define STREAMTYPE_13818_B 11 -#define STREAMTYPE_13818_C 12 -#define STREAMTYPE_13818_D 13 -#define STREAMTYPE_13818_AUX 14 - - -struct Tot { - time_t UTC; - time_t Bias; - struct LIST *Descriptors; -}; - -#define CreateTot(tot, utc) \ - do \ - { \ - xMemAlloc(sizeof(struct Tot), &tot); \ - tot->UTC = utc; \ - tot->Bias = ((utc - time(NULL) + 1800)/3600)*3600; \ - tot->Descriptors = xNewList(NULL); \ - } while (0) - - -/* Descriptors */ - -#define DescriptorTag(x) ((struct Descriptor *)(x))->Tag - -struct Descriptor { - struct NODE Node; - unsigned short Tag; -}; - - -/* Iso639LanguageDescriptor */ - -struct Iso639LanguageDescriptor { - struct NODE Node; - unsigned short Tag; - char LanguageCode[4]; -}; - -#define CreateIso639LanguageDescriptor(descr, lc1, lc2, lc3) \ - do \ - { \ - xCreateNode (((struct Iso639LanguageDescriptor *)descr), NULL); \ - ((struct Iso639LanguageDescriptor *)descr)->Tag = DESCR_ISO_639_LANGUAGE; \ - ((struct Iso639LanguageDescriptor *)descr)->LanguageCode[0] = lc1; \ - ((struct Iso639LanguageDescriptor *)descr)->LanguageCode[1] = lc2; \ - ((struct Iso639LanguageDescriptor *)descr)->LanguageCode[2] = lc3; \ - ((struct Iso639LanguageDescriptor *)descr)->LanguageCode[3] = '\0'; \ - } while (0) - - -/* Ac3Descriptor */ - -#define AC3_TYPE_FLAG 0x0001 -#define BS_ID_FLAG 0x0002 -#define MAIN_ID_FLAG 0x0004 -#define ASVC_FLAG 0x0008 - -struct Ac3Descriptor { - struct NODE Node; - unsigned short Tag; - unsigned short PresentFlags; - unsigned short Ac3Type; - unsigned short BsId; - unsigned short MainId; - unsigned short Asvc; - unsigned short Amount; /* AdditionalData */ - unsigned char *AdditionalData; -}; - -#define CreateAc3Descriptor(descr) \ - do \ - { \ - xCreateNode (((struct Ac3Descriptor *)descr), NULL); \ - ((struct Ac3Descriptor *)descr)->Tag = DESCR_AC3; \ - } while (0) - -#define AddAc3FlagAndValue(descr, flg, val) \ - do \ - { \ - if ((flg) & AC3_TYPE_FLAG) { \ - ((struct Ac3Descriptor *)descr)->PresentFlags |= AC3_TYPE_FLAG; \ - ((struct Ac3Descriptor *)descr)->Ac3Type = (val); } \ - else if ((flg) & BS_ID_FLAG) { \ - ((struct Ac3Descriptor *)descr)->PresentFlags |= BS_ID_FLAG; \ - ((struct Ac3Descriptor *)descr)->BsId = (val); } \ - else if ((flg) & MAIN_ID_FLAG) { \ - ((struct Ac3Descriptor *)descr)->PresentFlags |= MAIN_ID_FLAG; \ - ((struct Ac3Descriptor *)descr)->MainId = (val); } \ - else if ((flg) & ASVC_FLAG) { \ - ((struct Ac3Descriptor *)descr)->PresentFlags |= ASVC_FLAG; \ - ((struct Ac3Descriptor *)descr)->Asvc = (val); } \ - } while (0) - -#define AddAc3AdditionalData(descr, ptr, len) \ - do \ - { \ - xMemAlloc ((len)+1, &(((struct Ac3Descriptor *) \ - descr)->AdditionalData)); \ - memcpy ((((struct Ac3Descriptor *)descr)->AdditionalData),(ptr),(len)); \ - } while (0) - - -/* AncillaryDataDescriptor */ - -struct AncillaryDataDescriptor { - struct NODE Node; - unsigned short Tag; - unsigned short Identifier; -}; - -#define ANCILLARY_DATA_DVD_VIDEO 0x0001 -#define ANCILLARY_DATA_EXTENDED 0x0002 -#define ANCILLARY_DATA_SWITCHING 0x0004 -#define ANCILLARY_DATA_DAB 0x0008 -#define ANCILLARY_DATA_SCALE_FACTOR 0x0010 - -#define CreateAncillaryDataDescriptor(descr, id) \ - do \ - { \ - xCreateNode (((struct AncillaryDataDescriptor *)descr), NULL); \ - ((struct AncillaryDataDescriptor *)descr)->Tag = DESCR_ANCILLARY_DATA; \ - ((struct AncillaryDataDescriptor *)descr)->Identifier = id; \ - } while (0) - - -/* BouquetNameDescriptor */ -/* - the same used instead of NetworkNameDescriptor because their structures - are identical. We pass 'tag' parameter to distinguish between them later -*/ - -struct BouquetNameDescriptor { - struct NODE Node; /* Node enthält Namen */ - unsigned short Tag; -}; - -#define CreateBouquetNameDescriptor(descr, text, tag) \ - do \ - { \ - xCreateNode (((struct BouquetNameDescriptor *)descr), NULL); \ - ((struct NODE *)descr)->Name = text; \ - ((struct NODE *)descr)->HashKey = xHashKey (text); \ - ((struct BouquetNameDescriptor *)descr)->Tag = tag; \ - } while (0) - - -/* CountryAvailabilityDescriptor */ - -struct CountryAvailabilityDescriptor { - struct NODE Node; - unsigned short Tag; - unsigned short AvailibilityFlag; - unsigned short Amount; /* CountryCodes */ - char *CountryCodes; -}; - -#define COUNTRIES_ARE_AVAILABLE 0x0001 -#define COUNTRIES_ARE_UNAVAILABLE 0x0000 - -#define CreateCountryAvailabilityDescriptor(descr, ava) \ - do \ - { \ - xCreateNode (((struct CountryAvailabilityDescriptor *)descr), NULL); \ - ((struct CountryAvailabilityDescriptor *)descr)->Tag = DESCR_COUNTRY_AVAIL; \ - ((struct CountryAvailabilityDescriptor *)descr)->AvailibilityFlag = ava; \ - ((struct CountryAvailabilityDescriptor *)descr)->Amount = 0; \ - ((struct CountryAvailabilityDescriptor *)descr)->CountryCodes = NULL; \ - } while (0) - -#define AddCountryAvailabilityCode(descr, lc1, lc2, lc3) \ - do \ - { \ - char tmpbuf[4], *tmpptr, *ttptr; \ - \ - tmpbuf[0] = lc1; tmpbuf[1] = lc2; \ - tmpbuf[2] = lc3; tmpbuf[3] = '\0'; \ - xMemAlloc (((struct CountryAvailabilityDescriptor *)descr)->Amount*4 + 8, &tmpptr); \ - ttptr = tmpptr; \ - if (((struct CountryAvailabilityDescriptor *)descr)->CountryCodes) { \ - memcpy (ttptr, ((struct CountryAvailabilityDescriptor *)descr)->CountryCodes, \ - ((struct CountryAvailabilityDescriptor *)descr)->Amount*4); \ - ttptr += ((struct CountryAvailabilityDescriptor *)descr)->Amount*4; \ - } \ - memcpy (ttptr, tmpbuf, 4); \ - ((struct CountryAvailabilityDescriptor *)descr)->CountryCodes = tmpptr; \ - } while (0) - - -/* CaIdentifierDescriptor */ - -struct CaIdentifierDescriptor { - struct NODE Node; - unsigned short Tag; - unsigned short Amount; /* SystemIDs */ - unsigned short *SystemID; -}; - -#define CreateCaIdentifierDescriptor(descr, amo) \ - do \ - { \ - xCreateNode (((struct CaIdentifierDescriptor *)descr), NULL); \ - ((struct CaIdentifierDescriptor *)descr)->Tag = DESCR_CA_IDENT; \ - ((struct CaIdentifierDescriptor *)descr)->Amount = amo; \ - xMemAlloc (amo*2+2, &((struct CaIdentifierDescriptor *)descr)->SystemID); \ - } while (0) - -#define SetCaIdentifierID(descr, num, id) \ - ((struct CaIdentifierDescriptor *)descr)->SystemID[num] = id -#define GetCaIdentifierID(descr, num) (((struct CaIdentifierDescriptor *)descr)->SystemID[num]) - -/* CaDescriptor */ - -struct CaDescriptor { - struct NODE Node; - unsigned short Tag; - unsigned short CA_type; - unsigned short CA_PID; - unsigned int ProviderID; - unsigned short DataLength; - unsigned char *Data; -}; - -#define CreateCaDescriptor(descr, typ, capid, len) \ - do \ - { \ - xCreateNode (((struct CaDescriptor *)descr), NULL); \ - ((struct CaDescriptor *)descr)->Tag = DESCR_CA; \ - ((struct CaDescriptor *)descr)->CA_type = typ; \ - ((struct CaDescriptor *)descr)->CA_PID = capid; \ - ((struct CaDescriptor *)descr)->ProviderID = 0; \ - ((struct CaDescriptor *)descr)->DataLength = len; \ - xMemAlloc (len+1, &((struct CaDescriptor *)descr)->Data); \ - } while (0) - -#define SetCaData(descr, num, id) \ - ((struct CaDescriptor *)descr)->Data[num] = id -#define GetCaData(descr, num) (((struct CaDescriptor *)descr)->Data[num]) - -/* StreamIdentifierDescriptor */ - -struct StreamIdentifierDescriptor { - struct NODE Node; - unsigned short Tag; - unsigned short ComponentTag; -}; - -#define CreateStreamIdentifierDescriptor(descr, ctag) \ - do \ - { \ - xCreateNode (((struct StreamIdentifierDescriptor *)descr), NULL); \ - ((struct StreamIdentifierDescriptor *)descr)->Tag = DESCR_STREAM_ID; \ - ((struct StreamIdentifierDescriptor *)descr)->ComponentTag = (ctag); \ - } while (0) - - -/* DataBroadcastDescriptor */ - -struct DataBroadcastDescriptor { - struct NODE Node; /* Node enthält DescriptorText */ - unsigned short Tag; - unsigned short DataBroadcastID; - unsigned short ComponentTag; - unsigned short SelectorLength; - unsigned char *SelectorBytes; - char LanguageCode[4]; -}; - -struct MosaicDescriptor { - struct NODE Node; - unsigned short Tag; - /* to be defined */ -}; - -struct MultiLingualServiceDescriptor { - struct NODE Node; - unsigned short Tag; - /* to be defined */ -}; - - -/* NvodReferenceDescriptor */ - -struct NvodReferenceDescriptor { - struct NODE Node; - unsigned short Tag; - struct LIST *Items; -}; - -#define CreateNvodReferenceDescriptor(descr) \ - do \ - { \ - xCreateNode (((struct NvodReferenceDescriptor *)descr), NULL); \ - ((struct NvodReferenceDescriptor *)descr)->Tag = DESCR_NVOD_REF; \ - ((struct NvodReferenceDescriptor *)descr)->Items = xNewList (NULL); \ - } while (0) - -struct NvodReferenceItem { - struct NODE Node; - int TransportStreamID; - int OriginalNetworkID; - int ServiceID; -}; - -#define CreateNvodReferenceItem(itm, tpid, onid, svid) \ - do \ - { \ - xCreateNode (itm, NULL); \ - itm->TransportStreamID = tpid; \ - itm->OriginalNetworkID = onid; \ - itm->ServiceID = svid; \ - } while (0) - -#define AddNvodReferenceItem(desc, tpid, onid, svid) \ - do \ - { \ - struct NvodReferenceItem *item; \ - \ - CreateNvodReferenceItem(item, tpid, onid, svid); \ - xAddTail (((struct NvodReferenceDescriptor *)desc)->Items, item); \ - } while (0) - - -/* LinkageDescriptor */ - -struct LinkageDescriptor { - struct NODE Node; - unsigned short Tag; - int TransportStreamID; - int OriginalNetworkID; - int ServiceID; - int LinkageType; - int PrivateDataLength; - unsigned char *PrivateData; -}; - -#define CreateLinkageDescriptor(descr, tpid, onid, svid, ltyp, pdl, pdp) \ - do \ - { \ - xCreateNode (((struct LinkageDescriptor *)descr), NULL); \ - ((struct LinkageDescriptor *)descr)->Tag = DESCR_LINKAGE; \ - ((struct LinkageDescriptor *)descr)->TransportStreamID = tpid; \ - ((struct LinkageDescriptor *)descr)->OriginalNetworkID = onid; \ - ((struct LinkageDescriptor *)descr)->ServiceID = svid; \ - ((struct LinkageDescriptor *)descr)->LinkageType = ltyp; \ - ((struct LinkageDescriptor *)descr)->PrivateDataLength = pdl; \ - xMemAlloc ((pdl)+1, &(((struct LinkageDescriptor *) \ - descr)->PrivateData)); \ - memcpy ((((struct LinkageDescriptor *)descr)->PrivateData),(pdp),(pdl));\ - } while (0) - - -/* ServiceDescriptor */ - -struct ServiceDescriptor { - struct NODE Node; /* Node enthält ServiceName */ - unsigned short Tag; - unsigned short ServiceType; - char *ServiceProvider; -}; - -#define CreateServiceDescriptor(descr, styp, prov, name) \ - do \ - { \ - xCreateNode (((struct ServiceDescriptor *)descr), NULL); \ - ((struct NODE *)descr)->Name = name; \ - ((struct NODE *)descr)->HashKey = xHashKey (name); \ - ((struct ServiceDescriptor *)descr)->Tag = DESCR_SERVICE; \ - ((struct ServiceDescriptor *)descr)->ServiceType = styp; \ - ((struct ServiceDescriptor *)descr)->ServiceProvider = prov; \ - } while (0) - - - -struct TelephoneDescriptor { - struct NODE Node; - unsigned short Tag; - /* to be defined */ -}; - - -/* TimeShiftedServiceDescriptor */ - -struct TimeShiftedServiceDescriptor { - struct NODE Node; - unsigned short Tag; - int ReferenceServiceID; -}; - -#define CreateTimeShiftedServiceDescriptor(descr, svid) \ - do \ - { \ - xCreateNode (((struct TimeShiftedServiceDescriptor *)descr), NULL); \ - ((struct TimeShiftedServiceDescriptor *)descr)->Tag = DESCR_TIME_SHIFTED_SERVICE; \ - ((struct TimeShiftedServiceDescriptor *)descr)->ReferenceServiceID = svid; \ - } while (0) - - -/* TimeShiftedEventDescriptor */ - -struct TimeShiftedEventDescriptor { - struct NODE Node; - unsigned short Tag; - int ReferenceServiceID; - int ReferenceEventID; -}; - -#define CreateTimeShiftedEventDescriptor(descr, svid, evid) \ - do \ - { \ - xCreateNode (((struct TimeShiftedEventDescriptor *)descr), NULL); \ - ((struct TimeShiftedEventDescriptor *)descr)->Tag = DESCR_TIME_SHIFTED_EVENT; \ - ((struct TimeShiftedEventDescriptor *)descr)->ReferenceServiceID = svid; \ - ((struct TimeShiftedEventDescriptor *)descr)->ReferenceEventID = evid; \ - } while (0) - - -/* ComponentDescriptor */ - -struct ComponentDescriptor { - struct NODE Node; /* Node enthält ComponentText */ - unsigned short Tag; - unsigned short StreamContent; - unsigned short ComponentType; - unsigned short ComponentTag; - char LanguageCode[4]; -}; - -#define CreateComponentDescriptor(descr, scnt, ctyp, tag, lc1, lc2, lc3, txt) \ - do \ - { \ - xCreateNode (((struct ComponentDescriptor *)descr), NULL); \ - ((struct NODE *)descr)->Name = txt; \ - ((struct NODE *)descr)->HashKey = xHashKey (txt); \ - ((struct ComponentDescriptor *)descr)->Tag = DESCR_COMPONENT; \ - ((struct ComponentDescriptor *)descr)->StreamContent = scnt; \ - ((struct ComponentDescriptor *)descr)->ComponentType = ctyp; \ - ((struct ComponentDescriptor *)descr)->ComponentTag = tag; \ - ((struct ComponentDescriptor *)descr)->LanguageCode[0] = lc1; \ - ((struct ComponentDescriptor *)descr)->LanguageCode[1] = lc2; \ - ((struct ComponentDescriptor *)descr)->LanguageCode[2] = lc3; \ - ((struct ComponentDescriptor *)descr)->LanguageCode[3] = '\0'; \ - } while (0) - - -/* ContentDescriptor */ - -struct ContentDescriptor { - struct NODE Node; - unsigned short Tag; - unsigned short Amount; /* ContentIDs */ - unsigned short *ContentID; -}; - -#define CreateContentDescriptor(descr, amo) \ - do \ - { \ - xCreateNode (((struct ContentDescriptor *)descr), NULL); \ - ((struct ContentDescriptor *)descr)->Tag = DESCR_CONTENT; \ - ((struct ContentDescriptor *)descr)->Amount = amo; \ - xMemAlloc (amo*2+2, &((struct ContentDescriptor *)descr)->ContentID); \ - } while (0) - -#define SetContentID(descr, num, cnib1, cnib2, unib1, unib2) \ - do \ - { \ - ((struct ContentDescriptor *)descr)->ContentID[num] = \ - ((cnib1&0xF) << 12) | ((cnib2&0xF) << 8) | \ - ((unib1&0xF) << 4) | (unib2&0xF); \ - } while (0) -#define GetContentContentNibble1(descr, num) ((((struct ContentDescriptor *)descr)->ContentID[num]&0xF000) >> 12) -#define GetContentContentNibble2(descr, num) ((((struct ContentDescriptor *)descr)->ContentID[num]&0x0F00) >> 8) -#define GetContentUserNibble1(descr, num) ((((struct ContentDescriptor *)descr)->ContentID[num]&0x00F0) >> 4) -#define GetContentUserNibble2(descr, num) (((struct ContentDescriptor *)descr)->ContentID[num]&0x000F) - - -/* ExtendedEventDescriptor */ - -struct ExtendedEventDescriptor { - struct NODE Node; /* Node enthält EventText */ - unsigned short Tag; - unsigned short DescriptorNumber; - unsigned short LastDescriptorNumber; - char LanguageCode[4]; - struct LIST *Items; -}; - -#define CreateExtendedEventDescriptor(descr, dnum, ldnb, lc1, lc2, lc3, text) \ - do \ - { \ - xCreateNode (((struct ExtendedEventDescriptor *)descr), NULL); \ - ((struct NODE *)descr)->Name = text; \ - ((struct NODE *)descr)->HashKey = xHashKey (text); \ - ((struct ExtendedEventDescriptor *)descr)->Tag = DESCR_EXTENDED_EVENT; \ - ((struct ExtendedEventDescriptor *)descr)->DescriptorNumber = dnum; \ - ((struct ExtendedEventDescriptor *)descr)->LastDescriptorNumber = ldnb; \ - ((struct ExtendedEventDescriptor *)descr)->LanguageCode[0] = lc1; \ - ((struct ExtendedEventDescriptor *)descr)->LanguageCode[1] = lc2; \ - ((struct ExtendedEventDescriptor *)descr)->LanguageCode[2] = lc3; \ - ((struct ExtendedEventDescriptor *)descr)->LanguageCode[3] = '\0'; \ - ((struct ExtendedEventDescriptor *)descr)->Items = xNewList (NULL); \ - } while (0) - -struct ExtendedEventItem { - struct NODE Node; /* Node enthält ItemDescription Text */ - char *Text; -}; - -#define CreateExtendedEventItem(itm, dtxt, text) \ - do \ - { \ - xCreateNode (itm, NULL); \ - ((struct NODE *)itm)->Name = dtxt; \ - ((struct NODE *)itm)->HashKey = xHashKey (dtxt); \ - itm->Text = text; \ - } while (0) - -#define AddExtendedEventItem(desc, dtxt, text) \ - do \ - { \ - struct ExtendedEventItem *item; \ - \ - CreateExtendedEventItem(item, dtxt, text); \ - xAddTail (((struct ExtendedEventDescriptor *)desc)->Items, item); \ - } while (0) - - -/* ParentalRatingDescriptor */ - -struct ParentalRatingDescriptor { - struct NODE Node; - unsigned short Tag; - struct LIST *Ratings; -}; - -#define CreateParentalRatingDescriptor(descr) \ - do \ - { \ - xCreateNode (((struct ParentalRatingDescriptor *)descr), NULL); \ - ((struct ParentalRatingDescriptor *)descr)->Tag = DESCR_PARENTAL_RATING; \ - ((struct ParentalRatingDescriptor *)descr)->Ratings = xNewList (NULL); \ - } while (0) - -struct ParentalRating { - struct NODE Node; /* Node enthält ItemDescription Text */ - char LanguageCode[4]; - char Rating; -}; - -#define CreateParentalRating(rat, lc1, lc2, lc3, val) \ - do \ - { \ - xCreateNode (rat, NULL); \ - rat->LanguageCode[0] = lc1; \ - rat->LanguageCode[1] = lc2; \ - rat->LanguageCode[2] = lc3; \ - rat->LanguageCode[3] = '\0'; \ - rat->Rating = val; \ - } while (0) - -#define AddParentalRating(desc, lc1, lc2, lc3, val) \ - do \ - { \ - struct ParentalRating *item; \ - \ - CreateParentalRating(item, lc1, lc2, lc3, val); \ - xAddTail (((struct ParentalRatingDescriptor *)desc)->Ratings, item); \ - } while (0) - -/* ShortEventDescriptor */ - -struct ShortEventDescriptor { - struct NODE Node; /* Node enthält EventName */ - unsigned short Tag; - char LanguageCode[4]; - char *Text; -}; - -#define CreateShortEventDescriptor(descr, name, lc1, lc2, lc3, text) \ - do \ - { \ - xCreateNode (((struct ShortEventDescriptor *)descr), NULL); \ - ((struct NODE *)descr)->Name = name; \ - ((struct NODE *)descr)->HashKey = xHashKey (name); \ - ((struct ShortEventDescriptor *)descr)->Tag = DESCR_SHORT_EVENT; \ - ((struct ShortEventDescriptor *)descr)->LanguageCode[0] = lc1; \ - ((struct ShortEventDescriptor *)descr)->LanguageCode[1] = lc2; \ - ((struct ShortEventDescriptor *)descr)->LanguageCode[2] = lc3; \ - ((struct ShortEventDescriptor *)descr)->LanguageCode[3] = '\0'; \ - ((struct ShortEventDescriptor *)descr)->Text = text; \ - } while (0) - - -/* TeletextDescriptor */ - -struct TeletextDescriptor { - struct NODE Node; - unsigned short Tag; - struct LIST *Items; -}; - -#define CreateTeletextDescriptor(descr) \ - do \ - { \ - xCreateNode (((struct TeletextDescriptor *)descr), NULL); \ - ((struct TeletextDescriptor *)descr)->Tag = DESCR_TELETEXT; \ - ((struct TeletextDescriptor *)descr)->Items = xNewList (NULL); \ - } while (0) - -#define TELETEXT_TYPE_INITIAL_PAGE 0x0001 -#define TELETEXT_TYPE_SUBTITLE_PAGE 0x0002 -#define TELETEXT_TYPE_ADDITIONAL_INFO 0x0003 -#define TELETEXT_TYPE_PROGRAM_SCHEDULE 0x0004 -#define TELETEXT_TYPE_HEARING_IMPAIRED 0x0005 - -struct TeletextItem { - struct NODE Node; - char LanguageCode[4]; - unsigned short Type; - unsigned short MagazineNumber; - unsigned short PageNumber; -}; - -#define CreateTeletextItem(itm, tp, mg, pg, lc1, lc2, lc3) \ - do \ - { \ - xCreateNode (itm, NULL); \ - ((struct TeletextItem *)itm)->Type = (tp); \ - ((struct TeletextItem *)itm)->MagazineNumber = (mg); \ - ((struct TeletextItem *)itm)->PageNumber = (mg); \ - ((struct TeletextItem *)itm)->LanguageCode[0] = (lc1); \ - ((struct TeletextItem *)itm)->LanguageCode[1] = (lc2); \ - ((struct TeletextItem *)itm)->LanguageCode[2] = (lc3); \ - ((struct TeletextItem *)itm)->LanguageCode[3] = '\0'; \ - } while (0) - -#define AddTeletextItem(desc, tp, mg, pg, lc1, lc2, lc3) \ - do \ - { \ - struct TeletextItem *item; \ - \ - CreateTeletextItem(item, tp, mg, pg, lc1, lc2, lc3); \ - xAddTail (((struct TeletextDescriptor *)desc)->Items, item); \ - } while (0) - - -/* SubtitlingDescriptor */ - -struct SubtitlingDescriptor { - struct NODE Node; - unsigned short Tag; - struct LIST *Items; -}; - -#define CreateSubtitlingDescriptor(descr) \ - do \ - { \ - xCreateNode (((struct SubtitlingDescriptor *)descr), NULL); \ - ((struct SubtitlingDescriptor *)descr)->Tag = DESCR_SUBTITLING; \ - ((struct SubtitlingDescriptor *)descr)->Items = xNewList (NULL); \ - } while (0) - -struct SubtitlingItem { - struct NODE Node; - char LanguageCode[4]; - unsigned char Type; - unsigned short CompositionPageId; - unsigned short AncillaryPageId; -}; - -#define CreateSubtitlingItem(itm, tp, cp, ap, lc1, lc2, lc3) \ - do \ - { \ - xCreateNode (itm, NULL); \ - ((struct SubtitlingItem *)itm)->Type = (tp); \ - ((struct SubtitlingItem *)itm)->CompositionPageId = (cp); \ - ((struct SubtitlingItem *)itm)->AncillaryPageId = (ap); \ - ((struct SubtitlingItem *)itm)->LanguageCode[0] = (lc1); \ - ((struct SubtitlingItem *)itm)->LanguageCode[1] = (lc2); \ - ((struct SubtitlingItem *)itm)->LanguageCode[2] = (lc3); \ - ((struct SubtitlingItem *)itm)->LanguageCode[3] = '\0'; \ - } while (0) - -#define AddSubtitlingItem(desc, tp, cp, ap, lc1, lc2, lc3) \ - do \ - { \ - struct SubtitlingItem *item; \ - \ - CreateSubtitlingItem(item, tp, cp, ap, lc1, lc2, lc3); \ - xAddTail (((struct SubtitlingDescriptor *)desc)->Items, item); \ - } while (0) - -/* SatelliteDeliverySystemDescriptor */ - -struct SatelliteDeliverySystemDescriptor { - struct NODE Node; - unsigned short Tag; - long Frequency; - short OrbitalPosition; - short Modulation; - char Polarization; - long SymbolRate; - char FEC; -}; - -#define CreateSatelliteDeliverySystemDescriptor(descr, freq, orb, mod, polar, sr, fec) \ - do \ - { \ - xCreateNode (((struct SatelliteDeliverySystemDescriptor *)descr), NULL); \ - ((struct SatelliteDeliverySystemDescriptor *)descr)->Tag = DESCR_SAT_DEL_SYS; \ - ((struct SatelliteDeliverySystemDescriptor *)descr)->Frequency = freq; \ - ((struct SatelliteDeliverySystemDescriptor *)descr)->OrbitalPosition = orb; \ - ((struct SatelliteDeliverySystemDescriptor *)descr)->Modulation = mod; \ - ((struct SatelliteDeliverySystemDescriptor *)descr)->Polarization = polar; \ - ((struct SatelliteDeliverySystemDescriptor *)descr)->SymbolRate = sr; \ - ((struct SatelliteDeliverySystemDescriptor *)descr)->FEC = fec; \ - } while (0) - -/* CableDeliverySystemDescriptor */ - -struct CableDeliverySystemDescriptor { - struct NODE Node; - unsigned short Tag; - long Frequency; - long SymbolRate; - char FECouter; - char FECinner; - char Modulation; -}; - -#define CreateCableDeliverySystemDescriptor(descr, freq, sr, fec_o, fec_i, mod) \ - do \ - { \ - xCreateNode (((struct CableDeliverySystemDescriptor *)descr), NULL); \ - ((struct CableDeliverySystemDescriptor *)descr)->Tag = DESCR_CABLE_DEL_SYS; \ - ((struct CableDeliverySystemDescriptor *)descr)->Frequency = freq; \ - ((struct CableDeliverySystemDescriptor *)descr)->SymbolRate = sr; \ - ((struct CableDeliverySystemDescriptor *)descr)->FECouter = fec_o; \ - ((struct CableDeliverySystemDescriptor *)descr)->FECinner = fec_i; \ - ((struct CableDeliverySystemDescriptor *)descr)->Modulation = mod; \ - } while (0) - -/* TerrestrialDeliverySystemDescriptor */ - -struct TerrestrialDeliverySystemDescriptor { - struct NODE Node; - unsigned short Tag; - long Frequency; - char Bandwidth; - char Constellation; - char Hierarchy; - char CodeRateHP; - char CodeRateLP; - char GuardInterval; - char TransmissionMode; - char OtherFrequencyFlag; -}; - -#define CreateTerrestrialDeliverySystemDescriptor(descr, freq, bw, cst, hr, crh, crl, gi, tm, ofm) \ - do \ - { \ - xCreateNode (((struct CableDeliverySystemDescriptor *)descr), NULL); \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->Tag = DESCR_TERR_DEL_SYS; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->Frequency = freq; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->Bandwidth = bw; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->Constellation = cst; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->Hierarchy = hr; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->CodeRateHP = crh; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->CodeRateLP = crl; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->GuardInterval = gi; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->TransmissionMode = tm; \ - ((struct TerrestrialDeliverySystemDescriptor *)descr)->OtherFrequencyFlag = ofm; \ - } while (0) - -/* ServiceListDescriptor */ - -struct ServiceListDescriptor { - struct NODE Node; - unsigned short Tag; - struct LIST *ServiceList; -}; - -#define CreateServiceListDescriptor(descr) \ - do \ - { \ - xCreateNode (((struct ServiceListDescriptor *)descr), NULL); \ - ((struct ServiceListDescriptor *)descr)->Tag = DESCR_SERVICE_LIST; \ - ((struct ServiceListDescriptor *)descr)->ServiceList = xNewList(NULL); \ - } while (0) - -struct ServiceListEntry { - struct NODE Node; - int ServiceID; - unsigned short ServiceType; -}; - -#define AddServiceListEntry(descr, id, typ) \ - do \ - { \ - struct ServiceListEntry *newent; \ - \ - xCreateNode (newent, NULL); \ - newent->ServiceID = id; \ - newent->ServiceType = typ; \ - xAddTail (((struct ServiceListDescriptor *)descr)->ServiceList, newent); \ - } while (0) - -/* LocalTimeOffsetDescriptor */ - -struct LocalTimeOffsetDescriptor { - struct NODE Node; - unsigned short Tag; - struct LIST *LocalTimeOffsets; -}; - -#define CreateLocalTimeOffsetDescriptor(descr) \ - do \ - { \ - xCreateNode (((struct LocalTimeOffsetDescriptor *)descr), NULL); \ - ((struct LocalTimeOffsetDescriptor *)descr)->Tag = DESCR_LOCAL_TIME_OFF; \ - ((struct LocalTimeOffsetDescriptor *)descr)->LocalTimeOffsets = xNewList(NULL); \ - } while (0) - -struct LocalTimeOffsetEntry { - struct NODE Node; - char CountryCode[4]; - char RegionID; - time_t CurrentOffset; - time_t ChangeTime; - time_t NextOffset; -}; - -#define CreateLocalTimeOffsetEntry(newent, code1, code2, code3, reg, co, ct, no) \ - do \ - { \ - xCreateNode (newent, NULL); \ - newent->CountryCode[0] = code1; \ - newent->CountryCode[1] = code2; \ - newent->CountryCode[2] = code3; \ - newent->CountryCode[3] = '\0'; \ - newent->RegionID = reg; \ - newent->CurrentOffset = co; \ - newent->ChangeTime = ct; \ - newent->NextOffset = no; \ - } while (0) - -#define AddLocalTimeOffsetEntry(descr, code1, code2, code3, reg, co, ct, no) \ - do \ - { \ - struct LocalTimeOffsetEntry *newent; \ - \ - xCreateNode (newent, NULL); \ - newent->CountryCode[0] = code1; \ - newent->CountryCode[1] = code2; \ - newent->CountryCode[2] = code3; \ - newent->CountryCode[3] = '\0'; \ - newent->RegionID = reg; \ - newent->CurrentOffset = co; \ - newent->ChangeTime = ct; \ - newent->NextOffset = no; \ - xAddTail (((struct LocalTimeOffsetDescriptor *)descr)->LocalTimeOffsets, newent); \ - } while (0) - -#define timezonecmp(ptoe,cod,reg) \ - (strncmp(ptoe->CountryCode, cod, 3) || (ptoe->RegionID != reg)) - - - -/* Prototypes */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* si_parser.c */ - -struct LIST *siParsePAT (u_char *); -struct LIST *siParseCAT (u_char *); -struct Pid *siParsePMT (u_char *); -struct LIST *siParseSDT (u_char *); -struct LIST *siParseNIT (u_char *); -struct LIST *siParseEIT (u_char *); -time_t siParseTDT (u_char *); -struct Tot *siParseTOT (u_char *); -void siParseDescriptors (struct LIST *, u_char *, int, u_char); -void siParseDescriptor (struct LIST *, u_char *); -char *siGetDescriptorText (u_char *, int); -char *siGetDescriptorName (u_char *, int); - -/* si_debug_services.c */ - -void siDebugServices (struct LIST *); -void siDebugService (struct Service *); -void siDebugEvents (char *, struct LIST *); -void siDebugPrograms (char *, struct LIST *); -void siDebugProgram (struct Program *); -void siDebugPids (char *, struct LIST *); -void siDebugDescriptors (char *, struct LIST *); -void siDebugEitServices (struct LIST *); -void siDebugEitEvents (char *, struct LIST *); -void siDumpDescriptor (void *); -void siDumpSection (void *); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/libdtv/libsi/include/si_tables.h b/libdtv/libsi/include/si_tables.h deleted file mode 100644 index f5e659ca..00000000 --- a/libdtv/libsi/include/si_tables.h +++ /dev/null @@ -1,1403 +0,0 @@ -////////////////////////////////////////////////////////////// -/// /// -/// si_tables.h: definitions for data structures of the /// -/// incoming SI data stream /// -/// /// -////////////////////////////////////////////////////////////// - -// $Revision: 1.4 $ -// $Date: 2003/04/12 11:27:31 $ -// $Author: hakenes $ -// -// (C) 2001-03 Rolf Hakenes <hakenes@hippomi.de>, under the -// GNU GPL with contribution of Oleg Assovski, -// www.satmania.com -// -// libsi is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or (at your option) -// any later version. -// -// libsi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You may have received a copy of the GNU General Public License -// along with libsi; see the file COPYING. If not, write to the -// Free Software Foundation, Inc., 59 Temple Place - Suite 330, -// Boston, MA 02111-1307, USA. - -#define HILO(x) (x##_hi << 8 | x##_lo) - -#define MjdToEpochTime(x) (((x##_hi << 8 | x##_lo)-40587)*86400) -#define BcdTimeToSeconds(x) ((3600 * ((10*((x##_h & 0xF0)>>4)) + (x##_h & 0xF))) + \ - (60 * ((10*((x##_m & 0xF0)>>4)) + (x##_m & 0xF))) + \ - ((10*((x##_s & 0xF0)>>4)) + (x##_s & 0xF))) -#define BcdTimeToMinutes(x) ((60 * ((10*((x##_h & 0xF0)>>4)) + (x##_h & 0xF))) + \ - (((10*((x##_m & 0xF0)>>4)) + (x##_m & 0xF)))) -#define BcdCharToInt(x) (10*((x & 0xF0)>>4) + (x & 0xF)) -#define CheckBcdChar(x) ((((x & 0xF0)>>4) <= 9) && \ - ((x & 0x0F) <= 9)) -#define CheckBcdSignedChar(x) ((((x & 0xF0)>>4) >= 0) && (((x & 0xF0)>>4) <= 9) && \ - ((x & 0x0F) >= 0) && ((x & 0x0F) <= 9)) - -#define TableHasMoreSections(x) (((pat_t *)(x))->last_section_number > ((pat_t *)(x))->section_number) -#define GetTableId(x) ((pat_t *)(x))->table_id -#define GetSectionNumber(x) ((pat_t *)(x))->section_number -#define GetLastSectionNumber(x) ((pat_t *)(x))->last_section_number -#define GetServiceId(x) (((eit_t *)(x))->service_id_hi << 8) | ((eit_t *)(x))->service_id_lo -#define GetSegmentLastSectionNumber(x) ((eit_t *)(x))->segment_last_section_number -#define GetLastTableId(x) ((eit_t *)(x))->segment_last_table_id -#define GetSectionLength(x) HILO(((pat_t *)(x))->section_length) - -/* - * - * ETSI ISO/IEC 13818-1 specifies SI which is referred to as PSI. The PSI - * data provides information to enable automatic configuration of the - * receiver to demultiplex and decode the various streams of programs - * within the multiplex. The PSI data is structured as four types of table. - * The tables are transmitted in sections. - * - * 1) Program Association Table (PAT): - * - * - for each service in the multiplex, the PAT indicates the location - * (the Packet Identifier (PID) values of the Transport Stream (TS) - * packets) of the corresponding Program Map Table (PMT). - * It also gives the location of the Network Information Table (NIT). - * - */ - -#define PAT_LEN 8 - -typedef struct { - u_char table_id :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char section_syntax_indicator :1; - u_char dummy :1; // has to be 0 - u_char :2; - u_char section_length_hi :4; -#else - u_char section_length_hi :4; - u_char :2; - u_char dummy :1; // has to be 0 - u_char section_syntax_indicator :1; -#endif - u_char section_length_lo :8; - u_char transport_stream_id_hi :8; - u_char transport_stream_id_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :2; - u_char version_number :5; - u_char current_next_indicator :1; -#else - u_char current_next_indicator :1; - u_char version_number :5; - u_char :2; -#endif - u_char section_number :8; - u_char last_section_number :8; -} pat_t; - -#define PAT_PROG_LEN 4 - -typedef struct { - u_char program_number_hi :8; - u_char program_number_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :3; - u_char network_pid_hi :5; -#else - u_char network_pid_hi :5; - u_char :3; -#endif - u_char network_pid_lo :8; - /* or program_map_pid (if prog_num=0)*/ -} pat_prog_t; - -/* - * - * 2) Conditional Access Table (CAT): - * - * - the CAT provides information on the CA systems used in the - * multiplex; the information is private and dependent on the CA - * system, but includes the location of the EMM stream, when - * applicable. - * - */ -#define CAT_LEN 8 - -typedef struct { - u_char table_id :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char section_syntax_indicator :1; - u_char dummy :1; // has to be 0 - u_char :2; - u_char section_length_hi :4; -#else - u_char section_length_hi :4; - u_char :2; - u_char dummy :1; // has to be 0 - u_char section_syntax_indicator :1; -#endif - u_char section_length_lo :8; - u_char reserved_1 :8; - u_char reserved_2 :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :2; - u_char version_number :5; - u_char current_next_indicator :1; -#else - u_char current_next_indicator :1; - u_char version_number :5; - u_char :2; -#endif - u_char section_number :8; - u_char last_section_number :8; -} cat_t; - -/* - * - * 3) Program Map Table (PMT): - * - * - the PMT identifies and indicates the locations of the streams that - * make up each service, and the location of the Program Clock - * Reference fields for a service. - * - */ - -#define PMT_LEN 12 - -typedef struct { - u_char table_id :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char section_syntax_indicator :1; - u_char dummy :1; // has to be 0 - u_char :2; - u_char section_length_hi :4; -#else - u_char section_length_hi :4; - u_char :2; - u_char dummy :1; // has to be 0 - u_char section_syntax_indicator :1; -#endif - u_char section_length_lo :8; - u_char program_number_hi :8; - u_char program_number_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :2; - u_char version_number :5; - u_char current_next_indicator :1; -#else - u_char current_next_indicator :1; - u_char version_number :5; - u_char :2; -#endif - u_char section_number :8; - u_char last_section_number :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :3; - u_char PCR_PID_hi :5; -#else - u_char PCR_PID_hi :5; - u_char :3; -#endif - u_char PCR_PID_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :4; - u_char program_info_length_hi :4; -#else - u_char program_info_length_hi :4; - u_char :4; -#endif - u_char program_info_length_lo :8; - //descriptors -} pmt_t; - -#define PMT_INFO_LEN 5 - -typedef struct { - u_char stream_type :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :3; - u_char elementary_PID_hi :5; -#else - u_char elementary_PID_hi :5; - u_char :3; -#endif - u_char elementary_PID_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :4; - u_char ES_info_length_hi :4; -#else - u_char ES_info_length_hi :4; - u_char :4; -#endif - u_char ES_info_length_lo :8; - // descriptors -} pmt_info_t; - -/* - * - * 4) Network Information Table (NIT): - * - * - the NIT is intended to provide information about the physical - * network. The syntax and semantics of the NIT are defined in - * ETSI EN 300 468. - * - */ - -#define NIT_LEN 10 - -typedef struct { - u_char table_id :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char section_syntax_indicator :1; - u_char :3; - u_char section_length_hi :4; -#else - u_char section_length_hi :4; - u_char :3; - u_char section_syntax_indicator :1; -#endif - u_char section_length_lo :8; - u_char network_id_hi :8; - u_char network_id_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :2; - u_char version_number :5; - u_char current_next_indicator :1; -#else - u_char current_next_indicator :1; - u_char version_number :5; - u_char :2; -#endif - u_char section_number :8; - u_char last_section_number :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :4; - u_char network_descriptor_length_hi :4; -#else - u_char network_descriptor_length_hi :4; - u_char :4; -#endif - u_char network_descriptor_length_lo :8; - /* descriptors */ -} nit_t; - -#define SIZE_NIT_MID 2 - -typedef struct { // after descriptors -#if BYTE_ORDER == BIG_ENDIAN - u_char :4; - u_char transport_stream_loop_length_hi :4; -#else - u_char transport_stream_loop_length_hi :4; - u_char :4; -#endif - u_char transport_stream_loop_length_lo :8; -} nit_mid_t; - -#define SIZE_NIT_END 4 - -struct nit_end_struct { - long CRC; -}; - -#define NIT_TS_LEN 6 - -typedef struct { - u_char transport_stream_id_hi :8; - u_char transport_stream_id_lo :8; - u_char original_network_id_hi :8; - u_char original_network_id_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :4; - u_char transport_descriptors_length_hi :4; -#else - u_char transport_descriptors_length_hi :4; - u_char :4; -#endif - u_char transport_descriptors_length_lo :8; - /* descriptors */ -} nit_ts_t; - -/* - * - * In addition to the PSI, data is needed to provide identification of - * services and events for the user. In contrast with the PAT, CAT, and - * PMT of the PSI, which give information only for the multiplex in which - * they are contained (the actual multiplex), the additional information - * defined within the present document can also provide information on - * services and events carried by different multiplexes, and even on other - * networks. This data is structured as nine tables: - * - * 1) Bouquet Association Table (BAT): - * - * - the BAT provides information regarding bouquets. As well as giving - * the name of the bouquet, it provides a list of services for each - * bouquet. - * - */ -/* SEE NIT (It has the same structure but has different allowed descriptors) */ -/* - * - * 2) Service Description Table (SDT): - * - * - the SDT contains data describing the services in the system e.g. - * names of services, the service provider, etc. - * - */ - -#define SDT_LEN 11 - -typedef struct { - u_char table_id :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char section_syntax_indicator :1; - u_char :3; - u_char section_length_hi :4; -#else - u_char section_length_hi :4; - u_char :3; - u_char section_syntax_indicator :1; -#endif - u_char section_length_lo :8; - u_char transport_stream_id_hi :8; - u_char transport_stream_id_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :2; - u_char version_number :5; - u_char current_next_indicator :1; -#else - u_char current_next_indicator :1; - u_char version_number :5; - u_char :2; -#endif - u_char section_number :8; - u_char last_section_number :8; - u_char original_network_id_hi :8; - u_char original_network_id_lo :8; - u_char :8; -} sdt_t; - -#define GetSDTTransportStreamId(x) (HILO(((sdt_t *) x)->transport_stream_id)) -#define GetSDTOriginalNetworkId(x) (HILO(((sdt_t *) x)->original_network_id)) - -#define SDT_DESCR_LEN 5 - -typedef struct { - u_char service_id_hi :8; - u_char service_id_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :6; - u_char eit_schedule_flag :1; - u_char eit_present_following_flag :1; - u_char running_status :3; - u_char free_ca_mode :1; - u_char descriptors_loop_length_hi :4; -#else - u_char eit_present_following_flag :1; - u_char eit_schedule_flag :1; - u_char :6; - u_char descriptors_loop_length_hi :4; - u_char free_ca_mode :1; - u_char running_status :3; -#endif - u_char descriptors_loop_length_lo :8; -} sdt_descr_t; - -/* - * - * 3) Event Information Table (EIT): - * - * - the EIT contains data concerning events or programmes such as event - * name, start time, duration, etc.; - the use of different descriptors - * allows the transmission of different kinds of event information e.g. - * for different service types. - * - */ - -#define EIT_LEN 14 - -typedef struct { - u_char table_id :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char section_syntax_indicator :1; - u_char :3; - u_char section_length_hi :4; -#else - u_char section_length_hi :4; - u_char :3; - u_char section_syntax_indicator :1; -#endif - u_char section_length_lo :8; - u_char service_id_hi :8; - u_char service_id_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :2; - u_char version_number :5; - u_char current_next_indicator :1; -#else - u_char current_next_indicator :1; - u_char version_number :5; - u_char :2; -#endif - u_char section_number :8; - u_char last_section_number :8; - u_char transport_stream_id_hi :8; - u_char transport_stream_id_lo :8; - u_char original_network_id_hi :8; - u_char original_network_id_lo :8; - u_char segment_last_section_number :8; - u_char segment_last_table_id :8; -} eit_t; - -#define EIT_EVENT_LEN 12 - -typedef struct { - u_char event_id_hi :8; - u_char event_id_lo :8; - u_char mjd_hi :8; - u_char mjd_lo :8; - u_char start_time_h :8; - u_char start_time_m :8; - u_char start_time_s :8; - u_char duration_h :8; - u_char duration_m :8; - u_char duration_s :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char running_status :3; - u_char free_ca_mode :1; - u_char descriptors_loop_length_hi :4; -#else - u_char descriptors_loop_length_hi :4; - u_char free_ca_mode :1; - u_char running_status :3; -#endif - u_char descriptors_loop_length_lo :8; -} eit_event_t; - -/* - * - * 4) Running Status Table (RST): - * - * - the RST gives the status of an event (running/not running). The RST - * updates this information and allows timely automatic switching to - * events. - * - */ - /* TO BE DONE */ -/* - * - * 5) Time and Date Table (TDT): - * - * - the TDT gives information relating to the present time and date. - * This information is given in a separate table due to the frequent - * updating of this information. - * - */ - -#define TDT_LEN 8 - -typedef struct { - u_char table_id :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char section_syntax_indicator :1; - u_char :3; - u_char section_length_hi :4; -#else - u_char section_length_hi :4; - u_char :3; - u_char section_syntax_indicator :1; -#endif - u_char section_length_lo :8; - u_char utc_mjd_hi :8; - u_char utc_mjd_lo :8; - u_char utc_time_h :8; - u_char utc_time_m :8; - u_char utc_time_s :8; -} tdt_t; - -/* - * - * 6) Time Offset Table (TOT): - * - * - the TOT gives information relating to the present time and date and - * local time offset. This information is given in a separate table due - * to the frequent updating of the time information. - * - */ -#define TOT_LEN 10 - -typedef struct { - u_char table_id :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char section_syntax_indicator :1; - u_char :3; - u_char section_length_hi :4; -#else - u_char section_length_hi :4; - u_char :3; - u_char section_syntax_indicator :1; -#endif - u_char section_length_lo :8; - u_char utc_mjd_hi :8; - u_char utc_mjd_lo :8; - u_char utc_time_h :8; - u_char utc_time_m :8; - u_char utc_time_s :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char :4; - u_char descriptors_loop_length_hi :4; -#else - u_char descriptors_loop_length_hi :4; - u_char :4; -#endif - u_char descriptors_loop_length_lo :8; -} tot_t; - - -/* - * - * 7) Stuffing Table (ST): - * - * - the ST is used to invalidate existing sections, for example at - * delivery system boundaries. - * - */ - /* TO BE DONE */ -/* - * - * 8) Selection Information Table (SIT): - * - * - the SIT is used only in "partial" (i.e. recorded) bitstreams. It - * carries a summary of the SI information required to describe the - * streams in the partial bitstream. - * - */ - /* TO BE DONE */ -/* - * - * 9) Discontinuity Information Table (DIT): - * - * - the DIT is used only in "partial" (i.e. recorded) bitstreams. - * It is inserted where the SI information in the partial bitstream may - * be discontinuous. Where applicable the use of descriptors allows a - * flexible approach to the organization of the tables and allows for - * future compatible extensions. - * - */ - /* TO BE DONE */ -/* - * - * The following describes the different descriptors that can be used within - * the SI. - * - * The following semantics apply to all the descriptors defined in this - * subclause: - * - * descriptor_tag: The descriptor tag is an 8-bit field which identifies - * each descriptor. Those values with MPEG-2 normative - * meaning are described in ISO/IEC 13818-1. The values of - * descriptor_tag are defined in 'libsi.h' - * descriptor_length: The descriptor length is an 8-bit field specifying the - * total number of bytes of the data portion of the - * descriptor following the byte defining the value of - * this field. - * - */ - -#define DESCR_GEN_LEN 2 -typedef struct descr_gen_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_gen_t; -#define CastGenericDescriptor(x) ((descr_gen_t *)(x)) - -#define GetDescriptorTag(x) (((descr_gen_t *) x)->descriptor_tag) -#define GetDescriptorLength(x) (((descr_gen_t *) x)->descriptor_length+DESCR_GEN_LEN) - - -/* 0x09 ca_descriptor */ - -#define DESCR_CA_LEN 6 -typedef struct descr_ca_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char CA_type_hi :8; - u_char CA_type_lo :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char reserved :3; - u_char CA_PID_hi :5; -#else - u_char CA_PID_hi :5; - u_char reserved :3; -#endif - u_char CA_PID_lo :8; -} descr_ca_t; -#define CastCaDescriptor(x) ((descr_ca_t *)(x)) - -/* 0x0A iso_639_language_descriptor */ - -#define DESCR_ISO_639_LANGUAGE_LEN 5 -typedef struct descr_iso_639_language_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char lang_code1 :8; - u_char lang_code2 :8; - u_char lang_code3 :8; -} descr_iso_639_language_t; -#define CastIso639LanguageDescriptor(x) ((descr_iso_639_language_t *)(x)) - - -/* 0x40 network_name_descriptor */ - -#define DESCR_NETWORK_NAME_LEN 2 -typedef struct descr_network_name_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_network_name_t; -#define CastNetworkNameDescriptor(x) ((descr_network_name_t *)(x)) - - -/* 0x41 service_list_descriptor */ - -#define DESCR_SERVICE_LIST_LEN 2 -typedef struct descr_service_list_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_service_list_t; -#define CastServiceListDescriptor(x) ((descr_service_list_t *)(x)) - -#define DESCR_SERVICE_LIST_LOOP_LEN 3 -typedef struct descr_service_list_loop_struct { - u_char service_id_hi :8; - u_char service_id_lo :8; - u_char service_type :8; -} descr_service_list_loop_t; -#define CastServiceListDescriptorLoop(x) ((descr_service_list_loop_t *)(x)) - - -/* 0x42 stuffing_descriptor */ - -#define DESCR_STUFFING_LEN XX -typedef struct descr_stuffing_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_stuffing_t; -#define CastStuffingDescriptor(x) ((descr_stuffing_t *)(x)) - - -/* 0x43 satellite_delivery_system_descriptor */ - -#define DESCR_SATELLITE_DELIVERY_SYSTEM_LEN 13 -typedef struct descr_satellite_delivery_system_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char frequency1 :8; - u_char frequency2 :8; - u_char frequency3 :8; - u_char frequency4 :8; - u_char orbital_position1 :8; - u_char orbital_position2 :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char west_east_flag :1; - u_char polarization :2; - u_char modulation :5; -#else - u_char modulation :5; - u_char polarization :2; - u_char west_east_flag :1; -#endif - u_char symbol_rate1 :8; - u_char symbol_rate2 :8; - u_char symbol_rate3 :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char symbol_rate4 :4; - u_char fec_inner :4; -#else - u_char fec_inner :4; - u_char symbol_rate4 :4; -#endif -} descr_satellite_delivery_system_t; -#define CastSatelliteDeliverySystemDescriptor(x) ((descr_satellite_delivery_system_t *)(x)) - - -/* 0x44 cable_delivery_system_descriptor */ - -#define DESCR_CABLE_DELIVERY_SYSTEM_LEN 13 -typedef struct descr_cable_delivery_system_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char frequency1 :8; - u_char frequency2 :8; - u_char frequency3 :8; - u_char frequency4 :8; - u_char reserved1 :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char reserved2 :4; - u_char fec_outer :4; -#else - u_char fec_outer :4; - u_char reserved2 :4; -#endif - u_char modulation :8; - u_char symbol_rate1 :8; - u_char symbol_rate2 :8; - u_char symbol_rate3 :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char symbol_rate4 :4; - u_char fec_inner :4; -#else - u_char fec_inner :4; - u_char symbol_rate4 :4; -#endif -} descr_cable_delivery_system_t; -#define CastCableDeliverySystemDescriptor(x) ((descr_cable_delivery_system_t *)(x)) - - -/* 0x45 vbi_data_descriptor */ - -#define DESCR_VBI_DATA_LEN XX -typedef struct descr_vbi_data_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_vbi_data_t; -#define CastVbiDataDescriptor(x) ((descr_vbi_data_t *)(x)) - - -/* 0x46 vbi_teletext_descriptor */ - -#define DESCR_VBI_TELETEXT_LEN XX -typedef struct descr_vbi_teletext_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_vbi_teletext_t; -#define CastVbiDescriptor(x) ((descr_vbi_teletext_t *)(x)) - - -/* 0x47 bouquet_name_descriptor */ - -#define DESCR_BOUQUET_NAME_LEN 2 -typedef struct descr_bouquet_name_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_bouquet_name_t; -#define CastBouquetNameDescriptor(x) ((descr_bouquet_name_t *)(x)) - - -/* 0x48 service_descriptor */ - -#define DESCR_SERVICE_LEN 4 -typedef struct descr_service_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char service_type :8; - u_char provider_name_length :8; -} descr_service_t; -#define CastServiceDescriptor(x) ((descr_service_t *)(x)) - - -/* 0x49 country_availability_descriptor */ - -#define DESCR_COUNTRY_AVAILABILITY_LEN 3 -typedef struct descr_country_availability_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char country_availability_flag :1; - u_char reserved :7; -#else - u_char reserved :7; - u_char country_availability_flag :1; -#endif -} descr_country_availability_t; -#define CastCountryAvailabilityDescriptor(x) ((descr_country_availability_t *)(x)) - - -/* 0x4A linkage_descriptor */ - -#define DESCR_LINKAGE_LEN 9 -typedef struct descr_linkage_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char transport_stream_id_hi :8; - u_char transport_stream_id_lo :8; - u_char original_network_id_hi :8; - u_char original_network_id_lo :8; - u_char service_id_hi :8; - u_char service_id_lo :8; - u_char linkage_type :8; -} descr_linkage_t; -#define CastLinkageDescriptor(x) ((descr_linkage_t *)(x)) - - -/* 0x4B nvod_reference_descriptor */ - -#define DESCR_NVOD_REFERENCE_LEN 2 -typedef struct descr_nvod_reference_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_nvod_reference_t; -#define CastNvodReferenceDescriptor(x) ((descr_nvod_reference_t *)(x)) - -#define ITEM_NVOD_REFERENCE_LEN 6 -typedef struct item_nvod_reference_struct { - u_char transport_stream_id_hi :8; - u_char transport_stream_id_lo :8; - u_char original_network_id_hi :8; - u_char original_network_id_lo :8; - u_char service_id_hi :8; - u_char service_id_lo :8; -} item_nvod_reference_t; -#define CastNvodReferenceItem(x) ((item_nvod_reference_t *)(x)) - - - -/* 0x4C time_shifted_service_descriptor */ - -#define DESCR_TIME_SHIFTED_SERVICE_LEN 4 -typedef struct descr_time_shifted_service_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char reference_service_id_hi :8; - u_char reference_service_id_lo :8; -} descr_time_shifted_service_t; -#define CastTimeShiftedServiceDescriptor(x) ((descr_time_shifted_service_t *)(x)) - - -/* 0x4D short_event_descriptor */ - -#define DESCR_SHORT_EVENT_LEN 6 -typedef struct descr_short_event_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char lang_code1 :8; - u_char lang_code2 :8; - u_char lang_code3 :8; - u_char event_name_length :8; -} descr_short_event_t; -#define CastShortEventDescriptor(x) ((descr_short_event_t *)(x)) - - -/* 0x4E extended_event_descriptor */ - -#define DESCR_EXTENDED_EVENT_LEN 7 -typedef struct descr_extended_event_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -#if BYTE_ORDER == BIG_ENDIAN - u_char descriptor_number :4; - u_char last_descriptor_number :4; -#else - u_char last_descriptor_number :4; - u_char descriptor_number :4; -#endif - u_char lang_code1 :8; - u_char lang_code2 :8; - u_char lang_code3 :8; - u_char length_of_items :8; -} descr_extended_event_t; -#define CastExtendedEventDescriptor(x) ((descr_extended_event_t *)(x)) - -#define ITEM_EXTENDED_EVENT_LEN 1 -typedef struct item_extended_event_struct { - u_char item_description_length :8; -} item_extended_event_t; -#define CastExtendedEventItem(x) ((item_extended_event_t *)(x)) - - -/* 0x4F time_shifted_event_descriptor */ - -#define DESCR_TIME_SHIFTED_EVENT_LEN 6 -typedef struct descr_time_shifted_event_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char reference_service_id_hi :8; - u_char reference_service_id_lo :8; - u_char reference_event_id_hi :8; - u_char reference_event_id_lo :8; -} descr_time_shifted_event_t; -#define CastTimeShiftedEventDescriptor(x) ((descr_time_shifted_event_t *)(x)) - - -/* 0x50 component_descriptor */ - -#define DESCR_COMPONENT_LEN 8 -typedef struct descr_component_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char reserved :4; - u_char stream_content :4; -#else - u_char stream_content :4; - u_char reserved :4; -#endif - u_char component_type :8; - u_char component_tag :8; - u_char lang_code1 :8; - u_char lang_code2 :8; - u_char lang_code3 :8; -} descr_component_t; -#define CastComponentDescriptor(x) ((descr_component_t *)(x)) - - -/* 0x51 mosaic_descriptor */ - -#define DESCR_MOSAIC_LEN XX -typedef struct descr_mosaic_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_mosaic_t; -#define CastMosaicDescriptor(x) ((descr_mosaic_t *)(x)) - - -/* 0x52 stream_identifier_descriptor */ - -#define DESCR_STREAM_IDENTIFIER_LEN 3 -typedef struct descr_stream_identifier_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char component_tag :8; -} descr_stream_identifier_t; -#define CastStreamIdentifierDescriptor(x) ((descr_stream_identifier_t *)(x)) - - -/* 0x53 ca_identifier_descriptor */ - -#define DESCR_CA_IDENTIFIER_LEN 2 -typedef struct descr_ca_identifier_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_ca_identifier_t; -#define CastCaIdentifierDescriptor(x) ((descr_ca_identifier_t *)(x)) - - -/* 0x54 content_descriptor */ - -#define DESCR_CONTENT_LEN 2 -typedef struct descr_content_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_content_t; -#define CastContentDescriptor(x) ((descr_content_t *)(x)) - -typedef struct nibble_content_struct { -#if BYTE_ORDER == BIG_ENDIAN - u_char content_nibble_level_1 :4; - u_char content_nibble_level_2 :4; - u_char user_nibble_1 :4; - u_char user_nibble_2 :4; -#else - u_char user_nibble_2 :4; - u_char user_nibble_1 :4; - u_char content_nibble_level_2 :4; - u_char content_nibble_level_1 :4; -#endif -} nibble_content_t; -#define CastContentNibble(x) ((nibble_content_t *)(x)) - - -/* 0x55 parental_rating_descriptor */ - -#define DESCR_PARENTAL_RATING_LEN 2 -typedef struct descr_parental_rating_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_parental_rating_t; -#define CastParentalRatingDescriptor(x) ((descr_parental_rating_t *)(x)) - -#define PARENTAL_RATING_LEN 4 -typedef struct parental_rating_struct { - u_char lang_code1 :8; - u_char lang_code2 :8; - u_char lang_code3 :8; - u_char rating :8; -} parental_rating_t; -#define CastParentalRating(x) ((parental_rating_t *)(x)) - - -/* 0x56 teletext_descriptor */ - -#define DESCR_TELETEXT_LEN 2 -typedef struct descr_teletext_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_teletext_t; -#define CastTeletextDescriptor(x) ((descr_teletext_t *)(x)) - -#define ITEM_TELETEXT_LEN 5 -typedef struct item_teletext_struct { - u_char lang_code1 :8; - u_char lang_code2 :8; - u_char lang_code3 :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char type :5; - u_char magazine_number :3; -#else - u_char magazine_number :3; - u_char type :5; -#endif - u_char page_number :8; -} item_teletext_t; -#define CastTeletextItem(x) ((item_teletext_t *)(x)) - - -/* 0x57 telephone_descriptor */ - -#define DESCR_TELEPHONE_LEN XX -typedef struct descr_telephone_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_telephone_t; -#define CastTelephoneDescriptor(x) ((descr_telephone_t *)(x)) - - -/* 0x58 local_time_offset_descriptor */ - -#define DESCR_LOCAL_TIME_OFFSET_LEN 2 -typedef struct descr_local_time_offset_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_local_time_offset_t; -#define CastLocalTimeOffsetDescriptor(x) ((descr_local_time_offset_t *)(x)) - -#define LOCAL_TIME_OFFSET_ENTRY_LEN 15 -typedef struct local_time_offset_entry_struct { - u_char country_code1 :8; - u_char country_code2 :8; - u_char country_code3 :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char country_region_id :6; - u_char :1; - u_char local_time_offset_polarity :1; -#else - u_char local_time_offset_polarity :1; - u_char :1; - u_char country_region_id :6; -#endif - u_char local_time_offset_h :8; - u_char local_time_offset_m :8; - u_char time_of_change_mjd_hi :8; - u_char time_of_change_mjd_lo :8; - u_char time_of_change_time_h :8; - u_char time_of_change_time_m :8; - u_char time_of_change_time_s :8; - u_char next_time_offset_h :8; - u_char next_time_offset_m :8; -} local_time_offset_entry_t ; -#define CastLocalTimeOffsetEntry(x) ((local_time_offset_entry_t *)(x)) - - -/* 0x59 subtitling_descriptor */ - -#define DESCR_SUBTITLING_LEN 2 -typedef struct descr_subtitling_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -} descr_subtitling_t; -#define CastSubtitlingDescriptor(x) ((descr_subtitling_t *)(x)) - -#define ITEM_SUBTITLING_LEN 8 -typedef struct item_subtitling_struct { - u_char lang_code1 :8; - u_char lang_code2 :8; - u_char lang_code3 :8; - u_char subtitling_type :8; - u_char composition_page_id_hi :8; - u_char composition_page_id_lo :8; - u_char ancillary_page_id_hi :8; - u_char ancillary_page_id_lo :8; -} item_subtitling_t; -#define CastSubtitlingItem(x) ((item_subtitling_t *)(x)) - - -/* 0x5A terrestrial_delivery_system_descriptor */ - -#define DESCR_TERRESTRIAL_DELIVERY_SYSTEM_LEN XX -typedef struct descr_terrestrial_delivery_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char frequency1 :8; - u_char frequency2 :8; - u_char frequency3 :8; - u_char frequency4 :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char bandwidth :3; - u_char reserved1 :5; -#else - u_char reserved1 :5; - u_char bandwidth :3; -#endif -#if BYTE_ORDER == BIG_ENDIAN - u_char constellation :2; - u_char hierarchy :3; - u_char code_rate_HP :3; -#else - u_char code_rate_HP :3; - u_char hierarchy :3; - u_char constellation :2; -#endif -#if BYTE_ORDER == BIG_ENDIAN - u_char code_rate_LP :3; - u_char guard_interval :2; - u_char transmission_mode :2; - u_char other_frequency_flag :1; -#else - u_char other_frequency_flag :1; - u_char transmission_mode :2; - u_char guard_interval :2; - u_char code_rate_LP :3; -#endif - u_char reserver2 :8; - u_char reserver3 :8; - u_char reserver4 :8; - u_char reserver5 :8; -} descr_terrestrial_delivery_system_t; -#define CastTerrestrialDeliverySystemDescriptor(x) ((descr_terrestrial_delivery_system_t *)(x)) - - -/* 0x5B multilingual_network_name_descriptor */ - -#define DESCR_MULTILINGUAL_NETWORK_NAME_LEN XX -typedef struct descr_multilingual_network_name_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_multilingual_network_name_t; -#define CastMultilingualNetworkNameDescriptor(x) ((descr_multilingual_network_name_t *)(x)) - - -/* 0x5C multilingual_bouquet_name_descriptor */ - -#define DESCR_MULTILINGUAL_BOUQUET_NAME_LEN XX -typedef struct descr_multilingual_bouquet_name_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_multilingual_bouquet_name_t; -#define CastMultilingualBouquetNameDescriptor(x) ((descr_multilingual_bouquet_name_t *)(x)) - - -/* 0x5D multilingual_service_name_descriptor */ - -#define DESCR_MULTILINGUAL_SERVICE_NAME_LEN XX -typedef struct descr_multilingual_service_name_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_multilingual_service_name_t; -#define CastMultilingualServiceNameDescriptor(x) ((descr_multilingual_service_name_t *)(x)) - - -/* 0x5E multilingual_component_descriptor */ - -#define DESCR_MULTILINGUAL_COMPONENT_LEN XX -typedef struct descr_multilingual_component_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_multilingual_component_t; -#define CastMultilingualComponentDescriptor(x) ((descr_multilingual_component_t *)(x)) - - -/* 0x5F private_data_specifier_descriptor */ - -#define DESCR_PRIVATE_DATA_SPECIFIER_LEN XX -typedef struct descr_private_data_specifier_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_private_data_specifier_t; -#define CastPrivateDataSpecifierDescriptor(x) ((descr_private_data_specifier_t *)(x)) - - -/* 0x60 service_move_descriptor */ - -#define DESCR_SERVICE_MOVE_LEN XX -typedef struct descr_service_move_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_service_move_t; -#define CastServiceMoveDescriptor(x) ((descr_service_move_t *)(x)) - - -/* 0x61 short_smoothing_buffer_descriptor */ - -#define DESCR_SHORT_SMOOTHING_BUFFER_LEN XX -typedef struct descr_short_smoothing_buffer_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_short_smoothing_buffer_t; -#define CastShortSmoothingBufferDescriptor(x) ((descr_short_smoothing_buffer_t *)(x)) - - -/* 0x62 frequency_list_descriptor */ - -#define DESCR_FREQUENCY_LIST_LEN XX -typedef struct descr_frequency_list_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_frequency_list_t; -#define CastFrequencyListDescriptor(x) ((descr_frequency_list_t *)(x)) - - -/* 0x63 partial_transport_stream_descriptor */ - -#define DESCR_PARTIAL_TRANSPORT_STREAM_LEN XX -typedef struct descr_partial_transport_stream_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_partial_transport_stream_t; -#define CastPartialDescriptor(x) ((descr_partial_transport_stream_t *)(x)) - - -/* 0x64 data_broadcast_descriptor */ - -#define DESCR_DATA_BROADCAST_LEN XX -typedef struct descr_data_broadcast_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_data_broadcast_t; -#define CastDataBroadcastDescriptor(x) ((descr_data_broadcast_t *)(x)) - - -/* 0x65 ca_system_descriptor */ - -#define DESCR_CA_SYSTEM_LEN XX -typedef struct descr_ca_system_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_ca_system_t; -#define CastCaSystemDescriptor(x) ((descr_ca_system_t *)(x)) - - -/* 0x66 data_broadcast_id_descriptor */ - -#define DESCR_DATA_BROADCAST_ID_LEN XX -typedef struct descr_data_broadcast_id_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_data_broadcast_id_t; -#define CastDataBroadcastIdDescriptor(x) ((descr_data_broadcast_id_t *)(x)) - - -/* 0x67 transport_stream_descriptor */ - -#define DESCR_TRANSPORT_STREAM_LEN XX -typedef struct descr_transport_stream_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_transport_stream_t; -#define CastTransportStreamDescriptor(x) ((descr_transport_stream_t *)(x)) - - -/* 0x68 dsng_descriptor */ - -#define DESCR_DSNG_LEN XX -typedef struct descr_dsng_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_dsng_t; -#define CastDsngDescriptor(x) ((descr_dsng_t *)(x)) - - -/* 0x69 pdc_descriptor */ - -#define DESCR_PDC_LEN XX -typedef struct descr_pdc_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_pdc_t; -#define CastPdcDescriptor(x) ((descr_pdc_t *)(x)) - - -/* 0x6A ac3_descriptor */ - -#define DESCR_AC3_LEN 3 -typedef struct descr_ac3_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; -#if BYTE_ORDER == BIG_ENDIAN - u_char ac3_type_flag :1; - u_char bsid_flag :1; - u_char mainid_flag :1; - u_char asvc_flag :1; - u_char reserved :4; -#else - u_char reserved :4; - u_char asvc_flag :1; - u_char mainid_flag :1; - u_char bsid_flag :1; - u_char ac3_type_flag :1; -#endif - u_char ac3_type :8; - u_char bsid :8; - u_char mainid :8; - u_char asvc :8; -} descr_ac3_t; -#define CastAc3Descriptor(x) ((descr_ac3_t *)(x)) - - -/* 0x6B ancillary_data_descriptor */ - -#define DESCR_ANCILLARY_DATA_LEN 3 -typedef struct descr_ancillary_data_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - u_char ancillary_data_identifier :8; -} descr_ancillary_data_t; -#define CastAncillaryDataDescriptor(x) ((descr_ancillary_data_t *)(x)) - - -/* 0x6C cell_list_descriptor */ - -#define DESCR_CELL_LIST_LEN XX -typedef struct descr_cell_list_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_cell_list_t; -#define CastCellListDescriptor(x) ((descr_cell_list_t *)(x)) - - -/* 0x6D cell_frequency_link_descriptor */ - -#define DESCR_CELL_FREQUENCY_LINK_LEN XX -typedef struct descr_cell_frequency_link_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_cell_frequency_link_t; -#define CastCellFrequencyLinkDescriptor(x) ((descr_cell_frequency_link_t *)(x)) - - -/* 0x6E announcement_support_descriptor */ - -#define DESCR_ANNOUNCEMENT_SUPPORT_LEN XX -typedef struct descr_announcement_support_struct { - u_char descriptor_tag :8; - u_char descriptor_length :8; - /* TBD */ -} descr_announcement_support_t; -#define CastAnnouncementSupportDescriptor(x) ((descr_announcement_support_t *)(x)) - - diff --git a/libdtv/libsi/si_debug_services.c b/libdtv/libsi/si_debug_services.c deleted file mode 100644 index 1ff74000..00000000 --- a/libdtv/libsi/si_debug_services.c +++ /dev/null @@ -1,674 +0,0 @@ -////////////////////////////////////////////////////////////// -/// /// -/// si_debug_services.c: debugging functions for libsi /// -/// /// -////////////////////////////////////////////////////////////// - -// $Revision: 1.5 $ -// $Date: 2003/02/04 18:45:35 $ -// $Author: hakenes $ -// -// (C) 2001-03 Rolf Hakenes <hakenes@hippomi.de>, under the -// GNU GPL with contribution of Oleg Assovski, -// www.satmania.com -// -// libsi is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or (at your option) -// any later version. -// -// libsi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You may have received a copy of the GNU General Public License -// along with libsi; see the file COPYING. If not, write to the -// Free Software Foundation, Inc., 59 Temple Place - Suite 330, -// Boston, MA 02111-1307, USA. - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <time.h> - -#include "../liblx/liblx.h" -#include "libsi.h" -#include "si_tables.h" -#include "si_debug_services.h" - - -void siDebugServices (struct LIST *Services) -{ - struct Service *Service; - - if (!Services) return; - - xForeach (Services, Service) - { - printf ("Service\n=======\n"); - printf (" ServiceID: %d\n", Service->ServiceID); - printf (" TransportStreamID: %d\n", Service->TransportStreamID); - printf (" OriginalNetworkID: %d\n", Service->OriginalNetworkID); - printf (" SdtVersion: %d\n", Service->SdtVersion); - printf (" Status: "); - if (GetScheduleFlag (Service->Status)) - printf ("SCHEDULE_INFO "); - if (GetPresentFollowing(Service->Status)) - printf ("PRESENT_FOLLOWING "); - switch (GetRunningStatus (Service->Status)) - { - case RUNNING_STATUS_NOT_RUNNING: - printf ("RUNNING_STATUS_NOT_RUNNING\n"); - break; - - case RUNNING_STATUS_AWAITING: - printf ("RUNNING_STATUS_AWAITING\n"); - break; - - case RUNNING_STATUS_PAUSING: - printf ("RUNNING_STATUS_PAUSING\n"); - break; - - case RUNNING_STATUS_RUNNING: - printf ("RUNNING_STATUS_RUNNING\n"); - break; - } - siDebugDescriptors (" ", Service->Descriptors); - siDebugEvents (" ", Service->Events); - } - return; -} - -void siDebugService (struct Service *Service) -{ - if (!Service) return; - - printf ("Service\r\n=======\r\n"); - printf (" ServiceID: %d\r\n", Service->ServiceID); - printf (" TransportStreamID: %d\r\n", Service->TransportStreamID); - printf (" OriginalNetworkID: %d\r\n", Service->OriginalNetworkID); - printf (" SdtVersion: %d\r\n", Service->SdtVersion); - printf (" Status: "); - if (GetScheduleFlag (Service->Status)) - printf ("SCHEDULE_INFO "); - if (GetPresentFollowing(Service->Status)) - printf ("PRESENT_FOLLOWING "); - switch (GetRunningStatus (Service->Status)) - { - case RUNNING_STATUS_NOT_RUNNING: - printf ("RUNNING_STATUS_NOT_RUNNING\r\n"); - break; - - case RUNNING_STATUS_AWAITING: - printf ("RUNNING_STATUS_AWAITING\r\n"); - break; - - case RUNNING_STATUS_PAUSING: - printf ("RUNNING_STATUS_PAUSING\r\n"); - break; - - case RUNNING_STATUS_RUNNING: - printf ("RUNNING_STATUS_RUNNING\r\n"); - break; - } - siDebugDescriptors ("\r ", Service->Descriptors); - siDebugEvents ("\r ", Service->Events); - - return; -} - -void siDebugEvents (char *Prepend, struct LIST *EventList) -{ - struct Event *Event; - char NewPrepend[32]; - - if (!EventList) return; - - xForeach (EventList, Event) - { - printf ("%sEvent\n%s=====\n", Prepend, Prepend); - printf ("%s EventID: %d\n", Prepend, Event->EventID); - printf ("%s ServiceID: %d\n", Prepend, Event->ServiceID); - printf ("%s TransportStreamID: %d\n", Prepend, Event->TransportStreamID); - printf ("%s OriginalNetworkID: %d\n", Prepend, Event->OriginalNetworkID); - printf ("%s EitVersion: %d\n", Prepend, Event->EitVersion); - printf ("%s StartTime: %s", Prepend, ctime (&Event->StartTime)); - printf ("%s Duration: %d Minuten\n", Prepend, Event->Duration/60); - printf ("%s Status: "); - switch (GetRunningStatus (Event->Status)) - { - case RUNNING_STATUS_NOT_RUNNING: - printf ("RUNNING_STATUS_NOT_RUNNING\n"); - break; - - case RUNNING_STATUS_AWAITING: - printf ("RUNNING_STATUS_AWAITING\n"); - break; - - case RUNNING_STATUS_PAUSING: - printf ("RUNNING_STATUS_PAUSING\n"); - break; - - case RUNNING_STATUS_RUNNING: - printf ("RUNNING_STATUS_RUNNING\n"); - break; - } - sprintf (NewPrepend, "%s ", Prepend); - siDebugDescriptors (NewPrepend, Event->Descriptors); - } - return; -} - - -void siDebugPrograms (char *Prepend, struct LIST *ProgramList) -{ - struct Program *Program; - char NewPrepend[32]; - - if (!ProgramList) return; - - xForeach (ProgramList, Program) - { - printf ("%sProgram\n%s=======\n", Prepend, Prepend); - printf ("%s ProgramID: %d\n", Prepend, Program->ProgramID); - printf ("%s TransportStreamID: %d\n", Prepend, Program->TransportStreamID); - printf ("%s NetworkPID: %d\n", Prepend, Program->NetworkPID); - printf ("%s PatVersion: %d\n", Prepend, Program->PatVersion); - - sprintf (NewPrepend, "%s ", Prepend); - siDebugPids (NewPrepend, Program->Pids); - } - return; -} - -void siDebugProgram (struct Program *Program) -{ - if (!Program) return; - - printf ("Program\r\n=======\r\n"); - printf (" ProgramID: %d\r\n", Program->ProgramID); - printf (" TransportStreamID: %d\r\n", Program->TransportStreamID); - printf (" NetworkPID: %d\r\n", Program->NetworkPID); - printf (" PatVersion: %d\r\n", Program->PatVersion); - - siDebugPids ("\r ", Program->Pids); - - return; -} - -void siDebugPids (char *Prepend, struct LIST *PidList) -{ - struct Pid *Pid; - struct PidInfo *PidInfo; - char NewPrepend[32]; - int index; - - if (!PidList) return; - - xForeach (PidList, Pid) - { - printf ("%sPid\n%s===\n", Prepend, Prepend); - printf ("%s ProgramID: %d\n", Prepend, Pid->ProgramID); - printf ("%s PcrPid: %d\n", Prepend, Pid->PcrPID); - printf ("%s PmtVersion: %d\n", Prepend, Pid->PmtVersion); - sprintf (NewPrepend, "%s ", Prepend); - siDebugDescriptors (NewPrepend, Pid->Descriptors); - - xForeach (Pid->InfoList, PidInfo) - { - printf ("%s PidInfo\n%s =======\n", Prepend, Prepend); - index = PidInfo->StreamType; - if (index > 0x0F && index <= 0x7F) index = 0x0E; - if (index >= 0x80) index = 0x0F; - printf ("%s StreamType: %s\n", Prepend, StreamTypes[index]); - printf ("%s ElementaryPid: %d\n", Prepend, PidInfo->ElementaryPid); - - sprintf (NewPrepend, "%s ", Prepend); - siDebugDescriptors (NewPrepend, PidInfo->Descriptors); - } - } - return; -} - - -void siDebugDescriptors (char *Prepend, struct LIST *Descriptors) -{ - struct Descriptor *Descriptor; - int i; - - xForeach (Descriptors, Descriptor) - { - switch (DescriptorTag (Descriptor)) - { - case DESCR_ANCILLARY_DATA: - printf ("%sDescriptor: Ancillary Data\n", Prepend); - printf ("%s Identifier: ", Prepend); - if (((struct AncillaryDataDescriptor *)Descriptor)-> - Identifier & ANCILLARY_DATA_DVD_VIDEO) - printf ("DVD-Video Ancillary Data "); - if (((struct AncillaryDataDescriptor *)Descriptor)-> - Identifier & ANCILLARY_DATA_EXTENDED) - printf ("Extended Ancillary Data "); - if (((struct AncillaryDataDescriptor *)Descriptor)-> - Identifier & ANCILLARY_DATA_SWITCHING) - printf ("Announcement Switching Data "); - if (((struct AncillaryDataDescriptor *)Descriptor)-> - Identifier & ANCILLARY_DATA_DAB) - printf ("DAB Ancillary Data "); - if (((struct AncillaryDataDescriptor *)Descriptor)-> - Identifier & ANCILLARY_DATA_SCALE_FACTOR) - printf ("Scale Factor Error Check (ScF-CRC) "); - printf ("\n"); - break; - - case DESCR_NW_NAME: - printf ("%sDescriptor: Network Name\n", Prepend); - printf ("%s Name: %s\n", Prepend, xName (Descriptor)); - break; - - case DESCR_BOUQUET_NAME: - printf ("%sDescriptor: Bouquet Name\n", Prepend); - printf ("%s Name: %s\n", Prepend, xName (Descriptor)); - break; - - case DESCR_COMPONENT: - printf ("%sDescriptor: Component\n", Prepend); - printf ("%s Text: %s\n", Prepend, xName (Descriptor)); - printf ("%s Content/Type: ", Prepend); - for (i = 0; i < COMPONENT_TYPE_NUMBER; i++) - if ((((struct ComponentDescriptor *)Descriptor)-> - StreamContent == ComponentTypes[i].Content) && - (((struct ComponentDescriptor *)Descriptor)-> - ComponentType == ComponentTypes[i].Type)) - { printf ("%s\n", ComponentTypes[i].Description); break; } - if (i == COMPONENT_TYPE_NUMBER) { printf ("unbekannt\n"); } - printf ("%s ComponentTag: 0x%02x\n", Prepend, - ((struct ComponentDescriptor *)Descriptor)->ComponentTag); - printf ("%s LanguageCode: %s\n", Prepend, - ((struct ComponentDescriptor *)Descriptor)->LanguageCode); - break; - - case DESCR_SERVICE: - printf ("%sDescriptor: Service\n", Prepend); - printf ("%s Name: %s\n", Prepend, xName (Descriptor)); - printf ("%s ServiceType: ", Prepend); - for (i = 0; i < SERVICE_TYPE_NUMBER; i++) - if ((((struct ServiceDescriptor *)Descriptor)-> - ServiceType == ServiceTypes[i].Type)) - { printf ("%s\n", ServiceTypes[i].Description); break; } - if (i == SERVICE_TYPE_NUMBER) { printf ("unbekannt\n"); } - printf ("%s ServiceProvider: %s\n", Prepend, - ((struct ServiceDescriptor *)Descriptor)->ServiceProvider); - break; - - case DESCR_COUNTRY_AVAIL: - printf ("%sDescriptor: Country Availability\n", Prepend); - printf ("%s Type: %s\n", Prepend, (((struct CountryAvailabilityDescriptor *)Descriptor)-> - AvailibilityFlag == COUNTRIES_ARE_AVAILABLE) ? "countries are available" : - "countries are unavailable"); - { - char *cptr = ((struct CountryAvailabilityDescriptor *)Descriptor)->CountryCodes; int j; - for (j = 0; j < ((struct CountryAvailabilityDescriptor *)Descriptor)->Amount; j++) - { printf ("%s Country: %s\n", Prepend, cptr); cptr += 4; } - } - break; - - case DESCR_SHORT_EVENT: - printf ("%sDescriptor: Short Event\n", Prepend); - printf ("%s Name: %s\n", Prepend, xName (Descriptor)); - printf ("%s LanguageCode: %s\n", Prepend, - ((struct ShortEventDescriptor *)Descriptor)->LanguageCode); - printf ("%s Text: %s\n", Prepend, - ((struct ShortEventDescriptor *)Descriptor)->Text); - break; - - case DESCR_EXTENDED_EVENT: - { - struct ExtendedEventItem *Item; - - printf ("%sDescriptor: Extended Event\n", Prepend); - printf ("%s Text: %s\n", Prepend, xName (Descriptor)); - printf ("%s DescriptorNumber: %d\n", Prepend, - ((struct ExtendedEventDescriptor *)Descriptor)->DescriptorNumber); - printf ("%s LastDescriptorNumber: %d\n", Prepend, - ((struct ExtendedEventDescriptor *)Descriptor)->LastDescriptorNumber); - printf ("%s LanguageCode: %s\n", Prepend, - ((struct ExtendedEventDescriptor *)Descriptor)->LanguageCode); - xForeach (((struct ExtendedEventDescriptor *)Descriptor)->Items, Item) - { - printf ("%s Item:\n", Prepend); - printf ("%s Description: %s\n", Prepend, xName(Item)); - printf ("%s Text: %s\n", Prepend, Item->Text); - } - } - break; - - case DESCR_CA_IDENT: - printf ("%sDescriptor: Conditional Access Identity\n", Prepend); - { - int j,k; - for (j = 0; j < ((struct CaIdentifierDescriptor *)Descriptor)->Amount; j++) - { - printf ("%s SystemID: 0x%04x", Prepend, GetCaIdentifierID (Descriptor, j)); - k = GetCaIdentifierID (Descriptor, j) >> 8; - if (k < 0 || k > MAX_CA_IDENT) printf (" (unknown)\n"); - else printf (" (%s)\n", CaIdents[k]); - } - } - break; - - case DESCR_CA: - { - int j,k; - - printf ("%sDescriptor: Conditional Access\n", Prepend); - printf ("%s CA type: 0x%04x", Prepend, (((struct CaDescriptor *)Descriptor)->CA_type)); - k = (((struct CaDescriptor *)Descriptor)->CA_type) >> 8; - if (k < 0 || k > MAX_CA_IDENT) printf (" (unknown)\n"); - else printf (" (%s)\n", CaIdents[k]); - printf ("%s CA PID: %d\n", Prepend, (((struct CaDescriptor *)Descriptor)->CA_PID)); - printf ("%s ProviderID: 0x%04X\n", Prepend, (((struct CaDescriptor *)Descriptor)->ProviderID)); - if (((struct CaDescriptor *)Descriptor)->DataLength > 0) - { - printf ("%s CA data:", Prepend); - for (j = 0; j < ((struct CaDescriptor *)Descriptor)->DataLength; j++) - printf (" 0x%02x", GetCaData (Descriptor, j)); - printf ("\n"); - } - } - break; - - case DESCR_CONTENT: - printf ("%sDescriptor: Content\n", Prepend); - { - int j; - for (j = 0; j < ((struct ContentDescriptor *)Descriptor)->Amount; j++) - { - printf ("%s Content: ", Prepend); - for (i = 0; i < CONTENT_TYPE_NUMBER; i++) - if ((GetContentContentNibble1(Descriptor, j) == ContentTypes[i].Nibble1) && - (GetContentContentNibble2(Descriptor, j) == ContentTypes[i].Nibble2)) - { printf ("%s\n", ContentTypes[i].Description); break; } - if (i == CONTENT_TYPE_NUMBER) { printf ("unbekannt\n"); } - printf ("%s User-Nibble 1: 0x%1x\n", Prepend, GetContentUserNibble1(Descriptor, j)); - printf ("%s User-Nibble 2: 0x%1x\n", Prepend, GetContentUserNibble2(Descriptor, j)); - } - } - break; - - case DESCR_PARENTAL_RATING: - { - struct ParentalRating *Rating; - - printf ("%sDescriptor: Parental Rating\n", Prepend); - xForeach (((struct ParentalRatingDescriptor *)Descriptor)->Ratings, Rating) - { - printf ("%s Rating:\n"); - printf ("%s LanguageCode: %s\n", Rating->LanguageCode); - printf ("%s Rating: "); - if (Rating->Rating == 0) printf ("(undefined)\n"); - else { if (Rating->Rating <= 0x10) printf ("minimum age is %d\n", Rating->Rating + 3); - else printf ("(rating is provider defined)\n"); } - } - } - break; - - case DESCR_NVOD_REF: - { - struct NvodReferenceItem *Item; - - printf ("%sDescriptor: NVOD Reference\n", Prepend); - xForeach (((struct NvodReferenceDescriptor *)Descriptor)->Items, Item) - { - printf ("%s Item:\n", Prepend); - printf ("%s ServiceID: %d\n", Prepend, Item->ServiceID); - printf ("%s TransportStreamID: %d\n", Prepend, Item->TransportStreamID); - printf ("%s OriginalNetworkID: %d\n", Prepend, Item->OriginalNetworkID); - } - } - break; - - case DESCR_TIME_SHIFTED_SERVICE: - printf ("%sDescriptor: Time Shifted Service\n", Prepend); - printf ("%s ReferenceServiceID: %d\n", Prepend, - ((struct TimeShiftedServiceDescriptor *) - Descriptor)->ReferenceServiceID); - break; - - case DESCR_TIME_SHIFTED_EVENT: - printf ("%sDescriptor: Time Shifted Event\n", Prepend); - printf ("%s ReferenceServiceID: %d\n", Prepend, - ((struct TimeShiftedEventDescriptor *) - Descriptor)->ReferenceServiceID); - printf ("%s ReferenceEventID: %d\n", Prepend, - ((struct TimeShiftedEventDescriptor *) - Descriptor)->ReferenceEventID); - break; - - case DESCR_ISO_639_LANGUAGE: - printf ("%sDescriptor: ISO 639 Language\n", Prepend); - printf ("%s LanguageCode: %s\n", Prepend, - ((struct Iso639LanguageDescriptor *)Descriptor)->LanguageCode); - break; - - case DESCR_STREAM_ID: - printf ("%sDescriptor: Stream Identifier\n", Prepend); - printf ("%s ComponentTag: %d\n", Prepend, - ((struct StreamIdentifierDescriptor *)Descriptor)->ComponentTag); - break; - - case DESCR_LINKAGE: - printf ("%sDescriptor: Linkage\n", Prepend); - printf ("%s TransportStreamID: %d\n", Prepend, - ((struct LinkageDescriptor *)Descriptor)->TransportStreamID); - printf ("%s OriginalNetworkID: %d\n", Prepend, - ((struct LinkageDescriptor *)Descriptor)->OriginalNetworkID); - printf ("%s ServiceID: %d\n", Prepend, - ((struct LinkageDescriptor *)Descriptor)->ServiceID); - printf ("%s LinkageType: %d\n", Prepend, - ((struct LinkageDescriptor *)Descriptor)->LinkageType); - if (((struct LinkageDescriptor *)Descriptor)->PrivateDataLength) - { - int j; - printf ("%s PrivateData: ", Prepend); - for (j = 0; j < ((struct LinkageDescriptor *) - Descriptor)->PrivateDataLength; j++) - printf ("0x%02X ", ((struct LinkageDescriptor *) - Descriptor)->PrivateData[j]); - printf ("\n"); - } - break; - - case DESCR_TELETEXT: - { - struct TeletextItem *Item; - - printf ("%sDescriptor: Teletext\n", Prepend); - xForeach (((struct TeletextDescriptor *)Descriptor)->Items, Item) - { - printf ("%s Item:\n"); - printf ("%s LanguageCode: %s\n", Prepend, Item->LanguageCode); - printf ("%s Type: ", Prepend); - switch (Item->Type) - { - case 0x01: printf ("initial Teletext page\n"); break; - case 0x02: printf ("Teletext subtitle page\n"); break; - case 0x03: printf ("additional information page\n"); break; - case 0x04: printf ("programme schedule page\n"); break; - case 0x05: printf ("Teletext subtitle page "); - printf ("for hearing impaired people\n"); break; - default: printf ("reserved for future use\n"); break; - } - printf ("%s MagazineNumber: %x\n", Prepend, Item->MagazineNumber); - printf ("%s PageNumber: %x\n", Prepend, Item->PageNumber); - } - } - break; - - case DESCR_SUBTITLING: - { - struct SubtitlingItem *Item; - - printf ("%sDescriptor: Subtitling\n", Prepend); - xForeach (((struct SubtitlingDescriptor *)Descriptor)->Items, Item) - { - printf ("%s Item:\n"); - printf ("%s LanguageCode: %s\n", Prepend, Item->LanguageCode); - printf ("%s Type: ", Prepend); - for (i = 0; i < COMPONENT_TYPE_NUMBER; i++) - if ((0x03 == ComponentTypes[i].Content) && - (Item->Type == ComponentTypes[i].Type)) - { printf ("%s\n", ComponentTypes[i].Description); break; } - printf ("%s CompositionPageId: %x\n", Prepend, Item->CompositionPageId); - printf ("%s AncillaryPageId: %x\n", Prepend, Item->AncillaryPageId); - } - } - break; - - case DESCR_SAT_DEL_SYS: - { - struct SatelliteDeliverySystemDescriptor *sds = - (struct SatelliteDeliverySystemDescriptor *)Descriptor; - - printf ("%sDescriptor: Satellite Delivery System\n", Prepend); - printf ("%s Frequency: %ld\n", Prepend, sds->Frequency); - printf ("%s OrbitalPosition: %d\n", Prepend, sds->OrbitalPosition); - printf ("%s Polarization: %c\n", Prepend, sds->Polarization); - printf ("%s Modulation: %c\n", Prepend, sds->Modulation); - printf ("%s SymbolRate: %ld\n", Prepend, sds->SymbolRate); - printf ("%s FEC: %c\n", Prepend, sds->FEC); - } - break; - - case DESCR_CABLE_DEL_SYS: - { - struct CableDeliverySystemDescriptor *cds = - (struct CableDeliverySystemDescriptor *)Descriptor; - - printf ("%sDescriptor: Cable Delivery System\n", Prepend); - printf ("%s Frequency: %ld\n", Prepend, cds->Frequency); - printf ("%s SymbolRate: %ld\n", Prepend, cds->SymbolRate); - printf ("%s FEC outer: %d\n", Prepend, cds->FECouter); - printf ("%s FEC inner: %d\n", Prepend, cds->FECinner); - printf ("%s Modulation: %d\n", Prepend, cds->Modulation); - } - break; - - case DESCR_TERR_DEL_SYS: - { - struct TerrestrialDeliverySystemDescriptor *tds = - (struct TerrestrialDeliverySystemDescriptor *)Descriptor; - - printf ("%sDescriptor: Terrestrial Delivery System\n", Prepend); - printf ("%s Frequency: %ld\n", Prepend, tds->Frequency); - printf ("%s Bandwidth: %d\n", Prepend, tds->Bandwidth); - printf ("%s Constellation: %d\n", Prepend, tds->Constellation); - printf ("%s Hierarchy: %d\n", Prepend, tds->Hierarchy); - printf ("%s CodeRateHP: %d\n", Prepend, tds->CodeRateHP); - printf ("%s CodeRateLP: %d\n", Prepend, tds->CodeRateLP); - printf ("%s GuardInterval: %d\n", Prepend, tds->GuardInterval); - printf ("%s TransmissionMode: %d\n", Prepend, tds->TransmissionMode); - printf ("%s OtherFrequencyFlag: %d\n", Prepend, tds->OtherFrequencyFlag); - } - break; - - case DESCR_SERVICE_LIST: - { - struct ServiceListEntry *Entry; - - printf ("%sDescriptor: Service List\n", Prepend); - xForeach (((struct ServiceListDescriptor *)Descriptor)->ServiceList, Entry) - { - printf ("%s Entry:\n"); - printf ("%s ServiceID: %d\n", Prepend, Entry->ServiceID); - printf ("%s ServiceType: %04x\n", Prepend, Entry->ServiceType); - } - } - break; - - case DESCR_LOCAL_TIME_OFF: - { - struct LocalTimeOffsetEntry *Offset; - - printf ("%sDescriptor: Local Time Offset\n", Prepend); - xForeach (((struct LocalTimeOffsetDescriptor *)Descriptor)->LocalTimeOffsets, Offset) - { - printf ("%s Offset:\n"); - printf ("%s CountryCode: %s\n", Offset->CountryCode); - printf ("%s RegionID: %c\n", Offset->RegionID); - printf ("%s CurrentOffset: %ld\n", Offset->CurrentOffset); - printf ("%s ChangeTime: %ld\n", Offset->ChangeTime); - printf ("%s NextOffset: %ld\n", Offset->NextOffset); - } - } - break; - - case DESCR_STUFFING: - case DESCR_VBI_DATA: - case DESCR_VBI_TELETEXT: - case DESCR_MOSAIC: - case DESCR_TELEPHONE: - case DESCR_ML_NW_NAME: - case DESCR_ML_BQ_NAME: - case DESCR_ML_SERVICE_NAME: - case DESCR_ML_COMPONENT: - case DESCR_PRIV_DATA_SPEC: - case DESCR_SERVICE_MOVE: - case DESCR_SHORT_SMOOTH_BUF: - case DESCR_FREQUENCY_LIST: - case DESCR_PARTIAL_TP_STREAM: - case DESCR_DATA_BROADCAST: - case DESCR_CA_SYSTEM: - case DESCR_DATA_BROADCAST_ID: - case DESCR_TRANSPORT_STREAM: - case DESCR_DSNG: - case DESCR_PDC: - case DESCR_AC3: - case DESCR_CELL_LIST: - case DESCR_CELL_FREQ_LINK: - case DESCR_ANNOUNCEMENT_SUPPORT: - default: - printf ("%sDescriptor: %02x (noch nicht unterstützt)\n", Prepend, DescriptorTag (Descriptor)); - break; - } - } - return; -} - -void siDumpDescriptor (void * Descriptor) -{ - int Length, i; - unsigned char *ptr; - - Length = GetDescriptorLength (Descriptor); - for (i = 0, ptr = (char*) Descriptor; i < Length; i++) { - if ((i % 8) == 0) - printf ("\n"); - printf ("0x%02X ", (unsigned int) ptr[i]); - } - printf ( "\n"); -} - -void siDumpSection (void *Section) -{ - int Length, i; - unsigned char *ptr; - char str[9]; - - Length = GetSectionLength (Section) + 3; - for (i = 0, ptr = (unsigned char*) Section, memset (str, 0, 9); i < Length; i++) { - if ((i % 8) == 0) - { - printf (" %s\n", str); - memset (str, 0, 8); - } - printf ("0x%02X ", (unsigned int) ptr[i]); - if (ptr[i] < 0x20 || (ptr[i] > 'z' && ptr[i] < ((unsigned char )'À')) ) - str[i % 8] = '.'; - else - str[i % 8] = ptr[i]; - } - printf (" %*s\n", (8 - ((abs(i - 1) % 8) ? (abs(i - 1) % 8) : 8)) * 5, str); -} - diff --git a/libdtv/libsi/si_debug_services.h b/libdtv/libsi/si_debug_services.h deleted file mode 100644 index 869c6d04..00000000 --- a/libdtv/libsi/si_debug_services.h +++ /dev/null @@ -1,245 +0,0 @@ -////////////////////////////////////////////////////////////// -/// /// -/// si_debug_services.h: local debugging definitions /// -/// /// -////////////////////////////////////////////////////////////// - -// $Revision: 1.2 $ -// $Date: 2003/04/12 11:27:31 $ -// $Author: hakenes $ -// -// (C) 2001 Rolf Hakenes <hakenes@hippomi.de>, under the GNU GPL. -// -// libsi is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or (at your option) -// any later version. -// -// libsi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You may have received a copy of the GNU General Public License -// along with libsi; see the file COPYING. If not, write to the -// Free Software Foundation, Inc., 59 Temple Place - Suite 330, -// Boston, MA 02111-1307, USA. - - -struct component_type { - u_char Content; - u_char Type; - char *Description; -}; - -static struct component_type ComponentTypes[] = { - { 0x01, 0x01, "video, 4:3 aspect ratio, 25 Hz" }, - { 0x01, 0x02, "video, 16:9 aspect ratio with pan vectors, 25 Hz" }, - { 0x01, 0x03, "video, 16:9 aspect ratio without pan vectors, 25 Hz" }, - { 0x01, 0x04, "video, > 16:9 aspect ratio, 25 Hz" }, - { 0x01, 0x05, "video, 4:3 aspect ratio, 30 Hz" }, - { 0x01, 0x06, "video, 16:9 aspect ratio with pan vectors, 30 Hz" }, - { 0x01, 0x07, "video, 16:9 aspect ratio without pan vectors, 30 Hz" }, - { 0x01, 0x08, "video, > 16:9 aspect ratio, 30 Hz" }, - { 0x01, 0x09, "HD video, 4:3 aspect ratio, 25 Hz" }, - { 0x01, 0x0A, "HD video, 16:9 aspect ratio with pan vectors, 25 Hz" }, - { 0x01, 0x0B, "HD video, 16:9 aspect ratio without pan vectors, 25 Hz" }, - { 0x01, 0x0C, "HD video, > 16:9 aspect ratio, 25 Hz" }, - { 0x01, 0x0D, "HD video, 4:3 aspect ratio, 30 Hz" }, - { 0x01, 0x0E, "HD video, 16:9 aspect ratio with pan vectors, 30 Hz" }, - { 0x01, 0x0F, "HD video, 16:9 aspect ratio without pan vectors, 30 Hz" }, - { 0x01, 0x10, "HD video, > 16:9 aspect ratio, 30 Hz" }, - { 0x02, 0x01, "audio, single mono channel" }, - { 0x02, 0x02, "audio, dual mono channel" }, - { 0x02, 0x03, "audio, stereo (2 channel)" }, - { 0x02, 0x04, "audio, multi lingual, multi channel" }, - { 0x02, 0x05, "audio, surround sound" }, - { 0x02, 0x40, "audio description for the visually impaired" }, - { 0x02, 0x41, "audio for the hard of hearing" }, - { 0x03, 0x01, "EBU Teletext subtitles" }, - { 0x03, 0x02, "associated EBU Teletext" }, - { 0x03, 0x03, "VBI data" }, - { 0x03, 0x10, "DVB subtitles (normal), no aspect criticality" }, - { 0x03, 0x11, "DVB subtitles (normal), aspect 4:3 only" }, - { 0x03, 0x12, "DVB subtitles (normal), aspect 16:9 only" }, - { 0x03, 0x13, "DVB subtitles (normal), aspect 2.21:1 only" }, - { 0x03, 0x20, "DVB subtitles (hard of hearing), no aspect criticality" }, - { 0x03, 0x21, "DVB subtitles (hard of hearing), aspect 4:3 only" }, - { 0x03, 0x22, "DVB subtitles (hard of hearing), aspect 16:9 only" }, - { 0x03, 0x23, "DVB subtitles (hard of hearing), aspect 2.21:1 only" } -}; -#define COMPONENT_TYPE_NUMBER 35 - - -struct service_type { - u_char Type; - char *Description; -}; - -static struct service_type ServiceTypes[] = { - { 0x01, "digital television service" }, - { 0x02, "digital radio sound service" }, - { 0x03, "Teletext service" }, - { 0x04, "NVOD reference service" }, - { 0x05, "NVOD time-shifted service" }, - { 0x06, "mosaic service" }, - { 0x07, "PAL coded signal" }, - { 0x08, "SECAM coded signal" }, - { 0x09, "D/D2-MAC" }, - { 0x0A, "FM Radio" }, - { 0x0B, "NTSC coded signal" }, - { 0x0C, "data broadcast service" }, - { 0x0D, "common interface data" }, - { 0x0E, "RCS Map" }, - { 0x0F, "RCS FLS" }, - { 0x10, "DVB MHP service" } -}; -#define SERVICE_TYPE_NUMBER 16 - - -struct content_type { - u_char Nibble1; - u_char Nibble2; - char *Description; -}; - -static struct content_type ContentTypes[] = { - /* Movie/Drama: */ - { 0x01, 0x00, "movie/drama (general)" }, - { 0x01, 0x01, "detective/thriller" }, - { 0x01, 0x02, "adventure/western/war" }, - { 0x01, 0x03, "science fiction/fantasy/horror" }, - { 0x01, 0x04, "comedy" }, - { 0x01, 0x05, "soap/melodrama/folkloric" }, - { 0x01, 0x06, "romance" }, - { 0x01, 0x07, "serious/classical/religious/historical movie/drama" }, - { 0x01, 0x08, "adult movie/drama" }, - /* News/Current affairs: */ - { 0x02, 0x00, "news/current affairs (general)" }, - { 0x02, 0x01, "news/weather report" }, - { 0x02, 0x02, "news magazine" }, - { 0x02, 0x03, "documentary" }, - { 0x02, 0x04, "discussion/interview/debate" }, - /* Show/Game show: */ - { 0x03, 0x00, "show/game show (general)" }, - { 0x03, 0x01, "game show/quiz/contest" }, - { 0x03, 0x02, "variety show" }, - { 0x03, 0x03, "talk show" }, - /* Sports: */ - { 0x04, 0x00, "sports (general)" }, - { 0x04, 0x01, "special events (Olympic Games, World Cup etc.)" }, - { 0x04, 0x02, "sports magazines" }, - { 0x04, 0x03, "football/soccer" }, - { 0x04, 0x04, "tennis/squash" }, - { 0x04, 0x05, "team sports (excluding football)" }, - { 0x04, 0x06, "athletics" }, - { 0x04, 0x07, "motor sport" }, - { 0x04, 0x08, "water sport" }, - { 0x04, 0x09, "winter sports" }, - { 0x04, 0x0A, "equestrian" }, - { 0x04, 0x0B, "martial sports" }, - /* Children's/Youth programmes: */ - { 0x05, 0x00, "children's/youth programmes (general)" }, - { 0x05, 0x01, "pre-school children's programmes" }, - { 0x05, 0x02, "entertainment programmes for 6 to14" }, - { 0x05, 0x03, "entertainment programmes for 10 to 16" }, - { 0x05, 0x04, "informational/educational/school programmes" }, - { 0x05, 0x05, "cartoons/puppets" }, - /* Music/Ballet/Dance: */ - { 0x06, 0x00, "music/ballet/dance (general)" }, - { 0x06, 0x01, "rock/pop" }, - { 0x06, 0x02, "serious music/classical music" }, - { 0x06, 0x03, "folk/traditional music" }, - { 0x06, 0x04, "jazz" }, - { 0x06, 0x05, "musical/opera" }, - { 0x06, 0x06, "ballet" }, - /* Arts/Culture (without music): */ - { 0x07, 0x00, "arts/culture (without music, general)" }, - { 0x07, 0x01, "performing arts" }, - { 0x07, 0x02, "fine arts" }, - { 0x07, 0x03, "religion" }, - { 0x07, 0x04, "popular culture/traditional arts" }, - { 0x07, 0x05, "literature" }, - { 0x07, 0x06, "film/cinema" }, - { 0x07, 0x07, "experimental film/video" }, - { 0x07, 0x08, "broadcasting/press" }, - { 0x07, 0x09, "new media" }, - { 0x07, 0x0A, "arts/culture magazines" }, - { 0x07, 0x0B, "fashion" }, - /* Social/Political issues/Economics: */ - { 0x08, 0x00, "social/political issues/economics (general)" }, - { 0x08, 0x01, "magazines/reports/documentary" }, - { 0x08, 0x02, "economics/social advisory" }, - { 0x08, 0x03, "remarkable people" }, - /* Children's/Youth programmes: */ - /* Education/ Science/Factual topics: */ - { 0x09, 0x00, "education/science/factual topics (general)" }, - { 0x09, 0x01, "nature/animals/environment" }, - { 0x09, 0x02, "technology/natural sciences" }, - { 0x09, 0x03, "medicine/physiology/psychology" }, - { 0x09, 0x04, "foreign countries/expeditions" }, - { 0x09, 0x05, "social/spiritual sciences" }, - { 0x09, 0x06, "further education" }, - { 0x09, 0x07, "languages" }, - /* Leisure hobbies: */ - { 0x0A, 0x00, "leisure hobbies (general)" }, - { 0x0A, 0x01, "tourism/travel" }, - { 0x0A, 0x02, "handicraft" }, - { 0x0A, 0x03, "motoring" }, - { 0x0A, 0x04, "fitness & health" }, - { 0x0A, 0x05, "cooking" }, - { 0x0A, 0x06, "advertisement/shopping" }, - { 0x0A, 0x07, "gardening" }, - { 0x0B, 0x00, "original language" }, - { 0x0B, 0x01, "black & white" }, - { 0x0B, 0x02, "unpublished" }, - { 0x0B, 0x03, "live broadcast" } -}; -#define CONTENT_TYPE_NUMBER 79 - -static char *StreamTypes[] = { - "ITU-T|ISO/IEC Reserved", - "ISO/IEC Video", - "13818-2 Video or 11172-2 constrained parameter video stream", - "ISO/IEC 11172 Audio", - "ISO/IEC 13818-3 Audio", - "private_sections", - "packets containing private data / Videotext", - "ISO/IEC 13522 MPEG", - "ITU-T Rec. H.222.1", - "ISO/IEC 13818-6 type A", - "ISO/IEC 13818-6 type B", - "ISO/IEC 13818-6 type C", - "ISO/IEC 13818-6 type D", - "ISO/IEC 13818-1 auxiliary", - "ITU-T Rec. H.222.0 | ISO 13818-1 Reserved", - "User private" -}; - -static char *CaIdents[] = { - "Standardized systems", - "Canal Plus", - "CCETT", - "Deutsche Telecom", - "Eurodec", - "France Telecom", - "Irdeto", - "Jerrold/GI", - "Matra Communication", - "News Datacom", - "Nokia", - "Norwegian Telekom", - "NTL", - "Philips", - "Scientific Atlanta", - "Sony", - "Tandberg Television", - "Thomson", - "TV/Com", - "HPT - Croatian Post and Telecommunications", - "HRT - Croatian Radio and Television", - "IBM", - "Nera", - "BetaTechnik" -}; -#define MAX_CA_IDENT 24 diff --git a/libdtv/libsi/si_parser.c b/libdtv/libsi/si_parser.c deleted file mode 100644 index 896c5ab9..00000000 --- a/libdtv/libsi/si_parser.c +++ /dev/null @@ -1,1335 +0,0 @@ -////////////////////////////////////////////////////////////// -/// /// -/// si_parser.c: main parsing functions of libsi /// -/// /// -////////////////////////////////////////////////////////////// - -// $Revision: 1.8 $ -// $Date: 2003/02/04 18:45:35 $ -// $Author: hakenes $ -// -// (C) 2001-03 Rolf Hakenes <hakenes@hippomi.de>, under the -// GNU GPL with contribution of Oleg Assovski, -// www.satmania.com -// -// libsi is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation; either version 2, or (at your option) -// any later version. -// -// libsi is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You may have received a copy of the GNU General Public License -// along with libsi; see the file COPYING. If not, write to the -// Free Software Foundation, Inc., 59 Temple Place - Suite 330, -// Boston, MA 02111-1307, USA. - -#include <stdio.h> -#include <string.h> -#include <math.h> -#include <time.h> - -#include "../liblx/liblx.h" -#include "libsi.h" -#include "si_tables.h" - -static u_long crc32 (char *data, int len); - -struct LIST *siParsePAT (u_char *Buffer) -{ - pat_t *Pat; - pat_prog_t *PatProgram; - u_char *Ptr; - int SectionLength; - int TransportStreamID; - int PatVersion; - struct Program *Program; - struct LIST *ProgramList = NULL; - - if (!Buffer) return NULL; - - Pat = (pat_t *) Buffer; Ptr = Buffer; - - if (Pat->table_id != TID_PAT) { - // fprintf (stderr, "PAT: wrong TID %d\n", Pat->table_id); - return NULL; - } - - SectionLength = HILO (Pat->section_length) + 3 - PAT_LEN - 4; - - if (crc32 (Ptr, HILO (Pat->section_length) + 3)) return (NULL); - - TransportStreamID = HILO (Pat->transport_stream_id); - PatVersion = Pat->version_number; - - Ptr += PAT_LEN; - - while (SectionLength > 0) - { - PatProgram = (pat_prog_t *) Ptr; - - CreateProgram (Program, HILO (PatProgram->program_number), - TransportStreamID, HILO (PatProgram->network_pid), PatVersion); - - if (!ProgramList) ProgramList = xNewList (NULL); - xAddTail (ProgramList, Program); - - SectionLength -= PAT_PROG_LEN; - Ptr += PAT_PROG_LEN; - } - - return (ProgramList); -} - - -struct LIST *siParseCAT (u_char *Buffer) -{ - cat_t *Cat; - u_char *Ptr; - int SectionLength; - int TransportStreamID; - int CatVersion; - struct Descriptor *Descriptor; - struct LIST *DescriptorList = NULL; - - if (!Buffer) return NULL; - - Cat = (cat_t *) Buffer; Ptr = Buffer; - - if (Cat->table_id != TID_CAT) { - // fprintf (stderr, "CAT: wrong TID %d\n", Cat->table_id); - return NULL; - } - - SectionLength = HILO (Cat->section_length) + 3 - CAT_LEN - 4; - - if (crc32 (Ptr, HILO (Cat->section_length) + 3)) return (NULL); - - CatVersion = Cat->version_number; - - Ptr += CAT_LEN; - - if (SectionLength >= 0) - { - DescriptorList = xNewList (NULL); - siParseDescriptors (DescriptorList, Ptr, SectionLength, Cat->table_id); - } - - return (DescriptorList); -} - - -struct Pid *siParsePMT (u_char *Buffer) -{ - pmt_t *Pmt; - pmt_info_t *PmtInfo; - u_char *Ptr; - int SectionLength, ProgramInfoLength, - StreamLength, LoopLength; - int ProgramID; - int PcrID; - int PmtVersion; - struct Pid *Pid; - struct PidInfo *PidInfo; - - if (!Buffer) return NULL; - - Pmt = (pmt_t *) Buffer; Ptr = Buffer; - - if (Pmt->table_id != TID_PMT) { - // fprintf (stderr, "PMT: wrong TID %d\n", Pmt->table_id); - return NULL; - } - - SectionLength = HILO (Pmt->section_length) + 3 - 4; - - if (crc32 (Ptr, HILO (Pmt->section_length) + 3)) return (NULL); - - ProgramInfoLength = HILO (Pmt->program_info_length); - StreamLength = SectionLength - ProgramInfoLength - PMT_LEN; - - ProgramID = HILO (Pmt->program_number); - PmtVersion = Pmt->version_number; - PcrID = HILO (Pmt->PCR_PID); - - Ptr += PMT_LEN; - - CreatePid (Pid, ProgramID, PcrID, PmtVersion); - - if (StreamLength >= 0) siParseDescriptors (Pid->Descriptors, Ptr, - ProgramInfoLength, Pmt->table_id); - - Ptr += ProgramInfoLength; - - while (StreamLength > 0) - { - PmtInfo = (pmt_info_t *) Ptr; - - CreatePidInfo (PidInfo, PmtInfo->stream_type, - HILO (PmtInfo->elementary_PID)); - - LoopLength = HILO (PmtInfo->ES_info_length); - Ptr += PMT_INFO_LEN; - - siParseDescriptors (PidInfo->Descriptors, Ptr, LoopLength, Pmt->table_id); - - xAddTail (Pid->InfoList, PidInfo); - - StreamLength -= LoopLength + PMT_INFO_LEN; - Ptr += LoopLength; - } - - return (Pid); -} - - -struct LIST *siParseNIT (u_char *Buffer) -{ - nit_t *Nit; - nit_mid_t *NitMid; - nit_ts_t *TSDesc; - u_char *Ptr; - int SectionLength, LoopLength, Loop2Length; - int TransportStreamID; - int NitVersion; - int NetworkID; - struct TransportStream *TransportStream; - struct LIST *TSList = NULL; - struct LIST *Networks; - struct NetworkInfo *Network; - - if (!Buffer) return NULL; - - Nit = (nit_t *) Buffer; - Ptr = Buffer; - - if (Nit->table_id != TID_NIT_ACT && Nit->table_id != TID_NIT_OTH && Nit->table_id != TID_BAT) { - return NULL; - } - - SectionLength = HILO (Nit->section_length) + 3 - NIT_LEN - 4; - - if (crc32 (Ptr, HILO (Nit->section_length) + 3)) return (NULL); - - NitVersion = Nit->version_number; - NetworkID = HILO (Nit->network_id); - if (NetworkID == 65535) - NetworkID = 0; - CreateNetworkInfo (Network, NetworkID); - Networks = xNewList (NULL); - xAddTail (Networks, Network); - - Ptr += NIT_LEN; - - LoopLength = HILO (Nit->network_descriptor_length); -// fprintf (stderr, "table 0x%X, SectionLen = %d, LoopLen = %d\n", -// Nit->table_id, SectionLength, LoopLength); - if (LoopLength > SectionLength - SDT_DESCR_LEN) - return (Networks); - - if (LoopLength <= SectionLength) { - if (SectionLength >= 0) siParseDescriptors (Network->Descriptors, Ptr, LoopLength, Nit->table_id); - SectionLength -= LoopLength; - Ptr += LoopLength; - NitMid = (nit_mid_t *) Ptr; - LoopLength = HILO (NitMid->transport_stream_loop_length); -// fprintf (stderr, "table 0x%X, TS LoopLen = %d\n", -// Nit->table_id, LoopLength); - if ((SectionLength > 0) && (LoopLength <= SectionLength)) { - SectionLength -= SIZE_NIT_MID; - Ptr += SIZE_NIT_MID; - while (LoopLength > 0) { - TSDesc = (nit_ts_t *) Ptr; - CreateTransportStream (TransportStream, HILO(TSDesc->transport_stream_id), HILO(TSDesc->original_network_id)); - if (TransportStream->TransportStreamID == 65535) - TransportStream->TransportStreamID = 0; - if (TransportStream->OriginalNetworkID == 65535) - TransportStream->OriginalNetworkID = 0; - Loop2Length = HILO (TSDesc->transport_descriptors_length); -// fprintf (stderr, "table 0x%X, TSdesc LoopLen = %d\n", -// Nit->table_id, Loop2Length); - Ptr += NIT_TS_LEN; - if (Loop2Length <= LoopLength) { - if (LoopLength >= 0) siParseDescriptors (TransportStream->Descriptors, Ptr, Loop2Length, Nit->table_id); - } - if (!Network->TransportStreams) - Network->TransportStreams = xNewList (NULL); - xAddTail (Network->TransportStreams, TransportStream); - LoopLength -= Loop2Length + NIT_TS_LEN; - SectionLength -= Loop2Length + NIT_TS_LEN; - Ptr += Loop2Length; - } - } - } - - return (Networks); -} - - -struct LIST *siParseSDT (u_char *Buffer) -{ - sdt_t *Sdt; - sdt_descr_t *SdtDescriptor; - u_char *Ptr; - int SectionLength, LoopLength; - int TransportStreamID; - int SdtVersion; - int OriginalNetworkID; - struct Service *Service; - struct LIST *ServiceList = NULL; - - if (!Buffer) return NULL; - - Sdt = (sdt_t *) Buffer; Ptr = Buffer; - - if (Sdt->table_id != TID_SDT_ACT && Sdt->table_id != TID_SDT_OTH) { - // fprintf (stderr, "SDT: wrong TID %d\n", Sdt->table_id); - return NULL; - } - - SectionLength = HILO (Sdt->section_length) + 3 - SDT_LEN - 4; - - if (crc32 (Ptr, HILO (Sdt->section_length) + 3)) return (NULL); - - TransportStreamID = HILO (Sdt->transport_stream_id); - SdtVersion = Sdt->version_number; - OriginalNetworkID = HILO (Sdt->original_network_id); - - Ptr += SDT_LEN; - - while (SectionLength > 0) - { - SdtDescriptor = (sdt_descr_t *) Ptr; - - CreateService (Service, HILO (SdtDescriptor->service_id), - TransportStreamID, OriginalNetworkID, SdtVersion, - SdtDescriptor->free_ca_mode ? CONDITIONAL_ACCESS : FREE_TO_AIR); - - switch (SdtDescriptor->running_status) - { - case 0x01: - SetRunningStatus (Service->Status, RUNNING_STATUS_NOT_RUNNING); - break; - - case 0x02: - SetRunningStatus (Service->Status, RUNNING_STATUS_AWAITING); - break; - - case 0x03: - SetRunningStatus (Service->Status, RUNNING_STATUS_PAUSING); - break; - - case 0x04: - default: - SetRunningStatus (Service->Status, RUNNING_STATUS_RUNNING); - break; - } - if (SdtDescriptor->eit_schedule_flag) - SetScheduleFlag (Service->Status); - if (SdtDescriptor->eit_present_following_flag) - SetPresentFollowing (Service->Status); - - LoopLength = HILO (SdtDescriptor->descriptors_loop_length); - if (LoopLength > SectionLength - SDT_DESCR_LEN) - return (ServiceList); - Ptr += SDT_DESCR_LEN; - - siParseDescriptors (Service->Descriptors, Ptr, LoopLength, Sdt->table_id); - - if (!ServiceList) ServiceList = xNewList (NULL); - xAddTail (ServiceList, Service); - - SectionLength -= LoopLength + SDT_DESCR_LEN; - Ptr += LoopLength; - } - - return (ServiceList); -} - - -struct LIST *siParseEIT (u_char *Buffer) -{ - eit_t *Eit; - eit_event_t *EitEvent; - u_char *Ptr; - int SectionLength, LoopLength; - int ServiceID; - int EitVersion; - int TransportStreamID; - int OriginalNetworkID; - struct Event *Event; - struct LIST *EventList = NULL; - - if (!Buffer) return NULL; - - Eit = (eit_t *) Buffer; Ptr = Buffer; - - if (Eit->table_id != TID_EIT_ACT && Eit->table_id != TID_EIT_OTH && - !(Eit->table_id >= TID_EIT_ACT_SCH && - Eit->table_id <= TID_EIT_ACT_SCH + 0x0F) && - !(Eit->table_id >= TID_EIT_OTH_SCH && - Eit->table_id <= TID_EIT_OTH_SCH + 0x0F)) { - // fprintf (stderr, "EIT: wrong TID %d\n", Eit->table_id); - return NULL; - } - - SectionLength = HILO (Eit->section_length) + 3 - EIT_LEN - 4; - - if (crc32 (Ptr, HILO (Eit->section_length) + 3)) return (NULL); - - ServiceID = HILO (Eit->service_id); - TransportStreamID = HILO (Eit->transport_stream_id); - EitVersion = Eit->version_number; - OriginalNetworkID = HILO (Eit->original_network_id); - - Ptr += EIT_LEN; - - while (SectionLength > 0) - { - struct tm thisTime; - int year, month, day; - double mjd; - - EitEvent = (eit_event_t *) Ptr; - - CreateEvent (Event, HILO (EitEvent->event_id), ServiceID, - TransportStreamID, OriginalNetworkID, EitVersion, - EitEvent->free_ca_mode ? CONDITIONAL_ACCESS : FREE_TO_AIR); - - switch (EitEvent->running_status) - { - case 0x01: - SetRunningStatus (Event->Status, RUNNING_STATUS_NOT_RUNNING); - break; - - case 0x02: - SetRunningStatus (Event->Status, RUNNING_STATUS_AWAITING); - break; - - case 0x03: - SetRunningStatus (Event->Status, RUNNING_STATUS_PAUSING); - break; - - case 0x04: - default: - SetRunningStatus (Event->Status, RUNNING_STATUS_RUNNING); - break; - } - Event->StartTime = MjdToEpochTime (EitEvent->mjd) + - BcdTimeToSeconds (EitEvent->start_time); - Event->Duration = BcdTimeToSeconds (EitEvent->duration); - - LoopLength = HILO (EitEvent->descriptors_loop_length); - if (LoopLength > SectionLength - EIT_EVENT_LEN) - return (EventList); - Ptr += EIT_EVENT_LEN; - - siParseDescriptors (Event->Descriptors, Ptr, LoopLength, Eit->table_id); - - if (!EventList) EventList = xNewList (NULL); - xAddTail (EventList, Event); - - SectionLength -= LoopLength + EIT_EVENT_LEN; - Ptr += LoopLength; - } - - return (EventList); -} - - -time_t siParseTDT (u_char *Buffer) -{ - tdt_t *Tdt; - u_char *Ptr; - int SectionLength; - int TdtVersion; - time_t CurrentTime; - - if (!Buffer) return 0; - - Tdt = (tdt_t *) Buffer; Ptr = Buffer; - - if (Tdt->table_id != TID_TDT) { - // fprintf (stderr, "TDT: wrong TID %d\n", Tdt->table_id); - return 0; - } - - SectionLength = HILO (Tdt->section_length) + 3; /* no CRC ?! */ - - CurrentTime = MjdToEpochTime (Tdt->utc_mjd) + - BcdTimeToSeconds (Tdt->utc_time); - - return (CurrentTime); -} - - -struct Tot *siParseTOT (u_char *Buffer) -{ - tot_t *Tot; - u_char *Ptr; - int SectionLength, LoopLength; - struct Tot *table; - time_t CurrentTime; - - if (!Buffer) return NULL; - - Tot = (tot_t *) Buffer; - Ptr = Buffer; - - if (Tot->table_id != TID_TOT) { - return NULL; - } - - if (crc32 (Ptr, HILO (Tot->section_length) + 3)) return (NULL); -// SectionLength = HILO (Tot->section_length) + 3 - TOT_LEN - 4; - - CurrentTime = MjdToEpochTime (Tot->utc_mjd) + - BcdTimeToSeconds (Tot->utc_time); - LoopLength = HILO (Tot->descriptors_loop_length); - if (!LoopLength) - return NULL; - - CreateTot (table, CurrentTime); - - Ptr += TOT_LEN; - - siParseDescriptors (table->Descriptors, Ptr, LoopLength, Tot->table_id); - - // fprintf (stderr, "TOT Bias: %d\n", table->Bias); - return (table); -} - -static u_char TempTableID = 0; - -void siParseDescriptors (struct LIST *Descriptors, u_char *Buffer, - int Length, u_char TableID) -{ - int DescriptorLength; - u_char *Ptr; - - DescriptorLength = 0; - Ptr = Buffer; - TempTableID = TableID; - - while (DescriptorLength < Length) - { - if ((GetDescriptorLength (Ptr) > Length - DescriptorLength) || - (GetDescriptorLength (Ptr) <= 0)) return; - switch (TableID) - { - case TID_NIT_ACT: case TID_NIT_OTH: - switch (GetDescriptorTag(Ptr)) - { - case DESCR_SAT_DEL_SYS: - case DESCR_CABLE_DEL_SYS: - case DESCR_SERVICE_LIST: - case DESCR_PRIV_DATA_SPEC: -// fprintf (stderr, "Got descriptor with tag = 0x%X\n", GetDescriptorTag(Ptr)); -// siDumpDescriptor (Ptr); - case DESCR_NW_NAME: - case DESCR_STUFFING: - case DESCR_LINKAGE: - case DESCR_TERR_DEL_SYS: - case DESCR_ML_NW_NAME: - case DESCR_CELL_LIST: - case DESCR_CELL_FREQ_LINK: - case DESCR_ANNOUNCEMENT_SUPPORT: - siParseDescriptor (Descriptors, Ptr); - break; - - default: - // fprintf (stderr, "forbidden descriptor 0x%x in NIT\n", GetDescriptorTag(Ptr)); - break; - } - break; - - case TID_BAT: - switch (GetDescriptorTag(Ptr)) - { - case DESCR_SERVICE_LIST: - case DESCR_STUFFING: - case DESCR_BOUQUET_NAME: - case DESCR_SERVICE: - case DESCR_COUNTRY_AVAIL: - case DESCR_LINKAGE: - case DESCR_CA_IDENT: - case DESCR_ML_BQ_NAME: - case DESCR_PRIV_DATA_SPEC: - // fprintf (stderr, "Got descriptor with tag = 0x%X\n", GetDescriptorTag(Ptr)); - siParseDescriptor (Descriptors, Ptr); - break; - - default: - // fprintf (stderr, "forbidden descriptor 0x%x in BAT\n", GetDescriptorTag(Ptr)); - break; - } - break; - - case TID_SDT_ACT: case TID_SDT_OTH: - switch (GetDescriptorTag(Ptr)) - { - case DESCR_STUFFING: - case DESCR_BOUQUET_NAME: - case DESCR_SERVICE: - case DESCR_COUNTRY_AVAIL: - case DESCR_LINKAGE: - case DESCR_NVOD_REF: - case DESCR_TIME_SHIFTED_SERVICE: - case DESCR_MOSAIC: - case DESCR_CA_IDENT: - case DESCR_TELEPHONE: - case DESCR_ML_SERVICE_NAME: - case DESCR_PRIV_DATA_SPEC: - case DESCR_DATA_BROADCAST: - siParseDescriptor (Descriptors, Ptr); - break; - - default: - // fprintf (stderr, "forbidden descriptor 0x%x in SDT\n", GetDescriptorTag(Ptr)); - break; - } - break; - - case TID_EIT_ACT: case TID_EIT_OTH: - case TID_EIT_ACT_SCH: case TID_EIT_OTH_SCH: - case TID_EIT_ACT_SCH+1: case TID_EIT_OTH_SCH+1: - case TID_EIT_ACT_SCH+2: case TID_EIT_OTH_SCH+2: - case TID_EIT_ACT_SCH+3: case TID_EIT_OTH_SCH+3: - case TID_EIT_ACT_SCH+4: case TID_EIT_OTH_SCH+4: - case TID_EIT_ACT_SCH+5: case TID_EIT_OTH_SCH+5: - case TID_EIT_ACT_SCH+6: case TID_EIT_OTH_SCH+6: - case TID_EIT_ACT_SCH+7: case TID_EIT_OTH_SCH+7: - case TID_EIT_ACT_SCH+8: case TID_EIT_OTH_SCH+8: - case TID_EIT_ACT_SCH+9: case TID_EIT_OTH_SCH+9: - case TID_EIT_ACT_SCH+10: case TID_EIT_OTH_SCH+10: - case TID_EIT_ACT_SCH+11: case TID_EIT_OTH_SCH+11: - case TID_EIT_ACT_SCH+12: case TID_EIT_OTH_SCH+12: - case TID_EIT_ACT_SCH+13: case TID_EIT_OTH_SCH+13: - case TID_EIT_ACT_SCH+14: case TID_EIT_OTH_SCH+14: - case TID_EIT_ACT_SCH+15: case TID_EIT_OTH_SCH+15: - switch (GetDescriptorTag(Ptr)) - { - case DESCR_STUFFING: - case DESCR_LINKAGE: - case DESCR_SHORT_EVENT: - case DESCR_EXTENDED_EVENT: - case DESCR_TIME_SHIFTED_EVENT: - case DESCR_COMPONENT: - case DESCR_CA_IDENT: - case DESCR_CONTENT: - case DESCR_PARENTAL_RATING: - case DESCR_TELEPHONE: - case DESCR_ML_COMPONENT: - case DESCR_PRIV_DATA_SPEC: - case DESCR_SHORT_SMOOTH_BUF: - case DESCR_DATA_BROADCAST: - case DESCR_PDC: - siParseDescriptor (Descriptors, Ptr); - break; - - default: - // fprintf (stderr, "forbidden descriptor 0x%x in EIT\n", GetDescriptorTag(Ptr)); - break; - } - break; - - case TID_TOT: - switch (GetDescriptorTag(Ptr)) - { - case DESCR_LOCAL_TIME_OFF: - siParseDescriptor (Descriptors, Ptr); - break; - - default: - // fprintf (stderr, "forbidden descriptor 0x%x in TOT\n", GetDescriptorTag(Ptr)); - break; - } - break; - - case TID_PMT: - switch (GetDescriptorTag(Ptr)) - { - case DESCR_VBI_DATA: - case DESCR_VBI_TELETEXT: - case DESCR_MOSAIC: - case DESCR_STREAM_ID: - case DESCR_TELETEXT: - case DESCR_SUBTITLING: - case DESCR_PRIV_DATA_SPEC: - case DESCR_SERVICE_MOVE: - case DESCR_CA_SYSTEM: - case DESCR_DATA_BROADCAST_ID: - case DESCR_AC3: - case DESCR_ANCILLARY_DATA: - case DESCR_VIDEO_STREAM: - case DESCR_AUDIO_STREAM: - case DESCR_HIERARCHY: - case DESCR_REGISTRATION: - case DESCR_DATA_STREAM_ALIGN: - case DESCR_TARGET_BACKGRID: - case DESCR_VIDEO_WINDOW: - case DESCR_CA: - case DESCR_ISO_639_LANGUAGE: - case DESCR_SYSTEM_CLOCK: - case DESCR_MULTIPLEX_BUFFER_UTIL: - case DESCR_COPYRIGHT: - case DESCR_MAXIMUM_BITRATE: - siParseDescriptor (Descriptors, Ptr); - break; - - default: - // fprintf (stderr, "forbidden descriptor 0x%x in PMT\n", GetDescriptorTag(Ptr)); - break; - } - break; - - case TID_CAT: - switch (GetDescriptorTag(Ptr)) - { - case DESCR_CA_SYSTEM: - case DESCR_CA: - case DESCR_CA_IDENT: - siParseDescriptor (Descriptors, Ptr); - break; - - default: - // fprintf (stderr, "forbidden descriptor 0x%x in CAT\n", GetDescriptorTag(Ptr)); - break; - } - break; - - default: - // fprintf (stderr, "descriptor 0x%x in unsupported table 0x%x\n", GetDescriptorTag(Ptr), TableID); - break; - } - DescriptorLength += GetDescriptorLength (Ptr); - Ptr += GetDescriptorLength (Ptr); - } - return; -} - - -void siParseDescriptor (struct LIST *Descriptors, u_char *Buffer) -{ - struct NODE *Descriptor = NULL; - char *Text , *Text2; - u_char *Ptr; - int Length, i; - - if (!Descriptors || !Buffer) return; - - Ptr = Buffer; -// fprintf (stderr, "Got descriptor with tag = 0x%X\n", GetDescriptorTag(Buffer)); - - switch (GetDescriptorTag(Buffer)) - { - case DESCR_ANCILLARY_DATA: - CreateAncillaryDataDescriptor (Descriptor, - CastAncillaryDataDescriptor(Buffer)->ancillary_data_identifier); - break; - - case DESCR_NW_NAME: - case DESCR_BOUQUET_NAME: - Text = siGetDescriptorName (Buffer + DESCR_BOUQUET_NAME_LEN, - GetDescriptorLength (Buffer) - DESCR_BOUQUET_NAME_LEN); -// fprintf (stderr, "Got descriptor with tag = 0x%X, text = '%s'\n", GetDescriptorTag(Buffer), Text); - CreateBouquetNameDescriptor (Descriptor, Text, GetDescriptorTag(Buffer)); - break; - - case DESCR_COMPONENT: - Text = siGetDescriptorText (Buffer + DESCR_COMPONENT_LEN, - GetDescriptorLength (Buffer) - DESCR_COMPONENT_LEN); - CreateComponentDescriptor (Descriptor, - CastComponentDescriptor(Buffer)->stream_content, - CastComponentDescriptor(Buffer)->component_type, - CastComponentDescriptor(Buffer)->component_tag, - CastComponentDescriptor(Buffer)->lang_code1, - CastComponentDescriptor(Buffer)->lang_code2, - CastComponentDescriptor(Buffer)->lang_code3, Text); - break; - - case DESCR_SERVICE: - Text = siGetDescriptorName (Buffer + DESCR_SERVICE_LEN, - CastServiceDescriptor(Buffer)->provider_name_length); - Text2 = siGetDescriptorName (Buffer + DESCR_SERVICE_LEN + - CastServiceDescriptor(Buffer)->provider_name_length + 1, - *((u_char *)(Buffer + DESCR_SERVICE_LEN + - CastServiceDescriptor(Buffer)->provider_name_length))); - CreateServiceDescriptor (Descriptor, - CastServiceDescriptor(Buffer)->service_type, Text, Text2); - break; - - case DESCR_COUNTRY_AVAIL: - CreateCountryAvailabilityDescriptor (Descriptor, - CastCountryAvailabilityDescriptor(Buffer)->country_availability_flag); - Length = GetDescriptorLength (Buffer) - DESCR_COUNTRY_AVAILABILITY_LEN; - Ptr += DESCR_COUNTRY_AVAILABILITY_LEN; - while (Length > 0) - { AddCountryAvailabilityCode(Descriptor, - Ptr[0], Ptr[1], Ptr[2]); Ptr += 3; Length -= 3; } - break; - - case DESCR_SHORT_EVENT: - Text = siGetDescriptorName (Buffer + DESCR_SHORT_EVENT_LEN, - CastShortEventDescriptor(Buffer)->event_name_length); - Text2 = siGetDescriptorText (Buffer + DESCR_SHORT_EVENT_LEN + - CastShortEventDescriptor(Buffer)->event_name_length + 1, - *((u_char *)(Buffer + DESCR_SHORT_EVENT_LEN + - CastShortEventDescriptor(Buffer)->event_name_length))); - CreateShortEventDescriptor (Descriptor, Text, - CastShortEventDescriptor(Buffer)->lang_code1, - CastShortEventDescriptor(Buffer)->lang_code2, - CastShortEventDescriptor(Buffer)->lang_code3, Text2); - break; - - case DESCR_EXTENDED_EVENT: - Text = siGetDescriptorText (Buffer + DESCR_EXTENDED_EVENT_LEN + - CastExtendedEventDescriptor(Buffer)->length_of_items + 1, - *((u_char *)(Buffer + DESCR_EXTENDED_EVENT_LEN + - CastExtendedEventDescriptor(Buffer)->length_of_items))); - CreateExtendedEventDescriptor (Descriptor, - CastExtendedEventDescriptor(Buffer)->descriptor_number, - CastExtendedEventDescriptor(Buffer)->last_descriptor_number, - CastExtendedEventDescriptor(Buffer)->lang_code1, - CastExtendedEventDescriptor(Buffer)->lang_code2, - CastExtendedEventDescriptor(Buffer)->lang_code3, Text); - Length = CastExtendedEventDescriptor(Buffer)->length_of_items; - Ptr += DESCR_EXTENDED_EVENT_LEN; -// printf ("EEDesc #%d, %s\n", CastExtendedEventDescriptor(Buffer)->descriptor_number, Text); - while ((Length > 0) && (Length < GetDescriptorLength (Buffer))) - { - Text = siGetDescriptorText (Ptr + ITEM_EXTENDED_EVENT_LEN, - CastExtendedEventItem(Ptr)->item_description_length); - Text2 = siGetDescriptorText (Ptr + ITEM_EXTENDED_EVENT_LEN + - CastExtendedEventItem(Ptr)->item_description_length + 1, - *((u_char *)(Ptr + ITEM_EXTENDED_EVENT_LEN + - CastExtendedEventItem(Ptr)->item_description_length))); -// printf ("EEItem #%d, %s, %s\n", CastExtendedEventDescriptor(Buffer)->descriptor_number, Text, Text2); - AddExtendedEventItem (Descriptor, Text2, Text); - Length -= ITEM_EXTENDED_EVENT_LEN + CastExtendedEventItem(Ptr)->item_description_length + - *((u_char *)(Ptr + ITEM_EXTENDED_EVENT_LEN + - CastExtendedEventItem(Ptr)->item_description_length)) + 1; - Ptr += ITEM_EXTENDED_EVENT_LEN + CastExtendedEventItem(Ptr)->item_description_length + - *((u_char *)(Ptr + ITEM_EXTENDED_EVENT_LEN + - CastExtendedEventItem(Ptr)->item_description_length)) + 1; - } - break; - - case DESCR_CA_IDENT: - Length = GetDescriptorLength (Buffer) - DESCR_CA_IDENTIFIER_LEN; - CreateCaIdentifierDescriptor (Descriptor, Length / 2); - Ptr += DESCR_CA_IDENTIFIER_LEN; i = 0; - while (Length > 0) - { SetCaIdentifierID(Descriptor, i, ((*((u_char *) Ptr)<<8) + *((u_char *) (Ptr+1)))); - Length -= 2; Ptr += 2; i++; } - break; - - case DESCR_CA: - { - struct CaDescriptor *CD; - - Length = GetDescriptorLength (Buffer) - DESCR_CA_LEN; - CreateCaDescriptor (Descriptor, - HILO(CastCaDescriptor(Buffer)->CA_type), - HILO(CastCaDescriptor(Buffer)->CA_PID), Length); - Ptr += DESCR_CA_LEN; i = 0; - while (Length > 0) - { SetCaData(Descriptor, i, *Ptr); - Length --; Ptr ++; i++; } - - /* - * The following analyses are more or less directly copied from - * MultiDec 8.4b Sources. Thanx to Espresso for his great work !! - */ - CD = (struct CaDescriptor *) Descriptor; - - // fprintf (stderr, "TableID: %02x - CA - Type: 0x%04x, PID: %d\n", TempTableID, CD->CA_type, CD->CA_PID); - - if ((CD->CA_type >> 8) == 0x01) /* SECA */ - { - CD->ProviderID = (GetCaData (CD, 0) << 8) | GetCaData (CD, 1); - } - else if ((CD->CA_type >> 8) == 0x05) /* Viaccess ? (France Telecom) */ - { - i=0; - while (i < CD->DataLength) - { - if ((GetCaData (CD, i) == 0x14) && (GetCaData (CD, i+1) == 0x03)) - { - CD->ProviderID = (GetCaData (CD, i+2) << 16) | - (GetCaData (CD, i+3) << 8) | - (GetCaData (CD, i+4) & 0xf0); - i = CD->DataLength; - } - i++; - } - } - if (CD->CA_type==0x0100) /* SECA 1 */ - { - /* bptr=MyPtr+19; - - i=19; - while ( i+4 < ca_info->len ) { - if ( (*bptr&0xE0) == 0xE0 ) { - CA_ECM=(( *bptr&0x1f)<<8)+*(bptr+1); - Prov_Ident = ( *(bptr+2)<<8) | *(bptr+3); - j=0; - while ( j < ProgrammNeu[ProgrammNummer].CA_Anzahl ) { - if (( ProgrammNeu[ProgrammNummer].CA_System[j].CA_Typ == CA_Typ ) - && ( ProgrammNeu[ProgrammNummer].CA_System[j].ECM == CA_ECM )) break; - j++; - }; - - if ( j < MAX_CA_SYSTEMS ) { - if ( j >= ProgrammNeu[ProgrammNummer].CA_Anzahl ) - ProgrammNeu[ProgrammNummer].CA_Anzahl++; - ProgrammNeu[ProgrammNummer].CA_System[j].CA_Typ =CA_Typ; - ProgrammNeu[ProgrammNummer].CA_System[j].ECM =CA_ECM ; - ProgrammNeu[ProgrammNummer].CA_System[j].Provider_Id = Prov_Ident; - }; - } - i+=0x0f; - bptr+=0x0f; - }; */ - } - } - break; - - case DESCR_CONTENT: - CreateContentDescriptor (Descriptor, - (GetDescriptorLength(Buffer) - DESCR_CONTENT_LEN) / 2); - Length = GetDescriptorLength (Buffer) - DESCR_CONTENT_LEN; - Ptr += DESCR_CONTENT_LEN; i = 0; - while (Length > 0) - { SetContentID(Descriptor, i, CastContentNibble(Ptr)->content_nibble_level_1, - CastContentNibble(Ptr)->content_nibble_level_2, - CastContentNibble(Ptr)->user_nibble_1, - CastContentNibble(Ptr)->user_nibble_2); - Length -= 2; Ptr += 2; i++; } - break; - - case DESCR_STUFFING: - /* intentionally ignored */ - break; - - case DESCR_PARENTAL_RATING: - CreateParentalRatingDescriptor (Descriptor); - Length = GetDescriptorLength (Buffer) - DESCR_PARENTAL_RATING_LEN; - Ptr += DESCR_PARENTAL_RATING_LEN; i = 0; - while (Length > 0) - { AddParentalRating (Descriptor, CastParentalRating(Ptr)->lang_code1, - CastParentalRating(Ptr)->lang_code2, CastParentalRating(Ptr)->lang_code3, - CastParentalRating(Ptr)->rating); - Length -= PARENTAL_RATING_LEN; Ptr += PARENTAL_RATING_LEN; i++; } - break; - - case DESCR_NVOD_REF: - CreateNvodReferenceDescriptor (Descriptor); - Length = GetDescriptorLength (Buffer) - DESCR_NVOD_REFERENCE_LEN; - Ptr += DESCR_NVOD_REFERENCE_LEN; - while (Length > 0) - { - AddNvodReferenceItem (Descriptor, - HILO (CastNvodReferenceItem(Ptr)->transport_stream_id), - HILO (CastNvodReferenceItem(Ptr)->original_network_id), - HILO (CastNvodReferenceItem(Ptr)->service_id)); - Length -= ITEM_NVOD_REFERENCE_LEN; - Ptr += ITEM_NVOD_REFERENCE_LEN; - } - break; - - case DESCR_TIME_SHIFTED_SERVICE: - CreateTimeShiftedServiceDescriptor (Descriptor, - HILO (CastTimeShiftedServiceDescriptor(Ptr)->reference_service_id)); - break; - - case DESCR_TIME_SHIFTED_EVENT: - CreateTimeShiftedEventDescriptor (Descriptor, - HILO (CastTimeShiftedEventDescriptor(Ptr)->reference_service_id), - HILO (CastTimeShiftedEventDescriptor(Ptr)->reference_event_id)); - break; - - case DESCR_ISO_639_LANGUAGE: - CreateIso639LanguageDescriptor (Descriptor, - CastIso639LanguageDescriptor(Buffer)->lang_code1, - CastIso639LanguageDescriptor(Buffer)->lang_code2, - CastIso639LanguageDescriptor(Buffer)->lang_code3); - break; - - case DESCR_STREAM_ID: - CreateStreamIdentifierDescriptor (Descriptor, - CastStreamIdentifierDescriptor(Ptr)->component_tag); - break; - - case DESCR_LINKAGE: - CreateLinkageDescriptor (Descriptor, - HILO (CastLinkageDescriptor(Ptr)->transport_stream_id), - HILO (CastLinkageDescriptor(Ptr)->original_network_id), - HILO (CastLinkageDescriptor(Ptr)->service_id), - CastLinkageDescriptor(Ptr)->linkage_type, - GetDescriptorLength (Ptr) - DESCR_LINKAGE_LEN, - Ptr + DESCR_LINKAGE_LEN); - break; - - case DESCR_TELETEXT: - CreateTeletextDescriptor (Descriptor); - Length = GetDescriptorLength (Buffer) - DESCR_TELETEXT_LEN; - Ptr += DESCR_TELETEXT_LEN; - while (Length > 0) - { - AddTeletextItem (Descriptor, - CastTeletextItem(Ptr)->type, - CastTeletextItem(Ptr)->magazine_number, - CastTeletextItem(Ptr)->page_number, - CastTeletextItem(Ptr)->lang_code1, - CastTeletextItem(Ptr)->lang_code2, - CastTeletextItem(Ptr)->lang_code3); - Length -= ITEM_TELETEXT_LEN; - Ptr += ITEM_TELETEXT_LEN; - } - break; - - case DESCR_AC3: - CreateAc3Descriptor (Descriptor); - Length = GetDescriptorLength (Buffer); - if (CastAc3Descriptor(Buffer)->ac3_type_flag) - { Length -= 1; Ptr += 1; AddAc3FlagAndValue (Descriptor, - AC3_TYPE_FLAG, CastAc3Descriptor(Buffer)->ac3_type); } - if (CastAc3Descriptor(Buffer)->bsid_flag) - { Length -= 1; Ptr += 1; AddAc3FlagAndValue (Descriptor, - BS_ID_FLAG, CastAc3Descriptor(Buffer)->bsid); } - if (CastAc3Descriptor(Buffer)->mainid_flag) - { Length -= 1; Ptr += 1; AddAc3FlagAndValue (Descriptor, - MAIN_ID_FLAG, CastAc3Descriptor(Buffer)->mainid); } - if (CastAc3Descriptor(Buffer)->asvc_flag) - { Length -= 1; Ptr += 1; AddAc3FlagAndValue (Descriptor, - ASVC_FLAG, CastAc3Descriptor(Buffer)->asvc); } - Length -= DESCR_AC3_LEN; - Ptr += DESCR_AC3_LEN; - if (Length > 0) AddAc3AdditionalData (Descriptor, Ptr, Length); - break; - - case DESCR_SUBTITLING: - CreateSubtitlingDescriptor (Descriptor); - Length = GetDescriptorLength (Buffer) - DESCR_SUBTITLING_LEN; - Ptr += DESCR_SUBTITLING_LEN; - while (Length > 0) - { - AddSubtitlingItem (Descriptor, - CastSubtitlingItem(Ptr)->subtitling_type, - HILO (CastSubtitlingItem(Ptr)->composition_page_id), - HILO (CastSubtitlingItem(Ptr)->ancillary_page_id), - CastSubtitlingItem(Ptr)->lang_code1, - CastSubtitlingItem(Ptr)->lang_code2, - CastSubtitlingItem(Ptr)->lang_code3); - Length -= ITEM_SUBTITLING_LEN; - Ptr += ITEM_SUBTITLING_LEN; - } - break; - - case DESCR_SAT_DEL_SYS: -// fprintf (stderr, "got descriptor 0x%x\n", GetDescriptorTag(Buffer)); - { - descr_satellite_delivery_system_t *sds; - sds = (descr_satellite_delivery_system_t *) Ptr; - if (CheckBcdChar (sds->frequency1) && CheckBcdChar (sds->frequency2) && - CheckBcdChar (sds->frequency3) && CheckBcdChar (sds->frequency4) && - CheckBcdChar (sds->orbital_position1) && - CheckBcdChar (sds->orbital_position2) && - CheckBcdChar (sds->symbol_rate1) && CheckBcdChar (sds->symbol_rate1) && - CheckBcdChar (sds->symbol_rate3) && (sds->fec_inner != 0) && (sds->modulation == 1)) - { - CreateSatelliteDeliverySystemDescriptor (Descriptor, - BcdCharToInt (sds->frequency1) * 10 * 1000 * 1000 + - BcdCharToInt (sds->frequency2) * 100 * 1000 + - BcdCharToInt (sds->frequency3) * 1000 + - BcdCharToInt (sds->frequency4) * 10, - (sds->west_east_flag ? 1 : -1) * - (BcdCharToInt (sds->orbital_position1) * 100 + - BcdCharToInt (sds->orbital_position2)), - sds->modulation, - sds->polarization, - BcdCharToInt (sds->symbol_rate1) * 10 * 1000 + - BcdCharToInt (sds->symbol_rate2) * 100 + - BcdCharToInt (sds->symbol_rate3), - sds->fec_inner); - } - /* else - { - fprintf (stderr, "Illegal sds descriptor\n"); - siDumpDescriptor (Buffer); - } */ - } - break; - - case DESCR_CABLE_DEL_SYS: -// fprintf (stderr, "got descriptor 0x%x\n", GetDescriptorTag(Buffer)); - { - descr_cable_delivery_system_t *cds; - cds = (descr_cable_delivery_system_t *) Ptr; - if (CheckBcdChar (cds->frequency1) && CheckBcdChar (cds->frequency2) && - CheckBcdChar (cds->frequency3) && CheckBcdChar (cds->frequency4) && - CheckBcdChar (cds->symbol_rate1) && CheckBcdChar (cds->symbol_rate1) && - CheckBcdChar (cds->symbol_rate3) && (cds->fec_inner != 0)) - { - CreateCableDeliverySystemDescriptor (Descriptor, - BcdCharToInt (cds->frequency1) * 100 * 1000 * 1000 + - BcdCharToInt (cds->frequency2) * 1000 * 1000 + - BcdCharToInt (cds->frequency3) * 10 * 1000 + - BcdCharToInt (cds->frequency4) * 100, - BcdCharToInt (cds->symbol_rate1) * 10 * 1000 + - BcdCharToInt (cds->symbol_rate2) * 100 + - BcdCharToInt (cds->symbol_rate3), - cds->fec_outer, - cds->fec_inner, - cds->modulation - ); - } - /* else - { - fprintf (stderr, "Illegal cds descriptor\n"); - siDumpDescriptor (Buffer); - } */ - } - break; - - case DESCR_TERR_DEL_SYS: -// fprintf (stderr, "got descriptor 0x%x\n", GetDescriptorTag(Buffer)); - { - descr_terrestrial_delivery_system_t *tds; - tds = (descr_terrestrial_delivery_system_t *) Ptr; - if (CheckBcdChar (tds->frequency1) && CheckBcdChar (tds->frequency2) && - CheckBcdChar (tds->frequency3) && CheckBcdChar (tds->frequency4)) - { - CreateTerrestrialDeliverySystemDescriptor (Descriptor, - BcdCharToInt (tds->frequency1) * 100 * 1000 * 1000 + - BcdCharToInt (tds->frequency2) * 1000 * 1000 + - BcdCharToInt (tds->frequency3) * 10 * 1000 + - BcdCharToInt (tds->frequency4) * 100, - tds->bandwidth, - tds->constellation, - tds->hierarchy, - tds->code_rate_HP, - tds->code_rate_LP, - tds->guard_interval, - tds->transmission_mode, - tds->other_frequency_flag - ); - } - /* else - { - fprintf (stderr, "Illegal cds descriptor\n"); - siDumpDescriptor (Buffer); - } */ - } - break; - - case DESCR_SERVICE_LIST: -// fprintf (stderr, "got descriptor 0x%x\n", GetDescriptorTag(Buffer)); - CreateServiceListDescriptor (Descriptor); - Length = GetDescriptorLength (Buffer) - DESCR_SERVICE_LIST_LEN; - Ptr += DESCR_SERVICE_LIST_LEN; - while (Length > 0) - { - AddServiceListEntry (Descriptor, - HILO (CastServiceListDescriptorLoop(Ptr)->service_id), - CastServiceListDescriptorLoop(Ptr)->service_type); - Length -= DESCR_SERVICE_LIST_LEN; - Ptr += DESCR_SERVICE_LIST_LEN; - } - break; - - case DESCR_LOCAL_TIME_OFF: - CreateLocalTimeOffsetDescriptor (Descriptor); - Length = GetDescriptorLength (Buffer) - DESCR_LOCAL_TIME_OFFSET_LEN; - Ptr += DESCR_LOCAL_TIME_OFFSET_LEN; - while (Length > 0) - { - time_t ct, co, no; - ct = MjdToEpochTime (CastLocalTimeOffsetEntry(Ptr)->time_of_change_mjd) + - BcdTimeToSeconds (CastLocalTimeOffsetEntry(Ptr)->time_of_change_time); - co = (BcdCharToInt(CastLocalTimeOffsetEntry(Ptr)->local_time_offset_h) * 3600 + - BcdCharToInt(CastLocalTimeOffsetEntry(Ptr)->local_time_offset_m) * 60) * - ((CastLocalTimeOffsetEntry(Ptr)->local_time_offset_polarity) ? -1 : 1); - no = (BcdCharToInt(CastLocalTimeOffsetEntry(Ptr)->next_time_offset_h) * 3600 + - BcdCharToInt(CastLocalTimeOffsetEntry(Ptr)->next_time_offset_m) * 60) * - ((CastLocalTimeOffsetEntry(Ptr)->local_time_offset_polarity) ? -1 : 1); - AddLocalTimeOffsetEntry (Descriptor, - CastLocalTimeOffsetEntry(Ptr)->country_code1, - CastLocalTimeOffsetEntry(Ptr)->country_code2, - CastLocalTimeOffsetEntry(Ptr)->country_code3, - CastLocalTimeOffsetEntry(Ptr)->country_region_id, co, ct, no); - Length -= LOCAL_TIME_OFFSET_ENTRY_LEN; - Ptr += LOCAL_TIME_OFFSET_ENTRY_LEN; - } - break; - - case DESCR_VIDEO_STREAM: - case DESCR_AUDIO_STREAM: - case DESCR_HIERARCHY: - case DESCR_REGISTRATION: - case DESCR_DATA_STREAM_ALIGN: - case DESCR_TARGET_BACKGRID: - case DESCR_VIDEO_WINDOW: - case DESCR_SYSTEM_CLOCK: - case DESCR_MULTIPLEX_BUFFER_UTIL: - case DESCR_COPYRIGHT: - case DESCR_MAXIMUM_BITRATE: - case DESCR_PRIVATE_DATA_IND: - case DESCR_SMOOTHING_BUFFER: - case DESCR_STD: - case DESCR_IBP: - case DESCR_VBI_DATA: - case DESCR_VBI_TELETEXT: - case DESCR_MOSAIC: - case DESCR_TELEPHONE: - case DESCR_ML_NW_NAME: - case DESCR_ML_BQ_NAME: - case DESCR_ML_SERVICE_NAME: - case DESCR_ML_COMPONENT: - case DESCR_PRIV_DATA_SPEC: - case DESCR_SERVICE_MOVE: - case DESCR_SHORT_SMOOTH_BUF: - case DESCR_FREQUENCY_LIST: - case DESCR_PARTIAL_TP_STREAM: - case DESCR_DATA_BROADCAST: - case DESCR_CA_SYSTEM: - case DESCR_DATA_BROADCAST_ID: - case DESCR_TRANSPORT_STREAM: - case DESCR_DSNG: - case DESCR_PDC: - case DESCR_CELL_LIST: - case DESCR_CELL_FREQ_LINK: - case DESCR_ANNOUNCEMENT_SUPPORT: - default: -// fprintf (stderr, "Unsupported descriptor with tag = 0x%02X\n", GetDescriptorTag(Ptr)); -// siDumpDescriptor (Buffer); - /* fprintf (stderr, "unsupported descriptor 0x%x\n", - GetDescriptorTag(Buffer)); */ - break; - } - if (Descriptor) xAddTail (Descriptors, Descriptor); - return; -} - - -/* - * ToDo: ETSI conformal text definition - */ -#define GDT_TEXT_DESCRIPTOR 0 -#define GDT_NAME_DESCRIPTOR 1 -char *siGetDescriptorTextHandler (u_char *, int , int ); - -char *siGetDescriptorTextHandler (u_char *Buffer, int Length, int type) -{ - char *tmp, *result; - int i; - - if ((Length < 0) || (Length > 4095)) - return (xSetText ("text error")); -/* ASSENIZATION: removing coding detection - suppose they are all ANSI */ - // if (*Buffer == 0x05 || (*Buffer >= 0x20 && *Buffer <= 0xff)) - { - xMemAlloc (Length+1, &result); - tmp = result; - for (i = 0; i < Length; i++) - { - if (*Buffer == 0) break; - - if ((*Buffer >= ' ' && *Buffer <= '~') || (*Buffer == '\n') || - (*Buffer >= 0xa0)) *tmp++ = *Buffer; - if (*Buffer == 0x8A) *tmp++ = '\n'; - if ((*Buffer == 0x86 || *Buffer == 0x87) && !(GDT_NAME_DESCRIPTOR & type)) *tmp++ = ' '; - Buffer++; - } - *tmp = '\0'; - } - /* else - { - switch (*Buffer) - { - case 0x01: result = xSetText ("Coding according to character table 1"); break; - case 0x02: result = xSetText ("Coding according to character table 2"); break; - case 0x03: result = xSetText ("Coding according to character table 3"); break; - case 0x04: result = xSetText ("Coding according to character table 4"); break; - case 0x10: result = xSetText ("Coding according to ISO/IEC 8859"); break; - case 0x11: result = xSetText ("Coding according to ISO/IEC 10646"); break; - case 0x12: result = xSetText ("Coding according to KSC 5601"); break; - default: result = xSetText ("Unknown coding"); break; - } - } */ - - return (result); -} - -char *siGetDescriptorText (u_char *Buffer, int Length) -{ - return siGetDescriptorTextHandler (Buffer, Length, GDT_TEXT_DESCRIPTOR); -} - -char *siGetDescriptorName (u_char *Buffer, int Length) -{ - return siGetDescriptorTextHandler (Buffer, Length, GDT_NAME_DESCRIPTOR); -} - - -// CRC32 lookup table for polynomial 0x04c11db7 - -static u_long crc_table[256] = { - 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, - 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, - 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, - 0x4593e01e, 0x4152fda9, 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75, - 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011, 0x791d4014, 0x7ddc5da3, - 0x709f7b7a, 0x745e66cd, 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039, - 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5, 0xbe2b5b58, 0xbaea46ef, - 0xb7a96036, 0xb3687d81, 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d, - 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49, 0xc7361b4c, 0xc3f706fb, - 0xceb42022, 0xca753d95, 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1, - 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d, 0x34867077, 0x30476dc0, - 0x3d044b19, 0x39c556ae, 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072, - 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16, 0x018aeb13, 0x054bf6a4, - 0x0808d07d, 0x0cc9cdca, 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde, - 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02, 0x5e9f46bf, 0x5a5e5b08, - 0x571d7dd1, 0x53dc6066, 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba, - 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e, 0xbfa1b04b, 0xbb60adfc, - 0xb6238b25, 0xb2e29692, 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6, - 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a, 0xe0b41de7, 0xe4750050, - 0xe9362689, 0xedf73b3e, 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2, - 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686, 0xd5b88683, 0xd1799b34, - 0xdc3abded, 0xd8fba05a, 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637, - 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb, 0x4f040d56, 0x4bc510e1, - 0x46863638, 0x42472b8f, 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53, - 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47, 0x36194d42, 0x32d850f5, - 0x3f9b762c, 0x3b5a6b9b, 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff, - 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623, 0xf12f560e, 0xf5ee4bb9, - 0xf8ad6d60, 0xfc6c70d7, 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b, - 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f, 0xc423cd6a, 0xc0e2d0dd, - 0xcda1f604, 0xc960ebb3, 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7, - 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b, 0x9b3660c6, 0x9ff77d71, - 0x92b45ba8, 0x9675461f, 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3, - 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640, 0x4e8ee645, 0x4a4ffbf2, - 0x470cdd2b, 0x43cdc09c, 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8, - 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24, 0x119b4be9, 0x155a565e, - 0x18197087, 0x1cd86d30, 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec, - 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088, 0x2497d08d, 0x2056cd3a, - 0x2d15ebe3, 0x29d4f654, 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0, - 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c, 0xe3a1cbc1, 0xe760d676, - 0xea23f0af, 0xeee2ed18, 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4, - 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0, 0x9abc8bd5, 0x9e7d9662, - 0x933eb0bb, 0x97ffad0c, 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668, - 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4}; - -static u_long crc32 (char *data, int len) -{ - register int i; - u_long crc = 0xffffffff; - - for (i=0; i<len; i++) - crc = (crc << 8) ^ crc_table[((crc >> 24) ^ *data++) & 0xff]; - - return crc; -} |