mirror of
				https://github.com/rofafor/vdr-plugin-femon.git
				synced 2023-10-10 11:36:53 +00:00 
			
		
		
		
	Compare commits
	
		
			15 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 4e8fdaf99f | ||
|  | eb2da4721c | ||
|  | 5cf9b4af0b | ||
|  | 83556bf2d3 | ||
|  | 2340ade6c8 | ||
|  | 7db77978b5 | ||
|  | ab8f5f3de8 | ||
|  | 427b3023ba | ||
|  | 8f283f27f5 | ||
|  | c4fda38364 | ||
|  | 219fc78226 | ||
|  | 5333a9274d | ||
|  | a8c065639a | ||
|  | fa41c95b1c | ||
|  | 6eb4329fff | 
							
								
								
									
										63
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										63
									
								
								HISTORY
									
									
									
									
									
								
							| @@ -29,7 +29,8 @@ VDR Plugin 'femon' Revision History | ||||
|  | ||||
| - Redesigned the user interface. | ||||
| - Transponder information is now available in advanced display mode: | ||||
|   Press 'OK' key to switch between the simple and the advanced display mode. | ||||
|   Press 'OK' key to switch between the simple and the advanced display | ||||
|   mode. | ||||
| - Moved bitrate calculation to it's own thread for improved accurancy. | ||||
|  | ||||
| 2004-03-07: Version 0.0.3a | ||||
| @@ -41,7 +42,8 @@ VDR Plugin 'femon' Revision History | ||||
| 2004-03-16: Version 0.0.3b | ||||
|  | ||||
| - Fixed channel toggling with '0' key. | ||||
| - Bitrate calculation thread is now canceled immediately to speed up channel switching. | ||||
| - Bitrate calculation thread is now canceled immediately to speed up | ||||
|   channel switching. | ||||
|  | ||||
| 2004-04-04: Version 0.0.3c | ||||
|  | ||||
| @@ -88,7 +90,8 @@ VDR Plugin 'femon' Revision History | ||||
|  | ||||
| 2004-06-11: Version 0.1.3 | ||||
|  | ||||
| - Added "AC-3 Stream Information" display mode (Thanks to Lothar Englisch). | ||||
| - Added "AC-3 Stream Information" display mode (Thanks to Lothar | ||||
|   Englisch). | ||||
|  | ||||
| 2004-06-24: Version 0.1.4 | ||||
|  | ||||
| @@ -100,7 +103,8 @@ VDR Plugin 'femon' Revision History | ||||
|  | ||||
| - Fixed OSDSTATUSWIN_XC define. | ||||
| - Added preliminary NTSC support (make NTSC_SYSTEM=1 plugins). | ||||
| - Fixed "Setup/OSD/Use Small Fonts" bug (Thanks to Winni for reporting this one). | ||||
| - Fixed "Setup/OSD/Use Small Fonts" bug (Thanks to Winni for reporting | ||||
|   this one). | ||||
| - Added patches directory: CA system names by Lauri Tischler. | ||||
|  | ||||
| 2004-09-11: Version 0.1.6 | ||||
| @@ -146,7 +150,8 @@ VDR Plugin 'femon' Revision History | ||||
| 2005-04-01: Version 0.8.7 | ||||
|  | ||||
| - Default make target is now all. | ||||
| - Fixed the access rights of symbols subdirectory (Thanks to Harri Kukkonen). | ||||
| - Fixed the access rights of symbols subdirectory (Thanks to Harri | ||||
|   Kukkonen). | ||||
| - Added a new theme: Moronimo (Thanks to Morone). | ||||
|  | ||||
| 2005-04-02: Version 0.8.8 | ||||
| @@ -160,7 +165,8 @@ VDR Plugin 'femon' Revision History | ||||
|  | ||||
| 2005-05-20: Version 0.9.0 | ||||
|  | ||||
| - Renamed compiling switches ('DEBUG' to 'FEMON_DEBUG' and 'NTSC_SYSTEM' to 'FEMON_NTSC'). | ||||
| - Renamed compiling switches ('DEBUG' to 'FEMON_DEBUG' and 'NTSC_SYSTEM' | ||||
|   to 'FEMON_NTSC'). | ||||
| - Enabled preliminary support for the device switching. | ||||
|  | ||||
| 2005-07-23: Version 0.9.1 | ||||
| @@ -200,7 +206,8 @@ VDR Plugin 'femon' Revision History | ||||
|  | ||||
| - Updated for vdr-1.3.40. | ||||
| - Fixed a translation bug (Thanks to Antti Hartikainen). | ||||
| - Fixed AC3 header parsing bug (Thanks to Axel Katzur for reporting this one). | ||||
| - Fixed AC3 header parsing bug (Thanks to Axel Katzur for reporting this | ||||
|   one). | ||||
| - Fixed EgalsTry theme (Thanks to Uwe Hanke). | ||||
|  | ||||
| 2006-02-06: Version 0.9.7 | ||||
| @@ -248,7 +255,8 @@ VDR Plugin 'femon' Revision History | ||||
|  | ||||
| 2007-05-01: Version 1.1.2 | ||||
|  | ||||
| - Fixed opening while replaying (Thanks to Antti Seppälä for reporting this one). | ||||
| - Fixed opening while replaying (Thanks to Antti Seppälä for reporting | ||||
|   this one). | ||||
|  | ||||
| 2007-05-15: Version 1.1.3 | ||||
|  | ||||
| @@ -298,7 +306,7 @@ VDR Plugin 'femon' Revision History | ||||
| 2008-06-20: Version 1.6.1 | ||||
|  | ||||
| - Updated Italian translation (Thanks to Diego Pierotto). | ||||
| - Fixed a crash if no channel available (Thanks to Winfried Köhler) | ||||
| - Fixed a crash if no channel available (Thanks to Winfried Köhler). | ||||
|  | ||||
| 2008-10-12: Version 1.6.2 | ||||
|  | ||||
| @@ -310,3 +318,40 @@ VDR Plugin 'femon' Revision History | ||||
| - Added initial support for H.264 and HE-AAC. | ||||
| - Fixed detection of false positives in audio/video streams. | ||||
| - Refactored source code. | ||||
|  | ||||
| 2008-11-30: Version 1.6.4 | ||||
|  | ||||
| - Added new helper functions. | ||||
| - Updated Italian translation (Thanks to Diego Pierotto). | ||||
| - Fixed a memory leak. | ||||
| - Added a check for the minimum OSD height. | ||||
| - Replaced "Use single area (8bpp)" option with VDR's | ||||
|   "Setup/OSD/Anti-alias". | ||||
| - Removed the FEMON_NTSC option. | ||||
| - Fixed a deadlock in cFemonReceiver (Thanks to Antti Seppälä for | ||||
|   reporting this one). | ||||
|  | ||||
| 2008-12-16: Version 1.6.5 | ||||
|  | ||||
| - Backported from 1.7.0. | ||||
|  | ||||
| 2009-01-06: Version 1.6.6 | ||||
|  | ||||
| - Backported from 1.7.1. | ||||
|  | ||||
| =================================== | ||||
| VDR Plugin 'femon' Revision History | ||||
| =================================== | ||||
|  | ||||
| 2008-12-16: Version 1.7.0 | ||||
|  | ||||
| - Updated for vdr-1.7.2. | ||||
| - Added whitespace cleanups. | ||||
| - Changed info window to use the channel source instead of the frontend | ||||
|   type. | ||||
| - Removed the "Show CA system" setup option. | ||||
|  | ||||
| 2009-01-06: Version 1.7.1 | ||||
|  | ||||
| - Fixed closing of frontend file handles (Thanks to Brendon Higgins for | ||||
|   reporting this one). | ||||
|   | ||||
							
								
								
									
										7
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								Makefile
									
									
									
									
									
								
							| @@ -5,9 +5,6 @@ | ||||
| # Debugging on/off  | ||||
| #FEMON_DEBUG = 1 | ||||
|  | ||||
| # NTSC on/off  | ||||
| #FEMON_NTSC = 1 | ||||
|  | ||||
| # Strip debug symbols?  Set eg. to /bin/true if not | ||||
| STRIP = strip | ||||
|  | ||||
| @@ -53,10 +50,6 @@ INCLUDES += -I$(VDRDIR)/include | ||||
|  | ||||
| DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"' | ||||
|  | ||||
| ifdef FEMON_NTSC | ||||
| DEFINES += -DNTSC | ||||
| endif | ||||
|  | ||||
| ifdef FEMON_DEBUG | ||||
| DEFINES += -DDEBUG | ||||
| endif | ||||
|   | ||||
							
								
								
									
										4
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								README
									
									
									
									
									
								
							| @@ -15,7 +15,7 @@ See the file COPYING for license information. | ||||
|  | ||||
| Requirements: | ||||
|  | ||||
| VDR & DVB. BMW & Ph.D.. BEER. YARRR! | ||||
| VDR and a DVB card. | ||||
|  | ||||
| Description: | ||||
|  | ||||
| @@ -112,7 +112,7 @@ Notes: | ||||
| - If the OSD isn't visible, you've configured the OSD height too big or too | ||||
|   small. Please, try to adjust the variable on the setup page before writing | ||||
|   any bug reports. NTSC users should use a shrinked default OSD height by | ||||
|   compiling the plugin with: make FEMON_NTSC=1 | ||||
|   modifying VDR's setup.conf: femon.OSDHeight = 420 | ||||
|  | ||||
| - If the SVDRP service is used: femon won't notice if the server is tuned | ||||
|   to a different channel and tuning the channel on the server might annoy | ||||
|   | ||||
							
								
								
									
										16
									
								
								femon.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								femon.c
									
									
									
									
									
								
							| @@ -14,11 +14,11 @@ | ||||
