Ticket #4967: myth_radio_nowplaying.diff
File myth_radio_nowplaying.diff, 22.0 KB (added by , 15 years ago) |
---|
-
libs/libavcodec/avcodec.h
diff -Naurp -x '*.orig' mythtv-orig/libs/libavcodec/avcodec.h mythtv/libs/libavcodec/avcodec.h
old new enum CodecID { 332 332 333 333 CODEC_ID_MPEG2TS= 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS 334 334 * stream (only used by libavformat) */ 335 /* Private Data */ 336 CODEC_ID_DVB_PRIVSEC= 0x21000, 335 337 }; 336 338 337 339 #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) -
libs/libavcodec/myth_utils.c
diff -Naurp -x '*.orig' mythtv-orig/libs/libavcodec/myth_utils.c mythtv/libs/libavcodec/myth_utils.c
old new const char *codec_id_string(enum CodecID 203 203 204 204 case CODEC_ID_DSMCC_B: return "DSMCC_B"; 205 205 206 /* private data codecs */ 207 case CODEC_ID_DVB_PRIVSEC: return "DVB_PRIVSEC"; 208 206 209 case CODEC_ID_MPEG2TS: return "MPEG2TS"; 207 210 } 208 211 return "Unknown Codec ID"; -
libs/libavformat/mpegts.c
diff -Naurp -x '*.orig' mythtv-orig/libs/libavformat/mpegts.c mythtv/libs/libavformat/mpegts.c
old new static int is_desired_stream(int stream_ 866 866 case STREAM_TYPE_AUDIO_AAC: 867 867 case STREAM_TYPE_AUDIO_AC3: 868 868 case STREAM_TYPE_AUDIO_DTS: 869 case STREAM_TYPE_PRIVATE_SECTION: 869 870 case STREAM_TYPE_PRIVATE_DATA: 870 871 case STREAM_TYPE_VBI_DVB: 871 872 case STREAM_TYPE_SUBTITLE_DVB: … … static void init_stream(AVStream *st, in 1456 1457 codec_type = CODEC_TYPE_DATA; 1457 1458 codec_id = CODEC_ID_DSMCC_B; 1458 1459 break; 1460 case STREAM_TYPE_PRIVATE_SECTION: 1461 codec_type = CODEC_TYPE_DATA; 1462 codec_id = CODEC_ID_DVB_PRIVSEC; 1463 break; 1459 1464 case STREAM_TYPE_PRIVATE_DATA: 1460 1465 default: 1461 1466 if (code >= 0x1c0 && code <= 0x1df) { … … static void mpegts_push_data(void *opaqu 1555 1560 if (pes->total_size) 1556 1561 pes->total_size += 6; 1557 1562 pes->pes_header_size = pes->header[8] + 9; 1563 } else if (pes->header[0] == 0x00 && pes->header[1] == 0xd3 && 1564 pes->header[2] == 0xb0) { 1565 /* private sections */ 1566 if (!pes->st) { 1567 /* allocate stream */ 1568 new_pes_av_stream(pes, code); 1569 } 1570 if (pes->header[7] != 0x00 && pes->header[7] != 0x01) 1571 pes->state = MPEGTS_PESHEADER_FILL; 1572 else 1573 pes->state = MPEGTS_PAYLOAD; /* No PTS/DTS info */ 1558 1574 } else { 1559 1575 /* otherwise, it should be a table */ 1560 1576 /* skip packet */ -
libs/libmythtv/avformatdecoder.cpp
diff -Naurp -x '*.orig' mythtv-orig/libs/libmythtv/avformatdecoder.cpp mythtv/libs/libmythtv/avformatdecoder.cpp
old new AvFormatDecoder::AvFormatDecoder(NuppelV 437 437 allow_dts_passthru = gContext->GetNumSetting("DTSPassThru", false); 438 438 max_channels = (uint) gContext->GetNumSetting("MaxChannels", 2); 439 439 440 nowPlayEnabled = gContext->GetNumSetting("EnableNowPlaying", 0); 441 440 442 audioIn.sample_size = -32; // force SetupAudioStream to run once 441 443 itv = GetNVP()->GetInteractiveTV(); 442 444 … … int AvFormatDecoder::ScanStreams(bool no 1454 1456 tracks[kTrackTypeTeletextCaptions].clear(); 1455 1457 selectedVideoIndex = -1; 1456 1458 1459 GetNVP()->SetHasNowPlaying(false); 1460 1457 1461 map<int,uint> lang_sub_cnt; 1458 1462 map<int,uint> lang_aud_cnt; 1459 1463 … … int AvFormatDecoder::ScanStreams(bool no 1692 1696 } 1693 1697 case CODEC_TYPE_DATA: 1694 1698 { 1695 ScanTeletextCaptions(i); 1696 bitrate += enc->bit_rate; 1699 switch(enc->codec_id) 1700 { 1701 case CODEC_ID_DSMCC_B: 1702 bitrate += enc->bit_rate; 1703 break; 1704 case CODEC_ID_DVB_VBI: 1705 ScanTeletextCaptions(i); 1706 bitrate += enc->bit_rate; 1707 break; 1708 case CODEC_ID_DVB_PRIVSEC: 1709 if (enc->bit_rate == 0) 1710 enc->bit_rate = 175; // 1 TS packet - 13 byte header 1711 break; 1712 } 1713 1697 1714 VERBOSE(VB_PLAYBACK, LOC + QString("data codec (%1)") 1698 1715 .arg(codec_type_string(enc->codec_type))); 1699 1716 break; … … void AvFormatDecoder::H264PreProcessPkt( 2472 2489 } 2473 2490 } 2474 2491 2492 void AvFormatDecoder::ProcessPrivSecDataPacket(const AVPacket *pkt) 2493 { 2494 if (!GetNVP()) 2495 return; 2496 2497 if (nowPlayEnabled) 2498 { 2499 QStringList sections; 2500 bool changed = false; 2501 uint non_ascii = 0; 2502 uint end = 0; 2503 2504 uint8_t *buf = pkt->data; 2505 uint len = pkt->size; 2506 2507 if (!len || len > 188) 2508 return; 2509 2510 // Sanity checks 2511 for (uint x = 0; x < len; x++) 2512 if (buf[x] == 0x00) 2513 len = end = x; 2514 else if (buf[x] > 0x7f) 2515 non_ascii++; 2516 2517 if ((non_ascii / len) > .4) 2518 return; 2519 2520 if (!end) 2521 return; 2522 2523 QString text = (const char*)buf; 2524 2525 if (text.count(0x0a) > 10) 2526 return; 2527 2528 GetNVP()->SetHasNowPlaying(true); 2529 2530 for (int i = 0; i < text.count(0x0a); i++) { 2531 QString section = text.section(0x0a, i, i); 2532 if (section == "") section = " "; 2533 2534 if (((i+1) > now_playing.size()) || 2535 now_playing.at(i).compare(section)) 2536 { 2537 sections << section; 2538 changed = true; 2539 } 2540 } 2541 2542 if (changed) 2543 { 2544 now_playing = sections; 2545 GetNVP()->SetNowPlaying(sections); 2546 } 2547 } 2548 } 2549 2475 2550 /** \fn AvFormatDecoder::ProcessVBIDataPacket(const AVStream*, const AVPacket*) 2476 2551 * \brief Process ivtv proprietary embedded vertical blanking 2477 2552 * interval captions. … … bool AvFormatDecoder::GetFrame(int onlyv 3354 3429 } 3355 3430 #endif // USING_MHEG 3356 3431 3432 if (len > 0 && 3433 curstream->codec->codec_type == CODEC_TYPE_DATA && 3434 curstream->codec->codec_id == CODEC_ID_DVB_PRIVSEC) 3435 { 3436 ProcessPrivSecDataPacket(pkt); 3437 3438 av_free_packet(pkt); 3439 continue; 3440 } 3441 3357 3442 // we don't care about other data streams 3358 3443 if (curstream->codec->codec_type == CODEC_TYPE_DATA) 3359 3444 { -
libs/libmythtv/avformatdecoder.h
diff -Naurp -x '*.orig' mythtv-orig/libs/libmythtv/avformatdecoder.h mythtv/libs/libmythtv/avformatdecoder.h
old new class AvFormatDecoder : public DecoderBa 188 188 void MpegPreProcessPkt(AVStream *stream, AVPacket *pkt); 189 189 void H264PreProcessPkt(AVStream *stream, AVPacket *pkt); 190 190 191 void ProcessPrivSecDataPacket(const AVPacket *pkt); 191 192 void ProcessVBIDataPacket(const AVStream *stream, const AVPacket *pkt); 192 193 void ProcessDVBDataPacket(const AVStream *stream, const AVPacket *pkt); 193 194 void ProcessDSMCCPacket(const AVStream *stream, const AVPacket *pkt); … … class AvFormatDecoder : public DecoderBa 281 282 bool dvd_video_codec_changed; 282 283 bool dvdTitleChanged; 283 284 bool mpeg_seq_end_seen; 285 286 // Now Playing 287 QStringList now_playing; 288 bool nowPlayEnabled; 284 289 }; 285 290 286 291 #endif -
libs/libmythtv/NuppelVideoPlayer.cpp
diff -Naurp -x '*.orig' mythtv-orig/libs/libmythtv/NuppelVideoPlayer.cpp mythtv/libs/libmythtv/NuppelVideoPlayer.cpp
old new NuppelVideoPlayer::NuppelVideoPlayer(QSt 203 203 interactiveTV(NULL), 204 204 itvEnabled(false), 205 205 206 // Now Playing visible in OSD 207 has_now_playing(false), 208 now_playing_changed(false), 209 206 210 // OSD stuff 207 211 osd(NULL), timedisplay(NULL), 208 212 dialogname(""), dialogtype(0), … … NuppelVideoPlayer::NuppelVideoPlayer(QSt 277 281 commnotifyamount = gContext->GetNumSetting("CommNotifyAmount",0); 278 282 decode_extra_audio=gContext->GetNumSetting("DecodeExtraAudio", 0); 279 283 itvEnabled = gContext->GetNumSetting("EnableMHEG", 0); 284 nowPlayEnabled = gContext->GetNumSetting("EnableNowPlaying", 0); 280 285 db_prefer708 = gContext->GetNumSetting("Prefer708Captions", 1); 281 286 287 osd_now_play_timeout = gContext->GetNumSetting("OSDNowPlayingTimeout", 10); 288 282 289 lastIgnoredManualSkip = QDateTime::currentDateTime().addSecs(-10); 283 290 284 291 bzero(&txtbuffers, sizeof(txtbuffers)); … … void NuppelVideoPlayer::DisplayNormalFra 2840 2847 ExpireSubtitles(); 2841 2848 } 2842 2849 2850 if (has_now_playing && nowPlayEnabled) 2851 DisplayNowPlaying(); 2852 2843 2853 // handle scan type changes 2844 2854 AutoDeint(frame); 2845 2855 … … void NuppelVideoPlayer::JumpToProgram(vo 3277 3287 ringBuffer->Pause(); 3278 3288 ringBuffer->WaitForPause(); 3279 3289 3290 SetHasNowPlaying(false); 3291 3292 if (osd) 3293 osd->ResetNowPlaying(); 3294 3280 3295 ClearSubtitles(); 3281 3296 3282 3297 livetvchain->SetProgram(pginfo); … … void NuppelVideoPlayer::DisplayTextSubti 6973 6988 osd->ClearTextSubtitles(); 6974 6989 } 6975 6990 6991 /** \fn NuppelVideoPlayer::SetHasNowPlaying(void) 6992 * \brief Enables displaying of Now Playing content 6993 */ 6994 void NuppelVideoPlayer::SetHasNowPlaying(bool has) 6995 { 6996 if (nowPlayEnabled) 6997 { 6998 has_now_playing = has; 6999 7000 if (has_now_playing != has) 7001 { 7002 QString which = has ? "Enabling" : "Disabling"; 7003 VERBOSE(VB_PLAYBACK, LOC + QString("%1 Now Playing processing") 7004 .arg(which)); 7005 } 7006 } 7007 } 7008 7009 /** \fn NuppelVideoPlayer::HasNowPlaying(void) 7010 * \brief Returns bool stream has Now Playing 7011 */ 7012 bool NuppelVideoPlayer::HasNowPlaying(void) 7013 { 7014 return has_now_playing; 7015 } 7016 7017 /** \fn NuppelVideoPlayer::DisplayNowPlaying(void) 7018 * \brief Displays Now Playing text 7019 */ 7020 void NuppelVideoPlayer::DisplayNowPlaying() 7021 { 7022 QMutexLocker locker(&nowPlayingLock); 7023 7024 if (!nowPlayEnabled || 7025 !has_now_playing || 7026 !now_playing_changed) 7027 return; 7028 7029 QString text = "Now Playing:\n\n"; 7030 7031 // Skip if the first section is empty 7032 QString t = now_playing[0].simplified(); 7033 if (t.isEmpty()) 7034 return; 7035 7036 int i = 0; 7037 7038 for (QStringList::Iterator it = now_playing.begin(); 7039 it != now_playing.end(); ++it ) 7040 text.append(*it + "\n"); 7041 7042 osd->SetNowPlaying(text, osd_now_play_timeout); 7043 7044 now_playing_changed = false; 7045 } 7046 6976 7047 /** \fn NuppelVideoPlayer::ExpireSubtitles(void) 6977 7048 * \brief Discard non-displayed subtitles. 6978 7049 */ … … void NuppelVideoPlayer::AddAVSubtitle(co 7062 7133 subtitleLock.unlock(); 7063 7134 } 7064 7135 7136 /** \fn void NuppelVideoPlayer::SetNowPlaying(const QStringList playing&) 7137 * \brief Set the Now Playing text in the OSD. 7138 */ 7139 void NuppelVideoPlayer::SetNowPlaying(const QStringList &playing) 7140 { 7141 nowPlayingLock.lock(); 7142 now_playing = playing; 7143 nowPlayingLock.unlock(); 7144 7145 now_playing_changed = true; 7146 } 7147 7065 7148 /** \fn NuppelVideoPlayer::SetDecoder(DecoderBase*) 7066 7149 * \brief Sets the stream decoder, deleting any existing recorder. 7067 7150 */ -
libs/libmythtv/NuppelVideoPlayer.h
diff -Naurp -x '*.orig' mythtv-orig/libs/libmythtv/NuppelVideoPlayer.h mythtv/libs/libmythtv/NuppelVideoPlayer.h
old new class MPUBLIC NuppelVideoPlayer : public 304 304 long long timecode, char type); 305 305 void AddAVSubtitle(const AVSubtitle& subtitle); 306 306 307 // Now Playing data 308 void SetHasNowPlaying(bool has); 309 void SetNowPlaying(const QStringList &playing); 310 void DisplayNowPlaying(); 311 bool HasNowPlaying(void); 312 307 313 // Closed caption and teletext stuff 308 314 uint GetCaptionMode(void) const { return textDisplayMode; } 309 315 void ResetCaptions(uint mode_override = 0); … … class MPUBLIC NuppelVideoPlayer : public 645 651 646 652 // Support for captions, teletext, etc. decoded by libav 647 653 QMutex subtitleLock; 654 QMutex nowPlayingLock; 648 655 /// This allows us to enable captions/subtitles later if the streams 649 656 /// are not immediately available when the video starts playing. 650 657 bool textDesired; … … class MPUBLIC NuppelVideoPlayer : public 676 683 bool itvEnabled; 677 684 QMutex itvLock; 678 685 686 // Support for Now Playing 687 bool nowPlayEnabled; 688 QStringList now_playing; 689 bool has_now_playing; 690 bool now_playing_changed; 691 679 692 // OSD stuff 680 693 OSD *osd; 681 694 OSDSet *timedisplay; … … class MPUBLIC NuppelVideoPlayer : public 732 745 long long lastCommSkipStart; 733 746 time_t lastSkipTime; 734 747 748 int osd_now_play_timeout; 749 735 750 long long deleteframe; 736 751 bool hasdeletetable; 737 752 bool hasblanktable; -
libs/libmythtv/osd.cpp
diff -Naurp -x '*.orig' mythtv-orig/libs/libmythtv/osd.cpp mythtv/libs/libmythtv/osd.cpp
old new void OSD::EndStatus(void) 1937 1937 } 1938 1938 } 1939 1939 1940 void OSD::ResetNowPlaying(void) 1941 { 1942 osdlock.lock(); 1943 1944 QString my_name = "now_playing"; 1945 1946 OSDSet *container = GetSet(my_name); 1947 if (container) 1948 { 1949 container->Hide(); 1950 1951 OSDTypeText *text = (OSDTypeText *)container->GetType("playing"); 1952 if (text) 1953 text->SetText(""); 1954 1955 m_setsvisible = false; 1956 changed = true; 1957 } 1958 1959 osdlock.unlock(); 1960 } 1961 1962 void OSD::SetNowPlaying(const QString &playing, int length) 1963 { 1964 osdlock.lock(); 1965 1966 QString my_name = "now_playing"; 1967 1968 OSDSet *container = GetSet(my_name); 1969 if (!container) 1970 { 1971 OSDSet *set = GetSet("now_playing"); 1972 if (!set) 1973 { 1974 VERBOSE(VB_IMPORTANT, "couldn't find now_playing dialog"); 1975 osdlock.unlock(); 1976 return; 1977 } 1978 1979 container = new OSDSet(*set); 1980 container->SetName(my_name); 1981 container->SetCache(true); 1982 container->SetPriority(20); 1983 container->SetAllowFade(true); 1984 AddSet(container, my_name, false); 1985 } 1986 1987 if (container) 1988 { 1989 OSDTypeText *text = (OSDTypeText *)container->GetType("playing"); 1990 1991 if (!playing.isNull() && !playing.isEmpty()) 1992 if (text) 1993 text->SetText(playing); 1994 1995 if (length > 0) 1996 container->DisplayFor(length * 1000000); 1997 else 1998 container->Display(); 1999 2000 m_setsvisible = true; 2001 changed = true; 2002 2003 //VERBOSE(VB_PLAYBACK, QString("NOW PLAYING: '%1'").arg(text->GetText())); 2004 } 2005 2006 osdlock.unlock(); 2007 } 2008 1940 2009 void OSD::SetChannumText(const QString &text, int length) 1941 2010 { 1942 2011 QMutexLocker locker(&osdlock); -
libs/libmythtv/osd.h
diff -Naurp -x '*.orig' mythtv-orig/libs/libmythtv/osd.h mythtv/libs/libmythtv/osd.h
old new class OSD : public QObject 80 80 const QString &callsign, const QString &iconpath, 81 81 int length); 82 82 void SetChannumText(const QString &text, int length); 83 void SetNowPlaying(const QString &playing, int length); 84 void ResetNowPlaying(void); 83 85 84 86 // CC-608 and DVB text captions (not DVB/DVD subtitles). 85 87 void AddCCText(const QString &text, int x, int y, int color, -
libs/libmythtv/tv_play.cpp
diff -Naurp -x '*.orig' mythtv-orig/libs/libmythtv/tv_play.cpp mythtv/libs/libmythtv/tv_play.cpp
old new TV::TV(void) 539 539 jumptime(0), smartChannelChange(false), 540 540 MuteIndividualChannels(false), arrowAccel(false), 541 541 osd_general_timeout(2), osd_prog_info_timeout(3), 542 osd_now_play_timeout(10), 542 543 autoCommercialSkip(CommSkipOff), tryUnflaggedSkip(false), 543 544 smartForward(false), stickykeys(0), 544 545 ff_rew_repos(1.0f), ff_rew_reverse(false), … … bool TV::Init(bool createWindow) 661 662 persistentbrowsemode = gContext->GetNumSetting("PersistentBrowseMode", 0); 662 663 osd_general_timeout = gContext->GetNumSetting("OSDGeneralTimeout", 2); 663 664 osd_prog_info_timeout= gContext->GetNumSetting("OSDProgramInfoTimeout", 3); 665 osd_now_play_timeout = gContext->GetNumSetting("OSDNowPlayingTimeout", 10); 664 666 autoCommercialSkip = (enum commSkipMode)gContext->GetNumSetting( 665 667 "AutoCommercialSkip", CommSkipOff); 666 668 tryUnflaggedSkip = gContext->GetNumSetting("TryUnflaggedSkip", 0); … … bool TV::Init(bool createWindow) 668 670 stickykeys = gContext->GetNumSetting("StickyKeys"); 669 671 ff_rew_repos = gContext->GetNumSetting("FFRewReposTime", 100)/100.0; 670 672 ff_rew_reverse = gContext->GetNumSetting("FFRewReverse", 1); 673 nowPlayEnabled = gContext->GetNumSetting("EnableNowPlaying", 0); 671 674 int def[8] = { 3, 5, 10, 20, 30, 60, 120, 180 }; 672 675 for (uint i = 0; i < sizeof(def)/sizeof(def[0]); i++) 673 676 ff_rew_speeds.push_back( … … void TV::UpdateOSDProgInfo(const char *w 5319 5322 osd->ClearAllText(whichInfo); 5320 5323 osd->HideAll(); 5321 5324 osd->SetText(whichInfo, infoMap, osd_prog_info_timeout); 5325 5326 if (nowPlayEnabled && nvp->HasNowPlaying()) 5327 osd->SetNowPlaying("", osd_now_play_timeout); 5322 5328 } 5323 5329 5324 5330 void TV::UpdateOSDSeekMessage(const QString &mesg, int disptime) -
libs/libmythtv/tv_play.h
diff -Naurp -x '*.orig' mythtv-orig/libs/libmythtv/tv_play.h mythtv/libs/libmythtv/tv_play.h
old new class MPUBLIC TV : public QThread 467 467 bool arrowAccel; 468 468 int osd_general_timeout; 469 469 int osd_prog_info_timeout; 470 int osd_now_play_timeout; 470 471 471 472 enum commSkipMode autoCommercialSkip; 472 473 bool tryUnflaggedSkip; … … class MPUBLIC TV : public QThread 713 714 // Network Control stuff 714 715 MythDeque<QString> networkControlCommands; 715 716 QMutex ncLock; 717 718 // Now Playing 719 bool nowPlayEnabled; 716 720 }; 717 721 718 722 #endif -
programs/mythfrontend/globalsettings.cpp
diff -Naurp -x '*.orig' mythtv-orig/programs/mythfrontend/globalsettings.cpp mythtv/programs/mythfrontend/globalsettings.cpp
old new static HostSpinBox *OSDNotifyTimeout() 1597 1597 return gs; 1598 1598 } 1599 1599 1600 static HostSpinBox *OSDNowPlayingTimeout() 1601 { 1602 HostSpinBox *gs = new HostSpinBox("OSDNowPlayingTimeout", 1, 60, 1); 1603 gs->setLabel(QObject::tr("Now Playing OSD time-out")); 1604 gs->setValue(10); 1605 gs->setHelpText(QObject::tr("If available, length of time the on-screen " 1606 "display will display Now Playing information.")); 1607 return gs; 1608 } 1609 1600 1610 static HostSpinBox *ThemeCacheSize() 1601 1611 { 1602 1612 HostSpinBox *gs = new HostSpinBox("ThemeCacheSize", 1, 1000, 1, true); … … static HostCheckBox *EnableMHEG() 1969 1979 return gc; 1970 1980 } 1971 1981 1982 static HostCheckBox *EnableNowPlaying() 1983 { 1984 HostCheckBox *gc = new HostCheckBox("EnableNowPlaying"); 1985 gc->setLabel(QObject::tr("Enable Now Playing Information")); 1986 gc->setValue(false); 1987 gc->setHelpText(QObject::tr( 1988 "If enabled and available, Now Playing " 1989 "information will be activated. This is used for " 1990 "some DVB radio channels.")); 1991 return gc; 1992 } 1993 1972 1994 static HostCheckBox *PersistentBrowseMode() 1973 1995 { 1974 1996 HostCheckBox *gc = new HostCheckBox("PersistentBrowseMode"); … … OSDSettings::OSDSettings() 4791 4813 osd->addChild(new ThemeSelector("OSDTheme")); 4792 4814 osd->addChild(OSDGeneralTimeout()); 4793 4815 osd->addChild(OSDProgramInfoTimeout()); 4816 osd->addChild(OSDNowPlayingTimeout()); 4794 4817 osd->addChild(OSDFont()); 4795 4818 osd->addChild(OSDThemeFontSizeType()); 4796 4819 osd->addChild(EnableMHEG()); 4820 osd->addChild(EnableNowPlaying()); 4797 4821 osd->addChild(PersistentBrowseMode()); 4798 4822 addChild(osd); 4799 4823 -
themes/blueosd/osd.xml
diff -Naurp -x '*.orig' mythtv-orig/themes/blueosd/osd.xml mythtv/themes/blueosd/osd.xml
old new 349 349 <fcnfont name="infofontgray" function="inactive"></fcnfont> 350 350 </listtreemenu> 351 351 </container> 352 352 353 <container name="now_playing" priority="20" fademovement="0,0"> 354 <image name="background"> 355 <filename>now_playing.png</filename> 356 <position>85,124</position> 357 </image> 358 <textarea name="playing"> 359 <area>290,150,240,220</area> 360 <font>infofont</font> 361 <multiline>yes</multiline> 362 </textarea> 363 </container> 353 364 354 365 </mythosdtheme> -
themes/defaultosd/osd.xml
diff -Naurp -x '*.orig' mythtv-orig/themes/defaultosd/osd.xml mythtv/themes/defaultosd/osd.xml
old new 345 345 </textarea> 346 346 </container> 347 347 348 <container name="now_playing" priority="20" fademovement="0,0"> 349 <image name="background"> 350 <filename>now_playing.png</filename> 351 <position>85,124</position> 352 </image> 353 <textarea name="playing"> 354 <area>290,150,240,220</area> 355 <font>notifyfont</font> 356 <multiline>yes</multiline> 357 </textarea> 358 </container> 359 348 360 </mythosdtheme>