[Mplayer-cvslog] CVS: main/libvo vo_dxr3.c,1.88,1.89

David Holm david at realityrift.com
Thu Jul 18 16:05:25 CEST 2002


Reverse this before releasing 0.90, it breaks dxr3 support in many
ways!!
I don't want to have the same mess I had with 0.60

//David

On Fri, 2002-07-05 at 14:26, Alex Beregszaszi wrote:
> Update of /cvsroot/mplayer/main/libvo
> In directory mail:/var/tmp.root/cvs-serv25638
> 
> Modified Files:
> 	vo_dxr3.c 
> Log Message:
> removed fame and lavc encoder, enabled spu encoder, added equaliuzer support
> 
> Index: vo_dxr3.c
> ===================================================================
> RCS file: /cvsroot/mplayer/main/libvo/vo_dxr3.c,v
> retrieving revision 1.88
> retrieving revision 1.89
> diff -u -r1.88 -r1.89
> --- vo_dxr3.c	2 Jul 2002 13:32:08 -0000	1.88
> +++ vo_dxr3.c	5 Jul 2002 14:26:37 -0000	1.89
> @@ -6,6 +6,10 @@
>   */
>  
>  /* ChangeLog added 2002-01-10
> + * 2002-07-05:
> + *  Removed lavc and fame encoder to be compatible with new libvo style.
> + *  Added graphic equalizer support.
> + *
>   * 2002-04-15:
>   *  The spuenc code isn't 100% stable yet, therefore I'm disabling
>   *  it due to the upcoming stable release.
> @@ -90,64 +94,20 @@
>  #include "video_out.h"
>  #include "video_out_internal.h"
>  #include "aspect.h"
> -#include "postproc/rgb2rgb.h"
> -#include "postproc/swscale.h"
>  #include "cpudetect.h"
>  #include "spuenc.h"
> - 
> -//#define USE_LIBFAME // this is done in configure now
> -
> -/* Libfame codec initialisation */
> -#ifdef USE_LIBFAME
> -#include "../libfame/fame.h"
> -static unsigned char *outbuf = NULL;
> -static fame_parameters_t fame_params;
> -static fame_yuv_t fame_yuv;
> -static fame_context_t *fame_ctx = NULL;
> -static fame_object_t *fame_obj;
> -#endif
> +#include "../vidix/vidixlib.h"
>  
> -/* libavcodec codec initialisation */
> -#ifdef USE_LIBAVCODEC
> -#ifdef USE_LIBAVCODEC_SO
> -#include <libffmpeg/avcodec.h>
> -#include <libffmpeg/dsputil.h>
> -#else
> -#include "libavcodec/avcodec.h"
> -#include "libavcodec/dsputil.h"
> -#endif
> -/* for video encoder */
> -static AVCodec *avc_codec = NULL;
> -static AVCodecContext *avc_context = NULL;
> -static AVPicture avc_picture;
> -int avc_outbuf_size = 100000;
> -extern int avcodec_inited;
> -extern int motion_estimation_method;
> -#endif
> +#define SPU_SUPPORT
>  
> -char *picture_data[] = { NULL, NULL, NULL };
> -int picture_linesize[] = { 0, 0, 0 };
> -
> -#ifdef HAVE_MMX
> -#include "mmx.h"
> -#endif
> -
> -LIBVO_EXTERN (dxr3)
> -
> -/* codec control */
> -enum MpegCodec {
> -	MPG_CODEC_NON,
> -	MPG_CODEC_AVCODEC,
> -	MPG_CODEC_FAME
> +static vo_info_t vo_info = 
> +{
> +	"DXR3/H+ video out",
> +	"dxr3",
> +	"David Holm <dholm at iname.com>",
> +	""
>  };
> -
> -#if defined(USE_LIBAVCODEC)
> -static int mpeg_codec = MPG_CODEC_AVCODEC;
> -#elif defined(USE_LIBFAME)
> -static int mpeg_codec = MPG_CODEC_FAME;
> -#else
> -static int mpeg_codec = MPG_CODEC_NONE;
> -#endif
> +LIBVO_EXTERN (dxr3)
>  
>  /* Resolutions and positions */
>  static int v_width, v_height;
> @@ -155,7 +115,6 @@
>  static int osd_w, osd_h;
>  static int noprebuf = 0;
>  static int img_format = 0;
> -static SwsContext * sws = NULL;
>  
>  /* File descriptors */
>  static int fd_control = -1;
> @@ -164,27 +123,23 @@
>  static char fdv_name[80];
>  static char fds_name[80];
>  
> +#ifdef SPU_SUPPORT
>  /* on screen display/subpics */
>  static char *osdpicbuf = NULL;
>  static int osdpicbuf_w;
>  static int osdpicbuf_h;
>  static int disposd = 0;
>  static encodedata *spued;
> +#endif
>  
>  /* Static variable used in ioctl's */
>  static int ioval = 0;
>  
> -static vo_info_t vo_info = 
> -{
> -	"DXR3/H+ video out",
> -	"dxr3",
> -	"David Holm <dholm at iname.com>",
> -	""
> -};
> +static int get_video_eq(vidix_video_eq_t *info);
> +static int set_video_eq(vidix_video_eq_t *info);
>  
>  uint32_t control(uint32_t request, void *data, ...)
>  {
> -	uint32_t flag = 0;
>  	switch (request) {
>  	case VOCTRL_RESUME:
>  		if (!noprebuf) {
> @@ -213,29 +168,26 @@
>  		}
>  		return VO_TRUE;
>  	case VOCTRL_QUERY_FORMAT:
> -		switch (*((uint32_t*)data)) {	
> -		case IMGFMT_MPEGPES:
> -			/* Hardware accelerated | Hardware supports subpics */
> -			flag = VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_SPU;
> -			break;
> -#if defined(USE_LIBFAME) || defined(USE_LIBAVCODEC)
> -		case IMGFMT_YV12:
> -		case IMGFMT_YUY2:
> -		case IMGFMT_RGB24:
> -		case IMGFMT_BGR24:
> -			/* Conversion needed | OSD Supported */
> -			flag = VFCAP_CSP_SUPPORTED | VFCAP_OSD;
> -			break;
> -#else
> -		default:
> -			printf("VO: [dxr3] You have disabled libavcodec/libfame support (Read DOCS/codecs.html)!\n");
> -#endif
> -		}
> -		if (noprebuf) {
> -			return flag;
> -		} else {
> -			return (flag | VFCAP_TIMER);
> -		}
> +	    {
> +		uint32_t flag = 0;
> +
> +		if (*((uint32_t*)data) != IMGFMT_MPEGPES)
> +		    return 0;
> +
> +		flag = VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_SPU;
> +		if (!noprebuf)
> +		    flag |= VFCAP_TIMER;
> +		return flag;
> +	    }
> +	case VOCTRL_QUERY_VAA:
> +	    {
> +		vo_vaa_t *vaa = data;
> +		
> +		memset(vaa,0,sizeof(vo_vaa_t));
> +		vaa->get_video_eq=get_video_eq;
> +		vaa->set_video_eq=set_video_eq;
> +		return VO_TRUE;
> +	    }
>  	}
>  	return VO_NOTIMPL;
>  }
> @@ -324,160 +276,25 @@
>  		printf("VO: [dxr3] Setting aspect ratio to 16:9\n");
>  	}
>  	ioctl(fd_control, EM8300_IOCTL_SET_ASPECTRATIO, &ioval);
> -	
> -	if (format != IMGFMT_MPEGPES) {
> -		size = s_width * s_height;
> -		picture_data[0] = malloc((size * 3) / 2);
> -		picture_data[1] = picture_data[0] + size;
> -		picture_data[2] = picture_data[1] + size / 4;
> -		
> -		picture_linesize[0] = s_width;
> -		picture_linesize[1] = s_width / 2;
> -		picture_linesize[2] = s_width / 2;
> -		switch (mpeg_codec) {
> -#ifdef USE_LIBFAME
> -		case MPG_CODEC_FAME:
> -			printf("VO: [dxr3] Using FAME\n");
> -			fame_ctx = fame_open();
> -			if (!fame_ctx) {
> -				printf("VO: [dxr3] Cannot open libFAME!\n");
> -				return -1;
> -			}
> -
> -			fame_obj = fame_get_object(fame_ctx, "motion/pmvfast");
> -			fame_register(fame_ctx, "motion", fame_obj);
> -			
> -			memset(&fame_params, 0, sizeof(fame_parameters_t));
> -			fame_params.width = s_width;
> -			fame_params.height = s_height;
> -			fame_params.coding = "IPPPPPPP";
> -			fame_params.quality = 90;
> -			fame_params.bitrate = 0;
> -			fame_params.slices_per_frame = 1;
> -			fame_params.frames_per_sequence = (int) (vo_fps + 0.5);
> -			fame_params.shape_quality = 100;
> -			fame_params.search_range = (int) (vo_fps + 0.5);
> -			fame_params.verbose = 0;
> -			fame_params.profile = NULL;
> -		
> -			if (vo_fps < 24.0) {
> -				fame_params.frame_rate_num = 24000;
> -				fame_params.frame_rate_den = 1001;
> -			} else if (vo_fps < 25.0) {
> -				fame_params.frame_rate_num = 24;
> -				fame_params.frame_rate_den = 1;
> -			} else if (vo_fps < 29.0) {
> -				fame_params.frame_rate_num = 25;
> -				fame_params.frame_rate_den = 1;
> -			} else if (vo_fps < 30.0) {
> -				fame_params.frame_rate_num = 30000;
> -				fame_params.frame_rate_den = 1001;
> -			} else if (vo_fps < 50.0) {
> -				fame_params.frame_rate_num = 30;
> -				fame_params.frame_rate_den = 1;
> -			} else if (vo_fps < 55.0) {
> -				fame_params.frame_rate_num = 50;
> -				fame_params.frame_rate_den = 1;
> -			} else if (vo_fps < 60.0) {
> -				fame_params.frame_rate_num = 60000;
> -				fame_params.frame_rate_den = 1001;
> -			} else {
> -				fame_params.frame_rate_num = 60;
> -				fame_params.frame_rate_den = 1;
> -			}
> -			
> -			outbuf = malloc(100000);
> -			fame_init(fame_ctx, &fame_params, outbuf, 100000);
> -
> -			fame_yuv.w = s_width;
> -			fame_yuv.h = s_height;
> -			fame_yuv.y = picture_data[0];
> -			fame_yuv.u = picture_data[1];
> -			fame_yuv.v = picture_data[2];
> -			break;
> -#endif
> -#ifdef USE_LIBAVCODEC
> -		case MPG_CODEC_AVCODEC:
> -			printf("VO: [dxr3] Using AVCODEC\n");
> -			avc_codec = avcodec_find_encoder(CODEC_ID_MPEG1VIDEO);
> -			if (!avc_codec) {
> -				printf("VO: [dxr3] Unable to find mpeg1video codec\n");
> -				uninit();
> -				return -1;
> -			}
> -			if (avc_context) {
> -				free(avc_context);
> -			}
> -			avc_context = malloc(sizeof(AVCodecContext));
> -			memset(avc_context, 0, sizeof(AVCodecContext));
> -			avc_context->width = s_width;
> -			avc_context->height = s_height;
> -// realy need this line ? -- Pontscho
> -//			ioctl(fd_control, EM8300_IOCTL_GET_VIDEOMODE, &ioval);
> -			avc_context->gop_size = 7;
> -			avc_context->frame_rate = (int) (vo_fps * FRAME_RATE_BASE);
> -			avc_context->bit_rate = 0;
> -			avc_context->flags = CODEC_FLAG_QSCALE;
> -			avc_context->quality = 2;
> -			avc_context->pix_fmt = PIX_FMT_YUV420P;
> -			motion_estimation_method = ME_EPZS;
> -			if (avcodec_open(avc_context, avc_codec) < 0) {
> -				printf("VO: [dxr3] Unable to open codec\n");
> -				uninit();
> -				return -1;
> -			}
> -			/* Create a pixel buffer and set up pointers for color components */
> -			memset(&avc_picture, 0, sizeof(avc_picture));
> -			avc_picture.linesize[0] = picture_linesize[0];
> -			avc_picture.linesize[1] = picture_linesize[1];
> -			avc_picture.linesize[2] = picture_linesize[2];
> -		
> -			avc_picture.data[0] = picture_data[0];
> -			avc_picture.data[1] = picture_data[1];
> -			avc_picture.data[2] = picture_data[2];
> -			break;
> -#endif
> -		}
>  
> -		sws = getSwsContextFromCmdLine(v_width, v_height, img_format, s_width, s_height, IMGFMT_YV12);
> -		if (!sws) {
> -			printf("vo_vesa: Can't initialize SwScaler\n");
> -			return -1;
> -		}
> -	
> -		/* This stuff calculations the relative position of the osd */
> -		osd_w = s_width;
> -		osd_h = s_height;
> -
> -		if (format == IMGFMT_BGR24) {
> -			yuv2rgb_init(24, MODE_BGR);
> -		} else {
> -			yuv2rgb_init(24, MODE_RGB);
> -		}
> -		return 0;
> -	} else if (format == IMGFMT_MPEGPES) {
> -		printf("VO: [dxr3] Format: MPEG-PES (no conversion needed)\n");
> -		osdpicbuf = malloc(s_width * s_height);
> -		if (osdpicbuf == NULL) {
> -			printf("vo_dxr3: out of mem\n");
> -			return -1;
> -		}
> -		spued = (encodedata *) malloc(sizeof(encodedata));
> -		if (spued == NULL) {
> -			printf("vo_dxr3:out of mem\n");
> -			return -1;
> -		}
> -		osd_w = s_width;
> -		osd_h = s_height;
> -		osdpicbuf_w = s_width;
> -		osdpicbuf_h = s_height;
> -		
> -		return 0;
> +#ifdef SPU_SUPPORT
> +	osdpicbuf = malloc(s_width * s_height);
> +	if (osdpicbuf == NULL) {
> +		printf("vo_dxr3: out of mem\n");
> +		return -1;
> +	}
> +	spued = (encodedata *) malloc(sizeof(encodedata));
> +	if (spued == NULL) {
> +		printf("vo_dxr3:out of mem\n");
> +		return -1;
>  	}
> +	osd_w = s_width;
> +	osd_h = s_height;
> +	osdpicbuf_w = s_width;
> +	osdpicbuf_h = s_height;
> +#endif
>  
> -	printf("VO: [dxr3] Format: Unsupported\n");
> -	uninit();
> -	return -1;
> +	return 0;
>  }
>  
>  static const vo_info_t* get_info(void)
> @@ -487,46 +304,40 @@
>  
>  static void draw_alpha(int x, int y, int w, int h, unsigned char* src, unsigned char *srca, int srcstride)
>  {
> -	/*int lx, ly, bx;
> -	unsigned char *buf;
> -	buf = &osdpicbuf[(y * osdpicbuf_w) + x];
> -	if (img_format == IMGFMT_MPEGPES) {
> -		for (ly = 0; ly < h - 1; ly++) {
> -			for(lx = 0; lx < w; lx++) {
> -				if ((srca[(ly * srcstride) + lx] != 0) && (src[(ly * srcstride) + lx] != 0)) {
> -					if(src[(ly * srcstride) + lx] >= 128) {
> -						buf[ly * osdpicbuf_w + lx] = 3;
> -					}
> +#ifdef SPU_SUPPORT
> +	int lx, ly, bx;
> +	unsigned char *buf = &osdpicbuf[(y * osdpicbuf_w) + x];
> +	for (ly = 0; ly < h - 1; ly++) {
> +		for(lx = 0; lx < w; lx++) {
> +			if ((srca[(ly * srcstride) + lx] != 0) && (src[(ly * srcstride) + lx] != 0)) {
> +				if(src[(ly * srcstride) + lx] >= 128) {
> +					buf[ly * osdpicbuf_w + lx] = 3;
>  				}
>  			}
> -		}	
> -		pixbuf_encode_rle(x, y, osdpicbuf_w, osdpicbuf_h - 1, osdpicbuf, osdpicbuf_w, spued);
> -	} else*/ {
> -#if defined(USE_LIBAVCODEC) || defined(USE_LIBFAME)
> -	vo_draw_alpha_yv12(w, h, src, srca, srcstride,
> -		picture_data[0] + x + y * picture_linesize[0], picture_linesize[0]);
> -#endif
> +		}
>  	}
> +	pixbuf_encode_rle(x, y, osdpicbuf_w, osdpicbuf_h - 1, osdpicbuf, osdpicbuf_w, spued);
> +#endif
>  }
>  
>  static void draw_osd(void)
>  {
> -	if (img_format != IMGFMT_MPEGPES) {
> -		vo_draw_text(osd_w, osd_h, draw_alpha);
> -	} /*else if ((disposd % 15) == 0) {
> +#ifdef SPU_SUPPORT
> +	if ((disposd % 15) == 0) {
>  		vo_draw_text(osd_w, osd_h, draw_alpha);
>  		memset(osdpicbuf, 0, s_width * s_height);
> -*/
> +
>  		/* could stand some check here to see if the subpic hasn't changed
>  		 * as if it hasn't and we re-send it it will "blink" as the last one
>  		 * is turned off, and the new one (same one) is turned on
>  		 */
> -		/*if (!noprebuf) {
> +		if (!noprebuf) {
>  			ioctl(fd_spu, EM8300_IOCTL_SPU_SETPTS, &vo_pts);
>  		}
>  		write(fd_spu, spued->data, spued->count);
>  	}
> -	disposd++;*/
> +	disposd++;
> +#endif
>  }
>  
>  
> @@ -534,39 +345,18 @@
>  {
>  	char *pData;
>  	int pSize;
> -	if (img_format == IMGFMT_MPEGPES) {
> -		vo_mpegpes_t *p = (vo_mpegpes_t *) src[0];
> +	vo_mpegpes_t *p = (vo_mpegpes_t *) src[0];
>  		
> -		if (p->id == 0x20) {
> -			if (!noprebuf) {
> -				ioctl(fd_spu, EM8300_IOCTL_SPU_SETPTS, &vo_pts);
> -			}
> -			write(fd_spu, p->data, p->size);
> -		} else {
> -			write(fd_video, p->data, p->size);
> +#ifdef SPU_SUPPORT
> +	if (p->id == 0x20) {
> +		if (!noprebuf) {
> +			ioctl(fd_spu, EM8300_IOCTL_SPU_SETPTS, &vo_pts);
>  		}
> -		return 0;
> -	} else {
> -		int size, srcStride = (img_format == IMGFMT_YUY2) ? (v_width * 2) : (v_width * 3);
> -		sws->swScale(sws, src, &srcStride, 0, v_height, picture_data, picture_linesize);
> -		draw_osd();
> -		switch (mpeg_codec) {
> -#ifdef USE_LIBFAME
> -		case MPG_CODEC_FAME:
> -			size = fame_encode_frame(fame_ctx, &fame_yuv, NULL);
> -			write(fd_video, outbuf, size);
> -			break;
> -#endif
> -#ifdef USE_LIBAVCODEC
> -		case MPG_CODEC_AVCODEC:
> -			size = avcodec_encode_video(avc_context, picture_data[0], avc_outbuf_size, &avc_picture);
> -			write(fd_video, picture_data[0], size);
> -			break;
> +		write(fd_spu, p->data, p->size);
> +	} else
>  #endif
> -		}
> -		return 0;
> -	}
> -	return -1;
> +		write(fd_video, p->data, p->size);
> +	return 0;
>  }
>  
>  static void flip_page(void)
> @@ -575,62 +365,16 @@
>  	if (!noprebuf) {
>  		ioctl(fd_video, EM8300_IOCTL_VIDEO_SETPTS, &vo_pts);
>  	}
> -	if (img_format == IMGFMT_YV12) {
> -		switch (mpeg_codec) {
> -#ifdef USE_LIBFAME
> -		case MPG_CODEC_FAME:
> -			size = fame_encode_frame(fame_ctx, &fame_yuv, NULL);
> -			write(fd_video, outbuf, size);
> -			break;
> -#endif
> -#ifdef USE_LIBAVCODEC
> -		case MPG_CODEC_AVCODEC:
> -			size = avcodec_encode_video(avc_context, picture_data[0], avc_outbuf_size, &avc_picture);
> -			if (!noprebuf) {
> -				ioctl(fd_video, EM8300_IOCTL_VIDEO_SETPTS, &vo_pts);
> -			}
> -			write(fd_video, picture_data[0], size);
> -			break;
> -#endif
> -		}
> -	}
>  }
>  
>  static uint32_t draw_slice(uint8_t *srcimg[], int stride[], int w, int h, int x0, int y0)
>  {
> -	if (img_format == IMGFMT_YV12) {
> -		sws->swScale(sws, srcimg, stride, y0, h, picture_data, picture_linesize);
> -		return 0;
> -	}
>  	return -1;
>  }
>  
>  static void uninit(void)
>  {
>  	printf("VO: [dxr3] Uninitializing\n");
> -	if (sws) {
> -		freeSwsContext(sws);
> -	}
> -
> -	switch (mpeg_codec) {
> -#ifdef USE_LIBFAME
> -	case MPG_CODEC_FAME:
> -		if (fame_ctx) {
> -			fame_close(fame_ctx);
> -		}
> -		break;
> -#endif
> -#ifdef USE_LIBAVCODEC
> -	case MPG_CODEC_AVCODEC:
> -		if (avc_context) {
> -			avcodec_close(avc_context);
> -		}
> -		break;
> -#endif
> -	}
> -	if (picture_data[0]) {
> -		free(picture_data[0]);
> -	}
>  	if (fd_video) {
>  		close(fd_video);
>  	}
> @@ -640,12 +384,14 @@
>  	if (fd_control) {
>  		close(fd_control);
>  	}
> +#ifdef SPU_SUPPORT
>  	if(osdpicbuf) {
>  		free(osdpicbuf);
>  	}
>  	if(spued) {
>  		free(spued);
>  	}
> +#endif
>  }
>  
>  static void check_events(void)
> @@ -676,27 +422,6 @@
>  		fdflags |= O_NONBLOCK;
>  	}
>  
> -#if defined(USE_LIBFAME)
> -	printf("VO: [dxr3] FAME supported\n");
> -	if (arg && !strncmp("fame", arg, 4)) {
> -		mpeg_codec = MPG_CODEC_FAME;
> -		arg = strchr(arg, ':');
> -		if (arg) {
> -			arg++;
> -		}
> -	}
> -#endif
> -#if defined(USE_LIBAVCODEC)
> -	printf("VO: [dxr3] AVCODEC supported\n");
> -	if (arg && !strncmp("avcodec", arg, 7)) {
> -		mpeg_codec = MPG_CODEC_AVCODEC;
> -		arg = strchr(arg, ':');
> -		if (arg) {
> -			arg++;
> -		}
> -	}
> -#endif
> -
>  	if (arg && arg[0]) {
>  		printf("VO: [dxr3] Forcing use of device %s\n", arg);
>  		sprintf(devname, "/dev/em8300-%s", arg);
> @@ -760,15 +485,35 @@
>  		}
>  	}
>  	strcpy(fds_name, devname);
> -
> -#if defined(USE_LIBAVCODEC)
> -	if (mpeg_codec == MPG_CODEC_AVCODEC && !avcodec_inited) {
> -		avcodec_init();
> -		avcodec_register_all();	
> -		avcodec_inited = 1;
> -	}
> -	
> -#endif
>  	
>  	return 0;
> +}
> +
> +static int get_video_eq(vidix_video_eq_t *info)
> +{
> +    em8300_bcs_t bcs;
> +
> +    if (ioctl(fd_control, EM8300_IOCTL_GETBCS, &bcs) < 0)
> +	return 1;
> +    info->brightness = bcs.brightness;
> +    info->contrast = bcs.contrast;
> +    info->saturation = bcs.saturation;
> +    info->cap = VEQ_CAP_BRIGHTNESS|VEQ_CAP_CONTRAST|VEQ_CAP_SATURATION;
> +    return 0;
> +}
> +
> +static int set_video_eq(vidix_video_eq_t *info)
> +{
> +    em8300_bcs_t bcs;
> +
> +    if (info->cap & VEQ_CAP_BRIGHTNESS)
> +	bcs.brightness = info->brightness;
> +    if (info->cap & VEQ_CAP_CONTRAST)
> +	bcs.contrast = info->contrast;
> +    if (info->cap & VEQ_CAP_SATURATION)
> +	bcs.saturation = info->saturation;
> +
> +    if (ioctl(fd_control, EM8300_IOCTL_SETBCS, &bcs) < 0)
> +	return 1;
> +    return 0;
>  }
> 
> _______________________________________________
> Mplayer-cvslog mailing list
> Mplayer-cvslog at mplayerhq.hu
> http://mplayerhq.hu/mailman/listinfo/mplayer-cvslog





More information about the MPlayer-cvslog mailing list