x11grab_read_header(AVFormatContext *s1)

{

    struct x11grab *x11grab = s1->priv_data;

    Display *dpy;

    AVStream *st = NULL;

    enum AVPixelFormat input_pixfmt;

    XImage *image;

    int x_off = 0;

    int y_off = 0;

    int screen;

    int use_shm;

    char *dpyname, *offset;

    int ret = 0;

    Colormap color_map;

    XColor color[256];

    int i;



    dpyname = av_strdup(s1->filename);

    if (!dpyname)

        goto out;



    offset = strchr(dpyname, '+');

    if (offset) {

        sscanf(offset, "%d,%d", &x_off, &y_off);

        if (strstr(offset, "nomouse")) {

            av_log(s1, AV_LOG_WARNING,

                   "'nomouse' specification in argument is deprecated: "

                   "use 'draw_mouse' option with value 0 instead\n");

            x11grab->draw_mouse = 0;

        }

        *offset= 0;

    }



    av_log(s1, AV_LOG_INFO, "device: %s -> display: %s x: %d y: %d width: %d height: %d\n",

           s1->filename, dpyname, x_off, y_off, x11grab->width, x11grab->height);



    dpy = XOpenDisplay(dpyname);

    av_freep(&dpyname);

    if(!dpy) {

        av_log(s1, AV_LOG_ERROR, "Could not open X display.\n");

        ret = AVERROR(EIO);

        goto out;

    }



    st = avformat_new_stream(s1, NULL);

    if (!st) {

        ret = AVERROR(ENOMEM);

        goto out;

    }

    avpriv_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */



    screen = DefaultScreen(dpy);



    if (x11grab->follow_mouse) {

        int screen_w, screen_h;

        Window w;



        screen_w = DisplayWidth(dpy, screen);

        screen_h = DisplayHeight(dpy, screen);

        XQueryPointer(dpy, RootWindow(dpy, screen), &w, &w, &x_off, &y_off, &ret, &ret, &ret);

        x_off -= x11grab->width / 2;

        y_off -= x11grab->height / 2;

        x_off = FFMIN(FFMAX(x_off, 0), screen_w - x11grab->width);

        y_off = FFMIN(FFMAX(y_off, 0), screen_h - x11grab->height);

        av_log(s1, AV_LOG_INFO, "followmouse is enabled, resetting grabbing region to x: %d y: %d\n", x_off, y_off);

    }



    use_shm = XShmQueryExtension(dpy);

    av_log(s1, AV_LOG_INFO, "shared memory extension%s found\n", use_shm ? "" : " not");



    if(use_shm) {

        int scr = XDefaultScreen(dpy);

        image = XShmCreateImage(dpy,

                                DefaultVisual(dpy, scr),

                                DefaultDepth(dpy, scr),

                                ZPixmap,

                                NULL,

                                &x11grab->shminfo,

                                x11grab->width, x11grab->height);

        x11grab->shminfo.shmid = shmget(IPC_PRIVATE,

                                        image->bytes_per_line * image->height,

                                        IPC_CREAT|0777);

        if (x11grab->shminfo.shmid == -1) {

            av_log(s1, AV_LOG_ERROR, "Fatal: Can't get shared memory!\n");

            ret = AVERROR(ENOMEM);

            goto out;

        }

        x11grab->shminfo.shmaddr = image->data = shmat(x11grab->shminfo.shmid, 0, 0);

        x11grab->shminfo.readOnly = False;



        if (!XShmAttach(dpy, &x11grab->shminfo)) {

            av_log(s1, AV_LOG_ERROR, "Fatal: Failed to attach shared memory!\n");

            /* needs some better error subroutine :) */

            ret = AVERROR(EIO);

            goto out;

        }

    } else {

        image = XGetImage(dpy, RootWindow(dpy, screen),

                          x_off,y_off,

                          x11grab->width, x11grab->height,

                          AllPlanes, ZPixmap);

    }



    switch (image->bits_per_pixel) {

    case 8:

        av_log (s1, AV_LOG_DEBUG, "8 bit palette\n");

        input_pixfmt = AV_PIX_FMT_PAL8;

        color_map = DefaultColormap(dpy, screen);

        for (i = 0; i < 256; ++i)

            color[i].pixel = i;

        XQueryColors(dpy, color_map, color, 256);

        for (i = 0; i < 256; ++i)

            x11grab->palette[i] = (color[i].red   & 0xFF00) << 8 |

                                  (color[i].green & 0xFF00)      |

                                  (color[i].blue  & 0xFF00) >> 8;

        x11grab->palette_changed = 1;

        break;

    case 16:

        if (       image->red_mask   == 0xf800 &&

                   image->green_mask == 0x07e0 &&

                   image->blue_mask  == 0x001f ) {

            av_log (s1, AV_LOG_DEBUG, "16 bit RGB565\n");

            input_pixfmt = AV_PIX_FMT_RGB565;

        } else if (image->red_mask   == 0x7c00 &&

                   image->green_mask == 0x03e0 &&

                   image->blue_mask  == 0x001f ) {

            av_log(s1, AV_LOG_DEBUG, "16 bit RGB555\n");

            input_pixfmt = AV_PIX_FMT_RGB555;

        } else {

            av_log(s1, AV_LOG_ERROR, "RGB ordering at image depth %i not supported ... aborting\n", image->bits_per_pixel);

            av_log(s1, AV_LOG_ERROR, "color masks: r 0x%.6lx g 0x%.6lx b 0x%.6lx\n", image->red_mask, image->green_mask, image->blue_mask);

            ret = AVERROR_PATCHWELCOME;

            goto out;

        }

        break;

    case 24:

        if (        image->red_mask   == 0xff0000 &&

                    image->green_mask == 0x00ff00 &&

                    image->blue_mask  == 0x0000ff ) {

            input_pixfmt = AV_PIX_FMT_BGR24;

        } else if ( image->red_mask   == 0x0000ff &&

                    image->green_mask == 0x00ff00 &&

                    image->blue_mask  == 0xff0000 ) {

            input_pixfmt = AV_PIX_FMT_RGB24;

        } else {

            av_log(s1, AV_LOG_ERROR,"rgb ordering at image depth %i not supported ... aborting\n", image->bits_per_pixel);

            av_log(s1, AV_LOG_ERROR, "color masks: r 0x%.6lx g 0x%.6lx b 0x%.6lx\n", image->red_mask, image->green_mask, image->blue_mask);

            ret = AVERROR_PATCHWELCOME;

            goto out;

        }

        break;

    case 32:

        input_pixfmt = AV_PIX_FMT_0RGB32;

        break;

    default:

        av_log(s1, AV_LOG_ERROR, "image depth %i not supported ... aborting\n", image->bits_per_pixel);

        ret = AVERROR_PATCHWELCOME;

        goto out;

    }



    x11grab->frame_size = x11grab->width * x11grab->height * image->bits_per_pixel/8;

    x11grab->dpy = dpy;

    x11grab->time_base  = av_inv_q(x11grab->framerate);

    x11grab->time_frame = av_gettime() / av_q2d(x11grab->time_base);

    x11grab->x_off = x_off;

    x11grab->y_off = y_off;

    x11grab->image = image;

    x11grab->use_shm = use_shm;



    st->codec->codec_type = AVMEDIA_TYPE_VIDEO;

    st->codec->codec_id = AV_CODEC_ID_RAWVIDEO;

    st->codec->width  = x11grab->width;

    st->codec->height = x11grab->height;

    st->codec->pix_fmt = input_pixfmt;

    st->codec->time_base = x11grab->time_base;

    st->codec->bit_rate = x11grab->frame_size * 1/av_q2d(x11grab->time_base) * 8;



out:

    av_free(dpyname);

    return ret;

}

