Ticket #4967: myth_radio_nowplaying.diff

File myth_radio_nowplaying.diff, 22.0 KB (added by anonymous, 11 years ago)

updated for trunk. Will not work with 0.21-fixes.

  • libs/libavcodec/avcodec.h

    diff -Naurp -x '*.orig' mythtv-orig/libs/libavcodec/avcodec.h mythtv/libs/libavcodec/avcodec.h
    old new enum CodecID { 
    332332
    333333    CODEC_ID_MPEG2TS= 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS
    334334                                * stream (only used by libavformat) */
     335    /* Private Data */
     336    CODEC_ID_DVB_PRIVSEC= 0x21000,
    335337};
    336338
    337339#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 
    203203
    204204        case CODEC_ID_DSMCC_B:          return "DSMCC_B";
    205205
     206            /* private data codecs */
     207        case CODEC_ID_DVB_PRIVSEC:      return "DVB_PRIVSEC";
     208
    206209        case CODEC_ID_MPEG2TS:          return "MPEG2TS";
    207210    }
    208211    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_ 
    866866        case STREAM_TYPE_AUDIO_AAC:
    867867        case STREAM_TYPE_AUDIO_AC3:
    868868        case STREAM_TYPE_AUDIO_DTS:
     869        case STREAM_TYPE_PRIVATE_SECTION:
    869870        case STREAM_TYPE_PRIVATE_DATA:
    870871        case STREAM_TYPE_VBI_DVB:
    871872        case STREAM_TYPE_SUBTITLE_DVB:
    static void init_stream(AVStream *st, in 
    14561457            codec_type = CODEC_TYPE_DATA;
    14571458            codec_id = CODEC_ID_DSMCC_B;
    14581459            break;
     1460        case STREAM_TYPE_PRIVATE_SECTION:
     1461            codec_type = CODEC_TYPE_DATA;
     1462            codec_id = CODEC_ID_DVB_PRIVSEC;
     1463            break;
    14591464        case STREAM_TYPE_PRIVATE_DATA:
    14601465        default:
    14611466            if (code >= 0x1c0 && code <= 0x1df) {
    static void mpegts_push_data(void *opaqu 
    15551560                    if (pes->total_size)
    15561561                        pes->total_size += 6;
    15571562                    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 */
    15581574                } else {
    15591575                    /* otherwise, it should be a table */
    15601576                    /* 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 
    437437    allow_dts_passthru = gContext->GetNumSetting("DTSPassThru", false);
    438438    max_channels = (uint) gContext->GetNumSetting("MaxChannels", 2);
    439439
     440    nowPlayEnabled = gContext->GetNumSetting("EnableNowPlaying", 0);
     441
    440442    audioIn.sample_size = -32; // force SetupAudioStream to run once
    441443    itv = GetNVP()->GetInteractiveTV();
    442444
    int AvFormatDecoder::ScanStreams(bool no 
    14541456    tracks[kTrackTypeTeletextCaptions].clear();
    14551457    selectedVideoIndex = -1;
    14561458
     1459    GetNVP()->SetHasNowPlaying(false);
     1460
    14571461    map<int,uint> lang_sub_cnt;
    14581462    map<int,uint> lang_aud_cnt;
    14591463
    int AvFormatDecoder::ScanStreams(bool no 
    16921696            }
    16931697            case CODEC_TYPE_DATA:
    16941698            {
    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
    16971714                VERBOSE(VB_PLAYBACK, LOC + QString("data codec (%1)")
    16981715                        .arg(codec_type_string(enc->codec_type)));
    16991716                break;
    void AvFormatDecoder::H264PreProcessPkt( 
    24722489    }
    24732490}
    24742491
     2492void 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
    24752550/** \fn AvFormatDecoder::ProcessVBIDataPacket(const AVStream*, const AVPacket*)
    24762551 *  \brief Process ivtv proprietary embedded vertical blanking
    24772552 *         interval captions.
    bool AvFormatDecoder::GetFrame(int onlyv 
    33543429        }
    33553430#endif // USING_MHEG
    33563431
     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
    33573442        // we don't care about other data streams
    33583443        if (curstream->codec->codec_type == CODEC_TYPE_DATA)
    33593444        {
  • 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 
    188188    void MpegPreProcessPkt(AVStream *stream, AVPacket *pkt);
    189189    void H264PreProcessPkt(AVStream *stream, AVPacket *pkt);
    190190
     191    void ProcessPrivSecDataPacket(const AVPacket *pkt);
    191192    void ProcessVBIDataPacket(const AVStream *stream, const AVPacket *pkt);
    192193    void ProcessDVBDataPacket(const AVStream *stream, const AVPacket *pkt);
    193194    void ProcessDSMCCPacket(const AVStream *stream, const AVPacket *pkt);
    class AvFormatDecoder : public DecoderBa 
    281282    bool dvd_video_codec_changed;
    282283    bool dvdTitleChanged;
    283284    bool mpeg_seq_end_seen;
     285
     286    // Now Playing
     287    QStringList now_playing;
     288    bool nowPlayEnabled;
    284289};
    285290
    286291#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 
    203203      interactiveTV(NULL),
    204204      itvEnabled(false),
    205205
     206      // Now Playing visible in OSD
     207      has_now_playing(false),
     208      now_playing_changed(false),
     209
    206210      // OSD stuff
    207211      osd(NULL),                    timedisplay(NULL),
    208212      dialogname(""),               dialogtype(0),
    NuppelVideoPlayer::NuppelVideoPlayer(QSt 
    277281    commnotifyamount = gContext->GetNumSetting("CommNotifyAmount",0);
    278282    decode_extra_audio=gContext->GetNumSetting("DecodeExtraAudio", 0);
    279283    itvEnabled       = gContext->GetNumSetting("EnableMHEG", 0);
     284    nowPlayEnabled   = gContext->GetNumSetting("EnableNowPlaying", 0);
    280285    db_prefer708     = gContext->GetNumSetting("Prefer708Captions", 1);
    281286
     287    osd_now_play_timeout = gContext->GetNumSetting("OSDNowPlayingTimeout", 10);
     288
    282289    lastIgnoredManualSkip = QDateTime::currentDateTime().addSecs(-10);
    283290
    284291    bzero(&txtbuffers, sizeof(txtbuffers));
    void NuppelVideoPlayer::DisplayNormalFra 
    28402847            ExpireSubtitles();
    28412848    }
    28422849
     2850    if (has_now_playing && nowPlayEnabled)
     2851        DisplayNowPlaying();
     2852
    28432853    // handle scan type changes
    28442854    AutoDeint(frame);
    28452855
    void NuppelVideoPlayer::JumpToProgram(vo 
    32773287    ringBuffer->Pause();
    32783288    ringBuffer->WaitForPause();
    32793289
     3290    SetHasNowPlaying(false);
     3291
     3292    if (osd)
     3293        osd->ResetNowPlaying();
     3294
    32803295    ClearSubtitles();
    32813296
    32823297    livetvchain->SetProgram(pginfo);
    void NuppelVideoPlayer::DisplayTextSubti 
    69736988        osd->ClearTextSubtitles();
    69746989}
    69756990
     6991/** \fn NuppelVideoPlayer::SetHasNowPlaying(void)
     6992 *  \brief Enables displaying of Now Playing content
     6993 */
     6994void 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 */
     7012bool NuppelVideoPlayer::HasNowPlaying(void)
     7013{
     7014    return has_now_playing;
     7015}
     7016
     7017/** \fn NuppelVideoPlayer::DisplayNowPlaying(void)
     7018 *  \brief Displays Now Playing text
     7019 */
     7020void 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
    69767047/** \fn NuppelVideoPlayer::ExpireSubtitles(void)
    69777048 *  \brief Discard non-displayed subtitles.
    69787049 */
    void NuppelVideoPlayer::AddAVSubtitle(co 
    70627133    subtitleLock.unlock();
    70637134}
    70647135
     7136/** \fn void NuppelVideoPlayer::SetNowPlaying(const QStringList playing&)
     7137 *  \brief Set the Now Playing text in the OSD.
     7138 */
     7139void NuppelVideoPlayer::SetNowPlaying(const QStringList &playing)
     7140{
     7141    nowPlayingLock.lock();
     7142    now_playing = playing;
     7143    nowPlayingLock.unlock();
     7144
     7145    now_playing_changed = true;
     7146}
     7147
    70657148/** \fn NuppelVideoPlayer::SetDecoder(DecoderBase*)
    70667149 *  \brief Sets the stream decoder, deleting any existing recorder.
    70677150 */
  • 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 
    304304                     long long timecode, char type);
    305305    void AddAVSubtitle(const AVSubtitle& subtitle);
    306306
     307    // Now Playing data
     308    void SetHasNowPlaying(bool has);
     309    void SetNowPlaying(const QStringList &playing);
     310    void DisplayNowPlaying();
     311    bool HasNowPlaying(void);
     312
    307313    // Closed caption and teletext stuff
    308314    uint GetCaptionMode(void) const { return textDisplayMode; }
    309315    void ResetCaptions(uint mode_override = 0);
    class MPUBLIC NuppelVideoPlayer : public 
    645651
    646652    // Support for captions, teletext, etc. decoded by libav
    647653    QMutex    subtitleLock;
     654    QMutex    nowPlayingLock;
    648655    /// This allows us to enable captions/subtitles later if the streams
    649656    /// are not immediately available when the video starts playing.
    650657    bool      textDesired;
    class MPUBLIC NuppelVideoPlayer : public 
    676683    bool       itvEnabled;
    677684    QMutex     itvLock;
    678685
     686    // Support for Now Playing
     687    bool       nowPlayEnabled;
     688    QStringList now_playing;
     689    bool       has_now_playing;
     690    bool       now_playing_changed;
     691
    679692    // OSD stuff
    680693    OSD      *osd;
    681694    OSDSet   *timedisplay;
    class MPUBLIC NuppelVideoPlayer : public 
    732745    long long  lastCommSkipStart;
    733746    time_t     lastSkipTime;
    734747
     748    int osd_now_play_timeout;
     749
    735750    long long  deleteframe;
    736751    bool       hasdeletetable;
    737752    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) 
    19371937    }
    19381938}
    19391939
     1940void 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
     1962void 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
    19402009void OSD::SetChannumText(const QString &text, int length)
    19412010{
    19422011    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 
    8080                     const QString &callsign, const QString &iconpath,
    8181                     int length);
    8282    void SetChannumText(const QString &text, int length);
     83    void SetNowPlaying(const QString &playing, int length);
     84    void ResetNowPlaying(void);
    8385
    8486    // CC-608 and DVB text captions (not DVB/DVD subtitles).
    8587    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) 
    539539      jumptime(0), smartChannelChange(false),
    540540      MuteIndividualChannels(false), arrowAccel(false),
    541541      osd_general_timeout(2), osd_prog_info_timeout(3),
     542      osd_now_play_timeout(10),
    542543      autoCommercialSkip(CommSkipOff), tryUnflaggedSkip(false),
    543544      smartForward(false), stickykeys(0),
    544545      ff_rew_repos(1.0f), ff_rew_reverse(false),
    bool TV::Init(bool createWindow) 
    661662    persistentbrowsemode = gContext->GetNumSetting("PersistentBrowseMode", 0);
    662663    osd_general_timeout  = gContext->GetNumSetting("OSDGeneralTimeout", 2);
    663664    osd_prog_info_timeout= gContext->GetNumSetting("OSDProgramInfoTimeout", 3);
     665    osd_now_play_timeout = gContext->GetNumSetting("OSDNowPlayingTimeout", 10);
    664666    autoCommercialSkip   = (enum commSkipMode)gContext->GetNumSetting(
    665667                            "AutoCommercialSkip", CommSkipOff);
    666668    tryUnflaggedSkip     = gContext->GetNumSetting("TryUnflaggedSkip", 0);
    bool TV::Init(bool createWindow) 
    668670    stickykeys           = gContext->GetNumSetting("StickyKeys");
    669671    ff_rew_repos         = gContext->GetNumSetting("FFRewReposTime", 100)/100.0;
    670672    ff_rew_reverse       = gContext->GetNumSetting("FFRewReverse", 1);
     673    nowPlayEnabled       = gContext->GetNumSetting("EnableNowPlaying", 0);
    671674    int def[8] = { 3, 5, 10, 20, 30, 60, 120, 180 };
    672675    for (uint i = 0; i < sizeof(def)/sizeof(def[0]); i++)
    673676        ff_rew_speeds.push_back(
    void TV::UpdateOSDProgInfo(const char *w 
    53195322    osd->ClearAllText(whichInfo);
    53205323    osd->HideAll();
    53215324    osd->SetText(whichInfo, infoMap, osd_prog_info_timeout);
     5325
     5326    if (nowPlayEnabled && nvp->HasNowPlaying())
     5327        osd->SetNowPlaying("", osd_now_play_timeout);
    53225328}
    53235329
    53245330void 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 
    467467    bool    arrowAccel;
    468468    int     osd_general_timeout;
    469469    int     osd_prog_info_timeout;
     470    int     osd_now_play_timeout;
    470471
    471472    enum commSkipMode autoCommercialSkip;
    472473    bool    tryUnflaggedSkip;
    class MPUBLIC TV : public QThread 
    713714    // Network Control stuff
    714715    MythDeque<QString> networkControlCommands;
    715716    QMutex ncLock;
     717
     718    // Now Playing
     719    bool nowPlayEnabled;
    716720};
    717721
    718722#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() 
    15971597    return gs;
    15981598}
    15991599
     1600static 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
    16001610static HostSpinBox *ThemeCacheSize()
    16011611{
    16021612    HostSpinBox *gs = new HostSpinBox("ThemeCacheSize", 1, 1000, 1, true);
    static HostCheckBox *EnableMHEG() 
    19691979    return gc;
    19701980}
    19711981
     1982static 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
    19721994static HostCheckBox *PersistentBrowseMode()
    19731995{
    19741996    HostCheckBox *gc = new HostCheckBox("PersistentBrowseMode");
    OSDSettings::OSDSettings() 
    47914813    osd->addChild(new ThemeSelector("OSDTheme"));
    47924814    osd->addChild(OSDGeneralTimeout());
    47934815    osd->addChild(OSDProgramInfoTimeout());
     4816    osd->addChild(OSDNowPlayingTimeout());
    47944817    osd->addChild(OSDFont());
    47954818    osd->addChild(OSDThemeFontSizeType());
    47964819    osd->addChild(EnableMHEG());
     4820    osd->addChild(EnableNowPlaying());
    47974821    osd->addChild(PersistentBrowseMode());
    47984822    addChild(osd);
    47994823
  • themes/blueosd/osd.xml

    diff -Naurp -x '*.orig' mythtv-orig/themes/blueosd/osd.xml mythtv/themes/blueosd/osd.xml
    old new  
    349349      <fcnfont name="infofontgray" function="inactive"></fcnfont>
    350350    </listtreemenu>
    351351  </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>   
    353364
    354365</mythosdtheme>
  • themes/defaultosd/osd.xml

    diff -Naurp -x '*.orig' mythtv-orig/themes/defaultosd/osd.xml mythtv/themes/defaultosd/osd.xml
    old new  
    345345    </textarea>
    346346  </container>
    347347
     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
    348360</mythosdtheme>