Ticket #1122: 1122-fix-v3.patch

File 1122-fix-v3.patch, 7.6 KB (added by danielk, 15 years ago)

adds some debugging to v2 of the patch

  • libs/libmythtv/NuppelVideoPlayer.cpp

     
    367367
    368368bool NuppelVideoPlayer::InitVideo(void)
    369369{
     370    VERBOSE(VB_RECORD, "InitVideo()");
    370371    InitFilters();
    371372    if (using_null_videoout)
    372373    {
     
    447448
    448449void NuppelVideoPlayer::ReinitVideo(void)
    449450{
     451    VERBOSE(VB_RECORD, "ReinitVideo()");
    450452    InitFilters();
    451453
    452454    vidExitLock.lock();
  • libs/libmythtv/videoout_xv.cpp

     
    2727#include "XvMCSurfaceTypes.h"
    2828#include "util-x11.h"
    2929#include "config.h"
     30#include "exitcodes.h"
    3031
    3132#define LOC QString("VideoOutputXv: ")
    3233#define LOC_ERR QString("VideoOutputXv Error: ")
     
    4849#define round(x) ((int) ((x) + 0.5))
    4950#endif
    5051
     52class port_info { public: Display *disp; int port; };
     53static QMap<int,port_info> open_xv_ports;
    5154
     55static void close_all_xv_ports_signal_handler(int sig)
     56{
     57    cerr<<"Signal: "<<sys_siglist[sig]<<endl;
     58    QMap<int,port_info>::iterator it;
     59    for (it = open_xv_ports.begin(); it != open_xv_ports.end(); ++it)
     60    {
     61        cerr<<"Ungrabbing XVideo port: "<<(*it).port<<endl;
     62        XvUngrabPort((*it).disp, (*it).port, CurrentTime);
     63    }
     64    exit(GENERIC_EXIT_NOT_OK);
     65}
     66static void add_open_xv_port(Display *disp, int port)
     67{
     68    if (port >= 0)
     69    {
     70        open_xv_ports[port].disp = disp;
     71        open_xv_ports[port].port = port;
     72        //signal(SIGSTOP, close_all_xv_ports_signal_handler);
     73        //signal(SIGABRT, close_all_xv_ports_signal_handler);
     74        signal(SIGINT,  close_all_xv_ports_signal_handler);
     75    }
     76}
     77static void del_open_xv_port(int port)
     78{
     79    if (port >= 0)
     80    {
     81        open_xv_ports.remove(port);
     82
     83        if (!open_xv_ports.count())
     84        {
     85            //signal(SIGSTOP, SIG_DFL);
     86            //signal(SIGABRT, SIG_DFL);
     87            signal(SIGHUP, SIG_DFL);
     88        }
     89    }
     90}
     91static bool has_open_xv_port(int port)
     92{
     93    return open_xv_ports.find(port) != open_xv_ports.end();
     94}
     95static uint cnt_open_xv_port(void)
     96{
     97    return open_xv_ports.count();
     98}
     99
    52100//#define DEBUG_PAUSE /* enable to debug XvMC pause frame */
    53101
    54102#ifdef USING_XVMC
     
    245293    // ungrab port...
    246294    if (xv_port >= 0)
    247295    {
    248         X11S(XvUngrabPort(XJ_disp, xv_port, CurrentTime));
     296        VERBOSE(VB_PLAYBACK, LOC + "Closing XVideo port " << xv_port);
     297        X11L;
     298        XvUngrabPort(XJ_disp, xv_port, CurrentTime);
     299        del_open_xv_port(xv_port);
     300        X11U;
    249301        xv_port = -1;
    250302    }
    251303
     
    631683                if (!surf.size())
    632684                    continue;
    633685
    634                 X11S(ret = XvGrabPort(disp, p, CurrentTime));
     686                X11L;
     687                ret = XvGrabPort(disp, p, CurrentTime);
     688                if (Success == ret)
     689                {
     690                    VERBOSE(VB_PLAYBACK, "Grabbed xv port "<<p);
     691                    port = p;
     692                    add_open_xv_port(disp, p);
     693                }
     694                X11U;
    635695                if (Success != ret)
     696                {
     697                    VERBOSE(VB_PLAYBACK, "Failed to grab xv port "<<p);
    636698                    continue;
     699                }
    637700               
    638701                if (xvmc_surf_info)
    639702                    surf.set(surfNum, xvmc_surf_info);
    640                 port = p;
    641703#endif // USING_XVMC
    642704            }
    643705            else
    644706            {
    645707                for (p = firstPort; (p <= lastPort) && (port == -1); ++p)
    646708                {
    647                     X11S(ret = XvGrabPort(disp, p, CurrentTime));
     709                    X11L;
     710                    ret = XvGrabPort(disp, p, CurrentTime);
    648711                    if (Success == ret)
     712                    {
     713                        VERBOSE(VB_PLAYBACK, "Grabbed xv port "<<p);
    649714                        port = p;
     715                        add_open_xv_port(disp, p);
     716                    }
     717                    X11U;
    650718                }
    651719            }
    652720        }
     
    785853 */
    786854bool VideoOutputXv::InitXvMC(MythCodecID mcodecid)
    787855{
     856    VERBOSE(VB_IMPORTANT, "InitXvMC() -- begin");
    788857    (void)mcodecid;
    789858#ifdef USING_XVMC
    790859    xv_port = GrabSuitableXvPort(XJ_disp, XJ_root, mcodecid,
     
    826895            delete xvmc_osd_available[i];
    827896        xvmc_osd_available.clear();
    828897        xvmc_osd_lock.unlock();
    829         X11S(XvUngrabPort(XJ_disp, xv_port, CurrentTime));
     898        VERBOSE(VB_PLAYBACK, LOC + "Closing XVideo port " << xv_port);
     899        X11L;
     900        XvUngrabPort(XJ_disp, xv_port, CurrentTime);
     901        del_open_xv_port(xv_port);
     902        X11U;
    830903        xv_port = -1;
    831904    }
    832905
     906    VERBOSE(VB_IMPORTANT, "InitXvMC() -- end ok("<<ok<<")");
    833907    return ok;
    834908#else // USING_XVMC
    835909    return false;
     
    846920 */
    847921bool VideoOutputXv::InitXVideo()
    848922{
     923    VERBOSE(VB_IMPORTANT, "InitXVideo() -- begin");
    849924    xv_port = GrabSuitableXvPort(XJ_disp, XJ_root, kCodec_MPEG2,
    850925                                 XJ_width, XJ_height);
    851926    if (xv_port == -1)
     
    903978    {
    904979        VERBOSE(VB_IMPORTANT, LOC_ERR +
    905980                "Couldn't find the proper XVideo image format.");
    906         X11S(XvUngrabPort(XJ_disp, xv_port, CurrentTime));
     981        VERBOSE(VB_PLAYBACK, LOC + "Closing XVideo port " << xv_port);
     982        X11L;
     983        XvUngrabPort(XJ_disp, xv_port, CurrentTime);
     984        del_open_xv_port(xv_port);
     985        X11U;
    907986        xv_port = -1;
    908987    }
    909988
     
    916995    {
    917996        VERBOSE(VB_IMPORTANT, LOC_ERR + "Failed to create XVideo Buffers.");
    918997        DeleteBuffers(XVideo, false);
    919         X11S(XvUngrabPort(XJ_disp, xv_port, CurrentTime));
     998        VERBOSE(VB_PLAYBACK, LOC + "Closing XVideo port " << xv_port);
     999        X11L;
     1000        XvUngrabPort(XJ_disp, xv_port, CurrentTime);
     1001        del_open_xv_port(xv_port);
     1002        X11U;
    9201003        xv_port = -1;
    9211004        ok = false;
    9221005    }
    9231006    else
    9241007        video_output_subtype = XVideo;
    9251008   
     1009    VERBOSE(VB_IMPORTANT, "InitXVideo() -- end ok("<<ok<<")");
    9261010    return ok;
    9271011}
    9281012
     
    10031087    (void)stream_type, (void)xvmc_chroma, (void)test_surface;
    10041088
    10051089#ifdef USING_XVMC
     1090    VERBOSE(VB_IMPORTANT, "GetBestSupportedCodec() -- begin");
    10061091    Display *disp;
    10071092    X11S(disp = XOpenDisplay(NULL));
    10081093
     
    10561141                                  width, height);
    10571142            ok = NULL != ctx;
    10581143            DeleteXvMCContext(disp, ctx);
    1059             X11S(XvUngrabPort(disp, port, CurrentTime));
     1144            VERBOSE(VB_PLAYBACK, LOC + "Closing XVideo port " << port);
     1145            X11L;
     1146            XvUngrabPort(disp, port, CurrentTime);
     1147            del_open_xv_port(port);
     1148            X11U;
    10601149        }
    10611150    }
    10621151    X11S(XCloseDisplay(disp));
     1152    X11S(ok |= cnt_open_xv_port() > 0); // also ok if we already opened port..
    10631153
    10641154    if (!ok)
    10651155    {
     
    10781168        ret = (MythCodecID)(kCodec_MPEG1 + (stream_type-1));
    10791169    }
    10801170
     1171    VERBOSE(VB_IMPORTANT, "GetBestSupportedCodec() -- end");
    10811172    return ret;
    10821173#else // if !USING_XVMC
    10831174    return (MythCodecID)(kCodec_MPEG1 + (stream_type-1));
     
    11821273        DeleteBuffers(VideoOutputSubType(), true);
    11831274        if (xv_port >= 0)
    11841275        {
    1185             X11S(XvUngrabPort(XJ_disp, xv_port, CurrentTime));
     1276            VERBOSE(VB_PLAYBACK, LOC + "Closing XVideo port " << xv_port);
     1277            X11L;
     1278            XvUngrabPort(XJ_disp, xv_port, CurrentTime);
     1279            del_open_xv_port(xv_port);
     1280            X11U;
    11861281            xv_port = -1;
    11871282        }
    11881283#endif // USING_XVMC