Ticket #4653: skip_loopfilter_settings.diff

File skip_loopfilter_settings.diff, 9.7 KB (added by reidjr_at_lineone_net, 12 years ago)

Reduce CPU load h.264 ffmpeg decoding.

  • libs/libmythtv/avformatdecoder.cpp

     
    14461446                vdp.SetInput(QSize(width, height));
    14471447                QString dec = vdp.GetDecoder();
    14481448                uint thread_count = vdp.GetMaxCPUs();
     1449                bool skip_loop_filter = vdp.IsSkipLoopEnabled();
    14491450                VERBOSE(VB_PLAYBACK, QString("Using %1 CPUs for decoding")
    14501451                        .arg(ENABLE_THREADS ? thread_count : 1));
    14511452
     
    14531454                {
    14541455                    avcodec_thread_init(enc, thread_count);
    14551456                    enc->thread_count = thread_count;
     1457                        if  (!skip_loop_filter)
     1458                        enc->skip_loop_filter = AVDISCARD_ALL;
     1459                       
    14561460                }
    14571461
    14581462                bool handled = false;
  • libs/libmythtv/videodisplayprofile.h

     
    8383
    8484    uint GetMaxCPUs(void) const;
    8585
     86    bool IsSkipLoopEnabled(void) const
     87        { return GetPreference("pref_skiploop").toInt(); }
     88   
    8689    QString GetVideoRenderer(void) const
    8790        { return GetPreference("pref_videorenderer"); }
    8891
     
    124127        uint grpid, uint priority,
    125128        QString cmp0, uint width0, uint height0,
    126129        QString cmp1, uint width1, uint height1,
    127         QString decoder, uint max_cpus, QString videorenderer,
     130        QString decoder, uint max_cpus, bool skiploop, QString videorenderer,
    128131        QString osdrenderer, bool osdfade,
    129132        QString deint0, QString deint1, QString filters);
    130133
  • libs/libmythtv/videodisplayprofile.cpp

     
    170170    QString cmp1      = Get("pref_cmp1");
    171171    QString decoder   = Get("pref_decoder");
    172172    uint    max_cpus  = Get("pref_max_cpus").toUInt();
     173    bool    skiploop  = Get("pref_skiploop").toInt();
    173174    QString renderer  = Get("pref_videorenderer");
    174175    QString osd       = Get("pref_osdrenderer");
    175176    QString deint0    = Get("pref_deint0");
     
    177178    QString filter    = Get("pref_filters");
    178179    bool    osdfade   = Get("pref_osdfade").toInt();
    179180
    180     QString str =  QString("cmp(%1%2) dec(%3) cpus(%4) rend(%5) ")
     181    QString str =  QString("cmp(%1%2) dec(%3) cpus(%4) skiploop(%5) rend(%6) ")
    181182        .arg(cmp0).arg(QString(cmp1.isEmpty() ? "" : ",") + cmp1)
    182         .arg(decoder).arg(max_cpus).arg(renderer);
     183        .arg(decoder).arg(max_cpus).arg((skiploop) ? "enabled" : "disabled").arg(renderer);
    183184    str += QString("osd(%1) osdfade(%2) deint(%3,%4) filt(%5)")
    184185        .arg(osd).arg((osdfade) ? "enabled" : "disabled")
    185186        .arg(deint0).arg(deint1).arg(filter);
     
    773774    uint groupid, uint priority,
    774775    QString cmp0, uint width0, uint height0,
    775776    QString cmp1, uint width1, uint height1,
    776     QString decoder, uint max_cpus, QString videorenderer,
     777    QString decoder, uint max_cpus, bool skiploop, QString videorenderer,
    777778    QString osdrenderer, bool osdfade,
    778779    QString deint0, QString deint1, QString filters)
    779780{
     
    819820    queryValue += "pref_max_cpus";
    820821    queryData  += QString::number(max_cpus);
    821822
     823    queryValue += "pref_skiploop";
     824    queryData  += (skiploop) ? "1" : "0";
     825
    822826    queryValue += "pref_videorenderer";
    823827    queryData  += videorenderer;
    824828
     
    900904
    901905    uint groupid = CreateProfileGroup("CPU++", hostname);
    902906    CreateProfile(groupid, 1, ">", 0, 0, "", 0, 0,
    903                   "ffmpeg", 1, "xv-blit", "softblend", true,
     907                  "ffmpeg", 1, true, "xv-blit", "softblend", true,
    904908                  "bobdeint", "linearblend", "");
    905909    CreateProfile(groupid, 2, ">", 0, 0, "", 0, 0,
    906                   "ffmpeg", 1, "quartz-blit", "softblend", true,
     910                  "ffmpeg", 1, true, "quartz-blit", "softblend", true,
    907911                  "linearblend", "linearblend", "");
    908912
    909913    groupid = CreateProfileGroup("CPU+", hostname);
    910914    CreateProfile(groupid, 1, "<=", 720, 576, ">", 0, 0,
    911                   "ffmpeg", 1, "xv-blit", "softblend", true,
     915                  "ffmpeg", 1, true, "xv-blit", "softblend", true,
    912916                  "bobdeint", "linearblend", "");
    913917    CreateProfile(groupid, 2, "<=", 1280, 720, ">", 720, 576,
    914                   "xvmc", 1, "xvmc-blit", "opengl", true,
     918                  "xvmc", 1, true, "xvmc-blit", "opengl", true,
    915919                  "bobdeint", "onefield", "");
    916920    CreateProfile(groupid, 3, "<=", 1280, 720, ">", 720, 576,
    917                   "libmpeg2", 1, "xv-blit", "softblend", true,
     921                  "libmpeg2", 1, true, "xv-blit", "softblend", true,
    918922                  "bobdeint", "onefield", "");
    919923    CreateProfile(groupid, 4, ">", 0, 0, "", 0, 0,
    920                   "xvmc", 1, "xvmc-blit", "ia44blend", false,
     924                  "xvmc", 1, true, "xvmc-blit", "ia44blend", false,
    921925                  "bobdeint", "onefield", "");
    922926    CreateProfile(groupid, 5, ">", 0, 0, "", 0, 0,
    923                   "libmpeg2", 1, "xv-blit", "chromakey", false,
     927                  "libmpeg2", 1, true, "xv-blit", "chromakey", false,
    924928                  "bobdeint", "onefield", "");
    925929
    926930    groupid = CreateProfileGroup("CPU--", hostname);
    927931    CreateProfile(groupid, 1, "<=", 720, 576, ">", 0, 0,
    928                   "ivtv", 1, "ivtv", "ivtv", true,
     932                  "ivtv", 1, true, "ivtv", "ivtv", true,
    929933                  "none", "none", "");
    930934    CreateProfile(groupid, 2, "<=", 720, 576, ">", 0, 0,
    931                   "xvmc", 1, "xvmc-blit", "ia44blend", false,
     935                  "xvmc", 1, true, "xvmc-blit", "ia44blend", false,
    932936                  "bobdeint", "onefield", "");
    933937    CreateProfile(groupid, 3, "<=", 1280, 720, ">", 720, 576,
    934                   "xvmc", 1, "xvmc-blit", "ia44blend", false,
     938                  "xvmc", 1, true, "xvmc-blit", "ia44blend", false,
    935939                  "bobdeint", "onefield", "");
    936940    CreateProfile(groupid, 4, ">", 0, 0, "", 0, 0,
    937                   "xvmc", 1, "xvmc-blit", "ia44blend", false,
     941                  "xvmc", 1, true, "xvmc-blit", "ia44blend", false,
    938942                  "bobdeint", "onefield", "");
    939943    CreateProfile(groupid, 5, ">", 0, 0, "", 0, 0,
    940                   "libmpeg2", 1, "xv-blit", "chromakey", false,
     944                  "libmpeg2", 1, true, "xv-blit", "chromakey", false,
    941945                  "none", "none", "");
    942946}
    943947
  • programs/mythfrontend/globalsettings.cpp

     
    848848    height[1] = new TransSpinBoxSetting(0, 1088, 64, true);
    849849    decoder   = new TransComboBoxSetting();
    850850    max_cpus  = new TransSpinBoxSetting(1, ENABLE_THREADS ? 4 : 1, 1, true);
     851    skiploop  = new TransCheckBoxSetting();
    851852    vidrend   = new TransComboBoxSetting();
    852853    osdrend   = new TransComboBoxSetting();
    853854    osdfade   = new TransCheckBoxSetting();
     
    881882
    882883    decoder->setLabel(tr("Decoder"));
    883884    max_cpus->setLabel(tr("Max CPUs"));
     885    skiploop->setLabel(tr("Loopfilter"));
    884886    vidrend->setLabel(tr("Video Renderer"));
    885887    osdrend->setLabel(tr("OSD Renderer"));
    886888    osdfade->setLabel(tr("OSD Fade"));
     
    896898    filters->setHelpText(
    897899        QObject::tr("Example Custom filter list: 'ivtc,denoise3d'"));
    898900
     901    skiploop->setHelpText(
     902        tr("When unchecked the deblocking loopfilter will be disabled "
     903           "for h264 decoding.") + "\n" +
     904        tr("Disabling will significantly reduce the load on the CPU "
     905           "when watching HD h264."));
     906
    899907    osdfade->setHelpText(
    900908        tr("When unchecked the OSD will not fade away but instead "
    901909           "will disappear abruptly.") + "\n" +
     
    904912
    905913    vid_row->addChild(decoder);
    906914    vid_row->addChild(max_cpus);
     915    vid_row->addChild(skiploop);
    907916    vid_row->addChild(vidrend);
    908917
    909918    osd_row->addChild(osdrend);
     
    955964
    956965    QString pdecoder  = item.Get("pref_decoder");
    957966    QString pmax_cpus = item.Get("pref_max_cpus");
     967    QString pskiploop  = item.Get("pref_skiploop");
    958968    QString prenderer = item.Get("pref_videorenderer");
    959969    QString posd      = item.Get("pref_osdrenderer");
    960970    QString posdfade  = item.Get("pref_osdfade");
     
    982992
    983993    if (!pmax_cpus.isEmpty())
    984994        max_cpus->setValue(pmax_cpus.toUInt());
     995
     996    skiploop->setValue((!pskiploop.isEmpty()) ? (bool) pskiploop.toInt() : true);
     997
    985998    if (!prenderer.isEmpty())
    986999        vidrend->setValue(prenderer);
    9871000    if (!posd.isEmpty())
     
    10151028
    10161029    item.Set("pref_decoder",       decoder->getValue());
    10171030    item.Set("pref_max_cpus",      max_cpus->getValue());
     1031    item.Set("pref_skiploop",       (skiploop->boolValue()) ? "1" : "0");
    10181032    item.Set("pref_videorenderer", vidrend->getValue());
    10191033    item.Set("pref_osdrenderer",   osdrend->getValue());
    10201034    item.Set("pref_osdfade",       (osdfade->boolValue()) ? "1" : "0");
  • programs/mythfrontend/globalsettings.h

     
    8787    TransSpinBoxSetting  *height[2];
    8888    TransComboBoxSetting *decoder;
    8989    TransSpinBoxSetting  *max_cpus;
     90    TransCheckBoxSetting *skiploop;
    9091    TransComboBoxSetting *vidrend;
    9192    TransComboBoxSetting *osdrend;
    9293    TransCheckBoxSetting *osdfade;