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

📄 vout_intf.c

📁 video linux conference
💻 C
📖 第 1 页 / 共 2 页
字号:
{    image_handler_t *p_image = image_HandlerCreate( p_vout );    video_format_t fmt_in = {0}, fmt_out = {0};    char *psz_filename;    subpicture_t *p_subpic;    picture_t *p_pif;    vlc_value_t val, format;    int i_ret;    var_Get( p_vout, "snapshot-path", &val );    if( val.psz_string && !*val.psz_string )    {        free( val.psz_string );        val.psz_string = 0;    }#if defined(SYS_DARWIN) || defined(SYS_BEOS)    if( !val.psz_string && p_vout->p_vlc->psz_homedir )    {        asprintf( &val.psz_string, "%s/Desktop",                  p_vout->p_vlc->psz_homedir );    }#elif defined(WIN32) && !defined(UNDER_CE)    if( !val.psz_string && p_vout->p_vlc->psz_homedir )    {        /* Get the My Pictures folder path */        char *p_mypicturesdir = NULL;        typedef HRESULT (WINAPI *SHGETFOLDERPATH)( HWND, int, HANDLE, DWORD,                                                   LPSTR );        #ifndef CSIDL_FLAG_CREATE        #   define CSIDL_FLAG_CREATE 0x8000        #endif        #ifndef CSIDL_MYPICTURES        #   define CSIDL_MYPICTURES 0x27        #endif        #ifndef SHGFP_TYPE_CURRENT        #   define SHGFP_TYPE_CURRENT 0        #endif        HINSTANCE shfolder_dll;        SHGETFOLDERPATH SHGetFolderPath ;        /* load the shfolder dll to retrieve SHGetFolderPath */        if( ( shfolder_dll = LoadLibrary( _T("SHFolder.dll") ) ) != NULL )        {            SHGetFolderPath = (void *)GetProcAddress( shfolder_dll,                                                      _T("SHGetFolderPathA") );            if( SHGetFolderPath != NULL )            {                p_mypicturesdir = (char *)malloc( MAX_PATH );                if( p_mypicturesdir )                 {                    if( S_OK != SHGetFolderPath( NULL,                                        CSIDL_MYPICTURES | CSIDL_FLAG_CREATE,                                        NULL, SHGFP_TYPE_CURRENT,                                        p_mypicturesdir ) )                    {                        free( p_mypicturesdir );                        p_mypicturesdir = NULL;                    }                }            }            FreeLibrary( shfolder_dll );        }        if( p_mypicturesdir == NULL )        {            asprintf( &val.psz_string, "%s/" CONFIG_DIR,                      p_vout->p_vlc->psz_homedir );        }        else        {            asprintf( &val.psz_string, p_mypicturesdir );            free( p_mypicturesdir );        }    }#else    if( !val.psz_string && p_vout->p_vlc->psz_homedir )    {        asprintf( &val.psz_string, "%s/" CONFIG_DIR,                  p_vout->p_vlc->psz_homedir );    }#endif    if( !val.psz_string )    {        msg_Err( p_vout, "no directory specified for snapshots" );        return VLC_EGENERIC;    }    var_Get( p_vout, "snapshot-format", &format );    if( !format.psz_string || !*format.psz_string )    {        if( format.psz_string ) free( format.psz_string );        format.psz_string = strdup( "png" );    }    asprintf( &psz_filename, "%s/vlcsnap-%u.%s", val.psz_string,              (unsigned int)(p_pic->date / 100000) & 0xFFFFFF,              format.psz_string );    free( val.psz_string );    free( format.psz_string );    /* Save the snapshot */    fmt_in = p_vout->fmt_in;    fmt_out.i_sar_num = fmt_out.i_sar_den = 1;    i_ret = image_WriteUrl( p_image, p_pic, &fmt_in, &fmt_out, psz_filename );    if( i_ret != VLC_SUCCESS )    {        msg_Err( p_vout, "could not create snapshot %s", psz_filename );        free( psz_filename );        image_HandlerDelete( p_image );        return VLC_EGENERIC;    }    msg_Dbg( p_vout, "snapshot taken (%s)", psz_filename );    free( psz_filename );    /* Inject a subpicture with the snapshot */    memset( &fmt_out, 0, sizeof(fmt_out) );    fmt_out.i_chroma = VLC_FOURCC('Y','U','V','A');    p_pif = image_Convert( p_image, p_pic, &fmt_in, &fmt_out );    image_HandlerDelete( p_image );    if( !p_pif ) return VLC_EGENERIC;    p_subpic = spu_CreateSubpicture( p_vout->p_spu );    if( p_subpic == NULL )    {         p_pif->pf_release( p_pif );         return VLC_EGENERIC;    }    p_subpic->i_channel = 0;    p_subpic->i_start = mdate();    p_subpic->i_stop = mdate() + 4000000;    p_subpic->b_ephemer = VLC_TRUE;    p_subpic->b_fade = VLC_TRUE;    p_subpic->i_original_picture_width = p_vout->render.i_width * 4;    p_subpic->i_original_picture_height = p_vout->render.i_height * 4;    p_subpic->p_region = spu_CreateRegion( p_vout->p_spu, &fmt_out );    vout_CopyPicture( p_image->p_parent, &p_subpic->p_region->picture, p_pif );    p_pif->pf_release( p_pif );    spu_DisplaySubpicture( p_vout->p_spu, p_subpic );    return VLC_SUCCESS;}/***************************************************************************** * vout_ControlDefault: default methods for video output control. *****************************************************************************/int vout_vaControlDefault( vout_thread_t *p_vout, int i_query, va_list args ){    switch( i_query )    {    case VOUT_REPARENT:    case VOUT_CLOSE:        if( p_vout->p_parent_intf )        {            vlc_object_release( p_vout->p_parent_intf );            p_vout->p_parent_intf = NULL;        }        return VLC_SUCCESS;        break;    case VOUT_SNAPSHOT:        p_vout->b_snapshot = VLC_TRUE;        return VLC_SUCCESS;        break;    default:        msg_Dbg( p_vout, "control query not supported" );        return VLC_EGENERIC;    }}/***************************************************************************** * Object variables callbacks *****************************************************************************/static int ZoomCallback( vlc_object_t *p_this, char const *psz_cmd,                         vlc_value_t oldval, vlc_value_t newval, void *p_data ){    vout_thread_t *p_vout = (vout_thread_t *)p_this;    vout_Control( p_vout, VOUT_SET_ZOOM, newval.f_float );    return VLC_SUCCESS;}static int OnTopCallback( vlc_object_t *p_this, char const *psz_cmd,                         vlc_value_t oldval, vlc_value_t newval, void *p_data ){    vout_thread_t *p_vout = (vout_thread_t *)p_this;    playlist_t *p_playlist;    vout_Control( p_vout, VOUT_SET_STAY_ON_TOP, newval.b_bool );    p_playlist = (playlist_t *)vlc_object_find( p_this, VLC_OBJECT_PLAYLIST,                                                 FIND_PARENT );    if( p_playlist )    {        /* Modify playlist as well because the vout might have to be restarted */        var_Create( p_playlist, "video-on-top", VLC_VAR_BOOL );        var_Set( p_playlist, "video-on-top", newval );        vlc_object_release( p_playlist );    }    return VLC_SUCCESS;}static int FullscreenCallback( vlc_object_t *p_this, char const *psz_cmd,                       vlc_value_t oldval, vlc_value_t newval, void *p_data ){    vout_thread_t *p_vout = (vout_thread_t *)p_this;    playlist_t *p_playlist;    vlc_value_t val;    p_vout->i_changes |= VOUT_FULLSCREEN_CHANGE;    p_playlist = (playlist_t *)vlc_object_find( p_this, VLC_OBJECT_PLAYLIST,                                                 FIND_PARENT );    if( p_playlist )    {        /* Modify playlist as well because the vout might have to be restarted */        var_Create( p_playlist, "fullscreen", VLC_VAR_BOOL );        var_Set( p_playlist, "fullscreen", newval );        vlc_object_release( p_playlist );    }    /* Disable "always on top" in fullscreen mode */    var_Get( p_vout, "video-on-top", &val );    if( newval.b_bool && val.b_bool )    {        val.b_bool = VLC_FALSE;        vout_Control( p_vout, VOUT_SET_STAY_ON_TOP, val.b_bool );    }    else if( !newval.b_bool && val.b_bool )    {        vout_Control( p_vout, VOUT_SET_STAY_ON_TOP, val.b_bool );    }    val.b_bool = VLC_TRUE;    var_Set( p_vout, "intf-change", val );    return VLC_SUCCESS;}static int SnapshotCallback( vlc_object_t *p_this, char const *psz_cmd,                       vlc_value_t oldval, vlc_value_t newval, void *p_data ){    vout_thread_t *p_vout = (vout_thread_t *)p_this;    vout_Control( p_vout, VOUT_SNAPSHOT );    return VLC_SUCCESS;}

⌨️ 快捷键说明

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