x11grab_read_header(AVFormatContext *s1)

{

    struct x11grab *x11grab = s1->priv_data;

    Display *dpy;

    AVStream *st = NULL;

    enum AVPixelFormat input_pixfmt;

    XImage *image;

    int x_off = 0;

    int y_off = 0;

    int screen;

    int use_shm;

    char *dpyname, *offset;

    int ret = 0;

    Colormap color_map;

    XColor color[256];

    int i;



    dpyname = av_strdup(s1->filename);

    if (!dpyname)

        goto out;



    offset = strchr(dpyname, '+');

    if (offset) {

        sscanf(offset, "%d,%d", &x_off, &y_off);

        if (strstr(offset, "nomouse")) {

            av_log(s1, AV_LOG_WARNING,

                   "'nomouse' specification in argument is deprecated: "

                   "use 'draw_mouse' option with value 0 instead\n");

            x11grab->draw_mouse = 0;

        }

        *offset= 0;

    }



    av_log(s1, AV_LOG_INFO, "device: %s -> display: %s x: %d y: %d width: %d height: %d\n",

           s1->filename, dpyname, x_off, y_off, x11grab->width, x11grab->height);



    dpy = XOpenDisplay(dpyname);

    av_freep(&dpyname);

    if(!dpy) {

        av_log(s1, AV_LOG_ERROR, "Could not open X display.\n");

        ret = AVERROR(EIO);

        goto out;

    }



    st = avformat_new_stream(s1, NULL);

    if (!st) {

        ret = AVERROR(ENOMEM);

        goto out;

    }

    avpriv_set_pts_info(st, 64, 1, 1000000); 



    screen = DefaultScreen(dpy);



    if (x11grab->follow_mouse) {

        int screen_w, screen_h;

        Window w;



        screen_w = DisplayWidth(dpy, screen);

        screen_h = DisplayHeight(dpy, screen);

        XQueryPointer(dpy, RootWindow(dpy, screen), &w, &w, &x_off, &y_off, &ret, &ret, &ret);

        x_off -= x11grab->width / 2;

        y_off -= x11grab->height / 2;

        x_off = FFMIN(FFMAX(x_off, 0), screen_w - x11grab->width);

        y_off = FFMIN(FFMAX(y_off, 0), screen_h - x11grab->height);

        av_log(s1, AV_LOG_INFO, "followmouse is enabled, resetting grabbing region to x: %d y: %d\n", x_off, y_off);

    }



    use_shm = XShmQueryExtension(dpy);

    av_log(s1, AV_LOG_INFO, "shared memory extension%s found\n", use_shm ? "" : " not");



    if(use_shm) {

        int scr = XDefaultScreen(dpy);

        image = XShmCreateImage(dpy,

                                DefaultVisual(dpy, scr),

                                DefaultDepth(dpy, scr),

                                ZPixmap,

                                NULL,

                                &x11grab->shminfo,

                                x11grab->width, x11grab->height);

        x11grab->shminfo.shmid = shmget(IPC_PRIVATE,

                                        image->bytes_per_line * image->height,

                                        IPC_CREAT|0777);

        if (x11grab->shminfo.shmid == -1) {

            av_log(s1, AV_LOG_ERROR, "Fatal: Can't get shared memory!\n");

            ret = AVERROR(ENOMEM);

            goto out;

        }

        x11grab->shminfo.shmaddr = image->data = shmat(x11grab->shminfo.shmid, 0, 0);

        x11grab->shminfo.readOnly = False;



        if (!XShmAttach(dpy, &x11grab->shminfo)) {

            av_log(s1, AV_LOG_ERROR, "Fatal: Failed to attach shared memory!\n");

            

            ret = AVERROR(EIO);

            goto out;

        }

    } else {

        image = XGetImage(dpy, RootWindow(dpy, screen),

                          x_off,y_off,

                          x11grab->width, x11grab->height,

                          AllPlanes, ZPixmap);

    }



    switch (image->bits_per_pixel) {

    case 8:

        av_log (s1, AV_LOG_DEBUG, "8 bit palette\n");

        input_pixfmt = AV_PIX_FMT_PAL8;

        color_map = DefaultColormap(dpy, screen);

        for (i = 0; i < 256; ++i)

            color[i].pixel = i;

        XQueryColors(dpy, color_map, color, 256);

        for (i = 0; i < 256; ++i)

            x11grab->palette[i] = (color[i].red   & 0xFF00) << 8 |

                                  (color[i].green & 0xFF00)      |

                                  (color[i].blue  & 0xFF00) >> 8;

        x11grab->palette_changed = 1;

        break;

    case 16:

        if (       image->red_mask   == 0xf800 &&

                   image->green_mask == 0x07e0 &&

                   image->blue_mask  == 0x001f ) {

            av_log (s1, AV_LOG_DEBUG, "16 bit RGB565\n");

            input_pixfmt = AV_PIX_FMT_RGB565;

        } else if (image->red_mask   == 0x7c00 &&

                   image->green_mask == 0x03e0 &&

                   image->blue_mask  == 0x001f ) {

            av_log(s1, AV_LOG_DEBUG, "16 bit RGB555\n");

            input_pixfmt = AV_PIX_FMT_RGB555;

        } else {

            av_log(s1, AV_LOG_ERROR, "RGB ordering at image depth %i not supported ... aborting\n", image->bits_per_pixel);

            av_log(s1, AV_LOG_ERROR, "color masks: r 0x%.6lx g 0x%.6lx b 0x%.6lx\n", image->red_mask, image->green_mask, image->blue_mask);

            ret = AVERROR_PATCHWELCOME;

            goto out;

        }

        break;

    case 24:

        if (        image->red_mask   == 0xff0000 &&

                    image->green_mask == 0x00ff00 &&

                    image->blue_mask  == 0x0000ff ) {

            input_pixfmt = AV_PIX_FMT_BGR24;

        } else if ( image->red_mask   == 0x0000ff &&

                    image->green_mask == 0x00ff00 &&

                    image->blue_mask  == 0xff0000 ) {

            input_pixfmt = AV_PIX_FMT_RGB24;

        } else {

            av_log(s1, AV_LOG_ERROR,"rgb ordering at image depth %i not supported ... aborting\n", image->bits_per_pixel);

            av_log(s1, AV_LOG_ERROR, "color masks: r 0x%.6lx g 0x%.6lx b 0x%.6lx\n", image->red_mask, image->green_mask, image->blue_mask);

            ret = AVERROR_PATCHWELCOME;

            goto out;

        }

        break;

    case 32:

        input_pixfmt = AV_PIX_FMT_0RGB32;

        break;

    default:

        av_log(s1, AV_LOG_ERROR, "image depth %i not supported ... aborting\n", image->bits_per_pixel);

        ret = AVERROR_PATCHWELCOME;

        goto out;

    }



    x11grab->frame_size = x11grab->width * x11grab->height * image->bits_per_pixel/8;

    x11grab->dpy = dpy;

    x11grab->time_base  = av_inv_q(x11grab->framerate);

    x11grab->time_frame = av_gettime() / av_q2d(x11grab->time_base);

    x11grab->x_off = x_off;

    x11grab->y_off = y_off;

    x11grab->image = image;

    x11grab->use_shm = use_shm;



    st->codec->codec_type = AVMEDIA_TYPE_VIDEO;

    st->codec->codec_id = AV_CODEC_ID_RAWVIDEO;

    st->codec->width  = x11grab->width;

    st->codec->height = x11grab->height;

    st->codec->pix_fmt = input_pixfmt;

    st->codec->time_base = x11grab->time_base;

    st->codec->bit_rate = x11grab->frame_size * 1/av_q2d(x11grab->time_base) * 8;



out:

    av_free(dpyname);

    return ret;

}

