⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xcommon.c

📁 VLC Player Source Code
💻 C
📖 第 1 页 / 共 5 页
字号:
        DestroyCursor( p_vout );        XCloseDisplay( p_vout->p_sys->p_display );        free( p_vout->p_sys );        return VLC_EGENERIC;    }    /* Open and initialize device. */    if( InitDisplay( p_vout ) )    {        msg_Err( p_vout, "cannot initialize X11 display" );        DestroyCursor( p_vout );        DestroyWindow( p_vout, &p_vout->p_sys->original_window );        XCloseDisplay( p_vout->p_sys->p_display );        free( p_vout->p_sys );        return VLC_EGENERIC;    }    /* Disable screen saver */    DisableXScreenSaver( p_vout );    /* Misc init */    p_vout->p_sys->b_altfullscreen = 0;    p_vout->p_sys->i_time_button_last_pressed = 0;    TestNetWMSupport( p_vout );#ifdef MODULE_NAME_IS_xvmc    p_vout->p_sys->p_last_subtitle_save = NULL;    psz_value = config_GetPsz( p_vout, "xvmc-deinterlace-mode" );    /* Look what method was requested */    //var_Create( p_vout, "xvmc-deinterlace-mode", VLC_VAR_STRING );    //var_Change( p_vout, "xvmc-deinterlace-mode", VLC_VAR_INHERITVALUE, &val, NULL );    if( psz_value )    {        if( (strcmp(psz_value, "bob") == 0) ||            (strcmp(psz_value, "blend") == 0) )           p_vout->p_sys->xvmc_deinterlace_method = 2;        else if (strcmp(psz_value, "discard") == 0)           p_vout->p_sys->xvmc_deinterlace_method = 1;        else           p_vout->p_sys->xvmc_deinterlace_method = 0;        free(psz_value );    }    else        p_vout->p_sys->xvmc_deinterlace_method = 0;    /* Look what method was requested */    //var_Create( p_vout, "xvmc-crop-style", VLC_VAR_STRING );    //var_Change( p_vout, "xvmc-crop-style", VLC_VAR_INHERITVALUE, &val, NULL );    psz_value = config_GetPsz( p_vout, "xvmc-crop-style" );    if( psz_value )    {        if( strncmp( psz_value, "eq", 2 ) == 0 )           p_vout->p_sys->xvmc_crop_style = 1;        else if( strncmp( psz_value, "4-16", 4 ) == 0)           p_vout->p_sys->xvmc_crop_style = 2;        else if( strncmp( psz_value, "16-4", 4 ) == 0)           p_vout->p_sys->xvmc_crop_style = 3;        else           p_vout->p_sys->xvmc_crop_style = 0;        free( psz_value );    }    else        p_vout->p_sys->xvmc_crop_style = 0;    msg_Dbg(p_vout, "Deinterlace = %d", p_vout->p_sys->xvmc_deinterlace_method);    msg_Dbg(p_vout, "Crop = %d", p_vout->p_sys->xvmc_crop_style);    if( checkXvMCCap( p_vout ) == VLC_EGENERIC )    {        msg_Err( p_vout, "no XVMC capability found" );        Deactivate( p_vout );        return VLC_EGENERIC;    }    subpicture_t sub_pic;    sub_pic.p_sys = NULL;    p_vout->p_sys->last_date = 0;#endif#ifdef HAVE_XSP    p_vout->p_sys->i_hw_scale = 1;#endif#ifdef HAVE_OSSO    p_vout->p_sys->i_backlight_on_counter = i_backlight_on_interval;    p_vout->p_sys->p_octx = osso_initialize( "vlc", VERSION, 0, NULL );    if ( p_vout->p_sys->p_octx == NULL ) {        msg_Err( p_vout, "Could not get osso context" );    } else {        msg_Dbg( p_vout, "Initialized osso context" );    }#endif    /* Variable to indicate if the window should be on top of others */    /* Trigger a callback right now */    var_Get( p_vout, "video-on-top", &val );    var_Set( p_vout, "video-on-top", val );    return VLC_SUCCESS;}/***************************************************************************** * Deactivate: destroy X11 video thread output method ***************************************************************************** * Terminate an output method created by Open *****************************************************************************/void Deactivate ( vlc_object_t *p_this ){    vout_thread_t *p_vout = (vout_thread_t *)p_this;    /* If the fullscreen window is still open, close it */    if( p_vout->b_fullscreen )    {        ToggleFullScreen( p_vout );    }    /* Restore cursor if it was blanked */    if( !p_vout->p_sys->b_mouse_pointer_visible )    {        ToggleCursor( p_vout );    }#ifdef MODULE_NAME_IS_x11    /* Destroy colormap */    if( XDefaultDepth(p_vout->p_sys->p_display, p_vout->p_sys->i_screen) == 8 )    {        XFreeColormap( p_vout->p_sys->p_display, p_vout->p_sys->colormap );    }#elif defined(MODULE_NAME_IS_xvideo)    XVideoReleasePort( p_vout, p_vout->p_sys->i_xvport );#elif defined(MODULE_NAME_IS_xvmc)    if( p_vout->p_sys->xvmc_cap )    {        xvmc_context_writer_lock( &p_vout->p_sys->xvmc_lock );        xxmc_dispose_context( p_vout );        if( p_vout->p_sys->old_subpic )        {            xxmc_xvmc_free_subpicture( p_vout, p_vout->p_sys->old_subpic );            p_vout->p_sys->old_subpic = NULL;        }        if( p_vout->p_sys->new_subpic )        {            xxmc_xvmc_free_subpicture( p_vout, p_vout->p_sys->new_subpic );            p_vout->p_sys->new_subpic = NULL;        }        free( p_vout->p_sys->xvmc_cap );        xvmc_context_writer_unlock( &p_vout->p_sys->xvmc_lock );    }#endif#ifdef HAVE_XSP    DisablePixelDoubling(p_vout);#endif    DestroyCursor( p_vout );    EnableXScreenSaver( p_vout );    DestroyWindow( p_vout, &p_vout->p_sys->original_window );    XCloseDisplay( p_vout->p_sys->p_display );    /* Destroy structure */    vlc_mutex_destroy( &p_vout->p_sys->lock );#ifdef MODULE_NAME_IS_xvmc    free_context_lock( &p_vout->p_sys->xvmc_lock );#endif#ifdef HAVE_OSSO    if ( p_vout->p_sys->p_octx != NULL ) {        msg_Dbg( p_vout, "Deinitializing osso context" );        osso_deinitialize( p_vout->p_sys->p_octx );    }#endif    free( p_vout->p_sys );}#ifdef MODULE_NAME_IS_xvmc#define XINE_IMGFMT_YV12 (('2'<<24)|('1'<<16)|('V'<<8)|'Y')/* called xlocked */static int xvmc_check_yv12( Display *display, XvPortID port ){    XvImageFormatValues *formatValues;    int                  formats;    int                  i;    formatValues = XvListImageFormats( display, port, &formats );    for( i = 0; i < formats; i++ )    {        if( ( formatValues[i].id == XINE_IMGFMT_YV12 ) &&            ( !( strncmp( formatValues[i].guid, "YV12", 4 ) ) ) )        {            XFree (formatValues);            return 0;        }    }    XFree (formatValues);    return 1;}static void xvmc_sync_surface( vout_thread_t *p_vout, XvMCSurface * srf ){    XvMCSyncSurface( p_vout->p_sys->p_display, srf );}static void xvmc_update_XV_DOUBLE_BUFFER( vout_thread_t *p_vout ){    Atom         atom;    int          xv_double_buffer;    xv_double_buffer = 1;    XLockDisplay( p_vout->p_sys->p_display );    atom = XInternAtom( p_vout->p_sys->p_display, "XV_DOUBLE_BUFFER", False );#if 0    XvSetPortAttribute (p_vout->p_sys->p_display, p_vout->p_sys->i_xvport, atom, xv_double_buffer);#endif    XvMCSetAttribute( p_vout->p_sys->p_display, &p_vout->p_sys->context, atom, xv_double_buffer );    XUnlockDisplay( p_vout->p_sys->p_display );    //xprintf(this->xine, XINE_VERBOSITY_DEBUG,    //    "video_out_xxmc: double buffering mode = %d\n", xv_double_buffer);}static void RenderVideo( vout_thread_t *p_vout, picture_t *p_pic ){    vlc_xxmc_t *xxmc = NULL;    vlc_mutex_lock( &p_vout->p_sys->lock );    xvmc_context_reader_lock( &p_vout->p_sys->xvmc_lock );    xxmc = &p_pic->p_sys->xxmc_data;    if( (!xxmc->decoded ||        !xxmc_xvmc_surface_valid( p_vout, p_pic->p_sys->xvmc_surf )) )    {        vlc_mutex_unlock( &p_vout->p_sys->lock );        xvmc_context_reader_unlock( &p_vout->p_sys->xvmc_lock );        return;    }#if 0    vlc_mutex_lock( &p_vout->lastsubtitle_lock );    if (p_vout->p_sys->p_last_subtitle != NULL)    {        if( p_vout->p_sys->p_last_subtitle_save != p_vout->p_sys->p_last_subtitle )        {            p_vout->p_sys->new_subpic =                xxmc_xvmc_alloc_subpicture( p_vout, &p_vout->p_sys->context,                    p_vout->p_sys->xvmc_width,                    p_vout->p_sys->xvmc_height,                    p_vout->p_sys->xvmc_cap[p_vout->p_sys->xvmc_cur_cap].subPicType.id );            if (p_vout->p_sys->new_subpic)            {                XVMCLOCKDISPLAY( p_vout->p_sys->p_display );                XvMCClearSubpicture( p_vout->p_sys->p_display,                        p_vout->p_sys->new_subpic,                        0,                        0,                        p_vout->p_sys->xvmc_width,                        p_vout->p_sys->xvmc_height,                        0x00 );                XVMCUNLOCKDISPLAY( p_vout->p_sys->p_display );                clear_xx44_palette( &p_vout->p_sys->palette );                if( sub_pic.p_sys == NULL )                {                    sub_pic.p_sys = malloc( sizeof( picture_sys_t ) );                    if( sub_pic.p_sys != NULL )                    {                        sub_pic.p_sys->p_vout = p_vout;                        sub_pic.p_sys->xvmc_surf = NULL;                        sub_pic.p_sys->p_image = p_vout->p_sys->subImage;                    }                }                sub_pic.p_sys->p_image = p_vout->p_sys->subImage;                sub_pic.p->p_pixels = sub_pic.p_sys->p_image->data;                sub_pic.p->i_pitch = p_vout->output.i_width;                memset( p_vout->p_sys->subImage->data, 0,                        (p_vout->p_sys->subImage->width * p_vout->p_sys->subImage->height) );                if (p_vout->p_last_subtitle != NULL)                {                    blend_xx44( p_vout->p_sys->subImage->data,                                p_vout->p_last_subtitle,                                p_vout->p_sys->subImage->width,                                p_vout->p_sys->subImage->height,                                p_vout->p_sys->subImage->width,                                &p_vout->p_sys->palette,                                (p_vout->p_sys->subImage->id == FOURCC_IA44) );                }                XVMCLOCKDISPLAY( p_vout->p_sys->p_display );                XvMCCompositeSubpicture( p_vout->p_sys->p_display,                                         p_vout->p_sys->new_subpic,                                         p_vout->p_sys->subImage,                                         0, /* overlay->x */                                         0, /* overlay->y */                                         p_vout->output.i_width, /* overlay->width, */                                         p_vout->output.i_height, /* overlay->height */                                         0, /* overlay->x */                                         0 ); /*overlay->y */                XVMCUNLOCKDISPLAY( p_vout->p_sys->p_display );                if (p_vout->p_sys->old_subpic)                {                    xxmc_xvmc_free_subpicture( p_vout,                                               p_vout->p_sys->old_subpic);                    p_vout->p_sys->old_subpic = NULL;                }                if (p_vout->p_sys->new_subpic)                {                    p_vout->p_sys->old_subpic = p_vout->p_sys->new_subpic;                    p_vout->p_sys->new_subpic = NULL;                    xx44_to_xvmc_palette( &p_vout->p_sys->palette,                            p_vout->p_sys->xvmc_palette,                            0,                            p_vout->p_sys->old_subpic->num_palette_entries,                            p_vout->p_sys->old_subpic->entry_bytes,                            p_vout->p_sys->old_subpic->component_order );                    XVMCLOCKDISPLAY( p_vout->p_sys->p_display );                    XvMCSetSubpicturePalette( p_vout->p_sys->p_display,                                              p_vout->p_sys->old_subpic,                                              p_vout->p_sys->xvmc_palette );                    XvMCFlushSubpicture( p_vout->p_sys->p_display,                                         p_vout->p_sys->old_subpic);                    XvMCSyncSubpicture( p_vout->p_sys->p_display,                                        p_vout->p_sys->old_subpic );                    XVMCUNLOCKDISPLAY( p_vout->p_sys->p_display );                }                XVMCLOCKDISPLAY( p_vout->p_sys->p_display);                if (p_vout->p_sys->xvmc_backend_subpic )                {                    XvMCBlendSubpicture( p_vout->p_sys->p_display,                                         p_pic->p_sys->xvmc_surf,                                         p_vout->p_sys->old_subpic,                                         0,                                         0,                                         p_vout->p_sys->xvmc_width,                                         p_vout->p_sys->xvmc_height,                                         0,                                         0,                                         p_vout->p_sys->xvmc_width,                                         p_vout->p_sys->xvmc_height );                }                else                {                    XvMCBlendSubpicture2( p_vout->p_sys->p_display,                                          p_pic->p_sys->xvmc_surf,                                          p_pic->p_sys->xvmc_surf,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -