Key New Features

Themers (and power users) are now able to replace schedule options with new widgits. Themes, for example, can place fewer choices on the initial schedule editor screen (allowing access to less used options by pressing M(enu). Give Steppes a try to see this. See [d418754]cgitgithub.

Add duplicate checking and limited matching optimizations and other scheduler related changes. See the commit for details on this change. [cbb8eb1]cgitgithub Fixes #10533

Major Changes

Conversion of internal times to UTC. Stored times will be converted by the database update mechanism. See UTC for a complete list of changes. This should be of interest to daylight savings time users.

Prerequisite Changes

Added support libraries/prerequisites

libuuid (uuid-dev) for those building from source.

Removed support libraries/prerequisites

None

Special Notices & Instructions

The conversion to UTC requires significant changes to the database, and may be problematic for some users. MythTV will automatically attempt to perform a database backup before any schema update, storing the dump to the current user's home directory, or any storage path MythTV has been informed of, so that if anything goes wrong in the process, the database can be rolled back to the previous functional state. If MythTV cannot find anywhere with write access to store the backup, it will proceed with the update anyway, so users may want to perform their own periodic backups just to be safe. Refer to Database_Backup_and_Restore#Quick_Start for more information.

User scripts/tools that depended on mysql.txt should be reviewed. Since MythTV no longer uses mysql.txt, it's no longer updated. Scripts/tools could stop working.

MythTV System Events and User Jobs should be checked for compatibility with UTC. Recording file names, for example, are now saved with the time component in UTC. %STARTTIME% is local time, use %STARTTIMEUTC% to access the file. Better option is to use the %FILE% tag to directly give the filename, rather than guessing from the channel ID and timestamp.

Timesstamps that use local time in existing custom recording rules must be manually changed to UTC. Examples: A rule with starttime='2012-09-12 10:00:00', should be changed to starttime=CONVERT_TZ('2012-09-12 10:00:00', 'UTC', 'SYSTEM'). A rule with: HOUR(program.endtime) < 22 becomes HOUR(CONVERT_TZ(program.endtime, 'UTC', 'SYSTEM')) < 22. Note that dates such as originalairdate do not factor in timezone offsets, and will be the local date.

Support for CEA-608 teletext captions will be removed in 0.27. Using mythfrontend --verbose general logging, a "DEPRECATED_608_TELETEXT" message will appear in the logs of affected users. Refs #10786, [7b1aef8]cgitgithub, [44f5414]cgitgithub.

Logging Issues:

Users referencing logfiles (e.g. those created by using --logpath) will note that the timestamp portion of the filename is now in UTC [28d9324]cgitgithub.

[27ee9fb]cgitgithub: RemoteStopLiveTV() expects a reponse of 'OK' to STOP_LIVETV but we were returning 'ok'. There are probably other examples of this case mismatch since some handlers return lower case while others return in upper. We should probably standardise on OK throughout

Changes/Improvements/Other

[825182e]cgitgithub Speed up loading of the Watch Recordings screen and the Previously Recorded screen by doing most of the buttonlist initialization in the background. The speedup is most noticeable when the screen contains hundreds or thousands of entries and mythfrontend is running on a relatively slow processor such as an Atom.

[b0abb17]cgitgithub Revert "libmyth: Prevent an access violation by the ALSA library" Unfortunately, under some circumstances, it exposes a bug in ALSA which disable all audio system-wide following the device scan. This reverts commit [c35c003]cgitgithub.

[6655d24]cgitgithub: Fix memory leak in AudioOutputPulseAudio(). The code in question seems to serve no purpose but on the offchance that I'm wrong I've kept in place and just ensured that we cleanup after it.

Video Playback

Bug Fixes

Changes/Improvements/Other

[3bbf624]cgitgithub: An option is added to the playback OSD menu to allow an in-progress playlist to be cancelled.

[4d0bbbe]cgitgithub: The ExactSeeking setting (seek to exact frame) is removed, in favor of more adaptive, sensible behavior. When doing relative seeks, snap to the nearest keyframe if its distance from the target frame is within 10% of the total seek distance. When seeking within the cutlist editor, use a value of 50% instead. Exact frame seeking is always used for absolute seeks (bookmark seek, skips based on cutlist/commskiplist, preview generation), and for keyframe and single-frame seeking in the cutlist editor.

[769059b]cgitgithub: Add functions for converting between pre- and post-cutlist frame numbers. Refs #8631. These functions are not actually used anywhere yet.

OSD, EPG, MHEG, CC, and Subtitles

New Features

Bug Fixes

Changes/Improvements/Other

[f13eeb0]cgitgithub Formatting of text-based captions and subtitles is put under theme control, via the new theme file osd_subtitle.xml. The CCBackground and DefaultSubtitleFont settings are removed.

[631bb1e]cgitgithub The Prefer708Captions setting is removed. CEA-708 captions are now always preferred over CEA-608 captions (though CEA-608 captions can still be selected during playback).

[0089f7d]cgitgithub The OSDCC708TextZoom setting is removed from the setup options and is now implemented as a live setting. The Subtitles sub-menu of the playback OSD menu has an option that allows the user to change the zoom setting for text-based subtitles during playback and see the effect immediately. Changes are immediately saved.

[461f42d]cgitgithub A similar live setting is added for bitmap-based subtitles, such as in DVD/BD videos.

[689a7b5]cgitgithub Improved handling of forced subtitles, both at the track level and at the individual subtitle level.

[7b1aef8]cgitgithub: Refs #10786 CEA-608 teletext caption support is deprecated and will be removed in 0.27. Note that this is different from DVB teletext subtitles and standard CEA-608 closed captions.

[cfda063]cgitgithub: A RecordingRule is owned by it's RecordingInfo and should not be free'd elsewhere.

[45368f1]cgitgithub: Convert HttpStatus date/time formatting to use MythDate. This is more consistent, more easily maintained and importantly allows proper translation of dates because it doesn't make incorrect assumptions about date formats. e.g In some languages the day of the week doesn't preceed the date as was hardcoded previously.

[9f447f4]cgitgithub: Change the signature of TvPlayWindow::gestureEvent() to match the base class, the two diverged at some point.

[8c551e6]cgitgithub Fix LiveTV when using HLS IPTVFeederLive::Open is expected to return immediately and not to block for a long time, otherwise the Event thread isn't running and cause the frontend to disconnect prematurely. Fixes #10934

[3234a34]cgitgithub Do not empty IPTVHLS buffer if there's no listener. This prevents the HLS buffer to be quickly exhausted during transition.

[b466a1f]cgitgithub Fix MythDownloadManager::cancelDownload() cancelDownload would delete the MythDownloadInfo object, while the object was still in use by the downloading thread, resulting in a crash.

[cfda063]cgitgithub: A RecordingRule is owned by it's RecordingInfo and should not be free'd elsewhere.

[45368f1]cgitgithub: Convert HttpStatus date/time formatting to use MythDate. This is more consistent, more easily maintained and importantly allows proper translation of dates because it doesn't make incorrect assumptions about date formats. e.g In some languages the day of the week doesn't preceed the date as was hardcoded previously.

[9f447f4]cgitgithub: Change the signature of TvPlayWindow::gestureEvent() to match the base class, the two diverged at some point.

Changes/Improvements/Other

[2afae60]cgitgithub: Make MythUIType::SetPosition() a non-virtual, descendants should not need to override this to change SetPostion() functionality. Overriding SetPosition(const MythPoint&) should be sufficient, and is what existing descendants do now.

[045e606]cgitgithub: Use QLocale::toString() in preference to sprintf or QString::number() since this will format numerical strings according to the preferred format for the user's locale. Also combine a 'split' string into one for translation, since concatenated strings cannot be translated correctly.

[59703a7]cgitgithub: Fix an instance of a concatenated translated string which prevents proper translation.

[7d9bb76]cgitgithub: Replace some more instances of concatenated strings which cannot be translated correctly.

[6a64891]cgitgithub: Eliminate ConstFilterInfo_. There is no constructor which means we need to rely on a gcc c++ extension for initialization.

[12a3eac]cgitgithub: Fix compilation with clang/clang++ - configure: we can't use CFLAGS for compiling C++ code, especially as CFLAGS would include -std=c99 which makes no sense for C++ - util-osx-cocoa.mm was compiled as a C++ file, not an objective-C++ file, gcc was forgiving about the error, clang++ isn't.

[055a511]cgitgithub: Fix naming issue spotted by 'dekarl'. The channel icon storage group is called 'ChannelIcons' not 'ChannelIcon', the icon lookups would still work because of some fallback checks but they would be slower.

[02f5463]cgitgithub: Fix assumption that ints would be initialised to zero in JobQueueEntry, this isn't the case with C++. It appears that this would have caused any job that didn't include a chanid to abort even though the code indicates that it's perfectly valid to have a job which doesn't operate on a recording and wouldn't require the chanid. I don't know enough about the intended behaviour to say whether this will fix a user-visible bug ... Discovered by Coverity.

[c85ed06]cgitgithub: Fix assignment where comparison was intended in FreeSurround::getLatency(). Caught by Coverity

[10d1cc6]cgitgithub: Always check the return value of QSqlQuery::next() before accessing results in the Housekeeper. In fact we only needed to check next() in these instances, the isActive() and size() calls were redundant. Coverity defects 700272 and 700271.

[7533cf2]cgitgithub: Always check the return value of QSqlQuery::next() before accessing results in MainServer. Ee only needed to check next() in these instances, the isActive() and size() calls were redundant and have been removed. Coverity defects 700273 and 700274.

[9bddf5b]cgitgithub: Fix a null pointer dereference in MainServer::HandleQueryRecording(). This bug would have made it possible to crash a backend with a malformed QUERY_RECORDING message. Coverity defect 700420

[9f7cb75]cgitgithub: Always check the return value of QSqlQuery::next() and QSqlQuery::exec() before accessing results in Scheduler::UpdateManuals() and UPnpCDSTv::AddItem(). Coverity defects 700275 and 700276.

[1207821]cgitgithub: Fix misplaced else condition in osd.cpp. This just looks like a mistake, the else appended to the wrong block. dialog cannot be null, but Create() can and will fail. Related to Coverity defect 700311 'Logically dead code'

[8c8bd19]cgitgithub: Fix another misplaced else condition in osd.cpp. Exact same problem as in [12078211] just in another place. Related to Coverity defect 700312 'Logically dead code'

[6ce0af8]cgitgithub: Fix file handle leaks in oggvorbis and wavpack tag readers. These, along with one in the flac tag reader were caused when we stopped using an instance of the Taglib::FileRef class to read the track length. Taglib::FileRef would take ownership of the pointer and delete it when we were done, now that we're not using Taglib::FileRef we're again responsible for deleting the object which in turn closes the open file handle. Refs #10721

[0a33dd5]cgitgithub: Fix yet more leaks in services/dvr.cpp. Objects allocated on the heap when they could/should have been on the stack.