FUNC_0(AVFormatContext *VAR_0)

{

    struct VAR_1 *VAR_1 = VAR_0->priv_data;

    Display *dpy;

    AVStream *st = NULL;

    enum AVPixelFormat VAR_2;

    XImage *image;

    int VAR_3 = 0;

    int VAR_4 = 0;

    int VAR_5;

    int VAR_6;

    char *VAR_7, *VAR_8;

    int VAR_9 = 0;

    Colormap color_map;

    XColor color[256];

    int VAR_10;



    VAR_7 = av_strdup(VAR_0->filename);

    if (!VAR_7)

        goto out;



    VAR_8 = strchr(VAR_7, '+');

    if (VAR_8) {

        sscanf(VAR_8, "%d,%d", &VAR_3, &VAR_4);

        if (strstr(VAR_8, "nomouse")) {

            av_log(VAR_0, AV_LOG_WARNING,

                   "'nomouse' specification in argument is deprecated: "

                   "use 'draw_mouse' option with value 0 instead\n");

            VAR_1->draw_mouse = 0;

        }

        *VAR_8= 0;

    }



    av_log(VAR_0, AV_LOG_INFO, "device: %s -> display: %s x: %d y: %d width: %d height: %d\n",

           VAR_0->filename, VAR_7, VAR_3, VAR_4, VAR_1->width, VAR_1->height);



    dpy = XOpenDisplay(VAR_7);

    av_freep(&VAR_7);

    if(!dpy) {

        av_log(VAR_0, AV_LOG_ERROR, "Could not open X display.\n");

        VAR_9 = AVERROR(EIO);

        goto out;

    }



    st = avformat_new_stream(VAR_0, NULL);

    if (!st) {

        VAR_9 = AVERROR(ENOMEM);

        goto out;

    }

    avpriv_set_pts_info(st, 64, 1, 1000000); 



    VAR_5 = DefaultScreen(dpy);



    if (VAR_1->follow_mouse) {

        int VAR_11, VAR_12;

        Window w;



        VAR_11 = DisplayWidth(dpy, VAR_5);

        VAR_12 = DisplayHeight(dpy, VAR_5);

        XQueryPointer(dpy, RootWindow(dpy, VAR_5), &w, &w, &VAR_3, &VAR_4, &VAR_9, &VAR_9, &VAR_9);

        VAR_3 -= VAR_1->width / 2;

        VAR_4 -= VAR_1->height / 2;

        VAR_3 = FFMIN(FFMAX(VAR_3, 0), VAR_11 - VAR_1->width);

        VAR_4 = FFMIN(FFMAX(VAR_4, 0), VAR_12 - VAR_1->height);

        av_log(VAR_0, AV_LOG_INFO, "followmouse is enabled, resetting grabbing region to x: %d y: %d\n", VAR_3, VAR_4);

    }



    VAR_6 = XShmQueryExtension(dpy);

    av_log(VAR_0, AV_LOG_INFO, "shared memory extension%s found\n", VAR_6 ? "" : " not");



    if(VAR_6) {

        int VAR_13 = XDefaultScreen(dpy);

        image = XShmCreateImage(dpy,

                                DefaultVisual(dpy, VAR_13),

                                DefaultDepth(dpy, VAR_13),

                                ZPixmap,

                                NULL,

                                &VAR_1->shminfo,

                                VAR_1->width, VAR_1->height);

        VAR_1->shminfo.shmid = shmget(IPC_PRIVATE,

                                        image->bytes_per_line * image->height,

                                        IPC_CREAT|0777);

        if (VAR_1->shminfo.shmid == -1) {

            av_log(VAR_0, AV_LOG_ERROR, "Fatal: Can't get shared memory!\n");

            VAR_9 = AVERROR(ENOMEM);

            goto out;

        }

        VAR_1->shminfo.shmaddr = image->data = shmat(VAR_1->shminfo.shmid, 0, 0);

        VAR_1->shminfo.readOnly = False;



        if (!XShmAttach(dpy, &VAR_1->shminfo)) {

            av_log(VAR_0, AV_LOG_ERROR, "Fatal: Failed to attach shared memory!\n");

            

            VAR_9 = AVERROR(EIO);

            goto out;

        }

    } else {

        image = XGetImage(dpy, RootWindow(dpy, VAR_5),

                          VAR_3,VAR_4,

                          VAR_1->width, VAR_1->height,

                          AllPlanes, ZPixmap);

    }



    switch (image->bits_per_pixel) {

    case 8:

        av_log (VAR_0, AV_LOG_DEBUG, "8 bit palette\n");

        VAR_2 = AV_PIX_FMT_PAL8;

        color_map = DefaultColormap(dpy, VAR_5);

        for (VAR_10 = 0; VAR_10 < 256; ++VAR_10)

            color[VAR_10].pixel = VAR_10;

        XQueryColors(dpy, color_map, color, 256);

        for (VAR_10 = 0; VAR_10 < 256; ++VAR_10)

            VAR_1->palette[VAR_10] = (color[VAR_10].red   & 0xFF00) << 8 |

                                  (color[VAR_10].green & 0xFF00)      |

                                  (color[VAR_10].blue  & 0xFF00) >> 8;

        VAR_1->palette_changed = 1;

        break;

    case 16:

        if (       image->red_mask   == 0xf800 &&

                   image->green_mask == 0x07e0 &&

                   image->blue_mask  == 0x001f ) {

            av_log (VAR_0, AV_LOG_DEBUG, "16 bit RGB565\n");

            VAR_2 = AV_PIX_FMT_RGB565;

        } else if (image->red_mask   == 0x7c00 &&

                   image->green_mask == 0x03e0 &&

                   image->blue_mask  == 0x001f ) {

            av_log(VAR_0, AV_LOG_DEBUG, "16 bit RGB555\n");

            VAR_2 = AV_PIX_FMT_RGB555;

        } else {

            av_log(VAR_0, AV_LOG_ERROR, "RGB ordering at image depth %VAR_10 not supported ... aborting\n", image->bits_per_pixel);

            av_log(VAR_0, AV_LOG_ERROR, "color masks: r 0x%.6lx g 0x%.6lx b 0x%.6lx\n", image->red_mask, image->green_mask, image->blue_mask);

            VAR_9 = AVERROR_PATCHWELCOME;

            goto out;

        }

        break;

    case 24:

        if (        image->red_mask   == 0xff0000 &&

                    image->green_mask == 0x00ff00 &&

                    image->blue_mask  == 0x0000ff ) {

            VAR_2 = AV_PIX_FMT_BGR24;

        } else if ( image->red_mask   == 0x0000ff &&

                    image->green_mask == 0x00ff00 &&

                    image->blue_mask  == 0xff0000 ) {

            VAR_2 = AV_PIX_FMT_RGB24;

        } else {

            av_log(VAR_0, AV_LOG_ERROR,"rgb ordering at image depth %VAR_10 not supported ... aborting\n", image->bits_per_pixel);

            av_log(VAR_0, AV_LOG_ERROR, "color masks: r 0x%.6lx g 0x%.6lx b 0x%.6lx\n", image->red_mask, image->green_mask, image->blue_mask);

            VAR_9 = AVERROR_PATCHWELCOME;

            goto out;

        }

        break;

    case 32:

        VAR_2 = AV_PIX_FMT_0RGB32;

        break;

    default:

        av_log(VAR_0, AV_LOG_ERROR, "image depth %VAR_10 not supported ... aborting\n", image->bits_per_pixel);

        VAR_9 = AVERROR_PATCHWELCOME;

        goto out;

    }



    VAR_1->frame_size = VAR_1->width * VAR_1->height * image->bits_per_pixel/8;

    VAR_1->dpy = dpy;

    VAR_1->time_base  = av_inv_q(VAR_1->framerate);

    VAR_1->time_frame = av_gettime() / av_q2d(VAR_1->time_base);

    VAR_1->VAR_3 = VAR_3;

    VAR_1->VAR_4 = VAR_4;

    VAR_1->image = image;

    VAR_1->VAR_6 = VAR_6;



    st->codec->codec_type = AVMEDIA_TYPE_VIDEO;

    st->codec->codec_id = AV_CODEC_ID_RAWVIDEO;

    st->codec->width  = VAR_1->width;

    st->codec->height = VAR_1->height;

    st->codec->pix_fmt = VAR_2;

    st->codec->time_base = VAR_1->time_base;

    st->codec->bit_rate = VAR_1->frame_size * 1/av_q2d(VAR_1->time_base) * 8;



out:

    av_free(VAR_7);

    return VAR_9;

}

