Ticket #5745: lcd-icon-support.patch

File lcd-icon-support.patch, 22.6 KB (added by Jarod Wilson, 15 years ago)

Updated version, now sets channels based on source material

  • mythplugins/mythmusic/mythmusic/main.cpp

    ---
     mythplugins/mythgallery/mythgallery/imageview.cpp |    2 
     mythplugins/mythmusic/mythmusic/main.cpp          |   11 
     mythplugins/mythvideo/mythvideo/main.cpp          |    1 
     mythplugins/mythvideo/mythvideo/playercommand.cpp |    9 
     mythplugins/mythweather/mythweather/main.cpp      |    4 
     mythtv/libs/libmyth/audiooutputbase.cpp           |    6 
     mythtv/libs/libmythdb/lcddevice.cpp               |  360 ++++++++++++++++++++++
     mythtv/libs/libmythdb/lcddevice.h                 |   85 +++++
     mythtv/libs/libmythdb/libmythdb.pro               |    2 
     mythtv/libs/libmythtv/avformatdecoder.cpp         |   56 +++
     mythtv/libs/libmythtv/tv_play.cpp                 |   11 
     11 files changed, 545 insertions(+), 2 deletions(-)
    
     
    2121#include <mythtv/compat.h>
    2222#include <mythtv/libmythui/mythuihelper.h>
    2323#include <mythtv/libmythui/mythprogressdialog.h>
     24#include <mythtv/lcddevice.h>
    2425
    2526// MythMusic headers
    2627#include "decoder.h"
    static void preMusic() 
    527528    gMusicData->startdir = startdir;
    528529    gMusicData->all_playlists = all_playlists;
    529530    gMusicData->all_music = all_music;
     531
     532    if (LCD *lcd = LCD::Get())
     533    {
     534        lcd->setFunctionLEDs(FUNC_MUSIC, true);
     535    }
    530536}
    531537
    532538static void postMusic()
    static void postMusic() 
    548554    gMusicData->all_music = NULL;
    549555    delete gMusicData->all_playlists;
    550556    gMusicData->all_playlists = NULL;
     557
     558    if (LCD *lcd = LCD::Get())
     559    {
     560        lcd->setFunctionLEDs(FUNC_MUSIC, false);
     561    }
    551562}
    552563
    553564int mythplugin_run(void)
  • mythplugins/mythgallery/mythgallery/imageview.cpp

    void ImageView::UpdateLCD(const ThumbItem *item) 
    152152
    153153    if (!item)
    154154    {
     155        lcd->setFunctionLEDs(FUNC_PHOTO, false);
    155156        lcd->switchToTime();
    156157        return;
    157158    }
     159    lcd->setFunctionLEDs(FUNC_PHOTO, true);
    158160
    159161    QString name = item->GetName();
    160162    QString desc = QString::number(m_pos + 1) + " / " +
  • mythplugins/mythweather/mythweather/main.cpp

    int mythplugin_config() 
    142142    menu->setKillable();
    143143    if (menu->foundTheme())
    144144    {
    145         if (LCD *lcd = LCD::Get())
     145        if (LCD *lcd = LCD::Get()) {
     146            lcd->setFunctionLEDs(FUNC_NEWS, false);
    146147            lcd->switchToTime();
     148        }
    147149
    148150        GetMythMainWindow()->GetMainStack()->AddScreen(menu);
    149151        return 0;
  • mythplugins/mythvideo/mythvideo/main.cpp

    namespace 
    517517        {
    518518            if (LCD *lcd = LCD::Get())
    519519            {
     520                lcd->setFunctionLEDs(FUNC_MOVIE, false);
    520521                lcd->switchToTime();
    521522            }
    522523            GetMythMainWindow()->GetMainStack()->AddScreen(diag);
  • mythplugins/mythvideo/mythvideo/playercommand.cpp

     
    55#include <mythtv/libmythui/mythmainwindow.h>
    66#include <mythtv/libmythui/mythsystem.h>
    77#include <mythtv/libmyth/remoteutil.h>
     8#include <mythtv/lcddevice.h>
    89
    910#include "dbaccess.h"
    1011#include "metadata.h"
    VideoPlayerCommand &VideoPlayerCommand::operator=( 
    391392
    392393void VideoPlayerCommand::Play() const
    393394{
     395    class LCD *lcd = LCD::Get();
     396
     397    if (lcd) {
     398        lcd->setFunctionLEDs(FUNC_TV, false);
     399        lcd->setFunctionLEDs(FUNC_MOVIE, true);
     400    }
    394401    m_d->Play();
    395402    gContext->GetMainWindow()->raise();
    396403    gContext->GetMainWindow()->activateWindow();
    397404    if (gContext->GetMainWindow()->currentWidget())
    398405        gContext->GetMainWindow()->currentWidget()->setFocus();
     406    if (lcd)
     407        lcd->setFunctionLEDs(FUNC_MOVIE, false);
    399408}
    400409
    401410QString VideoPlayerCommand::GetCommandDisplayName() const
  • mythtv/libs/libmythtv/avformatdecoder.cpp

    using namespace std; 
    2929#include "mythuihelper.h"
    3030#include "myth_imgconvert.h"
    3131
     32#include "lcddevice.h"
     33
    3234#include "videoout_dvdv.h"    // AvFormatDecoderPrivate has DVDV ptr
    3335#include "videoout_quartz.h"  // For VOQ::GetBestSupportedCodec()
    3436
    AvFormatDecoder::~AvFormatDecoder() 
    519521
    520522    if (avfRingBuffer)
    521523        delete avfRingBuffer;
     524
     525    if (LCD *lcd = LCD::Get())
     526    {
     527        VERBOSE(VB_GENERAL, QString("LCD: Switch all codec/hdtv/spdif OFF"));
     528        lcd->setAVFormatLEDs(CODEC_ID_MPEG2VIDEO, false);
     529        lcd->setAVFormatLEDs(CODEC_ID_MP2, false);
     530        lcd->setVariousLEDs(VARIOUS_HDTV, false);
     531        lcd->setVariousLEDs(VARIOUS_SPDIF, false);
     532    }
    522533}
    523534
    524535void AvFormatDecoder::CloseCodecs()
    void AvFormatDecoder::InitVideoCodec(AVStream *str 
    12901301        GetNVP()->SetVideoParams(width, height, fps,
    12911302                                 keyframedist, aspect_ratio, kScan_Detect,
    12921303                                 dvd_video_codec_changed);
     1304        if (LCD *lcd = LCD::Get())
     1305        {
     1306            VERBOSE(VB_GENERAL, QString("LCD: Set AVFormat to Codec %1").arg(enc->codec_id));
     1307            lcd->setAVFormatLEDs(enc->codec_id, true);
     1308            if(height >= 720)
     1309                lcd->setVariousLEDs(VARIOUS_HDTV, true);
     1310            else
     1311                lcd->setVariousLEDs(VARIOUS_HDTV, false);
     1312        }
    12931313    }
    12941314}
    12951315
    bool AvFormatDecoder::SetupAudioStream(void) 
    43074327    GetNVP()->SetAudioCodec((using_passthru) ? codec_ctx : NULL);
    43084328    GetNVP()->ReinitAudio();
    43094329
     4330    if (LCD *lcd = LCD::Get())
     4331    {
     4332        VERBOSE(VB_GENERAL, QString("LCD: Set Audio Codec %1")
     4333                .arg(codec_id_string(codec_ctx->codec_id)));
     4334        lcd->setAVFormatLEDs(codec_ctx->codec_id, true);
     4335
     4336        VERBOSE(VB_GENERAL, QString("LCD: Set SPDIF LED %1")
     4337                .arg((using_passthru) ? "on" : "off"));
     4338        if (using_passthru)
     4339            lcd->setVariousLEDs(VARIOUS_SPDIF, true);
     4340        else
     4341            lcd->setVariousLEDs(VARIOUS_SPDIF, false);
     4342
     4343        VERBOSE(VB_GENERAL, QString("LCD: setting speaker LEDs for %1 channels")
     4344                .arg(audioIn.channels));
     4345        switch (audioIn.channels)
     4346        {
     4347            case 0:
     4348                lcd->setSpeakerLEDs(SPEAKER_LR, false);
     4349                break;
     4350            case 1:
     4351            case 2:
     4352                lcd->setSpeakerLEDs(SPEAKER_LR, true);
     4353                break;
     4354            case 3:
     4355            case 4:
     4356            case 5:
     4357            case 6:
     4358                lcd->setSpeakerLEDs(SPEAKER_51, true);
     4359                break;
     4360            default:
     4361                lcd->setSpeakerLEDs(SPEAKER_71, true);
     4362                break;
     4363        }
     4364
     4365    }
    43104366    return true;
    43114367}
    43124368
  • mythtv/libs/libmythtv/tv_play.cpp

    TV::~TV(void) 
    10841084        delete lastProgram;
    10851085
    10861086    if (class LCD * lcd = LCD::Get())
     1087    {
     1088        lcd->setFunctionLEDs(FUNC_TV, false);
     1089        lcd->setFunctionLEDs(FUNC_MOVIE, false);
    10871090        lcd->switchToTime();
     1091    }
    10881092
    10891093    if (ddMapLoaderRunning)
    10901094    {
    int TV::Playback(const ProgramInfo &rcinfo) 
    16591663
    16601664    ReturnPlayerLock(mctx);
    16611665
    1662     if (class LCD * lcd = LCD::Get())
     1666    if (class LCD * lcd = LCD::Get()) {
    16631667        lcd->switchToChannel(rcinfo.chansign, rcinfo.title, rcinfo.subtitle);
     1668        if (rcinfo.isVideo)
     1669            lcd->setFunctionLEDs(FUNC_MOVIE, true);
     1670        else
     1671            lcd->setFunctionLEDs(FUNC_TV, true);
     1672    }
    16641673
    16651674    return 1;
    16661675}
  • mythtv/libs/libmyth/audiooutputbase.cpp

     
    1414#include "audiooutputdigitalencoder.h"
    1515#include "SoundTouch.h"
    1616#include "freesurround.h"
     17#include "lcddevice.h"
    1718
    1819#define LOC QString("AO: ")
    1920#define LOC_ERR QString("AO, ERROR: ")
    void AudioOutputBase::KillAudio() 
    475476    CloseDevice();
    476477
    477478    killAudioLock.unlock();
     479    if (LCD *lcd = LCD::Get())
     480    {
     481        lcd->setAVFormatLEDs(CODEC_ID_MP2, false); // which codec is not important, only that it was a audio codec
     482        lcd->setSpeakerLEDs(SPEAKER_71, false);    // should clear any and all speaker LEDs
     483    }
    478484}
    479485
    480486void AudioOutputBase::Pause(bool paused)
  • mythtv/libs/libmythdb/lcddevice.cpp

     
    4747#include "mythdirs.h"
    4848#include "mythevent.h"
    4949
     50
     51// Necessary for codec icon support
     52extern "C" {
     53#include <stdint.h>
     54#include "avutil.h"
     55#include "avcodec.h"
     56}
    5057static QString LOC = "lcddevice: ";
    5158
    5259LCD::LCD()
    LCD::LCD() 
    7077      lcd_showmusic_items(),
    7178      lcd_keystring(),
    7279
     80      lcd_ledmask(0),
    7381      GetLEDMask(NULL)
    7482{
    7583    send_buffer.clear(); last_command.clear();
    void LCD::stopAll() 
    405413    sendToServer("STOP_ALL");
    406414}
    407415
     416void LCD::setSpeakerLEDs(enum LCDSpeakerSet speaker, bool on)
     417{
     418    if (!lcd_ready)
     419        return;
     420    lcd_ledmask &= ~SPEAKER_MASK;
     421    if (on)
     422        lcd_ledmask |= speaker;
     423    sendToServer(QString("UPDATE_LEDS %1").arg(lcd_ledmask));
     424}
     425
     426void LCD::setAVFormatLEDs(int codec_id, bool on)
     427{
     428    if (!lcd_ready)
     429        return;
     430
     431    int mask = 0;
     432
     433    VERBOSE(VB_AUDIO, LOC + QString("LEDs AVFormat %1/%2").arg(codec_id).arg(codec_id_string((CodecID)codec_id)));
     434
     435    switch (codec_id) {
     436    case CODEC_ID_MPEG1VIDEO:
     437    case CODEC_ID_MPEG2VIDEO:   /* preferred ID for MPEG-1/2 video decoding */
     438    case CODEC_ID_MPEG2VIDEO_XVMC:
     439    case CODEC_ID_MPEG2VIDEO_XVMC_VLD:
     440    case CODEC_ID_MPEG2VIDEO_DVDV:
     441    case CODEC_ID_H261:
     442    case CODEC_ID_RV10:
     443    case CODEC_ID_RV20:
     444    case CODEC_ID_MJPEG:
     445    case CODEC_ID_MJPEGB:
     446    case CODEC_ID_LJPEG:
     447    case CODEC_ID_SP5X:
     448    case CODEC_ID_JPEGLS:
     449    case CODEC_ID_RAWVIDEO:
     450    case CODEC_ID_FLV1:
     451    case CODEC_ID_SVQ1:
     452    case CODEC_ID_SVQ3:
     453    case CODEC_ID_DVVIDEO:
     454    case CODEC_ID_HUFFYUV:
     455    case CODEC_ID_CYUV:
     456    case CODEC_ID_H264:
     457    case CODEC_ID_INDEO3:
     458    case CODEC_ID_VP3:
     459    case CODEC_ID_THEORA:
     460    case CODEC_ID_ASV1:
     461    case CODEC_ID_ASV2:
     462    case CODEC_ID_FFV1:
     463    case CODEC_ID_4XM:
     464    case CODEC_ID_VCR1:
     465    case CODEC_ID_CLJR:
     466    case CODEC_ID_MDEC:
     467    case CODEC_ID_ROQ:
     468    case CODEC_ID_INTERPLAY_VIDEO:
     469    case CODEC_ID_XAN_WC3:
     470    case CODEC_ID_XAN_WC4:
     471    case CODEC_ID_RPZA:
     472    case CODEC_ID_CINEPAK:
     473    case CODEC_ID_WS_VQA:
     474    case CODEC_ID_MSRLE:
     475    case CODEC_ID_MSVIDEO1:
     476    case CODEC_ID_IDCIN:
     477    case CODEC_ID_8BPS:
     478    case CODEC_ID_SMC:
     479    case CODEC_ID_FLIC:
     480    case CODEC_ID_TRUEMOTION1:
     481    case CODEC_ID_VMDVIDEO:
     482    case CODEC_ID_MSZH:
     483    case CODEC_ID_ZLIB:
     484    case CODEC_ID_QTRLE:
     485    case CODEC_ID_SNOW:
     486    case CODEC_ID_TSCC:
     487    case CODEC_ID_ULTI:
     488    case CODEC_ID_QDRAW:
     489    case CODEC_ID_VIXL:
     490    case CODEC_ID_QPEG:
     491    case CODEC_ID_PNG:
     492    case CODEC_ID_PPM:
     493    case CODEC_ID_PBM:
     494    case CODEC_ID_PGM:
     495    case CODEC_ID_PGMYUV:
     496    case CODEC_ID_PAM:
     497    case CODEC_ID_FFVHUFF:
     498    case CODEC_ID_RV30:
     499    case CODEC_ID_RV40:
     500    case CODEC_ID_VC1:
     501    case CODEC_ID_WMV3:
     502    case CODEC_ID_LOCO:
     503    case CODEC_ID_WNV1:
     504    case CODEC_ID_AASC:
     505    case CODEC_ID_INDEO2:
     506    case CODEC_ID_FRAPS:
     507    case CODEC_ID_TRUEMOTION2:
     508    case CODEC_ID_BMP:
     509    case CODEC_ID_CSCD:
     510    case CODEC_ID_MMVIDEO:
     511    case CODEC_ID_ZMBV:
     512    case CODEC_ID_AVS:
     513    case CODEC_ID_SMACKVIDEO:
     514    case CODEC_ID_NUV:
     515    case CODEC_ID_KMVC:
     516    case CODEC_ID_FLASHSV:
     517    case CODEC_ID_CAVS:
     518    case CODEC_ID_JPEG2000:
     519    case CODEC_ID_VMNC:
     520    case CODEC_ID_VP5:
     521    case CODEC_ID_VP6:
     522    case CODEC_ID_VP6F:
     523    case CODEC_ID_TARGA:
     524    case CODEC_ID_DSICINVIDEO:
     525    case CODEC_ID_TIERTEXSEQVIDEO:
     526    case CODEC_ID_TIFF:
     527    case CODEC_ID_GIF:
     528    case CODEC_ID_FFH264:
     529    case CODEC_ID_DXA:
     530    case CODEC_ID_DNXHD:
     531    case CODEC_ID_THP:
     532    case CODEC_ID_SGI:
     533    case CODEC_ID_C93:
     534    case CODEC_ID_BETHSOFTVID:
     535    case CODEC_ID_PTX:
     536    case CODEC_ID_TXD:
     537    case CODEC_ID_VP6A:
     538    case CODEC_ID_AMV:
     539    case CODEC_ID_VB:
     540    case CODEC_ID_MPEG2TS: /* _FAKE_ codec to indicate a raw MPEG-2 TS */
     541        mask |= VIDEO_MPG;
     542        break;
     543
     544    case CODEC_ID_H263:
     545    case CODEC_ID_MPEG4:
     546    case CODEC_ID_MSMPEG4V1:
     547    case CODEC_ID_MSMPEG4V2:
     548    case CODEC_ID_MSMPEG4V3:
     549    case CODEC_ID_H263P:
     550    case CODEC_ID_H263I:
     551        mask |= VIDEO_DIVX;
     552        break;
     553
     554    case CODEC_ID_WMV1:
     555    case CODEC_ID_WMV2:
     556        mask |= VIDEO_WMV;
     557        break;
     558
     559    case CODEC_ID_XVID:
     560        mask |= VIDEO_XVID;
     561        break;
     562
     563    /* various PCM "codecs" */
     564    case CODEC_ID_PCM_S16LE:
     565    case CODEC_ID_PCM_S16BE:
     566    case CODEC_ID_PCM_U16LE:
     567    case CODEC_ID_PCM_U16BE:
     568    case CODEC_ID_PCM_S8:
     569    case CODEC_ID_PCM_U8:
     570    case CODEC_ID_PCM_MULAW:
     571    case CODEC_ID_PCM_ALAW:
     572    case CODEC_ID_PCM_S32LE:
     573    case CODEC_ID_PCM_S32BE:
     574    case CODEC_ID_PCM_U32LE:
     575    case CODEC_ID_PCM_U32BE:
     576    case CODEC_ID_PCM_S24LE:
     577    case CODEC_ID_PCM_S24BE:
     578    case CODEC_ID_PCM_U24LE:
     579    case CODEC_ID_PCM_U24BE:
     580    case CODEC_ID_PCM_S24DAUD:
     581    case CODEC_ID_PCM_ZORK:
     582
     583    /* various ADPCM codecs */
     584    case CODEC_ID_ADPCM_IMA_QT:
     585    case CODEC_ID_ADPCM_IMA_WAV:
     586    case CODEC_ID_ADPCM_IMA_DK3:
     587    case CODEC_ID_ADPCM_IMA_DK4:
     588    case CODEC_ID_ADPCM_IMA_WS:
     589    case CODEC_ID_ADPCM_IMA_SMJPEG:
     590    case CODEC_ID_ADPCM_MS:
     591    case CODEC_ID_ADPCM_4XM:
     592    case CODEC_ID_ADPCM_XA:
     593    case CODEC_ID_ADPCM_ADX:
     594    case CODEC_ID_ADPCM_EA:
     595    case CODEC_ID_ADPCM_G726:
     596    case CODEC_ID_ADPCM_CT:
     597    case CODEC_ID_ADPCM_SWF:
     598    case CODEC_ID_ADPCM_YAMAHA:
     599    case CODEC_ID_ADPCM_SBPRO_4:
     600    case CODEC_ID_ADPCM_SBPRO_3:
     601    case CODEC_ID_ADPCM_SBPRO_2:
     602    case CODEC_ID_ADPCM_THP:
     603    case CODEC_ID_ADPCM_IMA_AMV:
     604    case CODEC_ID_ADPCM_EA_R1:
     605    case CODEC_ID_ADPCM_EA_R3:
     606    case CODEC_ID_ADPCM_EA_R2:
     607    case CODEC_ID_ADPCM_IMA_EA_SEAD:
     608    case CODEC_ID_ADPCM_IMA_EA_EACS:
     609    case CODEC_ID_ADPCM_EA_XAS:
     610
     611    /* AMR */
     612    case CODEC_ID_AMR_NB:
     613    case CODEC_ID_AMR_WB:
     614
     615    /* RealAudio codecs*/
     616    case CODEC_ID_RA_144:
     617    case CODEC_ID_RA_288:
     618
     619    /* various DPCM codecs */
     620    case CODEC_ID_ROQ_DPCM:
     621    case CODEC_ID_INTERPLAY_DPCM:
     622    case CODEC_ID_XAN_DPCM:
     623    case CODEC_ID_SOL_DPCM:
     624
     625    /* more misc things we'll call WAV */
     626    case CODEC_ID_AAC:
     627    case CODEC_ID_DVAUDIO:
     628    case CODEC_ID_MACE3:
     629    case CODEC_ID_MACE6:
     630    case CODEC_ID_VMDAUDIO:
     631    case CODEC_ID_SONIC:
     632    case CODEC_ID_SONIC_LS:
     633    case CODEC_ID_FLAC:
     634    case CODEC_ID_MP3ADU:
     635    case CODEC_ID_MP3ON4:
     636    case CODEC_ID_SHORTEN:
     637    case CODEC_ID_ALAC:
     638    case CODEC_ID_WESTWOOD_SND1:
     639    case CODEC_ID_GSM: /* as in Berlin toast format */
     640    case CODEC_ID_QDM2:
     641    case CODEC_ID_COOK:
     642    case CODEC_ID_TRUESPEECH:
     643    case CODEC_ID_TTA:
     644    case CODEC_ID_SMACKAUDIO:
     645    case CODEC_ID_QCELP:
     646    case CODEC_ID_WAVPACK:
     647    case CODEC_ID_DSICINAUDIO:
     648    case CODEC_ID_IMC:
     649    case CODEC_ID_MUSEPACK7:
     650    case CODEC_ID_MLP:
     651    case CODEC_ID_GSM_MS: /* as found in WAV */
     652    case CODEC_ID_ATRAC3:
     653    case CODEC_ID_VOXWARE:
     654    case CODEC_ID_APE:
     655    case CODEC_ID_NELLYMOSER:
     656    case CODEC_ID_MUSEPACK8:
     657        mask |= AUDIO_WAV;
     658        break;
     659
     660    case CODEC_ID_MP2:
     661        mask |= AUDIO_MPEG2;
     662        break;
     663
     664    case CODEC_ID_MP3: /* preferred ID for decoding MPEG audio layer 1: 2 or 3 */
     665        mask |= AUDIO_MP3;
     666        break;
     667
     668    case CODEC_ID_AC3:
     669        mask |= AUDIO_AC3;
     670        break;
     671
     672    case CODEC_ID_DTS:
     673        mask |= AUDIO_DTS;
     674        break;
     675
     676    case CODEC_ID_VORBIS:
     677        mask |= AUDIO_OGG;
     678        break;
     679
     680    case CODEC_ID_WMAV1:
     681        mask |= AUDIO_WMA;
     682        break;
     683
     684    case CODEC_ID_WMAV2:
     685        mask |= AUDIO_WMA2;
     686        break;
     687
     688    /* subtitle codecs */
     689    case CODEC_ID_DVD_SUBTITLE:
     690    case CODEC_ID_DVB_SUBTITLE:
     691    case CODEC_ID_TEXT:
     692    case CODEC_ID_XSUB:
     693    /* teletext codecs */
     694    case CODEC_ID_MPEG2VBI:
     695    case CODEC_ID_DVB_VBI:
     696    /* DSMCC codec */
     697    case CODEC_ID_DSMCC_B:
     698        mask |= 0;
     699        break;
     700    }
     701
     702    if(mask & AUDIO_MASK)
     703    {
     704        lcd_ledmask &= ~AUDIO_MASK;
     705        if (on)
     706            lcd_ledmask |= (mask & AUDIO_MASK);
     707    }
     708    if(mask & VIDEO_MASK)
     709    {
     710        lcd_ledmask &= ~VIDEO_MASK;
     711        if (on)
     712            lcd_ledmask |= (mask & VIDEO_MASK);
     713    }
     714    sendToServer(QString("UPDATE_LEDS %1").arg(lcd_ledmask));
     715}
     716
     717
     718void LCD::setVideoSrcLEDs(enum LCDVideoSourceSet vsrc, bool on)
     719{
     720    if (!lcd_ready)
     721        return;
     722    lcd_ledmask &= ~VSRC_MASK;
     723    if (on)
     724        lcd_ledmask |=  vsrc;
     725    sendToServer(QString("UPDATE_LEDS %1").arg(lcd_ledmask));
     726}
     727
     728void LCD::setFunctionLEDs(enum LCDFunctionSet func, bool on)
     729{
     730    if (!lcd_ready)
     731        return;
     732    lcd_ledmask &= ~FUNC_MASK;
     733    if (on)
     734        lcd_ledmask |=  func;
     735    sendToServer(QString("UPDATE_LEDS %1").arg(lcd_ledmask));
     736}
     737
     738void LCD::setVariousLEDs(enum LCDVariousFlags various, bool on)
     739{
     740    if (!lcd_ready)
     741        return;
     742    if (on) {
     743        lcd_ledmask |=  various;
     744        if (various == VARIOUS_SPDIF)
     745            lcd_ledmask |= SPDIF_MASK;
     746    } else {
     747        lcd_ledmask &=  ~various;
     748        if (various == VARIOUS_SPDIF)
     749            lcd_ledmask &= ~SPDIF_MASK;
     750    }
     751    sendToServer(QString("UPDATE_LEDS %1").arg(lcd_ledmask));
     752}
     753
     754void LCD::setTunerLEDs(enum LCDTunerSet tuner, bool on)
     755{
     756    if (!lcd_ready)
     757        return;
     758    lcd_ledmask &= ~TUNER_MASK;
     759    if (on)
     760        lcd_ledmask |=  tuner;
     761    sendToServer(QString("UPDATE_LEDS %1").arg(lcd_ledmask));
     762}
     763
    408764void LCD::setChannelProgress(float value)
    409765{
    410766    if (!lcd_ready || !lcd_showchannel)
    void LCD::setupLEDs(int(*LedMaskFunc)(void)) 
    480836
    481837void LCD::outputLEDs()
    482838{
     839    /* now implemented elsewhere for advanced icon control */
     840    return;
     841#if 0
    483842    if (!lcd_ready)
    484843        return;
    485844
    void LCD::outputLEDs() 
    490849    aString = "UPDATE_LEDS ";
    491850    aString += QString::number(mask);
    492851    sendToServer(aString);
     852#endif
    493853}
    494854
    495855void LCD::switchToTime()
  • mythtv/libs/libmythdb/lcddevice.h

    class MPUBLIC LCDTextItem 
    9494    bool itemScrollable;
    9595};
    9696
     97//only one active at a time
     98enum LCDSpeakerSet {
     99        SPEAKER_MASK = 0x00000030,
     100        SPEAKER_LR = 1 << 4,
     101        SPEAKER_51 = 2 << 4,
     102        SPEAKER_71 = 3 << 4,
     103};
     104
     105//only one active at a time
     106enum LCDAudioFormatSet {
     107        AUDIO_MASK = 0x0000E000 | 0x00070000,
     108
     109        AUDIO_MP3  = 1 << 13,
     110        AUDIO_OGG  = 2 << 13,
     111        AUDIO_WMA2 = 3 << 13,
     112        AUDIO_WAV  = 4 << 13,
     113
     114        AUDIO_MPEG2 = 1 << 16,
     115        AUDIO_AC3   = 2 << 16,
     116        AUDIO_DTS   = 3 << 16,
     117        AUDIO_WMA   = 4 << 16,
     118};
     119
     120//only one active at a time
     121enum LCDVideoFormatSet {
     122        VIDEO_MASK = 0x00380000,
     123        VIDEO_MPG  = 1 << 19,
     124        VIDEO_DIVX = 2 << 19,
     125        VIDEO_XVID = 3 << 19,
     126        VIDEO_WMV  = 4 << 19,
     127};
     128
     129//only one active at a time
     130enum LCDTunerSet {
     131        TUNER_MASK = 0x00000080 | 0x00000800 | 0x00001000,
     132        TUNER_SRC  = 0x00000080,
     133        TUNER_SRC1 = 0x00000800,
     134        TUNER_SRC2 = 0x00001000,
     135};
     136
     137//only one active at a time
     138enum LCDVideoSourceSet {
     139        VSRC_MASK = 0x00000100 | 0x00000200,
     140        VSRC_FIT  = 0x00000100,
     141        VSRC_TV   = 0x00000200,
     142};
     143
     144//can be enabled/disabled separately
     145enum LCDVariousFlags {
     146        VARIOUS_VOL = 0x00400000,
     147        VARIOUS_TIME = 0x00800000,
     148        VARIOUS_ALARM = 0x01000000,
     149        VARIOUS_RECORD = 0x02000000,
     150        VARIOUS_REPEAT = 0x04000000,
     151        VARIOUS_SHUFFLE = 0x08000000,
     152        VARIOUS_DISC_IN = 0x20000000,
     153        VARIOUS_HDTV = 0x00000400,
     154        VARIOUS_SPDIF = 0x1 << 9,
     155        SPDIF_MASK = 0x00000040,
     156};
     157
     158
     159//only one active at a time
     160enum LCDFunctionSet {
     161        //0=none, 1=music, 2=movie, 3=photo, 4=CD/DVD, 5=TV, 6=Web, 7=News/Weather  * 2
     162        FUNC_MASK = 0xE,
     163        FUNC_MUSIC = 1 << 1,
     164        FUNC_MOVIE = 2 << 1,
     165        FUNC_PHOTO = 3 << 1,
     166        FUNC_DVD = 4 << 1,
     167        FUNC_TV = 5 << 1,
     168        FUNC_WEB = 6 << 1,
     169        FUNC_NEWS = 7 << 1,
     170};
     171
    97172class MPUBLIC LCD : public QObject, public MythSocketCBs
    98173{
    99174    Q_OBJECT
    class MPUBLIC LCD : public QObject, public MythSoc 
    131206    // When nothing else is going on, show the time
    132207    void switchToTime();
    133208
     209    // Extended functionality for eg SoundGraph iMON LCD devices
     210    void setSpeakerLEDs(enum LCDSpeakerSet speaker, bool on);
     211    void setAVFormatLEDs(int codec_id, bool on);
     212    void setVideoSrcLEDs(enum LCDVideoSourceSet vsrc, bool on);
     213    void setFunctionLEDs(enum LCDFunctionSet video, bool on);
     214    void setTunerLEDs(enum LCDTunerSet tuner, bool on);
     215    void setVariousLEDs(enum LCDVariousFlags various, bool on);
     216
    134217    // When playing music, switch to this and give artist and track name
    135218    //
    136219    // Note: the use of switchToMusic and setLevels is discouraged, because it
    class MPUBLIC LCD : public QObject, public MythSoc 
    262345    QString lcd_showmusic_items;
    263346    QString lcd_keystring;
    264347
     348    int lcd_ledmask;
     349
    265350    int (*GetLEDMask)(void);
    266351};
    267352
  • mythtv/libs/libmythdb/libmythdb.pro

    SOURCES += mythdbcon.cpp mythdb.cpp oldsettings.cp 
    2222SOURCES += mythobservable.cpp httpcomms.cpp qcodecs.cpp mythdirs.cpp
    2323SOURCES += lcddevice.cpp mythstorage.cpp remotefile.cpp decodeencode.cpp
    2424
     25INCLUDEPATH += ../libavcodec ../libavutil ../
     26
    2527win32:SOURCES += msocketdevice_win.cpp
    2628unix {
    2729    SOURCES += msocketdevice_unix.cpp