annotate libvo/vesa_lvo.c @ 29516:87897065b7d7

Fix aspect_fit to work correctly when borders need to be added on top and bottom, previous code accidentally compared against screen dimensions, resulting in cropping instead of added borders.
author reimar
date Thu, 27 Aug 2009 12:38:22 +0000
parents 0f1b5b68af32
children 04071c66eeb1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
1 /*
27509
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25527
diff changeset
2 * vo_vesa interface to Linux Video Overlay
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25527
diff changeset
3 * (partly based on vo_mga.c)
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
4 *
27509
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25527
diff changeset
5 * copyright (C) 2001 Nick Kurshev <nickols_k@mail.ru>
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25527
diff changeset
6 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25527
diff changeset
7 * This file is part of MPlayer.
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
8 *
27509
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25527
diff changeset
9 * MPlayer is free software; you can redistribute it and/or modify
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25527
diff changeset
10 * it under the terms of the GNU General Public License as published by
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25527
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25527
diff changeset
12 * (at your option) any later version.
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
13 *
27509
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25527
diff changeset
14 * MPlayer is distributed in the hope that it will be useful,
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25527
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25527
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25527
diff changeset
17 * GNU General Public License for more details.
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25527
diff changeset
18 *
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25527
diff changeset
19 * You should have received a copy of the GNU General Public License along
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25527
diff changeset
20 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
d97a607821f1 Replace casual GPL notices by proper license headers.
diego
parents: 25527
diff changeset
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
22 */
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
23
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
24 #include <inttypes.h>
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
25 #include <sys/ioctl.h>
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
26 #include <unistd.h>
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
27 #include <fcntl.h>
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
28 #include <sys/mman.h>
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
29 #include <stdio.h>
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
30 #include <stdlib.h>
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
31 #include <string.h>
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
32
3205
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
33 #include "config.h"
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
34 #include "mp_msg.h"
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
35 #include "help_mp.h"
3205
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
36
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
37 #include "vesa_lvo.h"
19431
ac69ba536915 Explicitly include libmpcodecs/img_format.h and libvo/fastmemcpy.h.
diego
parents: 18234
diff changeset
38 #include "libmpcodecs/img_format.h"
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 6817
diff changeset
39 #include "drivers/mga_vid.h" /* <- should be changed to "linux/'something'.h" */
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
40 #include "fastmemcpy.h"
3205
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
41 #include "osd.h"
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
42 #include "video_out.h"
25518
e2fb1ad9b2b4 Add missing #include for vo_draw_text.
diego
parents: 23457
diff changeset
43 #include "sub.h"
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13787
diff changeset
44 #include "libmpcodecs/vfcap.h"
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
45
3165
c9f140f5a34e Direct i420 support for Radeons
nick
parents: 3020
diff changeset
46 #define WIDTH_ALIGN 32 /* should be 16 for rage:422 and 32 for rage:420 */
3266
ff90589b635f Fixed single buffering problems and -vo mga compatibility by number of buffers
nick
parents: 3205
diff changeset
47 #define NUM_FRAMES 10
3205
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
48 #define UNUSED(x) ((void)(x)) /**< Removes warning about unused arguments */
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
49
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
50 static uint8_t *frames[NUM_FRAMES];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
51
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
52 static int lvo_handler = -1;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
53 static uint8_t *lvo_mem = NULL;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
54 static uint8_t next_frame;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
55 static mga_vid_config_t mga_vid_config;
2974
49199909c939 Ugly YV12 support on Radeon BES. (Only radeon_vid currently work with this stuff :( Sorry!)
nick
parents: 2971
diff changeset
56 static unsigned image_bpp,image_height,image_width,src_format;
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
57 uint32_t vlvo_control(uint32_t request, void *data, ...);
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
58
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
59 #define PIXEL_SIZE() ((video_mode_info.BitsPerPixel+7)/8)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
60 #define SCREEN_LINE_SIZE(pixel_size) (video_mode_info.XResolution*(pixel_size) )
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
61 #define IMAGE_LINE_SIZE(pixel_size) (image_width*(pixel_size))
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
62
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
63 extern vo_functions_t video_out_vesa;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
64
2971
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
65 int vlvo_preinit(const char *drvname)
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
66 {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
67 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_VESA_ThisBranchIsNoLongerSupported);
4493
be41ab8c8918 code cleanup
nick
parents: 4372
diff changeset
68 return -1;
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
69 if( mp_msg_test(MSGT_VO,MSGL_DBG2) ) {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
70 mp_msg(MSGT_VO,MSGL_DBG2, "vesa_lvo: vlvo_preinit(%s) was called\n",drvname);}
2971
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
71 lvo_handler = open(drvname,O_RDWR);
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
72 if(lvo_handler == -1)
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
73 {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
74 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_VESA_CouldntOpen,drvname);
2971
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
75 return -1;
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
76 }
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
77 /* we are able to tune up this stuff depend on fourcc format */
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
78 video_out_vesa.draw_slice=vlvo_draw_slice;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
79 video_out_vesa.draw_frame=vlvo_draw_frame;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
80 video_out_vesa.flip_page=vlvo_flip_page;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
81 video_out_vesa.draw_osd=vlvo_draw_osd;
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
82 video_out_vesa.control=vlvo_control;
2971
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
83 return 0;
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
84 }
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
85
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
86 int vlvo_init(unsigned src_width,unsigned src_height,
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
87 unsigned x_org,unsigned y_org,unsigned dst_width,
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
88 unsigned dst_height,unsigned format,unsigned dest_bpp)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
89 {
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
90 size_t i,awidth;
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
91 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_VESA_ThisBranchIsNoLongerSupported);
4493
be41ab8c8918 code cleanup
nick
parents: 4372
diff changeset
92 return -1;
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
93 if( mp_msg_test(MSGT_VO,MSGL_DBG2) ) {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
94 mp_msg(MSGT_VO,MSGL_DBG2, "vesa_lvo: vlvo_init() was called\n");}
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
95 image_width = src_width;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
96 image_height = src_height;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
97 mga_vid_config.version=MGA_VID_VERSION;
2974
49199909c939 Ugly YV12 support on Radeon BES. (Only radeon_vid currently work with this stuff :( Sorry!)
nick
parents: 2971
diff changeset
98 src_format = mga_vid_config.format=format;
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
99 awidth = (src_width + (WIDTH_ALIGN-1)) & ~(WIDTH_ALIGN-1);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
100 switch(format){
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
101 case IMGFMT_YV12:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
102 case IMGFMT_I420:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
103 case IMGFMT_IYUV:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
104 image_bpp=16;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
105 mga_vid_config.frame_size = awidth*src_height+(awidth*src_height)/2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
106 break;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
107 case IMGFMT_YUY2:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
108 case IMGFMT_UYVY:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
109 image_bpp=16;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
110 mga_vid_config.frame_size = awidth*src_height*2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
111 break;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
112 case IMGFMT_RGB15:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
113 case IMGFMT_BGR15:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
114 case IMGFMT_RGB16:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
115 case IMGFMT_BGR16:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
116 image_bpp=16;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
117 mga_vid_config.frame_size = awidth*src_height*2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
118 break;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
119 case IMGFMT_RGB24:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
120 case IMGFMT_BGR24:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
121 image_bpp=24;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
122 mga_vid_config.frame_size = awidth*src_height*3;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
123 break;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
124 case IMGFMT_RGB32:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
125 case IMGFMT_BGR32:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
126 image_bpp=32;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
127 mga_vid_config.frame_size = awidth*src_height*4;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
128 break;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
129 default:
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
130 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_VESA_InvalidOutputFormat,vo_format_name(format),format);
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
131 return -1;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
132 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
133 mga_vid_config.colkey_on=0;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
134 mga_vid_config.src_width = src_width;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
135 mga_vid_config.src_height= src_height;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
136 mga_vid_config.dest_width = dst_width;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
137 mga_vid_config.dest_height= dst_height;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
138 mga_vid_config.x_org=x_org;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
139 mga_vid_config.y_org=y_org;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
140 mga_vid_config.num_frames=NUM_FRAMES;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
141 if (ioctl(lvo_handler,MGA_VID_CONFIG,&mga_vid_config))
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
142 {
2971
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
143 perror("vesa_lvo: Error in mga_vid_config ioctl()");
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
144 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_VESA_IncompatibleDriverVersion);
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
145 return -1;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
146 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
147 ioctl(lvo_handler,MGA_VID_ON,0);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
148
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
149 frames[0] = (char*)mmap(0,mga_vid_config.frame_size*mga_vid_config.num_frames,PROT_WRITE,MAP_SHARED,lvo_handler,0);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
150 for(i=1;i<NUM_FRAMES;i++)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
151 frames[i] = frames[i-1] + mga_vid_config.frame_size;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
152 next_frame = 0;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
153 lvo_mem = frames[next_frame];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
154
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
155 /*clear the buffer*/
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
156 memset(frames[0],0x80,mga_vid_config.frame_size*mga_vid_config.num_frames);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27509
diff changeset
157 return 0;
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
158 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
159
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
160 void vlvo_term( void )
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
161 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
162 if( mp_msg_test(MSGT_VO,MSGL_DBG2) ) {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
163 mp_msg(MSGT_VO,MSGL_DBG2, "vesa_lvo: vlvo_term() was called\n");}
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
164 ioctl( lvo_handler,MGA_VID_OFF,0 );
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
165 munmap(frames[0],mga_vid_config.frame_size*mga_vid_config.num_frames);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
166 if(lvo_handler != -1) close(lvo_handler);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
167 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
168
3165
c9f140f5a34e Direct i420 support for Radeons
nick
parents: 3020
diff changeset
169 uint32_t vlvo_draw_slice_420(uint8_t *image[], int stride[], int w,int h,int x,int y)
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
170 {
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
171 uint8_t *src;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
172 uint8_t *dest;
3020
e5ebde3ebdd6 Minor fixes with the same results
nick
parents: 3019
diff changeset
173 uint32_t bespitch,bespitch2;
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
174 int i;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
175
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
176 bespitch = (mga_vid_config.src_width + (WIDTH_ALIGN-1)) & ~(WIDTH_ALIGN-1);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
177 bespitch2 = bespitch/2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
178
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
179 dest = lvo_mem + bespitch * y + x;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
180 src = image[0];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
181 for(i=0;i<h;i++){
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 19431
diff changeset
182 fast_memcpy(dest,src,w);
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
183 src+=stride[0];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
184 dest += bespitch;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
185 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
186
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
187 w/=2;h/=2;x/=2;y/=2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
188
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
189 dest = lvo_mem + bespitch*mga_vid_config.src_height + bespitch2 * y + x;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
190 src = image[1];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
191 for(i=0;i<h;i++){
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 19431
diff changeset
192 fast_memcpy(dest,src,w);
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
193 src+=stride[1];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
194 dest += bespitch2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
195 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
196
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
197 dest = lvo_mem + bespitch*mga_vid_config.src_height
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
198 + bespitch*mga_vid_config.src_height / 4
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
199 + bespitch2 * y + x;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
200 src = image[2];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
201 for(i=0;i<h;i++){
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 19431
diff changeset
202 fast_memcpy(dest,src,w);
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
203 src+=stride[2];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
204 dest += bespitch2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
205 }
3020
e5ebde3ebdd6 Minor fixes with the same results
nick
parents: 3019
diff changeset
206 return 0;
e5ebde3ebdd6 Minor fixes with the same results
nick
parents: 3019
diff changeset
207 }
e5ebde3ebdd6 Minor fixes with the same results
nick
parents: 3019
diff changeset
208
e5ebde3ebdd6 Minor fixes with the same results
nick
parents: 3019
diff changeset
209 uint32_t vlvo_draw_slice(uint8_t *image[], int stride[], int w,int h,int x,int y)
e5ebde3ebdd6 Minor fixes with the same results
nick
parents: 3019
diff changeset
210 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
211 if( mp_msg_test(MSGT_VO,MSGL_DBG2) ) {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
212 mp_msg(MSGT_VO,MSGL_DBG2, "vesa_lvo: vlvo_draw_slice() was called\n");}
3165
c9f140f5a34e Direct i420 support for Radeons
nick
parents: 3020
diff changeset
213 if(src_format == IMGFMT_YV12 || src_format == IMGFMT_I420 || src_format == IMGFMT_IYUV)
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
214 vlvo_draw_slice_420(image,stride,w,h,x,y);
2974
49199909c939 Ugly YV12 support on Radeon BES. (Only radeon_vid currently work with this stuff :( Sorry!)
nick
parents: 2971
diff changeset
215 else
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
216 {
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
217 uint8_t *dst;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
218 uint8_t bytpp;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
219 bytpp = (image_bpp+7)/8;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
220 dst = lvo_mem + (image_width * y + x)*bytpp;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
221 /* vlvo_draw_slice_422(image,stride,w,h,x,y); just for speed */
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 19431
diff changeset
222 fast_memcpy(dst,image[0],mga_vid_config.frame_size);
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
223 }
2924
8350b8c25c02 Xv stuff
nick
parents: 2869
diff changeset
224 return 0;
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
225 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
226
3017
fb792e58aac5 Verbosing and minor optimization
nick
parents: 2974
diff changeset
227 uint32_t vlvo_draw_frame(uint8_t *image[])
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
228 {
3017
fb792e58aac5 Verbosing and minor optimization
nick
parents: 2974
diff changeset
229 /* Note it's very strange but sometime for YUY2 draw_frame is called */
23457
a124f3abc1ec Replace implicit use of fast_memcpy via macro by explicit use to allow
reimar
parents: 19431
diff changeset
230 fast_memcpy(lvo_mem,image[0],mga_vid_config.frame_size);
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
231 if( mp_msg_test(MSGT_VO,MSGL_DBG2) ) {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
232 mp_msg(MSGT_VO,MSGL_DBG2, "vesa_lvo: vlvo_flip_page() was called\n");}
3017
fb792e58aac5 Verbosing and minor optimization
nick
parents: 2974
diff changeset
233 return 0;
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
234 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
235
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
236 void vlvo_flip_page(void)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
237 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
238 if( mp_msg_test(MSGT_VO,MSGL_DBG2) ) {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
239 mp_msg(MSGT_VO,MSGL_DBG2, "vesa_lvo: vlvo_draw_osd() was called\n");}
3266
ff90589b635f Fixed single buffering problems and -vo mga compatibility by number of buffers
nick
parents: 3205
diff changeset
240 if(vo_doublebuffering)
ff90589b635f Fixed single buffering problems and -vo mga compatibility by number of buffers
nick
parents: 3205
diff changeset
241 {
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
242 ioctl(lvo_handler,MGA_VID_FSEL,&next_frame);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
243 next_frame=(next_frame+1)%mga_vid_config.num_frames;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
244 lvo_mem=frames[next_frame];
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27509
diff changeset
245 }
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
246 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
247
25519
9868224cba3c Disable unused code, fixes the warning:
diego
parents: 25518
diff changeset
248 #if 0
3205
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
249 static void draw_alpha_null(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
250 {
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
251 UNUSED(x0);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
252 UNUSED(y0);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
253 UNUSED(w);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
254 UNUSED(h);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
255 UNUSED(src);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
256 UNUSED(srca);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
257 UNUSED(stride);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
258 }
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
259
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
260 static void draw_alpha(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
261 {
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
262 uint32_t bespitch = /*(*/mga_vid_config.src_width;// + 15) & ~15;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
263 switch(mga_vid_config.format){
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
264 case IMGFMT_BGR15:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
265 case IMGFMT_RGB15:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
266 vo_draw_alpha_rgb15(w,h,src,srca,stride,lvo_mem+2*(y0*bespitch+x0),2*bespitch);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
267 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
268 case IMGFMT_BGR16:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
269 case IMGFMT_RGB16:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
270 vo_draw_alpha_rgb16(w,h,src,srca,stride,lvo_mem+2*(y0*bespitch+x0),2*bespitch);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
271 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
272 case IMGFMT_BGR24:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
273 case IMGFMT_RGB24:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
274 vo_draw_alpha_rgb24(w,h,src,srca,stride,lvo_mem+3*(y0*bespitch+x0),3*bespitch);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
275 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
276 case IMGFMT_BGR32:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
277 case IMGFMT_RGB32:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
278 vo_draw_alpha_rgb32(w,h,src,srca,stride,lvo_mem+4*(y0*bespitch+x0),4*bespitch);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
279 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
280 case IMGFMT_YV12:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
281 case IMGFMT_IYUV:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
282 case IMGFMT_I420:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
283 vo_draw_alpha_yv12(w,h,src,srca,stride,lvo_mem+bespitch*y0+x0,bespitch);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
284 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
285 case IMGFMT_YUY2:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
286 vo_draw_alpha_yuy2(w,h,src,srca,stride,lvo_mem+2*(bespitch*y0+x0),bespitch);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
287 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
288 case IMGFMT_UYVY:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
289 vo_draw_alpha_yuy2(w,h,src,srca,stride,lvo_mem+2*(bespitch*y0+x0)+1,bespitch);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
290 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
291 default:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
292 draw_alpha_null(x0,y0,w,h,src,srca,stride);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
293 }
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
294 }
25519
9868224cba3c Disable unused code, fixes the warning:
diego
parents: 25518
diff changeset
295 #endif
3205
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
296
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
297 void vlvo_draw_osd(void)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
298 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
299 if( mp_msg_test(MSGT_VO,MSGL_DBG2) ) {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
300 mp_msg(MSGT_VO,MSGL_DBG2,"vesa_lvo: vlvo_draw_osd() was called\n"); }
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
301 /* TODO: hw support */
3205
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
302 #if 0
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
303 /* disable this stuff until new fbvid.h interface will be implemented
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
304 because in different fourcc radeon_vid and rage128_vid have different
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
305 width alignment */
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
306 vo_draw_text(mga_vid_config.src_width,mga_vid_config.src_height,draw_alpha);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
307 #endif
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
308 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
309
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
310 uint32_t vlvo_query_info(uint32_t format)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
311 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
312 if( mp_msg_test(MSGT_VO,MSGL_DBG2) ) {
18234
a107276371a8 Part 5 and final of otvos attila's oattila AT chello-hu mp_msg changes, with lots of corrections
reynaldo
parents: 17932
diff changeset
313 mp_msg(MSGT_VO,MSGL_DBG2, "vesa_lvo: query_format was called: %x (%s)\n",format,vo_format_name(format)); }
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13787
diff changeset
314 return VFCAP_CSP_SUPPORTED;
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
315 }
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
316
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
317 uint32_t vlvo_control(uint32_t request, void *data, ...)
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
318 {
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
319 switch (request) {
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
320 case VOCTRL_QUERY_FORMAT:
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
321 return vlvo_query_info(*((uint32_t*)data));
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
322 }
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
323 return VO_NOTIMPL;
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
324 }