Changeset e0ff9af8b32e6d53648344c457e8b30d55052a7f

Show
Ignore:
Timestamp:
16/09/07 19:40:33 (1 year ago)
Author:
Rémi Denis-Courmont <rem@videolan.org>
git-committer:
Rémi Denis-Courmont <rem@videolan.org> 1189964433 +0000
git-parent:

[965b82cc765e3ad499d6c5e752cf9fa483a4875f]

git-author:
Rémi Denis-Courmont <rem@videolan.org> 1189964433 +0000
Message:

Really fix XShm detection with remote X11 (cf [19346]):
Get correct major opcode for MIT-SHM instead of an hard-coded one that
works with some X servers (not including mine).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • modules/video_output/x11/xcommon.c

    r9c76726 re0ff9af  
    117117static IMAGE_TYPE *CreateShmImage ( vout_thread_t *, 
    118118                                    Display *, EXTRA_ARGS_SHM, int, int ); 
    119 static vlc_bool_t b_shm = VLC_TRUE
     119static int i_shm_major = 0
    120120#endif 
    121121 
     
    10661066 
    10671067#ifdef HAVE_SYS_SHM_H 
    1068     if( p_vout->p_sys->b_shm
     1068    if( p_vout->p_sys->i_shm_opcode
    10691069    { 
    10701070        /* Display rendered image using shared memory extension */ 
     
    18861886 
    18871887#ifdef HAVE_SYS_SHM_H 
    1888     if( p_vout->p_sys->b_shm
     1888    if( p_vout->p_sys->i_shm_opcode
    18891889    { 
    18901890        /* Create image using XShm extension */ 
     
    19021902    } 
    19031903 
    1904     if( !p_vout->p_sys->b_shm || !p_pic->p_sys->p_image ) 
     1904    if( !p_vout->p_sys->i_shm_opcode || !p_pic->p_sys->p_image ) 
    19051905#endif /* HAVE_SYS_SHM_H */ 
    19061906    { 
     
    19201920 
    19211921#ifdef HAVE_SYS_SHM_H 
    1922         if( p_pic->p_sys->p_image && p_vout->p_sys->b_shm
     1922        if( p_pic->p_sys->p_image && p_vout->p_sys->i_shm_opcode
    19231923        { 
    19241924            msg_Warn( p_vout, "couldn't create SHM image, disabling SHM" ); 
    1925             p_vout->p_sys->b_shm = VLC_FALSE
     1925            p_vout->p_sys->i_shm_opcode = 0
    19261926        } 
    19271927#endif /* HAVE_SYS_SHM_H */ 
     
    20132013    /* The order of operations is correct */ 
    20142014#ifdef HAVE_SYS_SHM_H 
    2015     if( p_vout->p_sys->b_shm
     2015    if( p_vout->p_sys->i_shm_opcode
    20162016    { 
    20172017        XShmDetach( p_vout->p_sys->p_display, &p_pic->p_sys->shminfo ); 
     
    26142614 
    26152615#ifdef HAVE_SYS_SHM_H 
    2616     p_vout->p_sys->b_shm = 0; 
     2616    p_vout->p_sys->i_shm_opcode = 0; 
    26172617 
    26182618    if( config_GetInt( p_vout, MODULE_STRING "-shm" ) ) 
     
    26212621        /* FIXME: As of 2001-03-16, XFree4 for MacOS X does not support Xshm */ 
    26222622#   else 
    2623         p_vout->p_sys->b_shm = 
    2624                   ( XShmQueryExtension( p_vout->p_sys->p_display ) == True ); 
    2625         if( p_vout->p_sys->b_shm ) 
     2623        int major, evt, err; 
     2624 
     2625        if( XQueryExtension( p_vout->p_sys->p_display, "MIT-SHM", &major, 
     2626                             &evt, &err ) 
     2627         && XShmQueryExtension( p_vout->p_sys->p_display ) ) 
     2628            p_vout->p_sys->i_shm_opcode = major; 
     2629 
     2630        if( p_vout->p_sys->i_shm_opcode ) 
    26262631        { 
    26272632            int major, minor; 
     
    26302635            XShmQueryVersion( p_vout->p_sys->p_display, &major, &minor, 
    26312636                              &pixmaps ); 
    2632             msg_Dbg( p_vout, "XShm video extension v%d.%d (with%s pixmaps)", 
    2633                      major, minor, pixmaps ? "" : "out" ); 
     2637            msg_Dbg( p_vout, "XShm video extension v%d.%d " 
     2638                     "(with%s pixmaps, opcode: %d)", 
     2639                     major, minor, pixmaps ? "" : "out", 
     2640                     p_vout->p_sys->i_shm_opcode ); 
    26342641        } 
    26352642 
    26362643#   endif 
    26372644 
    2638         if( !p_vout->p_sys->b_shm
     2645        if( !p_vout->p_sys->i_shm_opcode
    26392646        { 
    26402647            msg_Warn( p_vout, "XShm video extension is unavailable" ); 
     
    28182825    /* Attach shared memory segment to X server */ 
    28192826    XSynchronize( p_display, True ); 
    2820     b_shm = VLC_TRUE
     2827    i_shm_major = p_vout->p_sys->i_shm_opcode
    28212828    result = XShmAttach( p_display, p_shm ); 
    2822     if( result == False || !b_shm
     2829    if( result == False || !i_shm_major
    28232830    { 
    28242831        msg_Err( p_vout, "cannot attach shared memory to X server" ); 
     
    29332940         * (they happen when a window is not yet mapped) */ 
    29342941        return 0; 
    2935  
    2936     case 150: /* MIT-SHM */ 
    2937     case 146: /* MIT-SHM too, what gives? */ 
    2938         if( event->minor_code == X_ShmAttach ) 
    2939         { 
    2940             b_shm = VLC_FALSE; 
    2941             return 0; 
    2942         } 
    2943         break; 
    2944     } 
     2942    } 
     2943 
     2944    if( event->request_code == i_shm_major ) /* MIT-SHM */ 
     2945        return i_shm_major = 0; 
    29452946 
    29462947    XSetErrorHandler(NULL); 
  • modules/video_output/x11/xcommon.h

    r6ee1e19 re0ff9af  
    108108    vlc_bool_t          b_altfullscreen;          /* which fullscreen method */ 
    109109#ifdef HAVE_SYS_SHM_H 
    110     vlc_bool_t          b_shm;               /* shared memory extension flag */ 
     110    vlc_bool_t          i_shm_opcode;      /* shared memory extension opcode */ 
    111111#endif 
    112112