mirror of
https://github.com/mpv-player/mpv
synced 2024-12-14 10:55:43 +00:00
d34041569e
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@2 b3059339-0415-0410-9bf9-f77b7e298cf2
128 lines
3.0 KiB
C
128 lines
3.0 KiB
C
|
|
//#define memcpy(a,b,c)
|
|
|
|
/*
|
|
* video_out_mga.c
|
|
*
|
|
* Copyright (C) Aaron Holtzman - Aug 1999
|
|
*
|
|
* This file is part of mpeg2dec, a free MPEG-2 video stream decoder.
|
|
*
|
|
* mpeg2dec is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2, or (at your option)
|
|
* any later version.
|
|
*
|
|
* mpeg2dec is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with GNU Make; see the file COPYING. If not, write to
|
|
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#include "config.h"
|
|
#include "video_out.h"
|
|
#include "video_out_internal.h"
|
|
|
|
LIBVO_EXTERN(mga)
|
|
|
|
#include <sys/ioctl.h>
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include <sys/mman.h>
|
|
|
|
#include "drivers/mga_vid.h"
|
|
|
|
static vo_info_t vo_info =
|
|
{
|
|
"Matrox G200/G400 overlay (/dev/mga_vid)",
|
|
"mga",
|
|
"Aaron Holtzman <aholtzma@ess.engr.uvic.ca>",
|
|
""
|
|
};
|
|
|
|
static mga_vid_config_t mga_vid_config;
|
|
static uint8_t *vid_data, *frame0, *frame1;
|
|
static int next_frame = 0;
|
|
static int f;
|
|
|
|
#include "mga_common.c"
|
|
|
|
static uint32_t
|
|
init(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t fullscreen, char *title, uint32_t format)
|
|
{
|
|
char *frame_mem;
|
|
uint32_t frame_size;
|
|
|
|
f = open("/dev/mga_vid",O_RDWR);
|
|
|
|
if(f == -1)
|
|
{
|
|
fprintf(stderr,"Couldn't open /dev/mga_vid\n");
|
|
return(-1);
|
|
}
|
|
|
|
switch(format){
|
|
case IMGFMT_YV12:
|
|
mga_vid_config.format=MGA_VID_FORMAT_YV12; break;
|
|
case IMGFMT_YUY2:
|
|
mga_vid_config.format=MGA_VID_FORMAT_YUY2; break;
|
|
default:
|
|
fprintf(stderr,"mga: invalid output format %0X\n",format);
|
|
return (-1);
|
|
}
|
|
|
|
mga_vid_config.src_width = width;
|
|
mga_vid_config.src_height= height;
|
|
// mga_vid_config.dest_width = width;
|
|
// mga_vid_config.dest_height= height;
|
|
mga_vid_config.dest_width = d_width;
|
|
// (width<704)?704:width; // HACK
|
|
mga_vid_config.dest_height= d_height;
|
|
// (height<576)?576:height; // HACK
|
|
mga_vid_config.x_org= 0; // (720-mga_vid_config.dest_width)/2;
|
|
mga_vid_config.y_org= 0; // (576-mga_vid_config.dest_height)/2;
|
|
|
|
if (ioctl(f,MGA_VID_CONFIG,&mga_vid_config))
|
|
{
|
|
perror("Error in mga_vid_config ioctl");
|
|
}
|
|
ioctl(f,MGA_VID_ON,0);
|
|
|
|
frame_size = ((width + 31) & ~31) * height + (((width + 31) & ~31) * height) / 2;
|
|
frame_mem = (char*)mmap(0,frame_size*2,PROT_WRITE,MAP_SHARED,f,0);
|
|
frame0 = frame_mem;
|
|
frame1 = frame_mem + frame_size;
|
|
vid_data = frame0;
|
|
next_frame = 0;
|
|
|
|
//clear the buffer
|
|
memset(frame_mem,0x80,frame_size*2);
|
|
|
|
return 0;
|
|
}
|
|
|
|
static const vo_info_t*
|
|
get_info(void)
|
|
{
|
|
return &vo_info;
|
|
}
|
|
|
|
static void
|
|
uninit(void)
|
|
{
|
|
ioctl( f,MGA_VID_OFF,0 );
|
|
printf("vo: uninit!\n");
|
|
}
|
|
|
|
|
|
|