FUNC_0(AVFormatContext *VAR_0)
{ struct VAR_1 *VAR_1 = VAR_0->priv_data; Display *dpy; AVStream *st = NULL; enum AVPixelFormat VAR_2; XImage *image; int VAR_3 = 0; int VAR_4 = 0; int VAR_5; int VAR_6; char *VAR_7, *VAR_8; int VAR_9 = 0; Colormap color_map; XColor color[256]; int VAR_10; VAR_7 = av_strdup(VAR_0->filename); if (!VAR_7)
goto out; VAR_8 = strchr(VAR_7, '+'); if (VAR_8) { sscanf(VAR_8, "%d,%d", &VAR_3, &VAR_4); if (strstr(VAR_8, "nomouse")) { av_log(VAR_0, AV_LOG_WARNING,
"'nomouse' specification in argument is deprecated: "
"use 'draw_mouse' option with value 0 instead\n"); VAR_1->draw_mouse = 0; } *VAR_8= 0; } av_log(VAR_0, AV_LOG_INFO, "device: %s -> display: %s x: %d y: %d width: %d height: %d\n",
VAR_0->filename, VAR_7, VAR_3, VAR_4, VAR_1->width, VAR_1->height); dpy = XOpenDisplay(VAR_7); av_freep(&VAR_7); if(!dpy) { av_log(VAR_0, AV_LOG_ERROR, "Could not open X display.\n"); VAR_9 = AVERROR(EIO); goto out; } st = avformat_new_stream(VAR_0, NULL); if (!st) { VAR_9 = AVERROR(ENOMEM); goto out; } avpriv_set_pts_info(st, 64, 1, 1000000); VAR_5 = DefaultScreen(dpy); if (VAR_1->follow_mouse) { int VAR_11, VAR_12; Window w; VAR_11 = DisplayWidth(dpy, VAR_5); VAR_12 = DisplayHeight(dpy, VAR_5); XQueryPointer(dpy, RootWindow(dpy, VAR_5), &w, &w, &VAR_3, &VAR_4, &VAR_9, &VAR_9, &VAR_9); VAR_3 -= VAR_1->width / 2; VAR_4 -= VAR_1->height / 2; VAR_3 = FFMIN(FFMAX(VAR_3, 0), VAR_11 - VAR_1->width); VAR_4 = FFMIN(FFMAX(VAR_4, 0), VAR_12 - VAR_1->height); av_log(VAR_0, AV_LOG_INFO, "followmouse is enabled, resetting grabbing region to x: %d y: %d\n", VAR_3, VAR_4); } VAR_6 = XShmQueryExtension(dpy); av_log(VAR_0, AV_LOG_INFO, "shared memory extension%s found\n", VAR_6 ? "" : " not"); if(VAR_6) { int VAR_13 = XDefaultScreen(dpy); image = XShmCreateImage(dpy,
DefaultVisual(dpy, VAR_13),
DefaultDepth(dpy, VAR_13),
ZPixmap,
NULL,
&VAR_1->shminfo,
VAR_1->width, VAR_1->height); VAR_1->shminfo.shmid = shmget(IPC_PRIVATE,
image->bytes_per_line * image->height,
IPC_CREAT|0777); if (VAR_1->shminfo.shmid == -1) { av_log(VAR_0, AV_LOG_ERROR, "Fatal: Can't get shared memory!\n"); VAR_9 = AVERROR(ENOMEM); goto out; } VAR_1->shminfo.shmaddr = image->data = shmat(VAR_1->shminfo.shmid, 0, 0); VAR_1->shminfo.readOnly = False; if (!XShmAttach(dpy, &VAR_1->shminfo)) { av_log(VAR_0, AV_LOG_ERROR, "Fatal: Failed to attach shared memory!\n"); VAR_9 = AVERROR(EIO); goto out; } } else { image = XGetImage(dpy, RootWindow(dpy, VAR_5),
VAR_3,VAR_4,
VAR_1->width, VAR_1->height,
AllPlanes, ZPixmap); } switch (image->bits_per_pixel) { case 8:
av_log (VAR_0, AV_LOG_DEBUG, "8 bit palette\n"); VAR_2 = AV_PIX_FMT_PAL8; color_map = DefaultColormap(dpy, VAR_5); for (VAR_10 = 0; VAR_10 < 256; ++VAR_10) color[VAR_10].pixel = VAR_10; XQueryColors(dpy, color_map, color, 256); for (VAR_10 = 0; VAR_10 < 256; ++VAR_10) VAR_1->palette[VAR_10] = (color[VAR_10].red   & 0xFF00) << 8 |
(color[VAR_10].green & 0xFF00)      |
(color[VAR_10].blue  & 0xFF00) >> 8; VAR_1->palette_changed = 1; break; case 16:
if (       image->red_mask   == 0xf800 &&
image->green_mask == 0x07e0 &&
image->blue_mask  == 0x001f ) { av_log (VAR_0, AV_LOG_DEBUG, "16 bit RGB565\n"); VAR_2 = AV_PIX_FMT_RGB565; } else if (image->red_mask   == 0x7c00 && image->green_mask == 0x03e0 &&
image->blue_mask  == 0x001f ) { av_log(VAR_0, AV_LOG_DEBUG, "16 bit RGB555\n"); VAR_2 = AV_PIX_FMT_RGB555; } else { av_log(VAR_0, AV_LOG_ERROR, "RGB ordering at image depth %VAR_10 not supported ... aborting\n", image->bits_per_pixel); av_log(VAR_0, AV_LOG_ERROR, "color masks: r 0x%.6lx g 0x%.6lx b 0x%.6lx\n", image->red_mask, image->green_mask, image->blue_mask); VAR_9 = AVERROR_PATCHWELCOME; goto out; } break; case 24:
if (        image->red_mask   == 0xff0000 &&
image->green_mask == 0x00ff00 &&
image->blue_mask  == 0x0000ff ) { VAR_2 = AV_PIX_FMT_BGR24; } else if ( image->red_mask   == 0x0000ff && image->green_mask == 0x00ff00 &&
image->blue_mask  == 0xff0000 ) { VAR_2 = AV_PIX_FMT_RGB24; } else { av_log(VAR_0, AV_LOG_ERROR,"rgb ordering at image depth %VAR_10 not supported ... aborting\n", image->bits_per_pixel); av_log(VAR_0, AV_LOG_ERROR, "color masks: r 0x%.6lx g 0x%.6lx b 0x%.6lx\n", image->red_mask, image->green_mask, image->blue_mask); VAR_9 = AVERROR_PATCHWELCOME; goto out; } break; case 32:
VAR_2 = AV_PIX_FMT_0RGB32; break; default:
av_log(VAR_0, AV_LOG_ERROR, "image depth %VAR_10 not supported ... aborting\n", image->bits_per_pixel); VAR_9 = AVERROR_PATCHWELCOME; goto out; } VAR_1->frame_size = VAR_1->width * VAR_1->height * image->bits_per_pixel/8; VAR_1->dpy = dpy; VAR_1->time_base  = av_inv_q(VAR_1->framerate); VAR_1->time_frame = av_gettime() / av_q2d(VAR_1->time_base); VAR_1->VAR_3 = VAR_3; VAR_1->VAR_4 = VAR_4; VAR_1->image = image; VAR_1->VAR_6 = VAR_6; st->codec->codec_type = AVMEDIA_TYPE_VIDEO; st->codec->codec_id = AV_CODEC_ID_RAWVIDEO; st->codec->width  = VAR_1->width; st->codec->height = VAR_1->height; st->codec->pix_fmt = VAR_2; st->codec->time_base = VAR_1->time_base; st->codec->bit_rate = VAR_1->frame_size * 1/av_q2d(VAR_1->time_base) * 8; out:
av_free(VAR_7); return VAR_9; }