xvideo.c
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:6k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * xvideo.c : Xvideo plugin for vlc
  3.  *****************************************************************************
  4.  * Copyright (C) 1998-2001 the VideoLAN team
  5.  * $Id: 6ac68df58a3e92da574d97526a66003e2444f0a5 $
  6.  *
  7.  * Authors: Shane Harper <shanegh@optusnet.com.au>
  8.  *          Vincent Seguin <seguin@via.ecp.fr>
  9.  *          Samuel Hocevar <sam@zoy.org>
  10.  *          David Kennedy <dkennedy@tinytoad.com>
  11.  *
  12.  * This program is free software; you can redistribute it and/or modify
  13.  * it under the terms of the GNU General Public License as published by
  14.  * the Free Software Foundation; either version 2 of the License, or
  15.  * (at your option) any later version.
  16.  *
  17.  * This program is distributed in the hope that it will be useful,
  18.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  19.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20.  * GNU General Public License for more details.
  21.  *
  22.  * You should have received a copy of the GNU General Public License
  23.  * along with this program; if not, write to the Free Software
  24.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  25.  *****************************************************************************/
  26. /*****************************************************************************
  27.  * Preamble
  28.  *****************************************************************************/
  29. #ifdef HAVE_CONFIG_H
  30. # include "config.h"
  31. #endif
  32. #include <vlc_common.h>
  33. #include <vlc_plugin.h>
  34. /*****************************************************************************
  35.  * Exported prototypes
  36.  *****************************************************************************/
  37. extern int  Activate   ( vlc_object_t * );
  38. extern void Deactivate ( vlc_object_t * );
  39. /*****************************************************************************
  40.  * Module descriptor
  41.  *****************************************************************************/
  42. #define ADAPTOR_TEXT N_("XVideo adaptor number")
  43. #define ADAPTOR_LONGTEXT N_( 
  44.     "If your graphics card provides several adaptors, you need to choose " 
  45.     "which one will be used (you shouldn't have to change this).")
  46. #define ALT_FS_TEXT N_("Alternate fullscreen method")
  47. #define ALT_FS_LONGTEXT N_( 
  48.     "There are two ways to make a fullscreen window, unfortunately each one " 
  49.     "has its drawbacks.n" 
  50.     "1) Let the window manager handle your fullscreen window (default), but " 
  51.     "things like taskbars will likely show on top of the video.n" 
  52.     "2) Completely bypass the window manager, but then nothing will be able " 
  53.     "to show on top of the video.")
  54. #define DISPLAY_TEXT N_("X11 display")
  55. #define DISPLAY_LONGTEXT N_( 
  56.     "X11 hardware display to use. By default VLC will " 
  57.     "use the value of the DISPLAY environment variable.")
  58. #define CHROMA_TEXT N_("XVimage chroma format")
  59. #define CHROMA_LONGTEXT N_( 
  60.     "Force the XVideo renderer to use a specific chroma format instead of " 
  61.     "trying to improve performances by using the most efficient one.")
  62. #define SHM_TEXT N_("Use shared memory")
  63. #define SHM_LONGTEXT N_( 
  64.     "Use shared memory to communicate between VLC and the X server.")
  65. #define SCREEN_TEXT N_("Screen for fullscreen mode.")
  66. #define SCREEN_LONGTEXT N_( 
  67.     "Screen to use in fullscreen mode. For instance " 
  68.     "set it to 0 for first screen, 1 for the second.")
  69. vlc_module_begin ()
  70.     set_shortname( "XVideo" )
  71.     set_category( CAT_VIDEO )
  72.     set_subcategory( SUBCAT_VIDEO_VOUT )
  73.     add_string( "xvideo-display", NULL, NULL, DISPLAY_TEXT, DISPLAY_LONGTEXT, true )
  74.     add_integer( "xvideo-adaptor", -1, NULL, ADAPTOR_TEXT, ADAPTOR_LONGTEXT, true )
  75.     add_bool( "xvideo-altfullscreen", 0, NULL, ALT_FS_TEXT, ALT_FS_LONGTEXT, true )
  76.     add_string( "xvideo-chroma", NULL, NULL, CHROMA_TEXT, CHROMA_LONGTEXT, true )
  77. #ifdef HAVE_SYS_SHM_H
  78.     add_bool( "xvideo-shm", 1, NULL, SHM_TEXT, SHM_LONGTEXT, true )
  79. #endif
  80. #ifdef HAVE_XINERAMA
  81.     add_integer ( "xvideo-xineramascreen", -1, NULL, SCREEN_TEXT, SCREEN_LONGTEXT, true )
  82. #endif
  83.     set_description( N_("XVideo extension video output") )
  84.     set_capability( "video output", 150 )
  85.     set_callbacks( Activate, Deactivate )
  86. vlc_module_end ()
  87. /* following functions are local */
  88. #if 0
  89. /*****************************************************************************
  90.  * XVideoSetAttribute
  91.  *****************************************************************************
  92.  * This function can be used to set attributes, e.g. XV_BRIGHTNESS and
  93.  * XV_CONTRAST. "f_value" should be in the range of 0 to 1.
  94.  *****************************************************************************/
  95. static void XVideoSetAttribute( vout_thread_t *p_vout,
  96.                                 char *attr_name, float f_value )
  97. {
  98.     int             i_attrib;
  99.     XvAttribute    *p_attrib;
  100.     Display        *p_display = p_vout->p_sys->p_display;
  101.     int             i_xvport  = p_vout->p_sys->i_xvport;
  102.     p_attrib = XvQueryPortAttributes( p_display, i_xvport, &i_attrib );
  103.     do
  104.     {
  105.         i_attrib--;
  106.         if( i_attrib >= 0 && !strcmp( p_attrib[ i_attrib ].name, attr_name ) )
  107.         {
  108.             int i_sv = f_value * ( p_attrib[ i_attrib ].max_value
  109.                                     - p_attrib[ i_attrib ].min_value + 1 )
  110.                         + p_attrib[ i_attrib ].min_value;
  111.             XvSetPortAttribute( p_display, i_xvport,
  112.                             XInternAtom( p_display, attr_name, False ), i_sv );
  113.             break;
  114.         }
  115.     } while( i_attrib > 0 );
  116.     if( p_attrib )
  117.         XFree( p_attrib );
  118. }
  119. #endif