Author: jarod
Update of /cvs/free/rpms/mythtv/F-12
In directory se02.es.rpmfusion.net:/tmp/cvs-serv1252
Modified Files:
mythplugins-0.22-svnfixes.patch mythtv-0.22-svnfixes.patch
mythtv.spec
Log Message:
* Mon Feb 01 2010 Jarod Wilson <jarod(a)wilsonet.com> 0.22-5
- Update to release-0-22-fixes branch, svn revision 23433
mythplugins-0.22-svnfixes.patch:
mythgallery/mythgallery/imageview.cpp | 2
mythmovies/ignyte/ignytegrabber.cpp | 2
mythmusic/mythmusic/main.cpp | 11
mythnews/mythnews/mythnews.cpp | 75 -
mythnews/mythnews/newssite.cpp | 12
mythvideo/mtd/dvdprobe.cpp | 56
mythvideo/mythvideo/main.cpp | 1
mythvideo/mythvideo/playercommand.cpp | 9
mythvideo/mythvideo/scripts/jamu-example.conf | 176 +-
mythvideo/mythvideo/scripts/jamu.py | 1307 +++++++++++-------
mythvideo/mythvideo/scripts/ttvdb.py | 51
mythvideo/mythvideo/videodlg.cpp | 26
mythvideo/mythvideo/videolist.cpp | 4
mythweather/mythweather/main.cpp | 4
mythweather/mythweather/scripts/uk_bbc/BBCLocation.pm | 27
15 files changed, 1100 insertions(+), 663 deletions(-)
View full diff with command:
/usr/bin/cvs -f diff -kk -u -N -r 1.1 -r 1.2 mythplugins-0.22-svnfixes.patch
Index: mythplugins-0.22-svnfixes.patch
===================================================================
RCS file: /cvs/free/rpms/mythtv/F-12/mythplugins-0.22-svnfixes.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- mythplugins-0.22-svnfixes.patch 22 Nov 2009 05:04:40 -0000 1.1
+++ mythplugins-0.22-svnfixes.patch 2 Feb 2010 02:44:32 -0000 1.2
@@ -1,3 +1,211 @@
+Index: mythplugins/mythweather/mythweather/scripts/uk_bbc/BBCLocation.pm
+===================================================================
+--- mythplugins/mythweather/mythweather/scripts/uk_bbc/BBCLocation.pm (revision 22751)
++++ mythplugins/mythweather/mythweather/scripts/uk_bbc/BBCLocation.pm (working copy)
+@@ -12,19 +12,17 @@
+
+ sub Search {
+
+- my $base_url = 'http://news.bbc.co.uk/weather/forecast/';
+- my $world_base_url = $base_url . '?lowgraphics=true&search=';
+- my $local_base_url = $base_url .
'?lowgraphics=true&type=county_state&search=';
++ my $base_url =
'http://news.bbc.co.uk/weather/util/search/Search.xhtml?';
++ my $world_base_url = $base_url .
'lowgraphics=true®ion=world&search=';
++ my $local_base_url = $base_url .
'lowgraphics=true®ion=uk&search=';
+
+ my $search_string = shift;
+
+ my $world_response = get $world_base_url . $search_string;
+- die unless defined $world_response;
+ my $local_response = get $local_base_url . $search_string;
+- die unless defined $local_response;
+
+- &parseResults($world_response);
+- &parseResults($local_response);
++ &parseResults($world_response) if defined($world_response);
++ &parseResults($local_response) if defined($local_response);
+
+ if ( ($resultcount > 0 ) && ($#searchresults < 0) ) {
+ foreach my $url (@resulturl) {
+@@ -40,8 +38,6 @@
+ sub parseResults {
+ my $response = shift;
+ my $isresults = 0;
+- my $havename = 0;
+- my $haveid = 0;
+ my $resultline = "";
+
+ foreach (split("\n", $response)) {
+@@ -59,14 +55,14 @@
+ $resultcount = $1 if (/<strong>There \w{2,3} (\d*) forecasts?
matching/);
+
+ # Collect result URLs
+- if (/<a id=\"result_\d*\" href \=\"?.*search\=.*/) {
++ if (/<a id=\"result_\d*\" .* href \=\"?.*search\=.*/) {
+ $url = $_;
+ $url =~ s/.*href \=\"(.*)\".*/$1/s;
+ push (@resulturl, $url);
+ }
+
+ # Collect location IDs and location names
+- elsif (/<a id=\"result_\d*\" href
\=\"\/weather\/forecast\//) {
++ elsif (/<a id=\"result_\d*\" .* href
\=\"\/weather\/forecast\//) {
+ $locid = $_;
+ $locid =~ s/.*\/weather\/forecast\/(\d{0,5})\?.*/$1/s;
+
+@@ -74,14 +70,11 @@
+ $locname =~ s/.*<a
id=\"result_\d*\".*>(.*)<\/a>.*/$1/s;
+
+ $resultline = $locid . "::" . $locname;
+- push (@searchresults, $resultline);
++ if (! grep(/^$locid/, @searchresults)) {
++ push (@searchresults, $resultline);
++ }
+ }
+ }
+-
+- if ($havename && $haveid) {
+- push (@searchresults, $resultline);
+- last;
+- }
+ }
+
+ return @searchresults;
+Index: mythplugins/mythweather/mythweather/main.cpp
+===================================================================
+--- mythplugins/mythweather/mythweather/main.cpp (revision 23433)
++++ mythplugins/mythweather/mythweather/main.cpp (working copy)
+@@ -142,8 +142,10 @@
+ menu->setKillable();
+ if (menu->foundTheme())
+ {
+- if (LCD *lcd = LCD::Get())
++ if (LCD *lcd = LCD::Get()) {
++ lcd->setFunctionLEDs(FUNC_NEWS, false);
+ lcd->switchToTime();
++ }
+
+ GetMythMainWindow()->GetMainStack()->AddScreen(menu);
+ return 0;
+Index: mythplugins/mythmovies/ignyte/ignytegrabber.cpp
+===================================================================
+--- mythplugins/mythmovies/ignyte/ignytegrabber.cpp (revision 22751)
++++ mythplugins/mythmovies/ignyte/ignytegrabber.cpp (working copy)
+@@ -19,7 +19,7 @@
+ "</tns:GetTheatersAndMovies>\n"
+ "</soap:Body>\n"
+ "</soap:Envelope>\n");
+- QString server("ignyte.com");
++ QString server("www.ignyte.com");
+ QString
path("/webservices/ignyte.whatsshowing.webservice/moviefunctions.asmx");
+ QString
soapAction("http://www.ignyte.com/whatsshowing/GetTheatersAndMovies&...;
+ ms->doSoapRequest(server, path, soapAction, fields);
+Index: mythplugins/mythvideo/mtd/dvdprobe.cpp
+===================================================================
+--- mythplugins/mythvideo/mtd/dvdprobe.cpp (revision 22751)
++++ mythplugins/mythvideo/mtd/dvdprobe.cpp (working copy)
+@@ -47,6 +47,10 @@
+ }
+ }
+
++#define LOC_ERR QString("dvdprobe.cpp, Error: ")
++#define LOC_WARN QString("dvdprobe.cpp, Warning: ")
++#define LOC QString("dvdprobe.cpp: ")
++
+ DVDSubTitle::DVDSubTitle(int subtitle_id, const QString &a_language) :
+ id(subtitle_id), language(a_language.toUtf8())
+ {
+@@ -431,25 +435,47 @@
+ // Before touching libdvdread stuff
+ // (below), see if there's actually
+ // a drive with media in it
+- QFile dvdDevice(device);
+- if (!dvdDevice.exists())
+ {
+- // Device doesn't exist. Silly user
+- Reset();
+- return false;
++ QFile dvdDevice(device);
++ if (!dvdDevice.exists())
++ {
++ // Device doesn't exist. Silly user
++ Reset();
++ return false;
++ }
+ }
+
+- if (!dvdDevice.open(QIODevice::ReadOnly))
++ // On UNIX like file systems O_NONBLOCK should be used to
++ // indicate we don't want to do reading or writing, we
++ // just want to issue some ioctls. This will prevent the
++ // OS from helping out and shearing the fingers off any
++ // person's attempting to place a DVD in the drive when
++ // we call open.
++ int flags = O_RDONLY;
++#ifdef O_NONBLOCK
++ flags |= O_NONBLOCK;
++#endif
++
++ // Ideally we can open with exclusive flag.
++#ifdef O_EXCL
++ flags |= O_EXCL;
++#endif
++
++ int drive_handle = open(device.toLocal8Bit().constData(), flags);
++
++#ifdef O_EXCL
++ // If this failed with exclusive, try without.
++ if (drive_handle < 0)
+ {
+- // Can't open device.
+- Reset();
+- return false;
++ flags &= ~O_EXCL;
++ drive_handle = open(device.toLocal8Bit().constData(), flags);
+ }
++#endif
+
+- int drive_handle = dvdDevice.handle();
+-
+- if (drive_handle == -1)
++ if (drive_handle < 0)
+ {
++ VERBOSE(VB_IMPORTANT, LOC +
++ "Failed to open file descriptor for DVD." + ENO);
+ Reset();
+ return false;
+ }
+@@ -470,6 +496,7 @@
+ if (status < 0)
+ {
+ Reset();
++ close(drive_handle);
+ return false;
+ }
+
+@@ -483,6 +510,7 @@
+ // 3 = not ready
+ //
+ Reset();
++ close(drive_handle);
+ return false;
[...2630 lines suppressed...]
+-# The type of data is specified by the key value.
++# The type of data is specified by the key value.
+ # Valid keys are:
+ # poster - This is also know as a cover art or a cover image
+ # fanart
+@@ -485,32 +500,31 @@
+ # metadate - The video file's text description e.g. plot, director ... etc
+ #
+ # NOTE: At this time there is no TV Secondary source scripts available unless you write
your own.
+-#
++#
+ [movies-secondary-sources]
+ #poster: /usr/local/share/mythtv/mythvideo/scripts/fetch_poster.py -P %%(imdb)s
+-#fanart:
++#fanart:
+ #metadata: /usr/local/share/mythtv/mythvideo/scripts/imdbpy.py -D %%(imdb)s
+
+ [tv-secondary-sources]
+ #poster:
+-#fanart:
++#fanart:
+ #banner:
+ #metadata:
+ # END Secondary sources
section--------------------------------------------------------------------
+
+ # START regex
section------------------------------------------------------------------------------
+-# NOTE: If you do not understand regex expressions DO NOT USE this section.
++# NOTE: If you do not understand regex expressions DO NOT USE this section.
+ # This section adds to the default regex strings used to parse file names when
extracting
+ # the following: series name, season number, episode number
+ # NOTE: The "% (self.config['valid_filename_chars_regex'])" part of
the string is assumed
+ # NOTE: ANY % percent sign in the expression must be doubled (e.g. a % must be changed
to %% )
+ # NOTE: The key value (e.g. "regex01") must be unique for each value.
+ # NOTE: DO NOT surround the regex pattern string with the traditional '''
three single quotes
+-#
+-[regex]
++#
++[regex]
+ # This is an example video file name "foo_S01_12" where:
+ # series name is "foo", season number starts at "S" and episode
number starts after '_'
+ # foo_S01_12
+ #regex01: ^(.+?)[ \._\-][Ss]([0-9]+)_([0-9]+)[^\\/]*$
+ # END regex
section------------------------------------------------------------------------------
+-
Index: mythplugins/mythvideo/mythvideo/scripts/ttvdb.py
===================================================================
--- mythplugins/mythvideo/mythvideo/scripts/ttvdb.py (revision 22751)
@@ -3097,9 +4120,24 @@
if (!host.isEmpty())
{
QString combFileName = QString("%1.%2").arg(title)
+Index: mythplugins/mythvideo/mythvideo/videolist.cpp
+===================================================================
+--- mythplugins/mythvideo/mythvideo/videolist.cpp (revision 22751)
++++ mythplugins/mythvideo/mythvideo/videolist.cpp (working copy)
+@@ -1231,6 +1231,10 @@
+ prefix_to_node_map ptnm;
+
+ QStringList dirs = GetVideoDirs();
++
++ if (!dirs.size())
++ return;
++
+ QString test_prefix(dirs[0]);
+
+ meta_dir_node *video_root = &m_metadata_tree;
Index: mythplugins/mythvideo/mythvideo/main.cpp
===================================================================
---- mythplugins/mythvideo/mythvideo/main.cpp (revision 22880)
+--- mythplugins/mythvideo/mythvideo/main.cpp (revision 23433)
+++ mythplugins/mythvideo/mythvideo/main.cpp (working copy)
@@ -517,6 +517,7 @@
{
@@ -3111,7 +4149,7 @@
GetMythMainWindow()->GetMainStack()->AddScreen(diag);
Index: mythplugins/mythvideo/mythvideo/playercommand.cpp
===================================================================
---- mythplugins/mythvideo/mythvideo/playercommand.cpp (revision 22880)
+--- mythplugins/mythvideo/mythvideo/playercommand.cpp (revision 23433)
+++ mythplugins/mythvideo/mythvideo/playercommand.cpp (working copy)
@@ -5,6 +5,7 @@
#include <mythtv/libmythui/mythmainwindow.h>
@@ -3141,6 +4179,44 @@
}
QString VideoPlayerCommand::GetCommandDisplayName() const
+Index: mythplugins/mythnews/mythnews/newssite.cpp
+===================================================================
+--- mythplugins/mythnews/mythnews/newssite.cpp (revision 22751)
++++ mythplugins/mythnews/mythnews/newssite.cpp (working copy)
+@@ -314,6 +314,7 @@
+ QDomNode enclosureNode = itemNode.namedItem("enclosure");
+ QString enclosure = QString::null;
+ QString enclosure_type = QString::null;
++ QString thumbnail = QString::null;
+ if (!enclosureNode.isNull())
+ {
+ QDomAttr enclosureURL = enclosureNode.toElement()
+@@ -324,8 +325,16 @@
+
+ QDomAttr enclosureType = enclosureNode.toElement()
+ .attributeNode("type");
+- if (!enclosureType.isNull())
++ if (!enclosureType.isNull())
++ {
+ enclosure_type = enclosureType.value();
++
++ if (enclosure_type == "image/jpeg")
++ {
++ thumbnail = enclosure;
++ enclosure = QString::null;
++ }
++ }
+ }
+
+ //////////////////////////////////////////////////////////////
+@@ -341,7 +350,6 @@
+ itemNode = mediaGroup;
+
+ QDomNode thumbNode = itemNode.namedItem("media:thumbnail");
+- QString thumbnail = QString::null;
+ if (!thumbNode.isNull())
+ {
+ QDomAttr thumburl = thumbNode.toElement().attributeNode("url");
Index: mythplugins/mythnews/mythnews/mythnews.cpp
===================================================================
--- mythplugins/mythnews/mythnews/mythnews.cpp (revision 22751)
@@ -3192,7 +4268,17 @@
if (m_thumbnailImage)
m_thumbnailImage->Hide();
}
-@@ -352,31 +359,43 @@
+@@ -315,6 +322,9 @@
+ }
+ else
+ {
++ if (m_thumbnailImage)
++ m_thumbnailImage->Hide();
++
+ if (!site->imageURL().isEmpty())
+ {
+ QString fileprefix = GetConfDir();
+@@ -352,31 +362,43 @@
}
}
@@ -3250,7 +4336,7 @@
if (site)
{
if (m_titleText)
-@@ -388,7 +407,7 @@
+@@ -388,7 +410,7 @@
if (m_thumbnailImage && m_thumbnailImage->IsVisible())
m_thumbnailImage->Hide();
@@ -3259,7 +4345,7 @@
m_podcastImage->Show();
if (!site->imageURL().isEmpty())
-@@ -715,7 +734,8 @@
+@@ -715,7 +737,8 @@
.arg(formatSize(progress, 2))
.arg(formatSize(total, 2))
.arg(floor(fProgress*100));
@@ -3271,7 +4357,7 @@
usleep(100000);
Index: mythplugins/mythmusic/mythmusic/main.cpp
===================================================================
---- mythplugins/mythmusic/mythmusic/main.cpp (revision 22880)
+--- mythplugins/mythmusic/mythmusic/main.cpp (revision 23433)
+++ mythplugins/mythmusic/mythmusic/main.cpp (working copy)
@@ -21,6 +21,7 @@
#include <mythtv/compat.h>
@@ -3305,25 +4391,9 @@
}
int mythplugin_run(void)
-Index: mythplugins/mythweather/mythweather/main.cpp
-===================================================================
---- mythplugins/mythweather/mythweather/main.cpp (revision 22880)
-+++ mythplugins/mythweather/mythweather/main.cpp (working copy)
-@@ -142,8 +142,10 @@
- menu->setKillable();
- if (menu->foundTheme())
- {
-- if (LCD *lcd = LCD::Get())
-+ if (LCD *lcd = LCD::Get()) {
-+ lcd->setFunctionLEDs(FUNC_NEWS, false);
- lcd->switchToTime();
-+ }
-
- GetMythMainWindow()->GetMainStack()->AddScreen(menu);
- return 0;
Index: mythplugins/mythgallery/mythgallery/imageview.cpp
===================================================================
---- mythplugins/mythgallery/mythgallery/imageview.cpp (revision 22880)
+--- mythplugins/mythgallery/mythgallery/imageview.cpp (revision 23433)
+++ mythplugins/mythgallery/mythgallery/imageview.cpp (working copy)
@@ -152,9 +152,11 @@
mythtv-0.22-svnfixes.patch:
bindings/python/MythTV/MythTV.py | 26
configure | 5
contrib/channel_changers/6200ch/6200ch.c | 2
contrib/imports/mirobridge/mirobridge.py | 657 +++++-----
contrib/imports/mirobridge/mirobridge/mirobridge-example.conf | 105 -
docs/index.html | 2
docs/mythtv-HOWTO-11.html | 22
docs/mythtv-HOWTO-23.html | 8
docs/mythtv-HOWTO-5.html | 8
docs/mythtv-HOWTO-singlehtml.html | 40
docs/mythtv-HOWTO.html | 2
docs/mythtv-HOWTO.sgml | 61
docs/mythtv-HOWTO.txt | 152 +-
keys.txt | 27
libs/libmyth/audiooutputbase.cpp | 6
libs/libmyth/mythcontext.cpp | 5
libs/libmyth/mythdialogs.h | 10
libs/libmyth/programlist.cpp | 4
libs/libmyth/uilistbtntype.cpp | 3
libs/libmythdb/lcddevice.cpp | 90 +
libs/libmythdb/lcddevice.h | 86 +
libs/libmythdvdnav/dvdnav/dvdnav.c | 21
libs/libmythdvdnav/dvdnav/dvdnav.h | 5
libs/libmythdvdnav/dvdnav/vm/vm.c | 35
libs/libmythdvdnav/dvdnav/vm/vm.h | 1
libs/libmythtv/DVDRingBuffer.cpp | 46
libs/libmythtv/DVDRingBuffer.h | 7
libs/libmythtv/NuppelVideoPlayer.cpp | 46
libs/libmythtv/NuppelVideoPlayer.h | 3
libs/libmythtv/avformatdecoder.cpp | 133 +-
libs/libmythtv/firewiredevice.cpp | 3
libs/libmythtv/hdhrstreamhandler.cpp | 6
libs/libmythtv/mpeg/dvbdescriptors.h | 11
libs/libmythtv/osd.cpp | 2
libs/libmythtv/playercontext.cpp | 35
libs/libmythtv/recordinglist.cpp | 4
libs/libmythtv/recordingrule.cpp | 2
libs/libmythtv/tv_play.cpp | 21
libs/libmythtv/tv_rec.cpp | 5
libs/libmythtv/util-vdpau.cpp | 27
libs/libmythtv/videodisplayprofile.cpp | 27
libs/libmythtv/videodisplayprofile.h | 1
libs/libmythtv/videoout_xv.cpp | 2
libs/libmythui/DisplayResScreen.cpp | 19
libs/libmythui/mythmainwindow.cpp | 21
libs/libmythui/mythuibuttontree.cpp | 2
libs/libmythui/mythuihelper.cpp | 2
programs/mythbackend/main.cpp | 9
programs/mythbackend/scheduler.cpp | 10
programs/mythfilldatabase/main.cpp | 6
programs/mythfrontend/globalsettings.cpp | 54
programs/mythfrontend/guidegrid.cpp | 25
programs/mythfrontend/playbackbox.cpp | 1
programs/mythfrontend/statusbox.cpp | 4
programs/scripts/database/mythconverg_backup.pl | 4
programs/scripts/database/mythconverg_restore.pl | 34
themes/default-wide/recordings-ui.xml | 2
themes/default-wide/schedule-ui.xml | 6
themes/default/base.xml | 6
themes/default/recordings-ui.xml | 2
themes/default/schedule-ui.xml | 6
61 files changed, 1279 insertions(+), 698 deletions(-)
View full diff with command:
/usr/bin/cvs -f diff -kk -u -N -r 1.1 -r 1.2 mythtv-0.22-svnfixes.patch
Index: mythtv-0.22-svnfixes.patch
===================================================================
RCS file: /cvs/free/rpms/mythtv/F-12/mythtv-0.22-svnfixes.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- mythtv-0.22-svnfixes.patch 22 Nov 2009 05:04:40 -0000 1.1
+++ mythtv-0.22-svnfixes.patch 2 Feb 2010 02:44:32 -0000 1.2
@@ -65,6 +65,33 @@
</textarea>
<imagetype name="preview">
+Index: mythtv/themes/default/base.xml
+===================================================================
+--- mythtv/themes/default/base.xml (revision 22751)
++++ mythtv/themes/default/base.xml (working copy)
+@@ -49,11 +49,11 @@
+ </font>
+
+ <font name="basesmallblue" from="basesmall">
+- <color>#0492A7</color>
++ <color>#54d6e9</color>
+ </font>
+
+ <font name="basesmallred" from="basesmall">
+- <color>#800900</color>
++ <color>#ff6b48</color>
+ </font>
+
+ <font name="basemediumgrey" from="basemedium">
+@@ -65,7 +65,7 @@
+ </font>
+
+ <font name="basemediumred" from="basemedium">
+- <color>#800900</color>
++ <color>#ff6b48</color>
+ </font>
+
+ <font name="basemediumyellow" from="basemedium">
Index: mythtv/themes/default-wide/schedule-ui.xml
===================================================================
--- mythtv/themes/default-wide/schedule-ui.xml (revision 22751)
@@ -950,6 +977,580 @@
delete the selected view.
Program Finder
+Index: mythtv/libs/libmythtv/NuppelVideoPlayer.cpp
+===================================================================
+--- mythtv/libs/libmythtv/NuppelVideoPlayer.cpp (revision 22751)
++++ mythtv/libs/libmythtv/NuppelVideoPlayer.cpp (working copy)
+@@ -183,7 +183,7 @@
+ video_frame_rate(29.97f), video_aspect(4.0f / 3.0f),
+ forced_video_aspect(-1),
+ m_scan(kScan_Interlaced), m_scan_locked(false),
+- m_scan_tracker(0),
++ m_scan_tracker(0), m_scan_initialized(false),
+ keyframedist(30),
+ // Prebuffering (RingBuffer) control
+ prebuffering(false), prebuffer_tries(0), prebuffer_tries_total(0),
+@@ -244,7 +244,8 @@
+ decoder_lock(QMutex::Recursive),
+ next_play_speed(1.0f), next_normal_speed(true),
+ play_speed(1.0f), normal_speed(true),
+- frame_interval((int)(1000000.0f / 30)), ffrew_skip(1),
++ frame_interval((int)(1000000.0f / 30)), m_frame_interval(0),
++ ffrew_skip(1),
+ // Audio and video synchronization stuff
+ videosync(NULL), delay(0),
+ vsynctol(30/4), avsync_delay(0),
+@@ -544,6 +545,7 @@
+ audio_lock.lock();
+ if (audioOutput && unpauseaudio)
+ audio_paused = false;
++
+ audio_lock.unlock();
+ if (player_ctx->buffer)
+ player_ctx->buffer->Unpause();
+@@ -577,9 +579,11 @@
+ void NuppelVideoPlayer::PauseVideo(bool wait)
+ {
+ QMutexLocker locker(&pauseUnpauseLock);
+- video_actually_paused = false;
++
++ if (wait)
++ video_actually_paused = false;
+ pausevideo = true;
+-
++
+ for (uint i = 0; wait && !video_actually_paused; i++)
+ {
+ videoThreadPaused.wait(&pauseUnpauseLock, 250);
+@@ -607,6 +611,9 @@
+ if ((i % 10) == 9)
+ VERBOSE(VB_IMPORTANT, "Waited too long for video out to
unpause");
+ }
++
++ if (videoOutput)
++ videoOutput->ExposeEvent();
+ }
+
+ void NuppelVideoPlayer::SetVideoActuallyPaused(bool val)
+@@ -1071,15 +1078,21 @@
+ if (!videoOutput || !videosync)
+ return; // hopefully this will be called again later...
+
++ if (m_scan_initialized &&
++ m_scan == scan &&
++ m_frame_interval == frame_interval)
++ return;
++
+ m_scan_locked = (scan != kScan_Detect);
+
+- if (scan == m_scan)
+- return;
++ m_scan_initialized = true;
++ m_frame_interval = frame_interval;
+
+ bool interlaced = is_interlaced(scan);
+ if (interlaced && !m_deint_possible)
+ {
+ m_scan = scan;
++ videosync->SetFrameInterval(frame_interval, false);
+ return;
+ }
+
+@@ -1113,11 +1126,8 @@
+ if (kScan_Progressive == scan)
+ {
+ m_double_process = false;
+- if (m_double_framerate)
+- {
+- m_double_framerate = false;
+- videosync->SetFrameInterval(frame_interval, false);
+- }
++ m_double_framerate = false;
++ videosync->SetFrameInterval(frame_interval, false);
+ videoOutput->SetDeinterlacingEnabled(false);
+ VERBOSE(VB_PLAYBACK, "Disabled deinterlacing");
+ }
+@@ -2587,9 +2597,11 @@
+ "\t\t\tdoubling video frame interval to slow
down.").arg(diverge));
+ }
+
++ audio_lock.lock();
+ if (audioOutput && normal_speed)
+ {
+ long long currentaudiotime = audioOutput->GetAudiotime();
++ audio_lock.unlock();
+ #if 0
+ VERBOSE(VB_PLAYBACK+VB_TIMESTAMP, QString(
+ "A/V timecodes audio %1 video %2 frameinterval %3 "
+@@ -2652,7 +2664,9 @@
+ avsync_avg = 0;
+ avsync_oldavg = 0;
+ }
+- }
++ }
++ else
++ audio_lock.unlock();
+ }
+
+ void NuppelVideoPlayer::ShutdownAVSync(void)
+@@ -3073,7 +3087,7 @@
+ continue;
+ }
+
+- if (!pausevideo && nbframes == 1)
++ if (!video_actually_paused && nbframes == 1)
+ {
+ dvd_stillframe_showing = true;
+ PauseVideo(false);
+@@ -6848,8 +6862,12 @@
+ QString msg = "";
+
+ if (decoder)
++ {
+ msg = decoder->GetTrackDesc(type, GetTrack(type));
+-
++
++ if (player_ctx->buffer->isDVD())
++ player_ctx->buffer->DVD()->SetTrack(type, trackNo);
++ }
+ if (osd)
+ osd->SetSettingsText(msg, 3);
+ }
+Index: mythtv/libs/libmythtv/util-vdpau.cpp
+===================================================================
+--- mythtv/libs/libmythtv/util-vdpau.cpp (revision 22751)
++++ mythtv/libs/libmythtv/util-vdpau.cpp (working copy)
+@@ -28,14 +28,35 @@
+
+ #define ARSIZE(x) (sizeof(x) / sizeof((x)[0]))
+
++static const QString kVDPAUWarning =
++"WARNING - please read the following carefully:-\n\n"
++"* The VDPAU device has reported that you have run out of video memory.
*\n"
++"* MythTV requires at least 512Mb of video memory for full functionality.
*\n"
++"* If you are using an integrated GPU, please ensure you have allocated
*\n"
++"* the maximum amount of shared memory in the BIOS settings.
*\n"
++"* Systems with only 256Mb of video memory are not supported.
*\n\n"
[...2873 lines suppressed...]
++ dirpath2 = u"%s%s" % (copy_dir, u'folder.png')
if os.path.isfile(dirpath) or os.path.isfile(dirpath2): # See if a folder cover
already exists
pass
else:
@@ -3062,7 +4772,23 @@
else:
try: # Miro Channel icon copy for the new subdirectory
useImageMagick(u'convert "%s" "%s"' %
(video[u'channel_icon'], dirpath))
-@@ -2655,7 +2697,7 @@
+@@ -2641,21 +2728,21 @@
+ # Gracefully close the Miro database and shutdown the Miro Front and Back ends
+ app.controller.shutdown()
+ time.sleep(5) # Let the shutdown processing complete
+- sys.exit(False)
++ sys.exit(1)
+
+ # Copy the Miro video file
+ save_video_filename = video[u'videoFilename'] # This filename is needed later
for deleting in Miro
+ ext = getExtention(video[u'videoFilename'])
+ if ext.lower() == u'm4v':
+ ext = u'mpg'
+- filepath = u"%s%s - %s.%s" % (channels_to_copy[dir_key],
video[u'channelTitle'], video[u'title'], ext)
++ filepath = u"%s%s - %s.%s" % (copy_dir,
sanitiseFileName(video[u'channelTitle']),
sanitiseFileName(video[u'title']), ext)
+ if simulation:
+ logger.info(u"Simulation: Copying the Miro video (%s) to the MythVideo directory
(%s)." % (video[u'videoFilename'], filepath))
+ else:
try: # Miro video copied into a MythVideo directory
shutil.copy2(video[u'videoFilename'], filepath)
statistics[u'Miros_MythVideos_copied']+=1
@@ -3071,7 +4797,13 @@
video[u'videoFilename'] =
filepath.replace(storagegroups[u'mythvideo'], u'')
else:
video[u'videoFilename'] = filepath
-@@ -2669,7 +2711,7 @@
+@@ -2664,51 +2751,51 @@
+ # Gracefully close the Miro database and shutdown the Miro Front and Back ends
+ app.controller.shutdown()
+ time.sleep(5) # Let the shutdown processing complete
+- sys.exit(False)
++ sys.exit(1)
+
# Copy the Channel or item's icon
if video[u'channel_icon'] and not video[u'channelTitle'].lower() in
channel_icon_override:
pass
@@ -3080,33 +4812,75 @@
if video[u'item_icon']:
video[u'channel_icon'] = video[u'item_icon']
if video[u'channel_icon']:
-@@ -2689,7 +2731,7 @@
- except OSError:
- pass
- shutil.copy2(video[u'channel_icon'], filepath)
+ ext = getExtention(video[u'channel_icon'])
+ if video[u'channelTitle'].lower() in channel_icon_override:
+- filepath = u"%s%s - %s%s.%s" % (vid_graphics_dirs[u'posterdir'],
video[u'channelTitle'], video[u'title'],
graphic_suffix[u'posterdir'], ext)
++ filepath = u"%s%s - %s%s.%s" % (vid_graphics_dirs[u'posterdir'],
sanitiseFileName(video[u'channelTitle']),
sanitiseFileName(video[u'title']), graphic_suffix[u'posterdir'], ext)
+ else:
+- filepath = u"%s%s%s.%s" % (vid_graphics_dirs[u'posterdir'],
video[u'channelTitle'], graphic_suffix[u'posterdir'], ext)
+- # There may already be a Channel icon available or it is a symlink which needs to be
replaced
+- if not os.path.isfile(filepath) or os.path.islink(filepath):
+- if simulation:
+- logger.info(u"Simulation: Copying the Channel Icon (%s) to the poster directory
(%s)." % (video[u'channel_icon'], filepath))
++ filepath = u"%s%s%s.%s" % (vid_graphics_dirs[u'posterdir'],
sanitiseFileName(video[u'channelTitle']), graphic_suffix[u'posterdir'],
ext)
++ # There may already be a Channel icon available or it is a symlink which needs to be
replaced
++ if not os.path.isfile(filepath) or os.path.islink(filepath):
++ if simulation:
++ logger.info(u"Simulation: Copying the Channel Icon (%s) to the poster
directory (%s)." % (video[u'channel_icon'], filepath))
++ else:
++ try: # Miro Channel icon copied into a MythVideo directory
++ try: # Remove any old symlink file
++ os.remove(filepath)
++ except OSError:
++ pass
++ shutil.copy2(video[u'channel_icon'], filepath)
++ if u'posterdir' in storagegroups.keys() and not local_only:
++ video[u'channel_icon'] =
filepath.replace(storagegroups[u'posterdir'], u'')
++ else:
++ video[u'channel_icon'] = filepath
++ except:
++ logger.critical(u"Copying the Channel Icon (%s) to the poster directory
(%s).\n This maybe a permissions error (mirobridge.py does not have permission to
write to the directory)." % (video[u'channel_icon'], filepath))
++ # Gracefully close the Miro database and shutdown the Miro Front and Back ends
++ app.controller.shutdown()
++ time.sleep(5) # Let the shutdown processing complete
++ sys.exit(1)
+ else:
+- try: # Miro Channel icon copied into a MythVideo directory
+- try: # Remove any old symlink file
+- os.remove(filepath)
+- except OSError:
+- pass
+- shutil.copy2(video[u'channel_icon'], filepath)
- if u'posterdir' in storagegroups.keys():
-+ if u'posterdir' in storagegroups.keys() and not local_only:
- video[u'channel_icon'] =
filepath.replace(storagegroups[u'posterdir'], u'')
- else:
- video[u'channel_icon'] = filepath
-@@ -2700,14 +2742,14 @@
- time.sleep(5) # Let the shutdown processing complete
- sys.exit(False)
- else:
+- video[u'channel_icon'] =
filepath.replace(storagegroups[u'posterdir'], u'')
+- else:
+- video[u'channel_icon'] = filepath
+- except:
+- logger.critical(u"Copying the Channel Icon (%s) to the poster directory
(%s).\n This maybe a permissions error (mirobridge.py does not have permission to
write to the directory)." % (video[u'channel_icon'], filepath))
+- # Gracefully close the Miro database and shutdown the Miro Front and Back ends
+- app.controller.shutdown()
+- time.sleep(5) # Let the shutdown processing complete
+- sys.exit(False)
+- else:
- if u'posterdir' in storagegroups.keys():
-+ if u'posterdir' in storagegroups.keys() and not local_only:
- video[u'channel_icon'] =
filepath.replace(storagegroups[u'posterdir'], u'')
- else:
- video[u'channel_icon'] = filepath
+- video[u'channel_icon'] =
filepath.replace(storagegroups[u'posterdir'], u'')
+- else:
+- video[u'channel_icon'] = filepath
++ if u'posterdir' in storagegroups.keys() and not local_only:
++ video[u'channel_icon'] =
filepath.replace(storagegroups[u'posterdir'], u'')
++ else:
++ video[u'channel_icon'] = filepath
# There may already be a Screenshot available or it is a symlink which needs to be
replaced
if video[u'screenshot']:
- ext = getExtention(video[u'screenshot'])
+- filepath = u"%s%s - %s%s.%s" %
(vid_graphics_dirs[u'episodeimagedir'], video[u'channelTitle'],
video[u'title'], graphic_suffix[u'episodeimagedir'], ext)
+ ext = getExtention(video[u'screenshot'])
- filepath = u"%s%s - %s%s.%s" %
(vid_graphics_dirs[u'episodeimagedir'], video[u'channelTitle'],
video[u'title'], graphic_suffix[u'episodeimagedir'], ext)
++ filepath = u"%s%s - %s%s.%s" %
(vid_graphics_dirs[u'episodeimagedir'],
sanitiseFileName(video[u'channelTitle']),
sanitiseFileName(video[u'title']), graphic_suffix[u'episodeimagedir'],
ext)
else:
filepath = u''
-@@ -2724,7 +2766,7 @@
+
+@@ -2724,7 +2811,7 @@
pass
shutil.copy2(video[u'screenshot'], filepath)
displayMessage(u"Copied Miro screenshot file (%s) to MythVideo (%s)" %
(video[u'screenshot'], filepath))
@@ -3115,9 +4889,12 @@
video[u'screenshot'] =
filepath.replace(storagegroups[u'episodeimagedir'], u'')
else:
video[u'screenshot'] = filepath
-@@ -2735,17 +2777,16 @@
+@@ -2733,19 +2820,18 @@
+ # Gracefully close the Miro database and shutdown the Miro Front and Back ends
+ app.controller.shutdown()
time.sleep(5) # Let the shutdown processing complete
- sys.exit(False)
+- sys.exit(False)
++ sys.exit(1)
elif video[u'screenshot']:
- if u'episodeimagedir' in storagegroups.keys():
+ if u'episodeimagedir' in storagegroups.keys() and not local_only:
@@ -3136,7 +4913,7 @@
# Gracefully close the Miro database and shutdown the Miro Front and Back ends
app.controller.shutdown()
time.sleep(5) # Let the shutdown processing complete
-@@ -2756,7 +2797,7 @@
+@@ -2756,7 +2842,7 @@
#
# Check if the user does not want any channels Added to the "Watch
Recordings" screen
@@ -3145,7 +4922,13 @@
for video in unwatched:
watched.append(video)
unwatched = []
-@@ -2780,7 +2821,7 @@
+@@ -2775,12 +2861,12 @@
+ displayMessage(u"There are no Miro unwatched video items to add as MythTV
Recorded videos.")
+ if not updateMythRecorded(unwatched):
+ logger.critical(u"Updating MythTV Recording with Miro video files failed." %
str(base_video_dir))
+- sys.exit(False)
++ sys.exit(1)
+
#
# Add and delete MythVideo records for played Miro Videos
# Add and delete symbolic links to Miro Videos and subdirectories
@@ -3154,7 +4937,21 @@
#
if len(channel_watch_only): # If the user does not want any channels moved to MythVideo
exit
if channel_watch_only[0].lower() == u'all':
-@@ -2808,4 +2849,3 @@
+@@ -2791,7 +2877,7 @@
+ displayMessage(u"There are no Miro watched items to add to MythVideo")
+ if not updateMythVideo(watched):
+ logger.critical(u"Updating MythVideo with Miro video files failed.")
+- sys.exit(False)
++ sys.exit(1)
+
+ printStatistics()
+ return True
+@@ -2804,8 +2890,7 @@
+ #
+ if myapp.alreadyrunning():
+ print u'\nMiro Bridge is already running only one instance can run at a
time\n\n'
+- sys.exit(False)
++ sys.exit(1)
main()
displayMessage(u"Miro Bridge Processing completed")
Index: mythtv.spec
===================================================================
RCS file: /cvs/free/rpms/mythtv/F-12/mythtv.spec,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -r1.59 -r1.60
--- mythtv.spec 22 Nov 2009 05:03:14 -0000 1.59
+++ mythtv.spec 2 Feb 2010 02:44:32 -0000 1.60
@@ -65,7 +65,7 @@
%define desktop_vendor RPMFusion
# SVN Revision number and branch ID
-%define _svnrev r22880
+%define _svnrev r23433
%define branch release
#
@@ -81,7 +81,7 @@
%if "%{branch}" == "trunk"
Release: 0.1.svn.%{_svnrev}%{?dist}
%else
-Release: 2%{?dist}
+Release: 5%{?dist}
%endif
# The primary license is GPLv2+, but bits are borrowed from a number of
@@ -1485,6 +1485,16 @@
################################################################################
%changelog
+* Mon Feb 01 2010 Jarod Wilson <jarod(a)wilsonet.com> 0.22-5
+- Update to release-0-22-fixes branch, svn revision 23433
+
+* Mon Jan 04 2010 Jarod Wilson <jarod(a)wilsonet.com> 0.22-4
+- Update to release-0-22-fixes branch, svn revision 23074
+
+* Fri Dec 18 2009 Jarod Wilson <jarod(a)wilsonet.com> 0.22-3
+- Update to release-0-22-fixes branch, svn revision 22981
+- Contains targeted fixes for DVD playback, among other things
+
* Sat Nov 21 2009 Jarod Wilson <jarod(a)wilsonet.com> 0.22-2
- Update to release-0-22-fixes branch, svn revision 22880