[mythtv] commflag debugging

Chris Pinkham cpinkham at bc2va.org
Sun Jan 1 01:42:05 EST 2006


> I would like to look into some commflag debugging.  I see there are 
> already bits in place to display/dump frames, but the support functions 
> for them dont resolve.  I suspect they are defined in commercial_debug.h, 
> which is commented out in ClassicCommDetector.cpp but doesnt exist within 
> svn.  Curious if anyone knows where I might find it.

commercial_debug.h is something I use locally but never committed to
cvs or svn.  Attached is a copy.

It's a quick hack, but accomplished what I wanted when I threw it
together a few years ago. :)

To use, just uncomment the #include line and recompile.  Also, for some
more verbose debugging than the normal "-v commflag", you can define an
environment variable called DEBUGCOMMFLAG and that will cause a lot more
verbose debugging information to be displayed.

-- 
Chris

-------------- next part --------------
//*****************************************************************************
// This code is meant for use in debugging the CommDetect class and shouldn't
// be used in normal compiled Myth versions.

#include <X11/keysym.h>
#include <X11/Xatom.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/extensions/XShm.h>

extern "C" {
#include "../../libs/libavcodec/avcodec.h"
}

Window comm_root;
Window comm_win;
Window comm_curwin;
GC comm_gc;
Screen *comm_screen;
Display *comm_display;
int comm_width = 0;
int comm_height = 0;
int comm_screen_num;
int comm_depth = 24;
unsigned long comm_white, comm_black;
XImage *comm_image = NULL;
char *comm_buf = NULL;
AVPicture image_in, image_out;
ImgReSampleContext *scontext;
int av_format;

#define SHOW_DEBUG_WIN

void comm_debug_init( int width, int height )
{
    comm_display = XOpenDisplay(NULL);

    comm_screen = DefaultScreenOfDisplay(comm_display);
    comm_screen_num = DefaultScreen(comm_display);

    comm_root = DefaultRootWindow(comm_display);

    comm_white = XWhitePixel(comm_display, comm_screen_num);
    comm_black = XBlackPixel(comm_display, comm_screen_num);

    comm_depth = DefaultDepthOfScreen(comm_screen);

    comm_win = XCreateSimpleWindow(comm_display, comm_root, 100,
                                    100, width, height, 0,
                                    comm_white, comm_black );

    XMapRaised(comm_display, comm_win);

    XSync(comm_display, 0);

    comm_gc = XCreateGC(comm_display, comm_win, 0, 0);

    comm_buf = new char[4 * width * height];

    comm_image = XCreateImage(comm_display, DefaultVisual(comm_display, 0),
                              comm_depth, ZPixmap, 0, comm_buf,
                              width, height, 8, 0);

    XSync(comm_display, 0);

    comm_width = width;
    comm_height = height;

    printf( "Commercial Detection debug window created at %dx%dx%d\n",
        comm_width, comm_height, comm_depth );
}

void comm_debug_show( unsigned char *frame )
{
    avpicture_fill(&image_in, (uint8_t *)frame, PIX_FMT_YUV420P,
                   comm_width, comm_height);

    switch (comm_depth)
    {
        case 16: av_format = PIX_FMT_RGB565; break;
        case 24: av_format = PIX_FMT_RGBA32;  break;
        case 32: av_format = PIX_FMT_RGBA32; break;
        default:
            printf("Unable to display debug video window in %d depth.\n",
                   comm_depth);
            exit(0);
    }

    avpicture_fill(&image_out, (uint8_t *)comm_image->data, av_format,
                   comm_width, comm_height);

    img_convert(&image_out, av_format, &image_in, PIX_FMT_YUV420P,
                comm_width, comm_height);

    XPutImage(comm_display, comm_win, comm_gc, comm_image,
                0, 0, 0, 0, comm_width, comm_height );

    XSync(comm_display, 0);
}

void comm_debug_destroy()
{
    XFree(comm_image);
    delete comm_buf;
    XDestroyWindow(comm_display, comm_win);
    XCloseDisplay(comm_display);
}



More information about the mythtv-dev mailing list