From patchwork Tue Nov 22 09:36:10 2005 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Markus Hahn X-Patchwork-Id: 12101 Received: from 213-239-210-49.clients.your-server.de ([213.239.210.49] helo=reelbox.de ident=postfix) by www.linuxtv.org with esmtp (Exim 4.50) id 1EeUcO-0001FQ-1q for vdr@linuxtv.org; Tue, 22 Nov 2005 10:39:16 +0100 Received: from rechner140.reel (p5496D23C.dip.t-dialin.net [84.150.210.60]) by reelbox.de (Postfix) with ESMTP id 00132804005; Tue, 22 Nov 2005 10:39:10 +0100 (CET) From: Markus Hahn Organization: Reel Multimedia AG To: cwieninger@gmx.de, VDR Mailing List Subject: Re: [vdr] How to display an OSD message from a thread? Date: Tue, 22 Nov 2005 10:36:10 +0100 User-Agent: KMail/1.7.1 References: <200511181632.04096.cwieninger@gmx.de> In-Reply-To: <200511181632.04096.cwieninger@gmx.de> MIME-Version: 1.0 Message-Id: <200511221036.11203.mhahn@reel-multimedia.com> X-BeenThere: vdr@linuxtv.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: VDR Mailing List List-Id: VDR Mailing List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 22 Nov 2005 09:39:16 -0000 Status: O X-Status: X-Keywords: X-UID: 6299 Am Freitag, 18. November 2005 16:32 schrieb Christian Wieninger: > 'm trying to display an OSD message from a separate thread within a plugin > to indicate when some background action has finished. Some Plugin try this and failed. But it is easy to send a signal or flag to your main thread. my patch of dvd Plugin: regards movimax diff -Nu /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/dvd.c dvd-cvs/dvd.c --- /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/dvd.c 2005-09-26 18:44:47.000000000 +0200 +++ dvd-cvs/dvd.c 2005-09-28 19:56:12.000000000 +0200 @@ -118,8 +118,3 @@ } VDRPLUGINCREATOR(cPluginDvd); // Don't touch this! - - - - - diff -Nu /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/dvd.h dvd-cvs/dvd.h --- /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/dvd.h 2005-09-26 18:44:47.000000000 +0200 +++ dvd-cvs/dvd.h 2005-09-28 20:24:13.000000000 +0200 @@ -24,7 +24,7 @@ static const char *VERSION = "0.3.6-b03"; static const char *DESCRIPTION = "Plugin.DVD$turn VDR into an (almost) full featured DVD player"; -static const char *MAINMENUENTRY = "Plugin.DVD$DVD"; +static const char *MAINMENUENTRY = "Plugin.DVD$DVD/HD-DVD"; // --- cPluginDvd ------------------------------------------------------------ diff -Nu /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/i18n.c dvd-cvs/i18n.c --- /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/i18n.c 2005-09-26 18:44:47.000000000 +0200 +++ dvd-cvs/i18n.c 2005-09-28 20:05:26.000000000 +0200 @@ -40,30 +40,30 @@ const tI18nPhrase DvdPhrases[] = { { - "Plugin.DVD$DVD", // English - "DVD", // Deutsch - "DVD", // Slovenski - "DVD", // Italiano - "DVD", // Nederlands - "DVD", // Português - "DVD", // Français - "DVD", // Norsk - "DVD", // suomi - "DVD", // Polski - "DVD", // Español - "DVD", // ÅëëçíéêÜ (Greek) - "DVD", // Svenska - "DVD", // Romaneste - "DVD", // Magyar - "DVD", // Català - "DVD", // ÀãááÚØÙ (Russian) - "DVD", // Hrvatski (Croatian) - "DVD", // Eesti - "DVD", // Dansk + "Plugin.DVD$DVD/HD-DVD", // English + "DVD/HD-DVD", // Deutsch + "DVD/HD-DVD", // Slovenski + "DVD/HD-DVD", // Italiano + "DVD/HD-DVD", // Nederlands + "DVD/HD-DVD", // Português + "DVD/HD-DVD", // Français + "DVD/HD-DVD", // Norsk + "DVD/HD-DVD", // suomi + "DVD/HD-DVD", // Polski + "DVD/HD-DVD", // Español + "DVD/HD-DVD", // ÅëëçíéêÜ (Greek) + "DVD/HD-DVD", // Svenska + "DVD/HD-DVD", // Romaneste + "DVD/HD-DVD", // Magyar + "DVD/HD-DVD", // Català + "DVD/HD-DVD", // ÀãááÚØÙ (Russian) + "DVD/HD-DVD", // Hrvatski (Croatian) + "DVD/HD-DVD", // Eesti + "DVD/HD-DVD", // Dansk }, { "Plugin.DVD$turn VDR into an (almost) full featured DVD player", // English - "", // Deutsch + "Erweitert den VDR zu einen DVD Spieler", // Deutsch "", // Slovenski "", // Italiano "", // Nederlands Gemeinsame Unterverzeichnisse: /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/patches und dvd-cvs/patches. diff -Nu /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/player-dvd.c dvd-cvs/player-dvd.c --- /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/player-dvd.c 2005-09-27 18:11:07.000000000 +0200 +++ dvd-cvs/player-dvd.c 2005-09-29 14:18:39.000000000 +0200 @@ -316,11 +316,14 @@ SetTitleInfoString(); SetTitleString(); SetAspectString(); + message = 0; } cDvdPlayer::~cDvdPlayer() { DEBUGDVD("destructor cDvdPlayer::~cDvdPlayer()\n"); + if (message) + PrintMsg(message); Detach(); Save(); delete []event_buf; @@ -594,6 +597,8 @@ if (dvdnav_open(&nav, const_cast(cDVD::getDVD()->DeviceName())) != DVDNAV_STATUS_OK) { //Skins.Message(mtError, tr("Error.DVD$Error opening DVD!")); + message = 1; + esyslog("ERROR: dvd-plugin cannot open dvdnav device %s -> input thread ended (pid=%d) !", const_cast(cDVD::getDVD()->DeviceName()), getpid()); active = running = false; nav=NULL; @@ -980,6 +985,7 @@ // as it would bypass dvdnav_free_cache_block if (dvdnav_get_next_cache_block(nav, &cache_ptr, &event, &len) != DVDNAV_STATUS_OK) { // Skins.Message(mtError, tr("Error.DVD$Error fetching data from DVD!")); + message = 2; esyslog("ERROR: %s\n",tr("Error.DVD$Error fetching data from DVD!")); active = running = false; nav=NULL; @@ -1852,6 +1858,7 @@ dvdnav_stop(nav); else running = false; + Cancel(3); running = false; active = false; @@ -1949,6 +1956,7 @@ } } + void cDvdPlayer::Backward(void) { if(!DVDActiveAndRunning()) return; @@ -1998,6 +2006,15 @@ } } + +void cDvdPlayer::PrintMsg(int message) +{ + switch (message) { + case 1 : Skins.Message(mtError, tr("Error.DVD$Error opening DVD!")); return; + case 2 : Skins.Message(mtError, tr("Error.DVD$Error fetching data from DVD!")); return; + } +} + inline int cDvdPlayer::GetProgramNumber() const { return lastCellEventInfo.pgN; Dateien /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/.player-dvd.c.swp und dvd-cvs/.player-dvd.c.swp sind verschieden. diff -Nu /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/player-dvd.h dvd-cvs/player-dvd.h --- /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/player-dvd.h 2005-09-26 18:44:47.000000000 +0200 +++ dvd-cvs/player-dvd.h 2005-09-28 19:23:03.000000000 +0200 @@ -71,7 +71,8 @@ int hsize; int vsize; int vaspect; - + int message; + cIframeAssembler *iframeAssembler; int IframeCnt; uint8_t * event_buf; @@ -241,6 +242,7 @@ char * GetTitleInfoString( void ) const ; char * GetAspectString( void ) const ; + void PrintMsg(int message); int GetProgramNumber() const ; int GetCellNumber() const ; diff -Nu /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/setup-dvd.c dvd-cvs/setup-dvd.c --- /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/setup-dvd.c 2005-09-26 18:44:47.000000000 +0200 +++ dvd-cvs/setup-dvd.c 2005-09-28 20:04:56.000000000 +0200 @@ -58,7 +58,7 @@ cMenuSetupDVD::cMenuSetupDVD(void) { data = DVDSetup; - SetSection(tr("Plugin.DVD$DVD")); + SetSection(tr("Plugin.DVD$DVD/HD-DVD")); Add(new cMenuEditStraItem(tr("Setup.DVD$Preferred menu language"), &data.MenuLanguage, I18nNumLanguages, I18nLanguages())); Add(new cMenuEditStraItem(tr("Setup.DVD$Preferred audio language"), &data.AudioLanguage, I18nNumLanguages, I18nLanguages())); Add(new cMenuEditStraItem(tr("Setup.DVD$Preferred subtitle language"), &data.SpuLanguage, I18nNumLanguages, I18nLanguages())); Gemeinsame Unterverzeichnisse: /home/markus/svn-vdr/vdr-plugins/src/dvd-cvs/.svn und dvd-cvs/.svn.