| #include "femonservice.h" | ||||
| #include "femontools.h" | ||||
|  | ||||
| #if defined(APIVERSNUM) && APIVERSNUM < 10600 | ||||
| #error "VDR-1.6.0 API version or greater is required!" | ||||
| #if defined(APIVERSNUM) && APIVERSNUM < 10700 | ||||
| #error "VDR-1.7.0 API version or greater is required!" | ||||
| #endif | ||||
|  | ||||
| static const char VERSION[]       = "1.6.3"; | ||||
| static const char VERSION[]       = "1.7.1"; | ||||
| static const char DESCRIPTION[]   = trNOOP("DVB Signal Information Monitor (OSD)"); | ||||
| static const char MAINMENUENTRY[] = trNOOP("Signal Information"); | ||||
|  | ||||
| @@ -108,14 +108,12 @@ bool cPluginFemon::SetupParse(const char *Name, const char *Value) | ||||
| { | ||||
|   // Parse your own setup parameters and store their values. | ||||
|   if      (!strcasecmp(Name, "HideMenu"))       femonConfig.hidemenu       = atoi(Value); | ||||
|   else if (!strcasecmp(Name, "UseSingleArea"))  femonConfig.usesinglearea  = atoi(Value); | ||||
|   else if (!strcasecmp(Name, "DisplayMode"))    femonConfig.displaymode    = atoi(Value); | ||||
|   else if (!strcasecmp(Name, "Position"))       femonConfig.position       = atoi(Value); | ||||
|   else if (!strcasecmp(Name, "OSDHeight"))      femonConfig.osdheight      = atoi(Value); | ||||
|   else if (!strcasecmp(Name, "OSDOffset"))      femonConfig.osdoffset      = atoi(Value); | ||||
|   else if (!strcasecmp(Name, "Skin"))           femonConfig.skin           = atoi(Value); | ||||
|   else if (!strcasecmp(Name, "Theme"))          femonConfig.theme          = atoi(Value); | ||||
|   else if (!strcasecmp(Name, "ShowCASystem"))   femonConfig.showcasystem   = atoi(Value); | ||||
|   else if (!strcasecmp(Name, "RedLimit"))       femonConfig.redlimit       = atoi(Value); | ||||
|   else if (!strcasecmp(Name, "GreenLimit"))     femonConfig.greenlimit     = atoi(Value); | ||||
|   else if (!strcasecmp(Name, "UpdateInterval")) femonConfig.updateinterval = atoi(Value); | ||||
| @@ -311,9 +309,6 @@ void cMenuFemonSetup::Setup(void) | ||||
|   Add(new cMenuEditBoolItem(tr("Hide main menu entry"), &data.hidemenu)); | ||||
|   help.Append(tr("Define whether the main menu entry is hidden.")); | ||||
|  | ||||
|   Add(new cMenuEditBoolItem(tr("Use single area (8bpp)"), &data.usesinglearea)); | ||||
|   help.Append(tr("Define whether a single 8bpp OSD area is preferred.\n\nRequired by Truetype fonts and anti-aliasing.")); | ||||
|  | ||||
|   Add(new cMenuEditStraItem(tr("Default display mode"), &data.displaymode, eFemonModeMaxNumber, dispmodes)); | ||||
|   help.Append(tr("Define the default display mode at startup.")); | ||||
|  | ||||
| @@ -332,9 +327,6 @@ void cMenuFemonSetup::Setup(void) | ||||
|   Add(new cMenuEditIntItem(tr("Horizontal offset"), &data.osdoffset, -50, 50)); | ||||
|   help.Append(tr("Define the horizontal offset of OSD.")); | ||||
|  | ||||
|   Add(new cMenuEditBoolItem(tr("Show CA system"), &data.showcasystem)); | ||||
|   help.Append(tr("Define whether the CA system is shown as text.")); | ||||
|  | ||||
|   Add(new cMenuEditIntItem(tr("Red limit [%]"), &data.redlimit, 1, 50)); | ||||
|   help.Append(tr("Define a limit for red bar, which is used to indicate a bad signal.")); | ||||
|  | ||||
| @@ -372,14 +364,12 @@ void cMenuFemonSetup::Store(void) | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
|   femonConfig = data; | ||||
|   SetupStore("HideMenu",       femonConfig.hidemenu); | ||||
|   SetupStore("UseSingleArea",  femonConfig.usesinglearea); | ||||
|   SetupStore("DisplayMode",    femonConfig.displaymode); | ||||
|   SetupStore("Skin",           femonConfig.skin); | ||||
|   SetupStore("Theme",          femonConfig.theme); | ||||
|   SetupStore("Position",       femonConfig.position); | ||||
|   SetupStore("OSDHeight",      femonConfig.osdheight); | ||||
|   SetupStore("OSDOffset",      femonConfig.osdoffset); | ||||
|   SetupStore("ShowCASystem",   femonConfig.showcasystem); | ||||
|   SetupStore("RedLimit",       femonConfig.redlimit); | ||||
|   SetupStore("GreenLimit",     femonConfig.greenlimit); | ||||
|   SetupStore("UpdateInterval", femonConfig.updateinterval); | ||||
|   | ||||
| @@ -13,7 +13,6 @@ cFemonConfig femonConfig; | ||||
| cFemonConfig::cFemonConfig(void) | ||||
| { | ||||
|   hidemenu       = 0; | ||||
|   usesinglearea  = 0; | ||||
|   displaymode    = 0; | ||||
|   skin           = 0; | ||||
|   theme          = 0; | ||||
| @@ -23,12 +22,7 @@ cFemonConfig::cFemonConfig(void) | ||||
|   updateinterval = 5; | ||||
|   analyzestream  = 1; | ||||
|   calcinterval   = 20; | ||||
|   showcasystem   = 0; | ||||
| #ifdef NTSC | ||||
|   osdheight      = 420; | ||||
| #else | ||||
|   osdheight      = 480; | ||||
| #endif | ||||
|   osdoffset      = 0; | ||||
|   usesvdrp       = 0; | ||||
|   svdrpport      = 2001; | ||||
|   | ||||
| @@ -24,7 +24,6 @@ struct cFemonConfig | ||||
| public: | ||||
|   cFemonConfig(void); | ||||
|   int hidemenu; | ||||
|   int usesinglearea; | ||||
|   int displaymode; | ||||
|   int skin; | ||||
|   int theme; | ||||
| @@ -34,7 +33,6 @@ public: | ||||
|   int updateinterval; | ||||
|   int analyzestream; | ||||
|   int calcinterval; | ||||
|   int showcasystem; | ||||
|   int osdheight; | ||||
|   int osdoffset; | ||||
|   int usesvdrp; | ||||
|   | ||||
							
								
								
									
										134
									
								
								femonh264.c
									
									
									
									
									
								
							
							
						
						
									
										134
									
								
								femonh264.c
									
									
									
									
									
								
							| @@ -85,7 +85,6 @@ typedef struct { | ||||
| #define br_skip_ue_golomb(br) br_skip_golomb(br) | ||||
| #define br_skip_se_golomb(br) br_skip_golomb(br) | ||||
|  | ||||
|  | ||||
| static inline void br_init(br_state *br, const uint8_t *data, int bytes) | ||||
| { | ||||
|   br->data  = data; | ||||
| @@ -235,11 +234,11 @@ static bool h264_parse_sps(const uint8_t *buf, int len, h264_sps_data_t *sps) | ||||
|            br_skip_bit(&br);           // sar_width | ||||
|            br_skip_bit(&br);           // sar_height | ||||
|            sps->aspect_ratio = VIDEO_ASPECT_RATIO_EXTENDED; | ||||
|            //Dprintf("H.264 SPS: -> sar %dx%d", sar_width, sar_height); | ||||
|            //Dprintf("H.264 SPS: aspect ratio extended"); | ||||
|            } | ||||
|         else if (aspect_ratio_idc < sizeof(aspect_ratios) / sizeof(aspect_ratios[0])) { | ||||
|            sps->aspect_ratio = aspect_ratios[aspect_ratio_idc]; | ||||
|            //Dprintf("H.264 SPS: -> aspect ratio %d", sps->aspect); | ||||
|            //Dprintf("H.264 SPS: -> aspect ratio %d", sps->aspect_ratio); | ||||
|            } | ||||
|         } | ||||
|      if (br_get_bit(&br))            // overscan_info_present_flag | ||||
| @@ -253,7 +252,7 @@ static bool h264_parse_sps(const uint8_t *buf, int len, h264_sps_data_t *sps) | ||||
|         } | ||||
|      } | ||||
|  | ||||
|   //Dprintf("H.264 SPS: -> video size %dx%d, aspect %d", sps->width, sps->height, sps->aspect); | ||||
|   //Dprintf("H.264 SPS: -> video size %dx%d, aspect %d", sps->width, sps->height, sps->aspect_ratio); | ||||
|  | ||||
|   if (BR_EOF(&br)) { | ||||
|      //Dprintf("H.264 SPS: not enough data ?"); | ||||
| @@ -263,76 +262,75 @@ static bool h264_parse_sps(const uint8_t *buf, int len, h264_sps_data_t *sps) | ||||
|   return true; | ||||
| } | ||||
|  | ||||
| #if 0 | ||||
| static bool h264_parse_sei(const uint8_t *buf, int len, h264_sei_data_t *sei) | ||||
| { | ||||
|   int num_referenced_subseqs, i; | ||||
|   br_state br = BR_INIT(buf, len); | ||||
|  | ||||
|   while (!BR_EOF(&br)) { | ||||
|       { // sei_message | ||||
|         int lastByte, payloadSize = 0, payloadType = 0; | ||||
|         // last_payload_type_byte | ||||
|         do { | ||||
|           lastByte = br_get_u8(&br); | ||||
|           payloadType += lastByte; | ||||
|         } while (lastByte != 0xFF); | ||||
|   while (!BR_EOF(&br)) { // sei_message | ||||
|     int lastByte, payloadSize = 0, payloadType = 0; | ||||
|  | ||||
|         // last_payload_size_byte | ||||
|         do { | ||||
|           lastByte = br_get_u8(&br); | ||||
|           payloadSize += lastByte; | ||||
|         } while (lastByte != 0xFF); | ||||
|     // last_payload_type_byte | ||||
|     do { | ||||
|        lastByte = br_get_u8(&br) & 0xFF; | ||||
|        payloadType += lastByte; | ||||
|     } while (lastByte == 0xFF); | ||||
|  | ||||
|         { // sei_payload | ||||
|           switch (payloadType) { | ||||
|             //case 1:                                          // pic_timing | ||||
|             //     ... | ||||
|             //     switch (br_get_bits(&br, 2)) {              // ct_type | ||||
|             //       case 0: | ||||
|             //            sei->scan = VIDEO_SCAN_PROGRESSIVE; | ||||
|             //            break; | ||||
|     // last_payload_size_byte | ||||
|     do { | ||||
|        lastByte = br_get_u8(&br) & 0xFF; | ||||
|        payloadSize += lastByte; | ||||
|     } while (lastByte == 0xFF); | ||||
|  | ||||
|             //       case 1: | ||||
|             //            sei->scan = VIDEO_SCAN_INTERLACED; | ||||
|             //            break; | ||||
|     switch (payloadType) {                             // sei_payload | ||||
|       //case 1:                                        // pic_timing | ||||
|       //     ... | ||||
|       //     switch (br_get_bits(&br, 2)) {            // ct_type | ||||
|       //       case 0: | ||||
|       //            sei->scan = VIDEO_SCAN_PROGRESSIVE; | ||||
|       //            break; | ||||
|       //       case 1: | ||||
|       //            sei->scan = VIDEO_SCAN_INTERLACED; | ||||
|       //            break; | ||||
|       //       case 2: | ||||
|       //            sei->scan = VIDEO_SCAN_UNKNOWN; | ||||
|       //            break; | ||||
|       //       default: | ||||
|       //            sei->scan = VIDEO_SCAN_RESERVED; | ||||
|       //            break; | ||||
|       //       } | ||||
|       //     break; | ||||
|  | ||||
|             //       case 2: | ||||
|             //            sei->scan = VIDEO_SCAN_UNKNOWN; | ||||
|             //            break; | ||||
|       case 12:                                         // sub_seq_characteristics | ||||
|            br_skip_ue_golomb(&br);                     // sub_seq_layer_num | ||||
|            br_skip_ue_golomb(&br);                     // sub_seq_id | ||||
|            if (br_get_bit(&br))                        // duration_flag | ||||
|               br_skip_bits(&br, 32);                   // sub_seq_duration | ||||
|            if (br_get_bit(&br)) {                      // average_rate_flag | ||||
|               br_skip_bit(&br);                        // accurate_statistics_flag | ||||
|               sei->bitrate = br_get_u16(&br);          // average_bit_rate | ||||
|               sei->frame_rate = br_get_u16(&br);       // average_frame_rate | ||||
|               //Dprintf("H.264 SEI: -> stream bitrate %.1f, frame rate %.1f", sei->bitrate, sei->frame_rate); | ||||
|               } | ||||
|            num_referenced_subseqs = br_get_ue_golomb(&br); // num_referenced_subseqs | ||||
|            for (i = 0; i < num_referenced_subseqs; ++i) { | ||||
|                br_skip_ue_golomb(&br);                 // ref_sub_seq_layer_num | ||||
|                br_skip_ue_golomb(&br);                 // ref_sub_seq_id | ||||
|                br_get_bit(&br);                        // ref_sub_seq_direction | ||||
|                } | ||||
|            break; | ||||
|  | ||||
|             //       default: | ||||
|             //            sei->scan = VIDEO_SCAN_RESERVED; | ||||
|             //            break; | ||||
|             //       } | ||||
|             //     break; | ||||
|       default: | ||||
|            br_skip_bits(&br, payloadSize); | ||||
|            break; | ||||
|       } | ||||
|  | ||||
|             case 12:                                         // sub_seq_characteristics | ||||
|                  br_skip_ue_golomb(&br);                     // sub_seq_layer_num | ||||
|                  br_skip_ue_golomb(&br);                     // sub_seq_id | ||||
|                  if (br_get_bit(&br)) {                      // duration_flag | ||||
|                    br_skip_bits(&br, 32);                    // sub_seq_duration | ||||
|                    if (br_get_bit(&br)) {                    // average_rate_flag | ||||
|                       br_skip_bit(&br);                      // accurate_statistics_flag | ||||
|                       sei->bitrate = br_get_u16(&br);        // average_bit_rate | ||||
|                       sei->frame_rate = br_get_u16(&br);     // average_frame_rate | ||||
|                       //Dprintf("H.264 SEI: -> stream bitrate %d, frame rate %d", sei->bitrate, sei->frame_rate); | ||||
|                       } | ||||
|                    } | ||||
|                  break; | ||||
|  | ||||
|             default: | ||||
|                  br_skip_bits(&br, payloadSize); | ||||
|                  break; | ||||
|             }             | ||||
|           // force byte align | ||||
|           br_byte_align(&br); | ||||
|         } // sei_payload | ||||
|       }   // sei_message | ||||
|     }; | ||||
|     // force byte align | ||||
|     br_byte_align(&br); | ||||
|     } | ||||
|  | ||||
|   return true; | ||||
| } | ||||
| #endif | ||||
|  | ||||
| static int h264_nal_unescape(uint8_t *dst, const uint8_t *src, int len) | ||||
| { | ||||
| @@ -374,6 +372,8 @@ static int h264_get_picture_type(const uint8_t *buf, int len) | ||||
|  | ||||
| bool getH264VideoInfo(uint8_t *buf, int len, video_info_t *info) | ||||
| { | ||||
|   bool sps_found = false, sei_found = true; // sei currently disabled | ||||
|  | ||||
|   // H.264 detection, search for NAL AUD | ||||
|   if (!IS_NAL_AUD(buf)) | ||||
|      return false; | ||||
| @@ -387,7 +387,7 @@ bool getH264VideoInfo(uint8_t *buf, int len, video_info_t *info) | ||||
|   // Scan video packet ... | ||||
|   for (int i = 5; i < len - 4; i++) { | ||||
|       // ... for sequence parameter set | ||||
|       if ((buf[i] == 0x00) && (buf[i + 1] == 0x00) && (buf[i + 2] == 0x01) && (buf[i + 3] & 0x1f) == NAL_SPS) { | ||||
|       if (!sps_found && (buf[i] == 0x00) && (buf[i + 1] == 0x00) && (buf[i + 2] == 0x01) && (buf[i + 3] & 0x1f) == NAL_SPS) { | ||||
|          uint8_t nal_data[len]; | ||||
|          int nal_len; | ||||
|          //Dprintf("H.264: Found NAL SPS at offset %d/%d", i, len); | ||||
| @@ -398,13 +398,12 @@ bool getH264VideoInfo(uint8_t *buf, int len, video_info_t *info) | ||||
|                info->width = sps.width; | ||||
|                info->height = sps.height; | ||||
|                info->aspectRatio = sps.aspect_ratio; | ||||
|                return true; | ||||
|                sps_found = true; | ||||
|                } | ||||
|             } | ||||
|          } | ||||
| #if 0 | ||||
|       // ... for supplemental enhancement information | ||||
|       else if ((buf[i] == 0x00) && (buf[i + 1] == 0x00) && (buf[i + 2] == 0x01) && (buf[i + 3] & 0x1f) == NAL_SEI) { | ||||
|       if (!sei_found && (buf[i] == 0x00) && (buf[i + 1] == 0x00) && (buf[i + 2] == 0x01) && (buf[i + 3] & 0x1f) == NAL_SEI) { | ||||
|          uint8_t nal_data[len]; | ||||
|          int nal_len; | ||||
|          //Dprintf("H.264: Found NAL SEI at offset %d/%d", i, len); | ||||
| @@ -414,11 +413,12 @@ bool getH264VideoInfo(uint8_t *buf, int len, video_info_t *info) | ||||
|                info->frameRate = sei.frame_rate; | ||||
|                info->bitrate = sei.bitrate; | ||||
|                info->scan = sei.scan; | ||||
|                return true; | ||||
|                sei_found = true; | ||||
|                } | ||||
|             } | ||||
|          } | ||||
| #endif | ||||
|       if (sps_found && sei_found) | ||||
|          break; | ||||
|       } | ||||
|  | ||||
|   return true; | ||||
|   | ||||
							
								
								
									
										223
									
								
								femonosd.c
									
									
									
									
									
								
							
							
						
						
									
										223
									
								
								femonosd.c
									
									
									
									
									
								
							| @@ -21,8 +21,8 @@ | ||||
| #define OSDINFOHEIGHT             (OSDROWHEIGHT * 13)     // in pixels (13 rows) | ||||
| #define OSDSTATUSHEIGHT           (OSDROWHEIGHT * 6)      // in pixels (6 rows) | ||||
| #define OSDSPACING                5 | ||||
| #define OSDCORNERING              10 | ||||
| #define IS_OSDCORNERING           (femonConfig.skin == eFemonSkinElchi) | ||||
| #define OSDROUNDING               10 | ||||
| #define IS_OSDROUNDING            (femonConfig.skin == eFemonSkinElchi) | ||||
|  | ||||
| #define OSDINFOWIN_Y(offset)      (femonConfig.position ? (OSDHEIGHT - OSDINFOHEIGHT + offset) : offset) | ||||
| #define OSDINFOWIN_X(col)         ((col == 4) ? 455 : (col == 3) ? 305 : (col == 2) ? 155 : 15) | ||||
| @@ -36,11 +36,11 @@ | ||||
|            x -= bm->Width() + spacing; \ | ||||
|            y = (OSDROWHEIGHT - bm->Height()) / 2; \ | ||||
|            if (y < 0) y = 0; \ | ||||
|            m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset + y), *bm, femonTheme[femonConfig.theme].clrTitleText, femonTheme[femonConfig.theme].clrTitleBackground); \ | ||||
|            m_Osd->DrawBitmap(x, OSDSTATUSWIN_Y(offset) + y, *bm, femonTheme[femonConfig.theme].clrTitleText, femonTheme[femonConfig.theme].clrTitleBackground); \ | ||||
|            } | ||||
|  | ||||
| #define OSDDRAWSTATUSFRONTEND(column, bitmap, status) \ | ||||
|         m_Osd->DrawBitmap(OSDSTATUSWIN_XSYMBOL(column, x), OSDSTATUSWIN_Y(offset + y), bitmap, (m_FrontendStatus & status) ? femonTheme[femonConfig.theme].clrActiveText : femonTheme[femonConfig.theme].clrRed, femonTheme[femonConfig.theme].clrBackground) | ||||
|         m_Osd->DrawBitmap(OSDSTATUSWIN_XSYMBOL(column, x), OSDSTATUSWIN_Y(offset) + y, bitmap, (m_FrontendStatus & status) ? femonTheme[femonConfig.theme].clrActiveText : femonTheme[femonConfig.theme].clrRed, femonTheme[femonConfig.theme].clrBackground) | ||||
|  | ||||
| #define OSDDRAWSTATUSVALUES(label1, label2, label3, label4, label5, label6, label7) \ | ||||
|         m_Osd->DrawText(OSDSTATUSWIN_X(1), OSDSTATUSWIN_Y(offset), label1, femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); \ | ||||
| @@ -54,28 +54,31 @@ | ||||
| #define OSDDRAWSTATUSBAR(value) \ | ||||
|         if (value > 0) { \ | ||||
|            value = OSDBARWIDTH(value); \ | ||||
|            m_Osd->DrawRectangle(0, OSDSTATUSWIN_Y(offset + 3), min(OSDBARWIDTH(femonConfig.redlimit), value), OSDSTATUSWIN_Y(offset + OSDROWHEIGHT - 3), femonTheme[femonConfig.theme].clrRed); \ | ||||
|            m_Osd->DrawRectangle(0, OSDSTATUSWIN_Y(offset) + 3, min(OSDBARWIDTH(femonConfig.redlimit), value), OSDSTATUSWIN_Y(offset) + OSDROWHEIGHT - 3, femonTheme[femonConfig.theme].clrRed); \ | ||||
|            if (value > OSDBARWIDTH(femonConfig.redlimit)) \ | ||||
|               m_Osd->DrawRectangle(OSDBARWIDTH(femonConfig.redlimit), OSDSTATUSWIN_Y(offset + 3), min((OSDWIDTH * femonConfig.greenlimit / 100), value), OSDSTATUSWIN_Y(offset + OSDROWHEIGHT - 3), femonTheme[femonConfig.theme].clrYellow); \ | ||||
|               m_Osd->DrawRectangle(OSDBARWIDTH(femonConfig.redlimit), OSDSTATUSWIN_Y(offset) + 3, min((OSDWIDTH * femonConfig.greenlimit / 100), value), OSDSTATUSWIN_Y(offset) + OSDROWHEIGHT - 3, femonTheme[femonConfig.theme].clrYellow); \ | ||||
|            if (value > OSDBARWIDTH(femonConfig.greenlimit)) \ | ||||
|               m_Osd->DrawRectangle(OSDBARWIDTH(femonConfig.greenlimit), OSDSTATUSWIN_Y(offset + 3), value, OSDSTATUSWIN_Y(offset + OSDROWHEIGHT - 3), femonTheme[femonConfig.theme].clrGreen); \ | ||||
|               m_Osd->DrawRectangle(OSDBARWIDTH(femonConfig.greenlimit), OSDSTATUSWIN_Y(offset) + 3, value, OSDSTATUSWIN_Y(offset) + OSDROWHEIGHT - 3, femonTheme[femonConfig.theme].clrGreen); \ | ||||
|            } | ||||
|  | ||||
| #define OSDDRAWSTATUSTITLEBAR(title) \ | ||||
|         m_Osd->DrawRectangle(0, OSDSTATUSWIN_Y(0), OSDWIDTH, OSDSTATUSWIN_Y(OSDSTATUSHEIGHT), femonTheme[femonConfig.theme].clrBackground); \ | ||||
|         m_Osd->DrawRectangle(0, OSDSTATUSWIN_Y(offset), OSDWIDTH, OSDSTATUSWIN_Y(offset+OSDROWHEIGHT-1), femonTheme[femonConfig.theme].clrTitleBackground); \ | ||||
|         m_Osd->DrawRectangle(0, OSDSTATUSWIN_Y(offset), OSDWIDTH, OSDSTATUSWIN_Y(offset) + OSDROWHEIGHT - 1, femonTheme[femonConfig.theme].clrTitleBackground); \ | ||||
|         m_Osd->DrawText(OSDSTATUSWIN_X(1), OSDSTATUSWIN_Y(offset), title, femonTheme[femonConfig.theme].clrTitleText, femonTheme[femonConfig.theme].clrTitleBackground, m_Font); \ | ||||
|         if (IS_OSDCORNERING) { \ | ||||
|            m_Osd->DrawEllipse(0, OSDSTATUSWIN_Y(0), OSDCORNERING, OSDSTATUSWIN_Y(OSDCORNERING), clrTransparent, -2); \ | ||||
|            m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDSTATUSWIN_Y(0), OSDWIDTH, OSDSTATUSWIN_Y(OSDCORNERING), clrTransparent, -1); \ | ||||
|            } | ||||
|         if (IS_OSDROUNDING) { \ | ||||
|            m_Osd->DrawEllipse(0, OSDSTATUSWIN_Y(0), OSDROUNDING, OSDSTATUSWIN_Y(OSDROUNDING), clrTransparent, -2); \ | ||||
|            m_Osd->DrawEllipse(OSDWIDTH - OSDROUNDING, OSDSTATUSWIN_Y(0), OSDWIDTH, OSDSTATUSWIN_Y(OSDROUNDING), clrTransparent, -1); \ | ||||
|            } \ | ||||
|         m_Osd->DrawRectangle(0, OSDSTATUSWIN_Y(offset) + OSDROWHEIGHT, OSDWIDTH, OSDSTATUSWIN_Y(offset) + OSDSTATUSHEIGHT - 1, femonTheme[femonConfig.theme].clrBackground) | ||||
|  | ||||
| #define OSDDRAWSTATUSBOTTOMBAR() \ | ||||
|         if (IS_OSDCORNERING) { \ | ||||
|            m_Osd->DrawEllipse(0, OSDSTATUSWIN_Y(OSDSTATUSHEIGHT-OSDCORNERING), OSDCORNERING, OSDSTATUSWIN_Y(OSDSTATUSHEIGHT), clrTransparent, -3); \ | ||||
|            m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDSTATUSWIN_Y(OSDSTATUSHEIGHT-OSDCORNERING), OSDWIDTH, OSDSTATUSWIN_Y(OSDSTATUSHEIGHT), clrTransparent, -4); \ | ||||
|         if (IS_OSDROUNDING) { \ | ||||
|            m_Osd->DrawEllipse(0, OSDSTATUSWIN_Y(OSDSTATUSHEIGHT) - OSDROUNDING, OSDROUNDING, OSDSTATUSWIN_Y(OSDSTATUSHEIGHT), clrTransparent, -3); \ | ||||
|            m_Osd->DrawEllipse(OSDWIDTH - OSDROUNDING, OSDSTATUSWIN_Y(OSDSTATUSHEIGHT) - OSDROUNDING, OSDWIDTH, OSDSTATUSWIN_Y(OSDSTATUSHEIGHT), clrTransparent, -4); \ | ||||
|            } | ||||
|  | ||||
| #define OSDCLEARSTATUS() \ | ||||
|         m_Osd->DrawRectangle(0, OSDSTATUSWIN_Y(0), OSDWIDTH, OSDSTATUSWIN_Y(OSDSTATUSHEIGHT) - 1, clrTransparent) | ||||
|  | ||||
| #define OSDDRAWINFOLEFT(label, value) \ | ||||
|         m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), label, femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font); \ | ||||
|         m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), value, femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font) | ||||
| @@ -96,29 +99,29 @@ | ||||
|         m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), label, femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font) | ||||
|  | ||||
| #define OSDDRAWINFOTITLEBAR(title) \ | ||||
|         m_Osd->DrawRectangle(0, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), femonTheme[femonConfig.theme].clrBackground); \ | ||||
|         m_Osd->DrawRectangle(0, OSDINFOWIN_Y(offset), OSDWIDTH, OSDINFOWIN_Y(offset + OSDROWHEIGHT - 1), femonTheme[femonConfig.theme].clrTitleBackground); \ | ||||
|         m_Osd->DrawRectangle(0, OSDINFOWIN_Y(offset), OSDWIDTH, OSDINFOWIN_Y(offset) + OSDROWHEIGHT - 1, femonTheme[femonConfig.theme].clrTitleBackground); \ | ||||
|         m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), title, femonTheme[femonConfig.theme].clrTitleText, femonTheme[femonConfig.theme].clrTitleBackground, m_Font); \ | ||||
|         if (IS_OSDCORNERING) { \ | ||||
|            m_Osd->DrawEllipse(0, OSDINFOWIN_Y(0), OSDCORNERING, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -2); \ | ||||
|            m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -1); \ | ||||
|            } | ||||
|         if (IS_OSDROUNDING) { \ | ||||
|            m_Osd->DrawEllipse(0, OSDINFOWIN_Y(0), OSDROUNDING, OSDINFOWIN_Y(OSDROUNDING), clrTransparent, -2); \ | ||||
|            m_Osd->DrawEllipse(OSDWIDTH - OSDROUNDING, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDROUNDING), clrTransparent, -1); \ | ||||
|            } \ | ||||
|         m_Osd->DrawRectangle(0, OSDINFOWIN_Y(offset) + OSDROWHEIGHT, OSDWIDTH, OSDINFOWIN_Y(offset) + OSDINFOHEIGHT - 1, femonTheme[femonConfig.theme].clrBackground) | ||||
|  | ||||
| #define OSDDRAWINFOBOTTOMBAR() \ | ||||
|         if (IS_OSDCORNERING) { \ | ||||
|            m_Osd->DrawEllipse(0, OSDINFOWIN_Y(OSDINFOHEIGHT-OSDCORNERING), OSDCORNERING, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent, -3); \ | ||||
|            m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(OSDINFOHEIGHT-OSDCORNERING), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent, -4); \ | ||||
|         if (IS_OSDROUNDING) { \ | ||||
|            m_Osd->DrawEllipse(0, OSDINFOWIN_Y(OSDINFOHEIGHT) - OSDROUNDING, OSDROUNDING, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent, -3); \ | ||||
|            m_Osd->DrawEllipse((OSDWIDTH - OSDROUNDING), OSDINFOWIN_Y(OSDINFOHEIGHT) - OSDROUNDING, OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent, -4); \ | ||||
|            } | ||||
|  | ||||
| #define OSDCLEARINFO() \ | ||||
|         m_Osd->DrawRectangle(0, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent) | ||||
|         m_Osd->DrawRectangle(0, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT) - 1, clrTransparent) | ||||
|  | ||||
| cFemonOsd *cFemonOsd::pInstance = NULL; | ||||
|  | ||||
| cFemonOsd *cFemonOsd::Instance(bool create) | ||||
| { | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
|   if (pInstance == NULL && create) | ||||
|   if ((pInstance == NULL) && create) | ||||
|   { | ||||
|      pInstance = new cFemonOsd(); | ||||
|   } | ||||
| @@ -126,26 +129,27 @@ cFemonOsd *cFemonOsd::Instance(bool create) | ||||
| } | ||||
|  | ||||
| cFemonOsd::cFemonOsd() | ||||
| :cOsdObject(true), cThread("femon osd") | ||||
| : cOsdObject(true), cThread("femon osd"), | ||||
|   m_Osd(NULL), | ||||
|   m_Receiver(NULL), | ||||
|   m_Frontend(-1), | ||||
|   m_SvdrpFrontend(-1), | ||||
|   m_SvdrpVideoBitrate(-1), | ||||
|   m_SvdrpAudioBitrate(-1), | ||||
|   m_SvdrpPlugin(NULL), | ||||
|   m_Number(0), | ||||
|   m_OldNumber(0), | ||||
|   m_SNR(0), | ||||
|   m_Signal(0), | ||||
|   m_BER(0), | ||||
|   m_UNC(0), | ||||
|   m_DisplayMode(femonConfig.displaymode), | ||||
|   m_InputTime(0), | ||||
|   m_Sleep(), | ||||
|   m_Mutex() | ||||
| { | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
|   m_Osd = NULL; | ||||
|   m_Receiver = NULL; | ||||
|   m_Frontend = -1; | ||||
|   m_SvdrpVideoBitrate = -1.0; | ||||
|   m_SvdrpAudioBitrate = -1.0; | ||||
|   m_SvdrpFrontend = -1; | ||||
|   m_SvdrpConnection.handle = -1; | ||||
|   m_SvdrpPlugin = NULL; | ||||
|   m_Number = 0; | ||||
|   m_OldNumber = 0; | ||||
|   m_Signal = 0; | ||||
|   m_SNR = 0; | ||||
|   m_BER = 0; | ||||
|   m_UNC = 0; | ||||
|   m_DisplayMode = femonConfig.displaymode; | ||||
|   m_InputTime.Set(0); | ||||
|   m_Mutex = new cMutex(); | ||||
|   if (Setup.UseSmallFont == 0) { | ||||
|      // Dirty hack to force the small fonts... | ||||
|      Setup.UseSmallFont = 1; | ||||
| @@ -154,6 +158,8 @@ cFemonOsd::cFemonOsd() | ||||
|      } | ||||
|   else | ||||
|      m_Font = cFont::GetFont(fontSml); | ||||
|   if (OSDHEIGHT < (OSDINFOHEIGHT + OSDROWHEIGHT + OSDSTATUSHEIGHT)) | ||||
|      OSDHEIGHT = (OSDINFOHEIGHT + OSDROWHEIGHT + OSDSTATUSHEIGHT); | ||||
| } | ||||
|  | ||||
| cFemonOsd::~cFemonOsd(void) | ||||
| @@ -167,21 +173,27 @@ cFemonOsd::~cFemonOsd(void) | ||||
|      if (m_SvdrpPlugin) | ||||
|         m_SvdrpPlugin->Service("SvdrpConnection-v1.0", &m_SvdrpConnection); | ||||
|      } | ||||
|   if (m_Receiver) | ||||
|      delete m_Receiver; | ||||
|   if (m_Receiver) { | ||||
|      m_Receiver->Deactivate(); | ||||
|      DELETENULL(m_Receiver); | ||||
|      } | ||||
|   if (m_Osd) | ||||
|      delete m_Osd; | ||||
|      DELETENULL(m_Osd); | ||||
|   if (m_Frontend >= 0) { | ||||
|      close(m_Frontend); | ||||
|      m_Frontend = -1; | ||||
|      } | ||||
|   pInstance = NULL; | ||||
| } | ||||
|  | ||||
| void cFemonOsd::DrawStatusWindow(void) | ||||
| { | ||||
|   cMutexLock lock(m_Mutex); | ||||
|   cMutexLock lock(&m_Mutex); | ||||
|   cBitmap *bm = NULL; | ||||
|   int snr = m_SNR / 655; | ||||
|   int signal = m_Signal / 655; | ||||
|   int offset = 0; | ||||
|   int x = OSDWIDTH - OSDCORNERING; | ||||
|   int x = OSDWIDTH - OSDROUNDING; | ||||
|   int y = 0; | ||||
|   eTrackType track = cDevice::PrimaryDevice()->GetCurrentAudioTrack(); | ||||
|   cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel()); | ||||
| @@ -262,7 +274,7 @@ void cFemonOsd::DrawStatusWindow(void) | ||||
|      OSDDRAWSTATUSBAR(snr); | ||||
|      offset += OSDROWHEIGHT; | ||||
|      OSDDRAWSTATUSVALUES("STR:", *cString::sprintf("%04x", m_Signal), *cString::sprintf("(%2d%%)", m_Signal / 655), "BER:", *cString::sprintf("%08x", m_BER), | ||||
|                          *cString::sprintf("%s:", tr("Video")),  *getBitrateMbits(m_Receiver ? m_Receiver->VideoBitrate() : (m_SvdrpFrontend >= 0 ? m_SvdrpVideoBitrate : -1.0))); | ||||
|                          *cString::sprintf("%s:", tr("Video")), *getBitrateMbits(m_Receiver ? m_Receiver->VideoBitrate() : (m_SvdrpFrontend >= 0 ? m_SvdrpVideoBitrate : -1.0))); | ||||
|      offset += OSDROWHEIGHT; | ||||
|      OSDDRAWSTATUSVALUES("SNR:", *cString::sprintf("%04x", m_SNR), *cString::sprintf("(%2d%%)", m_SNR / 655), "UNC:", *cString::sprintf("%08x", m_UNC), | ||||
|                          *cString::sprintf("%s:", (m_Receiver && m_Receiver->AC3Valid() && IS_DOLBY_TRACK(track)) ? tr("AC-3") : tr("Audio")), | ||||
| @@ -282,7 +294,7 @@ void cFemonOsd::DrawStatusWindow(void) | ||||
|  | ||||
| void cFemonOsd::DrawInfoWindow(void) | ||||
| { | ||||
|   cMutexLock lock(m_Mutex); | ||||
|   cMutexLock lock(&m_Mutex); | ||||
|   int offset = 0; | ||||
|   cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel()); | ||||
|   eTrackType track = cDevice::PrimaryDevice()->GetCurrentAudioTrack(); | ||||
| @@ -307,11 +319,11 @@ void cFemonOsd::DrawInfoWindow(void) | ||||
|             OSDDRAWINFOLEFT(    tr("Tid"),  *cString::sprintf("%d", channel->Tid())); | ||||
|             OSDDRAWINFORIGHT(   tr("Rid"),  *cString::sprintf("%d", channel->Rid())); | ||||
|             offset += OSDROWHEIGHT; | ||||
|             OSDDRAWINFOLEFT( trVDR("CA"),   *getCAids(channel, femonConfig.showcasystem)); | ||||
|             OSDDRAWINFOLEFT( trVDR("CA"),   *getCAids(channel)); | ||||
|             offset += OSDROWHEIGHT; | ||||
|             switch (m_FrontendInfo.type) { | ||||
|               case FE_QPSK: | ||||
|                    OSDDRAWINFOLINE(*cString::sprintf("%s #%d - %s", tr("Satellite Card"), (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name)); | ||||
|             switch (channel->Source() & cSource::st_Mask) { | ||||
|               case cSource::stSat: | ||||
|                    OSDDRAWINFOLINE(*cString::sprintf("DVB-S%s #%d - %s", (m_FrontendInfo.caps & 0x10000000) ? "2" : "", (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name)); | ||||
|                    offset += OSDROWHEIGHT; | ||||
|                    OSDDRAWINFOLEFT( trVDR("Frequency"),    *getFrequencyMHz(channel->Frequency())); | ||||
|                    OSDDRAWINFORIGHT(trVDR("Source"),       *cSource::ToString(channel->Source())); | ||||
| @@ -321,13 +333,13 @@ void cFemonOsd::DrawInfoWindow(void) | ||||
|                    offset += OSDROWHEIGHT; | ||||
|                    OSDDRAWINFOLEFT( trVDR("Inversion"),    *getInversion(channel->Inversion())); | ||||
|                    OSDDRAWINFORIGHT(trVDR("CoderateH"),    *getCoderate(channel->CoderateH())); | ||||
|                    //offset += OSDROWHEIGHT; | ||||
|                    //OSDDRAWINFOLEFT( trVDR("System"),     *getSystem(channel->System())); | ||||
|                    //OSDDRAWINFORIGHT(trVDR("RollOff"),    *getRollOff(channel->RollOff())); | ||||
|                    offset += OSDROWHEIGHT; | ||||
|                    OSDDRAWINFOLEFT( trVDR("System"),       *getSystem(channel->System())); | ||||
|                    OSDDRAWINFORIGHT(trVDR("RollOff"),      *getRollOff(channel->RollOff())); | ||||
|                    break; | ||||
|  | ||||
|              case FE_QAM: | ||||
|                    OSDDRAWINFOLINE(*cString::sprintf("%s #%d - %s", tr("Cable Card"), (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name)); | ||||
|               case cSource::stCable: | ||||
|                    OSDDRAWINFOLINE(*cString::sprintf("DVB-C #%d - %s", (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name)); | ||||
|                    offset += OSDROWHEIGHT; | ||||
|                    OSDDRAWINFOLEFT( trVDR("Frequency"),    *getFrequencyMHz(channel->Frequency())); | ||||
|                    OSDDRAWINFORIGHT(trVDR("Source"),       *cSource::ToString(channel->Source())); | ||||
| @@ -339,8 +351,8 @@ void cFemonOsd::DrawInfoWindow(void) | ||||
|                    OSDDRAWINFORIGHT(trVDR("CoderateH"),    *getCoderate(channel->CoderateH())); | ||||
|                    break; | ||||
|  | ||||
|               case FE_OFDM: | ||||
|                    OSDDRAWINFOLINE(*cString::sprintf("%s #%d - %s", tr("Terrestrial Card"), (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name)); | ||||
|               case cSource::stTerr: | ||||
|                    OSDDRAWINFOLINE(*cString::sprintf("DVB-T #%d - %s", (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name)); | ||||
|                    offset += OSDROWHEIGHT; | ||||
|                    OSDDRAWINFOLEFT( trVDR("Frequency"),    *getFrequencyMHz(channel->Frequency())); | ||||
|                    OSDDRAWINFORIGHT(trVDR("Transmission"), *getTransmission(channel->Transmission())); | ||||
| @@ -353,9 +365,6 @@ void cFemonOsd::DrawInfoWindow(void) | ||||
|                    offset += OSDROWHEIGHT; | ||||
|                    OSDDRAWINFOLEFT( trVDR("Hierarchy"),    *getHierarchy(channel->Hierarchy())); | ||||
|                    OSDDRAWINFORIGHT(trVDR("Guard"),        *getGuard(channel->Guard())); | ||||
|                    //offset += OSDROWHEIGHT; | ||||
|                    //OSDDRAWINFOLEFT( trVDR("Alpha"),      *getAlpha(channel->Alpha())); | ||||
|                    //OSDDRAWINFORIGHT(trVDR("Priority"),   *getPriority(channel->Priority())); | ||||
|                    break; | ||||
|  | ||||
|               default: | ||||
| @@ -367,7 +376,7 @@ void cFemonOsd::DrawInfoWindow(void) | ||||
|        case eFemonModeStream: | ||||
|             OSDDRAWINFOTITLEBAR(tr("Stream Information")); | ||||
|             offset += OSDROWHEIGHT; | ||||
|             OSDDRAWINFOACTIVE(  tr("Video Stream"),       *cString::sprintf("#%d", channel->Vpid())); | ||||
|             OSDDRAWINFOACTIVE(  tr("Video Stream"),       *getVideoStream(channel->Vpid())); | ||||
|             offset += OSDROWHEIGHT; | ||||
|             OSDDRAWINFOINACTIVE(tr("Codec"),              *getVideoCodec(m_Receiver ? m_Receiver->VideoCodec() : VIDEO_CODEC_INVALID)); | ||||
|             offset += OSDROWHEIGHT; | ||||
| @@ -381,7 +390,7 @@ void cFemonOsd::DrawInfoWindow(void) | ||||
|             offset += OSDROWHEIGHT; | ||||
|             OSDDRAWINFOINACTIVE(tr("Resolution"),         *getResolution(m_Receiver ? m_Receiver->VideoHorizontalSize() : 0, m_Receiver ? m_Receiver->VideoVerticalSize() : 0, m_Receiver ? m_Receiver->VideoScan() : VIDEO_SCAN_INVALID)); | ||||
|             offset += OSDROWHEIGHT; | ||||
|             OSDDRAWINFOACTIVE(  tr("Audio Stream"),       *cString::sprintf("#%d (%s)", IS_AUDIO_TRACK(track) ? channel->Apid(int(track - ttAudioFirst)) : channel->Apid(0), IS_AUDIO_TRACK(track) ? channel->Alang(int(track - ttAudioFirst)) : channel->Alang(0))); | ||||
|             OSDDRAWINFOACTIVE(  tr("Audio Stream"),       *getAudioStream(track, channel)); | ||||
|             offset += OSDROWHEIGHT; | ||||
|             OSDDRAWINFOINACTIVE(tr("Codec"),              *getAudioCodec(m_Receiver ? m_Receiver->AudioCodec() : AUDIO_CODEC_INVALID)); | ||||
|             offset += OSDROWHEIGHT; | ||||
| @@ -397,7 +406,7 @@ void cFemonOsd::DrawInfoWindow(void) | ||||
|             OSDDRAWINFOTITLEBAR(tr("Stream Information")); | ||||
|             if (m_Receiver && m_Receiver->AC3Valid() && IS_DOLBY_TRACK(track)) { | ||||
|                offset += OSDROWHEIGHT; | ||||
|                OSDDRAWINFOINACTIVE(tr("AC-3 Stream"),            *cString::sprintf("#%d %s", channel->Dpid(int(track - ttDolbyFirst)), channel->Dlang(int(track - ttDolbyFirst)))); | ||||
|                OSDDRAWINFOACTIVE(  tr("AC-3 Stream"),            *getAC3Stream(track, channel)); | ||||
|                offset += OSDROWHEIGHT; | ||||
|                OSDDRAWINFOINACTIVE(tr("Bitrate"),                *getAudioBitrate(m_Receiver->AC3Bitrate(), m_Receiver->AC3StreamBitrate())); | ||||
|                offset += OSDROWHEIGHT; | ||||
| @@ -453,28 +462,28 @@ void cFemonOsd::Action(void) | ||||
|        m_SvdrpPlugin->Service("SvdrpCommand-v1.0", &cmd); | ||||
|        if (cmd.responseCode == 900) { | ||||
|           for (cLine *line = cmd.reply.First(); line; line = cmd.reply.Next(line)) { | ||||
|              const char *s = line->Text(); | ||||
| 	      if (strncasecmp(s, "CARD:", 5) == 0) | ||||
|                 m_SvdrpFrontend = strtol(s + 5, NULL, 10); | ||||
|              else if (strncasecmp(s, "TYPE:", 5) == 0) | ||||
|                 m_FrontendInfo.type = (fe_type_t) strtol(s + 5, NULL, 10); | ||||
|              else if (strncasecmp(s, "NAME:", 5) == 0) | ||||
|                 strn0cpy(m_FrontendInfo.name, s + 5, sizeof(m_FrontendInfo.name)); | ||||
|              else if (strncasecmp(s, "STAT:", 5) == 0) | ||||
|                 m_FrontendStatus = (fe_status_t) strtol(s + 5, NULL, 16); | ||||
|              else if (strncasecmp(s, "SGNL:", 5) == 0) | ||||
|                 m_Signal = strtol(s + 5, NULL, 16); | ||||
|              else if (strncasecmp(s, "SNRA:", 5) == 0) | ||||
|                 m_SNR = strtol(s + 5, NULL, 16); | ||||
|              else if (strncasecmp(s, "BERA:", 5) == 0) | ||||
|                 m_BER = strtol(s + 5, NULL, 16); | ||||
|              else if (strncasecmp(s, "UNCB:", 5) == 0) | ||||
|                 m_UNC = strtol(s + 5, NULL, 16); | ||||
|              else if (strncasecmp(s, "VIBR:", 5) == 0) | ||||
|                 m_SvdrpVideoBitrate = strtol(s + 5, NULL, 10); | ||||
|              else if (strncasecmp(s, "AUBR:", 5) == 0) | ||||
|                 m_SvdrpAudioBitrate = strtol(s + 5, NULL, 10); | ||||
|              } | ||||
|               const char *s = line->Text(); | ||||
| 	      if (!strncasecmp(s, "CARD:", 5)) | ||||
|                  m_SvdrpFrontend = strtol(s + 5, NULL, 10); | ||||
|               else if (!strncasecmp(s, "TYPE:", 5)) | ||||
|                  m_FrontendInfo.type = (fe_type_t) strtol(s + 5, NULL, 10); | ||||
|               else if (!strncasecmp(s, "NAME:", 5)) | ||||
|                  strn0cpy(m_FrontendInfo.name, s + 5, sizeof(m_FrontendInfo.name)); | ||||
|               else if (!strncasecmp(s, "STAT:", 5)) | ||||
|                  m_FrontendStatus = (fe_status_t) strtol(s + 5, NULL, 16); | ||||
|               else if (!strncasecmp(s, "SGNL:", 5)) | ||||
|                  m_Signal = strtol(s + 5, NULL, 16); | ||||
|               else if (!strncasecmp(s, "SNRA:", 5)) | ||||
|                  m_SNR = strtol(s + 5, NULL, 16); | ||||
|               else if (!strncasecmp(s, "BERA:", 5)) | ||||
|                  m_BER = strtol(s + 5, NULL, 16); | ||||
|               else if (!strncasecmp(s, "UNCB:", 5)) | ||||
|                  m_UNC = strtol(s + 5, NULL, 16); | ||||
|               else if (!strncasecmp(s, "VIBR:", 5)) | ||||
|                  m_SvdrpVideoBitrate = strtol(s + 5, NULL, 10); | ||||
|               else if (!strncasecmp(s, "AUBR:", 5)) | ||||
|                  m_SvdrpAudioBitrate = strtol(s + 5, NULL, 10); | ||||
|               } | ||||
|           } | ||||
|        DrawInfoWindow(); | ||||
|        DrawStatusWindow(); | ||||
| @@ -510,21 +519,23 @@ void cFemonOsd::Show(void) | ||||
|  | ||||
|   m_Osd = cOsdProvider::NewOsd(((cOsd::OsdWidth() - OSDWIDTH) / 2) + cOsd::OsdLeft() + femonConfig.osdoffset, ((cOsd::OsdHeight() - OSDHEIGHT) / 2) + cOsd::OsdTop()); | ||||
|   if (m_Osd) { | ||||
|      // try to use single 8bpp area | ||||
|      tArea Areas1[] = { { 0, 0, OSDWIDTH, OSDHEIGHT, 8 } }; | ||||
|      if (femonConfig.usesinglearea && m_Osd->CanHandleAreas(Areas1, sizeof(Areas1) / sizeof(tArea)) == oeOk) { | ||||
|      tArea Areas1[] = { { 0, 0, OSDWIDTH - 1, OSDHEIGHT - 1, 8 } }; | ||||
|      if (Setup.AntiAlias && m_Osd->CanHandleAreas(Areas1, sizeof(Areas1) / sizeof(tArea)) == oeOk) { | ||||
|         m_Osd->SetAreas(Areas1, sizeof(Areas1) / sizeof(tArea)); | ||||
|         } | ||||
|      else { | ||||
|         tArea Areas2[] = { { 0, OSDSTATUSWIN_Y(0),          (OSDWIDTH - 1), OSDSTATUSWIN_Y(OSDSTATUSHEIGHT - 1), femonTheme[femonConfig.theme].bpp }, | ||||
|                            { 0, OSDINFOWIN_Y(0),            (OSDWIDTH - 1), OSDINFOWIN_Y(OSDROWHEIGHT - 1),      femonTheme[femonConfig.theme].bpp }, | ||||
|                            { 0, OSDINFOWIN_Y(OSDROWHEIGHT), (OSDWIDTH - 1), OSDINFOWIN_Y(OSDINFOHEIGHT - 1),     2 } }; | ||||
|         tArea Areas2[] = { { 0, OSDSTATUSWIN_Y(0),          OSDWIDTH - 1, OSDSTATUSWIN_Y(0) + OSDSTATUSHEIGHT - 1, femonTheme[femonConfig.theme].bpp }, | ||||
|                            { 0, OSDINFOWIN_Y(0),            OSDWIDTH - 1, OSDINFOWIN_Y(0)   + OSDROWHEIGHT    - 1, femonTheme[femonConfig.theme].bpp }, | ||||
|                            { 0, OSDINFOWIN_Y(OSDROWHEIGHT), OSDWIDTH - 1, OSDINFOWIN_Y(0)   + OSDINFOHEIGHT   - 1, 2                                 } }; | ||||
|         m_Osd->SetAreas(Areas2, sizeof(Areas2) / sizeof(tArea)); | ||||
|         } | ||||
|      m_Osd->DrawRectangle(0, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), clrTransparent); | ||||
|      OSDCLEARSTATUS(); | ||||
|      OSDCLEARINFO(); | ||||
|      m_Osd->Flush(); | ||||
|      if (m_Receiver) | ||||
|         delete m_Receiver; | ||||
|      if (m_Receiver) { | ||||
|         m_Receiver->Deactivate(); | ||||
|         DELETENULL(m_Receiver); | ||||
|         } | ||||
|      if (femonConfig.analyzestream) { | ||||
|         cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel()); | ||||
|         if (channel) { | ||||
| @@ -566,8 +577,10 @@ void cFemonOsd::ChannelSwitch(const cDevice * device, int channelNumber) | ||||
|      return; | ||||
|      } | ||||
|  | ||||
|   if (m_Receiver) | ||||
|      delete m_Receiver; | ||||
|   if (m_Receiver) { | ||||
|      m_Receiver->Deactivate(); | ||||
|      DELETENULL(m_Receiver); | ||||
|      } | ||||
|   if (femonConfig.analyzestream) { | ||||
|      cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel()); | ||||
|      if (channel) { | ||||
| @@ -585,8 +598,10 @@ void cFemonOsd::SetAudioTrack(int Index, const char * const *Tracks) | ||||
|   int apid[2] = {0, 0}; | ||||
|   int dpid[2] = {0, 0}; | ||||
|   eTrackType track = cDevice::PrimaryDevice()->GetCurrentAudioTrack(); | ||||
|   if (m_Receiver) | ||||
|      delete m_Receiver; | ||||
|   if (m_Receiver) { | ||||
|      m_Receiver->Deactivate(); | ||||
|      DELETENULL(m_Receiver); | ||||
|      } | ||||
|   if (femonConfig.analyzestream) { | ||||
|      cChannel *channel = Channels.GetByNumber(cDevice::CurrentChannel()); | ||||
|      if (channel) { | ||||
| @@ -833,6 +848,6 @@ eOSState cFemonOsd::ProcessKey(eKeys Key) | ||||
|             break; | ||||
|        } | ||||
|      state = osContinue; | ||||
|   } | ||||
|      } | ||||
|   return state; | ||||
| } | ||||
|   | ||||
							
								
								
									
										50
									
								
								femonosd.h
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								femonosd.h
									
									
									
									
									
								
							| @@ -25,27 +25,29 @@ | ||||
| class cFemonOsd : public cOsdObject, public cThread, public cStatus { | ||||
| private: | ||||
|   static cFemonOsd *pInstance; | ||||
|   cOsd *m_Osd; | ||||
|   cFemonReceiver *m_Receiver; | ||||
|   int m_Frontend; | ||||
|   int m_SvdrpFrontend; | ||||
|   double m_SvdrpVideoBitrate; | ||||
|   double m_SvdrpAudioBitrate; | ||||
|  | ||||
|   cOsd             *m_Osd; | ||||
|   cFemonReceiver   *m_Receiver; | ||||
|   int               m_Frontend; | ||||
|   int               m_SvdrpFrontend; | ||||
|   double            m_SvdrpVideoBitrate; | ||||
|   double            m_SvdrpAudioBitrate; | ||||
|   SvdrpConnection_v1_0 m_SvdrpConnection; | ||||
|   cPlugin *m_SvdrpPlugin; | ||||
|   struct dvb_frontend_info m_FrontendInfo; | ||||
|   int m_Number; | ||||
|   int m_OldNumber; | ||||
|   uint16_t m_SNR; | ||||
|   uint16_t m_Signal; | ||||
|   uint32_t m_BER; | ||||
|   uint32_t m_UNC; | ||||
|   fe_status_t m_FrontendStatus; | ||||
|   int m_DisplayMode; | ||||
|   const cFont *m_Font; | ||||
|   cTimeMs m_InputTime; | ||||
|   cCondWait m_Sleep; | ||||
|   cMutex* m_Mutex; | ||||
|   cPlugin          *m_SvdrpPlugin; | ||||
|   dvb_frontend_info m_FrontendInfo; | ||||
|   int               m_Number; | ||||
|   int               m_OldNumber; | ||||
|   uint16_t          m_SNR; | ||||
|   uint16_t          m_Signal; | ||||
|   uint32_t          m_BER; | ||||
|   uint32_t          m_UNC; | ||||
|   fe_status_t       m_FrontendStatus; | ||||
|   int               m_DisplayMode; | ||||
|   const cFont      *m_Font; | ||||
|   cTimeMs           m_InputTime; | ||||
|   cCondWait         m_Sleep; | ||||
|   cMutex            m_Mutex; | ||||
|  | ||||
|   void DrawStatusWindow(void); | ||||
|   void DrawInfoWindow(void); | ||||
|   bool SvdrpConnect(void); | ||||
| @@ -66,10 +68,10 @@ public: | ||||
|   virtual void Show(void); | ||||
|   virtual eOSState ProcessKey(eKeys Key); | ||||
|  | ||||
|   bool DeviceSwitch(int direction); | ||||
|   double GetVideoBitrate(void); | ||||
|   double GetAudioBitrate(void); | ||||
|   double GetDolbyBitrate(void); | ||||
|   bool    DeviceSwitch(int direction); | ||||
|   double  GetVideoBitrate(void); | ||||
|   double  GetAudioBitrate(void); | ||||
|   double  GetDolbyBitrate(void); | ||||
| }; | ||||
|  | ||||
| #endif //__FEMONOSD_H | ||||
|   | ||||
| @@ -23,6 +23,8 @@ | ||||
| cFemonReceiver::cFemonReceiver(tChannelID ChannelID, int Ca, int Vpid, int Apid[], int Dpid[]) | ||||
| : cReceiver(ChannelID, -1, Vpid, Apid, Dpid, NULL), | ||||
|   cThread("femon receiver"), | ||||
|   m_Sleep(), | ||||
|   m_Active(false), | ||||
|   m_VideoPid(Vpid), | ||||
|   m_VideoPacketCount(0), | ||||
|   m_VideoBitrate(0.0), | ||||
| @@ -75,10 +77,19 @@ cFemonReceiver::cFemonReceiver(tChannelID ChannelID, int Ca, int Vpid, int Apid[ | ||||
| cFemonReceiver::~cFemonReceiver(void) | ||||
| { | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
|   m_Sleep.Signal(); | ||||
|   if (Running()) | ||||
|      Cancel(3); | ||||
|   Detach(); | ||||
|   Deactivate(); | ||||
| } | ||||
|  | ||||
| void cFemonReceiver::Deactivate(void) | ||||
| { | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
|   if (m_Active) { | ||||
|      m_Active = false; | ||||
|      m_Sleep.Signal(); | ||||
|      if (Running()) | ||||
|         Cancel(3); | ||||
|      Detach(); | ||||
|      } | ||||
| } | ||||
|  | ||||
| void cFemonReceiver::GetVideoInfo(uint8_t *buf, int len) | ||||
| @@ -165,7 +176,7 @@ void cFemonReceiver::Activate(bool On) | ||||
|   if (On) | ||||
|      Start(); | ||||
|   else | ||||
|      Cancel(); | ||||
|      Deactivate(); | ||||
| } | ||||
|  | ||||
| void cFemonReceiver::Receive(uchar *Data, int Length) | ||||
| @@ -214,7 +225,8 @@ void cFemonReceiver::Action(void) | ||||
| { | ||||
|   Dprintf("%s()\n", __PRETTY_FUNCTION__); | ||||
|   cTimeMs t; | ||||
|   while (Running()) { | ||||
|   m_Active = true; | ||||
|   while (Running() && m_Active) { | ||||
|         t.Set(0); | ||||
|         // TS packet 188 bytes - 4 byte header; MPEG standard defines 1Mbit = 1000000bit | ||||
|         m_VideoBitrate = (10.0 * 8.0 * 184.0 * m_VideoPacketCount) / femonConfig.calcinterval; | ||||
|   | ||||
| @@ -17,6 +17,7 @@ | ||||
| class cFemonReceiver : public cReceiver, public cThread { | ||||
| private: | ||||
|   cCondWait     m_Sleep; | ||||
|   bool          m_Active; | ||||
|  | ||||
|   int           m_VideoPid; | ||||
|   int           m_VideoPacketCount; | ||||
| @@ -54,6 +55,7 @@ protected: | ||||
| public: | ||||
|   cFemonReceiver(tChannelID ChannelID, int Ca, int Vpid, int Apid[], int Dpid[]); | ||||
|   virtual ~cFemonReceiver(); | ||||
|   void Deactivate(void); | ||||
|  | ||||
|   bool   VideoValid(void)           { return m_VideoValid; };                  // boolean | ||||
|   double VideoBitrate(void)         { return m_VideoBitrate; };                // bit/s | ||||
|   | ||||
							
								
								
									
										207
									
								
								femontools.c
									
									
									
									
									
								
							
							
						
						
									
										207
									
								
								femontools.c
									
									
									
									
									
								
							| @@ -13,6 +13,63 @@ | ||||
| #include "femonosd.h" | ||||
| #include "femontools.h" | ||||
|  | ||||
| static cString getCA(int value) | ||||
| { | ||||
|   // http://www.dvb.org/index.php?id=174 | ||||
|   // http://en.wikipedia.org/wiki/Conditional_access_system | ||||
|   switch (value) { | ||||
|     case 0x0000:            return cString::sprintf("%s (%X)", trVDR("Free To Air"), value);  // Reserved | ||||
|     case 0x0001 ... 0x009F: | ||||
|     case 0x00A2 ... 0x00FF: return cString::sprintf("%s (%X)", tr("Fixed"),          value); // Standardized systems | ||||
|     case 0x00A0 ... 0x00A1: return cString::sprintf("%s (%X)", tr("Analog"),         value); // Analog signals | ||||
|     case 0x0100 ... 0x01FF: return cString::sprintf("%s (%X)", "SECA Mediaguard",    value); // Canal Plus | ||||
|     case 0x0464:            return cString::sprintf("%s (%X)", "EuroDec",            value); // EuroDec | ||||
|     case 0x0500 ... 0x05FF: return cString::sprintf("%s (%X)", "Viaccess",           value); // France Telecom | ||||
|     case 0x0600 ... 0x06FF: return cString::sprintf("%s (%X)", "Irdeto",             value); // Irdeto | ||||
|     case 0x0900 ... 0x09FF: return cString::sprintf("%s (%X)", "NDS Videoguard",     value); // News Datacom | ||||
|     case 0x0B00 ... 0x0BFF: return cString::sprintf("%s (%X)", "Conax",              value); // Norwegian Telekom | ||||
|     case 0x0D00 ... 0x0DFF: return cString::sprintf("%s (%X)", "CryptoWorks",        value); // Philips | ||||
|     case 0x0E00 ... 0x0EFF: return cString::sprintf("%s (%X)", "PowerVu",            value); // Scientific Atlanta | ||||
|     case 0x1000:            return cString::sprintf("%s (%X)", "RAS",                value); // Tandberg Television | ||||
|     case 0x1200 ... 0x12FF: return cString::sprintf("%s (%X)", "NagraVision",        value); // BellVu Express | ||||
|     case 0x1700 ... 0x17FF: return cString::sprintf("%s (%X)", "BetaCrypt",          value); // BetaTechnik | ||||
|     case 0x1800 ... 0x18FF: return cString::sprintf("%s (%X)", "NagraVision",        value); // Kudelski SA | ||||
|     case 0x22F0:            return cString::sprintf("%s (%X)", "Codicrypt",          value); // Scopus Network Technologies | ||||
|     case 0x2600:            return cString::sprintf("%s (%X)", "BISS",               value); // European Broadcasting Union | ||||
|     case 0x4347:            return cString::sprintf("%s (%X)", "CryptOn",            value); // CryptOn | ||||
|     case 0x4800:            return cString::sprintf("%s (%X)", "Accessgate",         value); // Telemann | ||||
|     case 0x4900:            return cString::sprintf("%s (%X)", "China Crypt",        value); // CryptoWorks | ||||
|     case 0x4A10:            return cString::sprintf("%s (%X)", "EasyCas",            value); // EasyCas | ||||
|     case 0x4A20:            return cString::sprintf("%s (%X)", "AlphaCrypt",         value); // AlphaCrypt | ||||
|     case 0x4A70:            return cString::sprintf("%s (%X)", "DreamCrypt",         value); // Dream Multimedia | ||||
|     case 0x4A60:            return cString::sprintf("%s (%X)", "SkyCrypt",           value); // @Sky | ||||
|     case 0x4A61:            return cString::sprintf("%s (%X)", "Neotioncrypt",       value); // Neotion | ||||
|     case 0x4A62:            return cString::sprintf("%s (%X)", "SkyCrypt",           value); // @Sky | ||||
|     case 0x4A63:            return cString::sprintf("%s (%X)", "Neotion SHL",        value); // Neotion | ||||
|     case 0x4A64 ... 0x4A6F: return cString::sprintf("%s (%X)", "SkyCrypt",           value); // @Sky | ||||
|     case 0x4A80:            return cString::sprintf("%s (%X)", "ThalesCrypt",        value); // TPS | ||||
|     case 0x4AA1:            return cString::sprintf("%s (%X)", "KeyFly",             value); // SIDSA | ||||
|     case 0x4ABF:            return cString::sprintf("%s (%X)", "DG-Crypt",           value); // Beijing Compunicate Technology Inc. | ||||
|     case 0x4AD0 ... 0x4AD1: return cString::sprintf("%s (%X)", "X-Crypt",            value); // XCrypt Inc. | ||||
|     case 0x4AD4:            return cString::sprintf("%s (%X)", "OmniCrypt",          value); // Widevine Technologies, Inc. | ||||
|     case 0x4AE0:            return cString::sprintf("%s (%X)", "RossCrypt",          value); // Digi Raum Electronics Co. Ltd. | ||||
|     case 0x5500:            return cString::sprintf("%s (%X)", "Z-Crypt",            value); // Digi Raum Electronics Co. Ltd. | ||||
|     case 0x5501:            return cString::sprintf("%s (%X)", "Griffin",            value); // Griffin | ||||
|     } | ||||
|   return cString::sprintf("%X", value); | ||||
| } | ||||
|  | ||||
| static const char *getUserString(int Value, const tChannelParameterMap *Map) | ||||
| { | ||||
|   const tChannelParameterMap *map = Map; | ||||
|   while (map && map->userValue != -1) { | ||||
|         if (map->driverValue == Value) | ||||
|            return map->userString ? tr(map->userString) : "---"; | ||||
|         map++; | ||||
|         } | ||||
|   return "---"; | ||||
| } | ||||
|  | ||||
| cString getFrontendInfo(int cardIndex) | ||||
| { | ||||
|   cString info; | ||||
| @@ -42,7 +99,7 @@ cString getFrontendInfo(int cardIndex) | ||||
|      info = cString::sprintf("%s\nVIBR:%.0f\nAUBR:%.0f\nDDBR:%.0f", *info, cFemonOsd::Instance()->GetVideoBitrate(), cFemonOsd::Instance()->GetAudioBitrate(), cFemonOsd::Instance()->GetDolbyBitrate()); | ||||
|  | ||||
|   if (channel) | ||||
|      info  = cString::sprintf("%s\nCHAN:%s", *info, *channel->ToText()); | ||||
|      info = cString::sprintf("%s\nCHAN:%s", *info, *channel->ToText()); | ||||
|  | ||||
|   return info; | ||||
| } | ||||
| @@ -158,45 +215,48 @@ cString getSpids(const cChannel *channel) | ||||
|   return spids; | ||||
| } | ||||
|  | ||||
| cString getCAids(const cChannel *channel, bool identify) | ||||
| cString getCAids(const cChannel *channel) | ||||
| { | ||||
|   cString caids; | ||||
|   int value = 0; | ||||
|  | ||||
|   if (identify) { | ||||
|      caids = cString::sprintf("%s", *getCA(channel->Ca(value))); | ||||
|      while (channel->Ca(++value) && (value < MAXCAIDS)) | ||||
|        caids = cString::sprintf("%s, %s", *caids, *getCA(channel->Ca(value))); | ||||
|      } | ||||
|   else { | ||||
|      caids = cString::sprintf("%04x", channel->Ca(value)); | ||||
|      while (channel->Ca(++value) && (value < MAXCAIDS)) | ||||
|        caids = cString::sprintf("%s, %04x", *caids, channel->Ca(value)); | ||||
|      } | ||||
|   cString caids = cString::sprintf("%s", *getCA(channel->Ca(value))); | ||||
|   while (channel->Ca(++value) && (value < MAXCAIDS)) | ||||
|     caids = cString::sprintf("%s, %s", *caids, *getCA(channel->Ca(value))); | ||||
|   return caids; | ||||
| } | ||||
|  | ||||
| cString getCA(int value) | ||||
| cString getVideoStream(int value) | ||||
| { | ||||
|   /* http://www.dvb.org/index.php?id=174 */ | ||||
|   switch (value) { | ||||
|     case 0x0000:            return cString::sprintf("%s", trVDR("Free To Air"));  // Reserved | ||||
|     case 0x0001 ... 0x009F: | ||||
|     case 0x00A2 ... 0x00FF: return cString::sprintf("%s", tr("Fixed"));           // Standardized systems | ||||
|     case 0x00A0 ... 0x00A1: return cString::sprintf("%s", tr("Analog"));          // Analog signals | ||||
|     case 0x0100 ... 0x01FF: return cString::sprintf("%s", tr("SECA/Mediaguard")); // Canal Plus | ||||
|     case 0x0500 ... 0x05FF: return cString::sprintf("%s", tr("Viaccess"));        // France Telecom | ||||
|     case 0x0600 ... 0x06FF: return cString::sprintf("%s", tr("Irdeto"));          // Irdeto | ||||
|     case 0x0900 ... 0x09FF: return cString::sprintf("%s", tr("NDS/Videoguard"));  // News Datacom | ||||
|     case 0x0B00 ... 0x0BFF: return cString::sprintf("%s", tr("Conax"));           // Norwegian Telekom | ||||
|     case 0x0D00 ... 0x0DFF: return cString::sprintf("%s", tr("CryptoWorks"));     // Philips | ||||
|     case 0x0E00 ... 0x0EFF: return cString::sprintf("%s", tr("PowerVu"));         // Scientific Atlanta | ||||
|     case 0x1200 ... 0x12FF: return cString::sprintf("%s", tr("NagraVision"));     // BellVu Express | ||||
|     case 0x1700 ... 0x17FF: return cString::sprintf("%s", tr("BetaCrypt"));       // BetaTechnik | ||||
|     case 0x1800 ... 0x18FF: return cString::sprintf("%s", tr("NagraVision"));     // Kudelski SA | ||||
|     case 0x4A60 ... 0x4A6F: return cString::sprintf("%s", tr("SkyCrypt"));        // @Sky | ||||
|     } | ||||
|   return cString::sprintf("%X", value); | ||||
|   if (value != 0) | ||||
|      return cString::sprintf("#%d", value); | ||||
|   return cString::sprintf("---"); | ||||
| } | ||||
|  | ||||
| cString getAudioStream(int value, const cChannel *channel) | ||||
| { | ||||
|   int pid = 0; | ||||
|   if (IS_AUDIO_TRACK(value)) | ||||
|      pid = int(value - ttAudioFirst); | ||||
|   if (channel && channel->Apid(pid)) { | ||||
|      if (channel->Alang(pid)) | ||||
|         return cString::sprintf("#%d (%s)", channel->Apid(pid), channel->Alang(pid)); | ||||
|      else | ||||
|         return cString::sprintf("#%d", channel->Apid(pid)); | ||||
|      } | ||||
|   return cString::sprintf("---"); | ||||
| } | ||||
|  | ||||
| cString getAC3Stream(int value, const cChannel *channel) | ||||
| { | ||||
|   int pid = 0; | ||||
|   if (IS_DOLBY_TRACK(value)) | ||||
|      pid = int(value - ttDolbyFirst); | ||||
|   if (channel && channel->Dpid(pid)) { | ||||
|      if (channel->Dlang(pid)) | ||||
|         return cString::sprintf("#%d (%s)", channel->Dpid(pid), channel->Dlang(pid)); | ||||
|      else | ||||
|         return cString::sprintf("#%d", channel->Dpid(pid)); | ||||
|      } | ||||
|   return cString::sprintf("---"); | ||||
| } | ||||
|  | ||||
| cString getVideoCodec(int value) | ||||
| @@ -235,108 +295,47 @@ cString getAudioChannelMode(int value) | ||||
|  | ||||
| cString getCoderate(int value) | ||||
| { | ||||
|   switch (value) { | ||||
|     case FEC_NONE: return cString::sprintf("%s", tr("none")); | ||||
|     case FEC_1_2:  return cString::sprintf("1/2"); | ||||
|     case FEC_2_3:  return cString::sprintf("2/3"); | ||||
|     case FEC_3_4:  return cString::sprintf("3/4"); | ||||
|     case FEC_4_5:  return cString::sprintf("4/5"); | ||||
|     case FEC_5_6:  return cString::sprintf("5/6"); | ||||
|     case FEC_6_7:  return cString::sprintf("6/7"); | ||||
|     case FEC_7_8:  return cString::sprintf("7/8"); | ||||
|     case FEC_8_9:  return cString::sprintf("8/9"); | ||||
|     case FEC_AUTO: return cString::sprintf("%s", tr("auto")); | ||||
|     } | ||||
|   return cString::sprintf("---"); | ||||
|   return cString::sprintf("%s", getUserString(value, CoderateValues)); | ||||
| } | ||||
|  | ||||
| cString getTransmission(int value) | ||||
| { | ||||
|   switch (value) { | ||||
|     case TRANSMISSION_MODE_2K:   return cString::sprintf("2K"); | ||||
|     case TRANSMISSION_MODE_8K:   return cString::sprintf("8K"); | ||||
|     case TRANSMISSION_MODE_AUTO: return cString::sprintf("%s", tr("auto")); | ||||
|     } | ||||
|   return cString::sprintf("---"); | ||||
|   return cString::sprintf("%s", getUserString(value, TransmissionValues)); | ||||
| } | ||||
|   | ||||
| cString getBandwidth(int value) | ||||
| { | ||||
|   switch (value) { | ||||
|     case BANDWIDTH_8_MHZ: return cString::sprintf("8 %s", tr("MHz")); | ||||
|     case BANDWIDTH_7_MHZ: return cString::sprintf("7 %s", tr("MHz")); | ||||
|     case BANDWIDTH_6_MHZ: return cString::sprintf("6 %s", tr("MHz")); | ||||
|     case BANDWIDTH_AUTO:  return cString::sprintf("%s", tr("auto")); | ||||
|     } | ||||
|   return cString::sprintf("---"); | ||||
|   return cString::sprintf("%s", getUserString(value, BandwidthValues)); | ||||
| } | ||||
|  | ||||
| cString getInversion(int value) | ||||
| { | ||||
|   switch (value) { | ||||
|     case INVERSION_OFF:  return cString::sprintf("%s", tr("off")); | ||||
|     case INVERSION_ON:   return cString::sprintf("%s", tr("on")); | ||||
|     case INVERSION_AUTO: return cString::sprintf("%s", tr("auto")); | ||||
|     } | ||||
|   return cString::sprintf("---"); | ||||
|   return cString::sprintf("%s", getUserString(value, InversionValues)); | ||||
| } | ||||
|  | ||||
| cString getHierarchy(int value) | ||||
| { | ||||
|   switch (value) { | ||||
|     case HIERARCHY_NONE: return cString::sprintf("%s", tr("none")); | ||||
|     case HIERARCHY_1:    return cString::sprintf("1"); | ||||
|     case HIERARCHY_2:    return cString::sprintf("2"); | ||||
|     case HIERARCHY_4:    return cString::sprintf("4"); | ||||
|     case HIERARCHY_AUTO: cString::sprintf("%s", tr("auto")); | ||||
|     } | ||||
|   return cString::sprintf("---"); | ||||
|   return cString::sprintf("%s", getUserString(value, HierarchyValues)); | ||||
| } | ||||
|  | ||||
| cString getGuard(int value) | ||||
| { | ||||
|   switch (value) { | ||||
|     case GUARD_INTERVAL_1_32: return cString::sprintf("1/32"); | ||||
|     case GUARD_INTERVAL_1_16: return cString::sprintf("1/16"); | ||||
|     case GUARD_INTERVAL_1_8:  return cString::sprintf("1/8"); | ||||
|     case GUARD_INTERVAL_1_4:  return cString::sprintf("1/4"); | ||||
|     case GUARD_INTERVAL_AUTO: cString::sprintf("%s", tr("auto")); | ||||
|     } | ||||
|   return cString::sprintf("---"); | ||||
|   return cString::sprintf("%s", getUserString(value, GuardValues)); | ||||
| } | ||||
|  | ||||
| cString getModulation(int value) | ||||
| { | ||||
|   switch (value) { | ||||
|     case QPSK:     return cString::sprintf("QPSK"); | ||||
|     case QAM_16:   return cString::sprintf("QAM 16"); | ||||
|     case QAM_32:   return cString::sprintf("QAM 32"); | ||||
|     case QAM_64:   return cString::sprintf("QAM 64"); | ||||
|     case QAM_128:  return cString::sprintf("QAM 128"); | ||||
|     case QAM_256:  return cString::sprintf("QAM 256"); | ||||
|     case QAM_AUTO: return cString::sprintf("QAM %s", tr("auto")); | ||||
|     } | ||||
|   return cString::sprintf("---"); | ||||
| } | ||||
|  | ||||
| cString getAlpha(int value) | ||||
| { | ||||
|   return cString::sprintf("---"); | ||||
| } | ||||
|  | ||||
| cString getPriority(int value) | ||||
| { | ||||
|   return cString::sprintf("---"); | ||||
|   return cString::sprintf("%s", getUserString(value, ModulationValues)); | ||||
| } | ||||
|  | ||||
| cString getSystem(int value) | ||||
| { | ||||
|   return cString::sprintf("---"); | ||||
|   return cString::sprintf("%s", getUserString(value, SystemValues)); | ||||
| } | ||||
|  | ||||
| cString getRollOff(int value) | ||||
| { | ||||
|   return cString::sprintf("---"); | ||||
|   return cString::sprintf("%s", getUserString(value, RollOffValues)); | ||||
| } | ||||
|  | ||||
| cString getResolution(int width, int height, int scan) | ||||
|   | ||||
| @@ -35,9 +35,10 @@ uint32_t getUNC(int cardIndex = 0); | ||||
| cString getApids(const cChannel *channel); | ||||
| cString getDpids(const cChannel *channel); | ||||
| cString getSpids(const cChannel *channel); | ||||
| cString getCAids(const cChannel *channel, bool identify = false); | ||||
| cString getCA(int value); | ||||
| cString getCAids(const cChannel *channel); | ||||
| cString getVideoStream(int value); | ||||
| cString getVideoCodec(int value); | ||||
| cString getAudioStream(int value, const cChannel *channel); | ||||
| cString getAudioCodec(int value); | ||||
| cString getAudioChannelMode(int value); | ||||
| cString getCoderate(int value); | ||||
| @@ -47,14 +48,13 @@ cString getInversion(int value); | ||||
| cString getHierarchy(int value); | ||||
| cString getGuard(int value); | ||||
| cString getModulation(int value); | ||||
| cString getAlpha(int value); | ||||
| cString getPriority(int value); | ||||
| cString getSystem(int value); | ||||
| cString getRollOff(int value); | ||||
| cString getResolution(int width, int height, int scan); | ||||
| cString getAspectRatio(int value); | ||||
| cString getVideoFormat(int value); | ||||
| cString getFrameRate(double value); | ||||
| cString getAC3Stream(int value, const cChannel *channel); | ||||
| cString getAC3BitStreamMode(int value, int coding); | ||||
| cString getAC3AudioCodingMode(int value, int stream); | ||||
| cString getAC3CenterMixLevel(int value); | ||||
|   | ||||
							
								
								
									
										70
									
								
								po/de_DE.po
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								po/de_DE.po
									
									
									
									
									
								
							| @@ -7,9 +7,9 @@ | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: femon 1.6.3\n" | ||||
| "Project-Id-Version: femon 1.7.0\n" | ||||
| "Report-Msgid-Bugs-To: Rolf Ahrenberg\n" | ||||
| "POT-Creation-Date: 2008-11-09 13:31+0200\n" | ||||
| "POT-Creation-Date: 2008-12-16 12:08+0200\n" | ||||
| "PO-Revision-Date: 2007-08-12 23:22+0300\n" | ||||
| "Last-Translator: Christian Wieninger\n" | ||||
| "Language-Team: <vdr@linuxtv.org>\n" | ||||
| @@ -71,15 +71,6 @@ msgstr "Hauptmen | ||||
| msgid "Define whether the main menu entry is hidden." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Use single area (8bpp)" | ||||
| msgstr "Ein Bildbereich benutzen (8bpp)" | ||||
|  | ||||
| msgid "" | ||||
| "Define whether a single 8bpp OSD area is preferred.\n" | ||||
| "\n" | ||||
| "Required by Truetype fonts and anti-aliasing." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Default display mode" | ||||
| msgstr "Standard Anzeigemodus" | ||||
|  | ||||
| @@ -107,12 +98,6 @@ msgstr "Horizontaler Offset" | ||||
| msgid "Define the horizontal offset of OSD." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Show CA system" | ||||
| msgstr "CA System anzeigen" | ||||
|  | ||||
| msgid "Define whether the CA system is shown as text." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Red limit [%]" | ||||
| msgstr "Grenze Rot [%]" | ||||
|  | ||||
| @@ -191,15 +176,6 @@ msgstr "Tid" | ||||
| msgid "Rid" | ||||
| msgstr "Rid" | ||||
|  | ||||
| msgid "Satellite Card" | ||||
| msgstr "Satellitenkarte" | ||||
|  | ||||
| msgid "Cable Card" | ||||
| msgstr "Kabelkarte" | ||||
|  | ||||
| msgid "Terrestrial Card" | ||||
| msgstr "Terrestrische Karte" | ||||
|  | ||||
| msgid "Coderate" | ||||
| msgstr "Coderate" | ||||
|  | ||||
| @@ -272,36 +248,6 @@ msgstr "Fest" | ||||
| msgid "Analog" | ||||
| msgstr "Analog" | ||||
|  | ||||
| msgid "SECA/Mediaguard" | ||||
| msgstr "SECA/Mediaguard" | ||||
|  | ||||
| msgid "Viaccess" | ||||
| msgstr "Viaccess" | ||||
|  | ||||
| msgid "Irdeto" | ||||
| msgstr "Irdeto" | ||||
|  | ||||
| msgid "NDS/Videoguard" | ||||
| msgstr "NDS/Videoguard" | ||||
|  | ||||
| msgid "Conax" | ||||
| msgstr "Conax" | ||||
|  | ||||
| msgid "CryptoWorks" | ||||
| msgstr "CryptoWorks" | ||||
|  | ||||
| msgid "PowerVu" | ||||
| msgstr "PowerVu" | ||||
|  | ||||
| msgid "NagraVision" | ||||
| msgstr "NagraVision" | ||||
|  | ||||
| msgid "BetaCrypt" | ||||
| msgstr "BetaCrypt" | ||||
|  | ||||
| msgid "SkyCrypt" | ||||
| msgstr "SkyCrypt" | ||||
|  | ||||
| msgid "MPEG-2" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -341,15 +287,6 @@ msgstr "" | ||||
| msgid "mono" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "none" | ||||
| msgstr "Nichts" | ||||
|  | ||||
| msgid "auto" | ||||
| msgstr "Auto" | ||||
|  | ||||
| msgid "MHz" | ||||
| msgstr "MHz" | ||||
|  | ||||
| msgid "interlaced" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -440,6 +377,9 @@ msgstr "dB" | ||||
| msgid "not indicated" | ||||
| msgstr "nicht angegeben" | ||||
|  | ||||
| msgid "MHz" | ||||
| msgstr "MHz" | ||||
|  | ||||
| msgid "free" | ||||
| msgstr "frei" | ||||
|  | ||||
|   | ||||
							
								
								
									
										70
									
								
								po/es_ES.po
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								po/es_ES.po
									
									
									
									
									
								
							| @@ -5,9 +5,9 @@ | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: femon 1.6.3\n" | ||||
| "Project-Id-Version: femon 1.7.0\n" | ||||
| "Report-Msgid-Bugs-To: Rolf Ahrenberg\n" | ||||
| "POT-Creation-Date: 2008-11-09 13:31+0200\n" | ||||
| "POT-Creation-Date: 2008-12-16 12:08+0200\n" | ||||
| "PO-Revision-Date: 2007-08-12 23:22+0300\n" | ||||
| "Last-Translator: Luis Palacios\n" | ||||
| "Language-Team: <vdr@linuxtv.org>\n" | ||||
| @@ -69,15 +69,6 @@ msgstr "Ocultar en el men | ||||
| msgid "Define whether the main menu entry is hidden." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Use single area (8bpp)" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "" | ||||
| "Define whether a single 8bpp OSD area is preferred.\n" | ||||
| "\n" | ||||
| "Required by Truetype fonts and anti-aliasing." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Default display mode" | ||||
| msgstr "Modo de visualizaci<63>n estandar" | ||||
|  | ||||
| @@ -105,12 +96,6 @@ msgstr "Desplazamiento horizontal" | ||||
| msgid "Define the horizontal offset of OSD." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Show CA system" | ||||
| msgstr "Mostrar sistema CA" | ||||
|  | ||||
| msgid "Define whether the CA system is shown as text." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Red limit [%]" | ||||
| msgstr "L<>mite de rojo [%s]" | ||||
|  | ||||
| @@ -189,15 +174,6 @@ msgstr "Tid" | ||||
| msgid "Rid" | ||||
| msgstr "Rid" | ||||
|  | ||||
| msgid "Satellite Card" | ||||
| msgstr "Tarjeta Sat<61>lite" | ||||
|  | ||||
| msgid "Cable Card" | ||||
| msgstr "Tarjeta Cable" | ||||
|  | ||||
| msgid "Terrestrial Card" | ||||
| msgstr "Tarjeta TDT" | ||||
|  | ||||
| msgid "Coderate" | ||||
| msgstr "Coderate" | ||||
|  | ||||
| @@ -270,36 +246,6 @@ msgstr "Fijo" | ||||
| msgid "Analog" | ||||
| msgstr "Anal<61>gico" | ||||
|  | ||||
| msgid "SECA/Mediaguard" | ||||
| msgstr "SECA/Mediguard" | ||||
|  | ||||
| msgid "Viaccess" | ||||
| msgstr "Viaccess" | ||||
|  | ||||
| msgid "Irdeto" | ||||
| msgstr "Irdeto" | ||||
|  | ||||
| msgid "NDS/Videoguard" | ||||
| msgstr "NDS/Videoguard" | ||||
|  | ||||
| msgid "Conax" | ||||
| msgstr "Conax" | ||||
|  | ||||
| msgid "CryptoWorks" | ||||
| msgstr "CryptoWorks" | ||||
|  | ||||
| msgid "PowerVu" | ||||
| msgstr "PowerVu" | ||||
|  | ||||
| msgid "NagraVision" | ||||
| msgstr "NagraVision" | ||||
|  | ||||
| msgid "BetaCrypt" | ||||
| msgstr "BetaCrypt" | ||||
|  | ||||
| msgid "SkyCrypt" | ||||
| msgstr "SkyCrypt" | ||||
|  | ||||
| msgid "MPEG-2" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -339,15 +285,6 @@ msgstr "" | ||||
| msgid "mono" | ||||
| msgstr "o" | ||||
|  | ||||
| msgid "none" | ||||
| msgstr "ninguno" | ||||
|  | ||||
| msgid "auto" | ||||
| msgstr "auto" | ||||
|  | ||||
| msgid "MHz" | ||||
| msgstr "MHz" | ||||
|  | ||||
| msgid "interlaced" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -438,6 +375,9 @@ msgstr "dB" | ||||
| msgid "not indicated" | ||||
| msgstr "no indicado" | ||||
|  | ||||
| msgid "MHz" | ||||
| msgstr "MHz" | ||||
|  | ||||
| msgid "free" | ||||
| msgstr "libre" | ||||
|  | ||||
|   | ||||
							
								
								
									
										70
									
								
								po/et_EE.po
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								po/et_EE.po
									
									
									
									
									
								
							| @@ -5,9 +5,9 @@ | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: femon 1.6.3\n" | ||||
| "Project-Id-Version: femon 1.7.0\n" | ||||
| "Report-Msgid-Bugs-To: Rolf Ahrenberg\n" | ||||
| "POT-Creation-Date: 2008-11-09 13:31+0200\n" | ||||
| "POT-Creation-Date: 2008-12-16 12:08+0200\n" | ||||
| "PO-Revision-Date: 2007-08-12 23:22+0300\n" | ||||
| "Last-Translator: Arthur Konovalov\n" | ||||
| "Language-Team: <vdr@linuxtv.org>\n" | ||||
| @@ -69,15 +69,6 @@ msgstr "Peida valik peamen | ||||
| msgid "Define whether the main menu entry is hidden." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Use single area (8bpp)" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "" | ||||
| "Define whether a single 8bpp OSD area is preferred.\n" | ||||
| "\n" | ||||
| "Required by Truetype fonts and anti-aliasing." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Default display mode" | ||||
| msgstr "Vaikimisi displei moodus" | ||||
|  | ||||
| @@ -105,12 +96,6 @@ msgstr "Horisontaalne nihe" | ||||
| msgid "Define the horizontal offset of OSD." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Show CA system" | ||||
| msgstr "N<>ita CA s<>steemi" | ||||
|  | ||||
| msgid "Define whether the CA system is shown as text." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Red limit [%]" | ||||
| msgstr "Punase limiit [%]" | ||||
|  | ||||
| @@ -189,15 +174,6 @@ msgstr "Tid" | ||||
| msgid "Rid" | ||||
| msgstr "Rid" | ||||
|  | ||||
| msgid "Satellite Card" | ||||
| msgstr "Satelliidikaart" | ||||
|  | ||||
| msgid "Cable Card" | ||||
| msgstr "Kaablikaart" | ||||
|  | ||||
| msgid "Terrestrial Card" | ||||
| msgstr "Terrestiaalkaart" | ||||
|  | ||||
| msgid "Coderate" | ||||
| msgstr "Coderate" | ||||
|  | ||||
| @@ -270,36 +246,6 @@ msgstr "Fikseeritud" | ||||
| msgid "Analog" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "SECA/Mediaguard" | ||||
| msgstr "SECA/Mediaguard" | ||||
|  | ||||
| msgid "Viaccess" | ||||
| msgstr "Viaccess" | ||||
|  | ||||
| msgid "Irdeto" | ||||
| msgstr "Irdeto" | ||||
|  | ||||
| msgid "NDS/Videoguard" | ||||
| msgstr "NDS/Videoguard" | ||||
|  | ||||
| msgid "Conax" | ||||
| msgstr "Conax" | ||||
|  | ||||
| msgid "CryptoWorks" | ||||
| msgstr "CryptoWorks" | ||||
|  | ||||
| msgid "PowerVu" | ||||
| msgstr "PowerVu" | ||||
|  | ||||
| msgid "NagraVision" | ||||
| msgstr "NagraVision" | ||||
|  | ||||
| msgid "BetaCrypt" | ||||
| msgstr "BetaCrypt" | ||||
|  | ||||
| msgid "SkyCrypt" | ||||
| msgstr "SkyCrypt" | ||||
|  | ||||
| msgid "MPEG-2" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -339,15 +285,6 @@ msgstr "" | ||||
| msgid "mono" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "none" | ||||
| msgstr "ei" | ||||
|  | ||||
| msgid "auto" | ||||
| msgstr "auto" | ||||
|  | ||||
| msgid "MHz" | ||||
| msgstr "MHz" | ||||
|  | ||||
| msgid "interlaced" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -438,6 +375,9 @@ msgstr "dB" | ||||
| msgid "not indicated" | ||||
| msgstr "m<>rkimata" | ||||
|  | ||||
| msgid "MHz" | ||||
| msgstr "MHz" | ||||
|  | ||||
| msgid "free" | ||||
| msgstr "vaba" | ||||
|  | ||||
|   | ||||
							
								
								
									
										73
									
								
								po/fi_FI.po
									
									
									
									
									
								
							
							
						
						
									
										73
									
								
								po/fi_FI.po
									
									
									
									
									
								
							| @@ -5,9 +5,9 @@ | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: femon 1.6.3\n" | ||||
| "Project-Id-Version: femon 1.7.0\n" | ||||
| "Report-Msgid-Bugs-To: Rolf Ahrenberg\n" | ||||
| "POT-Creation-Date: 2008-11-09 13:31+0200\n" | ||||
| "POT-Creation-Date: 2008-12-16 12:08+0200\n" | ||||
| "PO-Revision-Date: 2007-08-12 23:22+0300\n" | ||||
| "Last-Translator: Rolf Ahrenberg\n" | ||||
| "Language-Team: <vdr@linuxtv.org>\n" | ||||
| @@ -69,18 +69,6 @@ msgstr "Piilota valinta päävalikosta" | ||||
| msgid "Define whether the main menu entry is hidden." | ||||
| msgstr "Määrittele, näytetäänkö laajennoksen valinta päävalikossa." | ||||
|  | ||||
| msgid "Use single area (8bpp)" | ||||
| msgstr "Käytä yksittäistä kuva-aluetta (8bpp)" | ||||
|  | ||||
| msgid "" | ||||
| "Define whether a single 8bpp OSD area is preferred.\n" | ||||
| "\n" | ||||
| "Required by Truetype fonts and anti-aliasing." | ||||
| msgstr "" | ||||
| "Määrittele, yritetäänkö käyttää yksittäistä 8bpp kuva-aluetta.\n" | ||||
| "\n" | ||||
| "Truetype-kirjasimet ja reunan pehmennys vaativat tämän asetuksen." | ||||
|  | ||||
| msgid "Default display mode" | ||||
| msgstr "Oletusnäyttötila" | ||||
|  | ||||
| @@ -108,12 +96,6 @@ msgstr "Vaakakeskitys" | ||||
| msgid "Define the horizontal offset of OSD." | ||||
| msgstr "Määrittele näytön vaakakeskitys." | ||||
|  | ||||
| msgid "Show CA system" | ||||
| msgstr "Näytä salausjärjestelmä" | ||||
|  | ||||
| msgid "Define whether the CA system is shown as text." | ||||
| msgstr "Määrittele, näytetään salausjärjestelmä tekstinä." | ||||
|  | ||||
| msgid "Red limit [%]" | ||||
| msgstr "Punaisen taso [%]" | ||||
|  | ||||
| @@ -192,15 +174,6 @@ msgstr "Lähete-ID" | ||||
| msgid "Rid" | ||||
| msgstr "Radio-ID" | ||||
|  | ||||
| msgid "Satellite Card" | ||||
| msgstr "Satelliittikortti" | ||||
|  | ||||
| msgid "Cable Card" | ||||
| msgstr "Kaapelikortti" | ||||
|  | ||||
| msgid "Terrestrial Card" | ||||
| msgstr "Terrestriaalikortti" | ||||
|  | ||||
| msgid "Coderate" | ||||
| msgstr "Suojaustaso" | ||||
|  | ||||
| @@ -273,36 +246,6 @@ msgstr "kiinteä" | ||||
| msgid "Analog" | ||||
| msgstr "analoginen" | ||||
|  | ||||
| msgid "SECA/Mediaguard" | ||||
| msgstr "SECA/Mediaguard" | ||||
|  | ||||
| msgid "Viaccess" | ||||
| msgstr "Viaccess" | ||||
|  | ||||
| msgid "Irdeto" | ||||
| msgstr "Irdeto" | ||||
|  | ||||
| msgid "NDS/Videoguard" | ||||
| msgstr "NDS/Videoguard" | ||||
|  | ||||
| msgid "Conax" | ||||
| msgstr "Conax" | ||||
|  | ||||
| msgid "CryptoWorks" | ||||
| msgstr "CryptoWorks" | ||||
|  | ||||
| msgid "PowerVu" | ||||
| msgstr "PowerVu" | ||||
|  | ||||
| msgid "NagraVision" | ||||
| msgstr "NagraVision" | ||||
|  | ||||
| msgid "BetaCrypt" | ||||
| msgstr "BetaCrypt" | ||||
|  | ||||
| msgid "SkyCrypt" | ||||
| msgstr "SkyCrypt" | ||||
|  | ||||
| msgid "MPEG-2" | ||||
| msgstr "MPEG-2" | ||||
|  | ||||
| @@ -342,15 +285,6 @@ msgstr "kaksikanavainen" | ||||
| msgid "mono" | ||||
| msgstr "mono" | ||||
|  | ||||
| msgid "none" | ||||
| msgstr "ei" | ||||
|  | ||||
| msgid "auto" | ||||
| msgstr "auto" | ||||
|  | ||||
| msgid "MHz" | ||||
| msgstr "MHz" | ||||
|  | ||||
| msgid "interlaced" | ||||
| msgstr "lomiteltu" | ||||
|  | ||||
| @@ -441,6 +375,9 @@ msgstr "dB" | ||||
| msgid "not indicated" | ||||
| msgstr "ei ilmaistu" | ||||
|  | ||||
| msgid "MHz" | ||||
| msgstr "MHz" | ||||
|  | ||||
| msgid "free" | ||||
| msgstr "vapaa" | ||||
|  | ||||
|   | ||||
							
								
								
									
										73
									
								
								po/fr_FR.po
									
									
									
									
									
								
							
							
						
						
									
										73
									
								
								po/fr_FR.po
									
									
									
									
									
								
							| @@ -5,9 +5,9 @@ | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: femon 1.6.3\n" | ||||
| "Project-Id-Version: femon 1.7.0\n" | ||||
| "Report-Msgid-Bugs-To: Rolf Ahrenberg\n" | ||||
| "POT-Creation-Date: 2008-11-09 13:31+0200\n" | ||||
| "POT-Creation-Date: 2008-12-16 12:08+0200\n" | ||||
| "PO-Revision-Date: 2008-01-26 09:59+0100\n" | ||||
| "Last-Translator: NIVAL Micha<68>l <mnival@club-internet.fr>\n" | ||||
| "Language-Team:  <vdr@linuxtv.org>\n" | ||||
| @@ -69,18 +69,6 @@ msgstr "Masquer dans le menu principal" | ||||
| msgid "Define whether the main menu entry is hidden." | ||||
| msgstr "D<>finit si l'entr<74>e doit <20>tre masqu<71>e dans le menu principal." | ||||
|  | ||||
| msgid "Use single area (8bpp)" | ||||
| msgstr "Utiliser zone unique (8bpp)" | ||||
|  | ||||
| msgid "" | ||||
| "Define whether a single 8bpp OSD area is preferred.\n" | ||||
| "\n" | ||||
| "Required by Truetype fonts and anti-aliasing." | ||||
| msgstr "" | ||||
| "D<>finit si une seule zone OSD de 8bpp est pr<70>f<EFBFBD>r<EFBFBD>e.\n" | ||||
| "\n" | ||||
| "Requis par les polices Truetype et l'anti-aliasing." | ||||
|  | ||||
| msgid "Default display mode" | ||||
| msgstr "Affichage par d<>faut" | ||||
|  | ||||
| @@ -108,12 +96,6 @@ msgstr "D | ||||
| msgid "Define the horizontal offset of OSD." | ||||
| msgstr "D<>finit le d<>placement horizontal de l'OSD." | ||||
|  | ||||
| msgid "Show CA system" | ||||
| msgstr "Afficher syst<73>me CA" | ||||
|  | ||||
| msgid "Define whether the CA system is shown as text." | ||||
| msgstr "D<>finit si le syst<73>me CA doit <20>tre affich<63>." | ||||
|  | ||||
| msgid "Red limit [%]" | ||||
| msgstr "Limite du rouge (%)" | ||||
|  | ||||
| @@ -192,15 +174,6 @@ msgstr "Tid" | ||||
| msgid "Rid" | ||||
| msgstr "Rid" | ||||
|  | ||||
| msgid "Satellite Card" | ||||
| msgstr "Carte Satellite" | ||||
|  | ||||
| msgid "Cable Card" | ||||
| msgstr "Carte C<>ble" | ||||
|  | ||||
| msgid "Terrestrial Card" | ||||
| msgstr "Carte TNT" | ||||
|  | ||||
| msgid "Coderate" | ||||
| msgstr "Coderate" | ||||
|  | ||||
| @@ -273,36 +246,6 @@ msgstr "Fixe" | ||||
| msgid "Analog" | ||||
| msgstr "Analogique" | ||||
|  | ||||
| msgid "SECA/Mediaguard" | ||||
| msgstr "SECA/Mediaguard" | ||||
|  | ||||
| msgid "Viaccess" | ||||
| msgstr "Viaccess" | ||||
|  | ||||
| msgid "Irdeto" | ||||
| msgstr "Irdeto" | ||||
|  | ||||
| msgid "NDS/Videoguard" | ||||
| msgstr "NDS/Videoguard" | ||||
|  | ||||
| msgid "Conax" | ||||
| msgstr "Conax" | ||||
|  | ||||
| msgid "CryptoWorks" | ||||
| msgstr "CryptoWorks" | ||||
|  | ||||
| msgid "PowerVu" | ||||
| msgstr "PowerVu" | ||||
|  | ||||
| msgid "NagraVision" | ||||
| msgstr "NagraVision" | ||||
|  | ||||
| msgid "BetaCrypt" | ||||
| msgstr "BetaCrypt" | ||||
|  | ||||
| msgid "SkyCrypt" | ||||
| msgstr "SkyCrypt" | ||||
|  | ||||
| msgid "MPEG-2" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -342,15 +285,6 @@ msgstr "" | ||||
| msgid "mono" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "none" | ||||
| msgstr "Aucun" | ||||
|  | ||||
| msgid "auto" | ||||
| msgstr "Auto" | ||||
|  | ||||
| msgid "MHz" | ||||
| msgstr "MHz" | ||||
|  | ||||
| msgid "interlaced" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -441,6 +375,9 @@ msgstr "dB" | ||||
| msgid "not indicated" | ||||
| msgstr "non indiqu<71>" | ||||
|  | ||||
| msgid "MHz" | ||||
| msgstr "MHz" | ||||
|  | ||||
| msgid "free" | ||||
| msgstr "libre" | ||||
|  | ||||
|   | ||||
							
								
								
									
										117
									
								
								po/it_IT.po
									
									
									
									
									
								
							
							
						
						
									
										117
									
								
								po/it_IT.po
									
									
									
									
									
								
							| @@ -6,10 +6,10 @@ | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: femon 1.6.3\n" | ||||
| "Project-Id-Version: femon 1.7.0\n" | ||||
| "Report-Msgid-Bugs-To: Rolf Ahrenberg\n" | ||||
| "POT-Creation-Date: 2008-11-09 13:31+0200\n" | ||||
| "PO-Revision-Date: 2008-04-17 00:18+0100\n" | ||||
| "POT-Creation-Date: 2008-12-16 12:08+0200\n" | ||||
| "PO-Revision-Date: 2008-11-10 23:37+0100\n" | ||||
| "Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n" | ||||
| "Language-Team:  <vdr@linuxtv.org>\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| @@ -70,18 +70,6 @@ msgstr "Nascondi voce menu principale" | ||||
| msgid "Define whether the main menu entry is hidden." | ||||
| msgstr "Definisci se la voce del menu principale <20> nascosta." | ||||
|  | ||||
| msgid "Use single area (8bpp)" | ||||
| msgstr "Utilizza area singola (8bpp)" | ||||
|  | ||||
| msgid "" | ||||
| "Define whether a single 8bpp OSD area is preferred.\n" | ||||
| "\n" | ||||
| "Required by Truetype fonts and anti-aliasing." | ||||
| msgstr "" | ||||
| "Definisci se <20> preferita un'area OSD singola a 8bpp.\n" | ||||
| "\n" | ||||
| "Richiesto dai caratteri Truetype e anti-aliasing." | ||||
|  | ||||
| msgid "Default display mode" | ||||
| msgstr "Modalit<69> visualizz. predefinita" | ||||
|  | ||||
| @@ -109,12 +97,6 @@ msgstr "Limite orizzontale" | ||||
| msgid "Define the horizontal offset of OSD." | ||||
| msgstr "Definisci il limite orizzontale dell'OSD." | ||||
|  | ||||
| msgid "Show CA system" | ||||
| msgstr "Mostra sistema CA" | ||||
|  | ||||
| msgid "Define whether the CA system is shown as text." | ||||
| msgstr "Definisci se il sistema CA viene mostrato come testo." | ||||
|  | ||||
| msgid "Red limit [%]" | ||||
| msgstr "Limite rosso [%]" | ||||
|  | ||||
| @@ -193,15 +175,6 @@ msgstr "Tid" | ||||
| msgid "Rid" | ||||
| msgstr "Rid" | ||||
|  | ||||
| msgid "Satellite Card" | ||||
| msgstr "Scheda satellite" | ||||
|  | ||||
| msgid "Cable Card" | ||||
| msgstr "Scheda via cavo" | ||||
|  | ||||
| msgid "Terrestrial Card" | ||||
| msgstr "Scheda terrestre" | ||||
|  | ||||
| msgid "Coderate" | ||||
| msgstr "Coderate" | ||||
|  | ||||
| @@ -212,7 +185,7 @@ msgid "Video Stream" | ||||
| msgstr "Flusso video" | ||||
|  | ||||
| msgid "Codec" | ||||
| msgstr "" | ||||
| msgstr "Codifica" | ||||
|  | ||||
| msgid "Bitrate" | ||||
| msgstr "Bitrate" | ||||
| @@ -233,7 +206,7 @@ msgid "Audio Stream" | ||||
| msgstr "Flusso audio" | ||||
|  | ||||
| msgid "Channel Mode" | ||||
| msgstr "" | ||||
| msgstr "Modalit<EFBFBD> canale" | ||||
|  | ||||
| msgid "Sampling Frequency" | ||||
| msgstr "Frequenza campionamento" | ||||
| @@ -274,101 +247,62 @@ msgstr "Fisso" | ||||
| msgid "Analog" | ||||
| msgstr "Analogico" | ||||
|  | ||||
| msgid "SECA/Mediaguard" | ||||
| msgstr "SECA/Mediaguard" | ||||
|  | ||||
| msgid "Viaccess" | ||||
| msgstr "Viaccess" | ||||
|  | ||||
| msgid "Irdeto" | ||||
| msgstr "Irdeto" | ||||
|  | ||||
| msgid "NDS/Videoguard" | ||||
| msgstr "NDS/Videoguard" | ||||
|  | ||||
| msgid "Conax" | ||||
| msgstr "Conax" | ||||
|  | ||||
| msgid "CryptoWorks" | ||||
| msgstr "CryptoWorks" | ||||
|  | ||||
| msgid "PowerVu" | ||||
| msgstr "PowerVu" | ||||
|  | ||||
| msgid "NagraVision" | ||||
| msgstr "NagraVision" | ||||
|  | ||||
| msgid "BetaCrypt" | ||||
| msgstr "BetaCrypt" | ||||
|  | ||||
| msgid "SkyCrypt" | ||||
| msgstr "SkyCrypt" | ||||
|  | ||||
| msgid "MPEG-2" | ||||
| msgstr "" | ||||
| msgstr "MPEG-2" | ||||
|  | ||||
| msgid "H.264" | ||||
| msgstr "" | ||||
| msgstr "H.264" | ||||
|  | ||||
| msgid "MPEG-1 Layer I" | ||||
| msgstr "" | ||||
| msgstr "MPEG-1 Layer I" | ||||
|  | ||||
| msgid "MPEG-1 Layer II" | ||||
| msgstr "" | ||||
| msgstr "MPEG-1 Layer II" | ||||
|  | ||||
| msgid "MPEG-1 Layer III" | ||||
| msgstr "" | ||||
| msgstr "MPEG-1 Layer III" | ||||
|  | ||||
| msgid "MPEG-2 Layer I" | ||||
| msgstr "" | ||||
| msgstr "MPEG-2 Layer I" | ||||
|  | ||||
| msgid "MPEG-2 Layer II" | ||||
| msgstr "" | ||||
| msgstr "MPEG-2 Layer II" | ||||
|  | ||||
| msgid "MPEG-2 Layer III" | ||||
| msgstr "" | ||||
| msgstr "MPEG-2 Layer III" | ||||
|  | ||||
| msgid "HE-AAC" | ||||
| msgstr "" | ||||
| msgstr "HE-AAC" | ||||
|  | ||||
| msgid "stereo" | ||||
| msgstr "" | ||||
| msgstr "stereo" | ||||
|  | ||||
| msgid "joint Stereo" | ||||
| msgstr "" | ||||
| msgstr "joint Stereo" | ||||
|  | ||||
| msgid "dual" | ||||
| msgstr "" | ||||
| msgstr "dual" | ||||
|  | ||||
| msgid "mono" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "none" | ||||
| msgstr "nessuna" | ||||
|  | ||||
| msgid "auto" | ||||
| msgstr "auto" | ||||
|  | ||||
| msgid "MHz" | ||||
| msgstr "MHz" | ||||
| msgstr "mono" | ||||
|  | ||||
| msgid "interlaced" | ||||
| msgstr "" | ||||
| msgstr "interlacciato" | ||||
|  | ||||
| msgid "progressive" | ||||
| msgstr "" | ||||
| msgstr "progressivo" | ||||
|  | ||||
| msgid "reserved" | ||||
| msgstr "riservato" | ||||
|  | ||||
| msgid "extended" | ||||
| msgstr "" | ||||
| msgstr "esteso" | ||||
|  | ||||
| msgid "unknown" | ||||
| msgstr "sconosciuto" | ||||
|  | ||||
| msgid "component" | ||||
| msgstr "" | ||||
| msgstr "componente" | ||||
|  | ||||
| msgid "PAL" | ||||
| msgstr "PAL" | ||||
| @@ -377,10 +311,10 @@ msgid "NTSC" | ||||
| msgstr "NTSC" | ||||
|  | ||||
| msgid "SECAM" | ||||
| msgstr "" | ||||
| msgstr "SECAM" | ||||
|  | ||||
| msgid "MAC" | ||||
| msgstr "" | ||||
| msgstr "MAC" | ||||
|  | ||||
| msgid "Hz" | ||||
| msgstr "Hz" | ||||
| @@ -442,6 +376,9 @@ msgstr "dB" | ||||
| msgid "not indicated" | ||||
| msgstr "non indicato" | ||||
|  | ||||
| msgid "MHz" | ||||
| msgstr "MHz" | ||||
|  | ||||
| msgid "free" | ||||
| msgstr "libero" | ||||
|  | ||||
|   | ||||
							
								
								
									
										70
									
								
								po/ru_RU.po
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								po/ru_RU.po
									
									
									
									
									
								
							| @@ -5,9 +5,9 @@ | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: femon 1.6.3\n" | ||||
| "Project-Id-Version: femon 1.7.0\n" | ||||
| "Report-Msgid-Bugs-To: Rolf Ahrenberg\n" | ||||
| "POT-Creation-Date: 2008-11-09 13:31+0200\n" | ||||
| "POT-Creation-Date: 2008-12-16 12:08+0200\n" | ||||
| "PO-Revision-Date: 2007-08-12 23:22+0300\n" | ||||
| "Last-Translator: Vyacheslav Dikonov\n" | ||||
| "Language-Team: <vdr@linuxtv.org>\n" | ||||
| @@ -69,15 +69,6 @@ msgstr " | ||||
| msgid "Define whether the main menu entry is hidden." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Use single area (8bpp)" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "" | ||||
| "Define whether a single 8bpp OSD area is preferred.\n" | ||||
| "\n" | ||||
| "Required by Truetype fonts and anti-aliasing." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Default display mode" | ||||
| msgstr "<22><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" | ||||
|  | ||||
| @@ -105,12 +96,6 @@ msgstr "" | ||||
| msgid "Define the horizontal offset of OSD." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Show CA system" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Define whether the CA system is shown as text." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Red limit [%]" | ||||
| msgstr "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> (%)" | ||||
|  | ||||
| @@ -189,15 +174,6 @@ msgstr "Tid" | ||||
| msgid "Rid" | ||||
| msgstr "Rid" | ||||
|  | ||||
| msgid "Satellite Card" | ||||
| msgstr "<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" | ||||
|  | ||||
| msgid "Cable Card" | ||||
| msgstr "<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" | ||||
|  | ||||
| msgid "Terrestrial Card" | ||||
| msgstr "<22><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" | ||||
|  | ||||
| msgid "Coderate" | ||||
| msgstr "Coderate" | ||||
|  | ||||
| @@ -270,36 +246,6 @@ msgstr "" | ||||
| msgid "Analog" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "SECA/Mediaguard" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Viaccess" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Irdeto" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "NDS/Videoguard" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Conax" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "CryptoWorks" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "PowerVu" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "NagraVision" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "BetaCrypt" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "SkyCrypt" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "MPEG-2" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -339,15 +285,6 @@ msgstr "" | ||||
| msgid "mono" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "none" | ||||
| msgstr "<22><><EFBFBD>" | ||||
|  | ||||
| msgid "auto" | ||||
| msgstr "<22><><EFBFBD><EFBFBD>" | ||||
|  | ||||
| msgid "MHz" | ||||
| msgstr "<22><><EFBFBD>" | ||||
|  | ||||
| msgid "interlaced" | ||||
| msgstr "" | ||||
|  | ||||
| @@ -438,6 +375,9 @@ msgstr "dB" | ||||
| msgid "not indicated" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "MHz" | ||||
| msgstr "<22><><EFBFBD>" | ||||
|  | ||||
| msgid "free" | ||||
| msgstr "" | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user