annotate libvo/vesa_lvo.c @ 25317:7f3cb5408f28

Fixed VIDIX color bug that was introduced when Radeon VIDIX driver was synchronized with vidix.sf.net. The red color was saturating. Corrected value fixes the issue and restore the color to the level it used to have before synchronization. Meaning of the value remains unknow but was retrieved from register's value of a Radeon 9000 card, so it may need further testing. Patch by Guillaume Lecerf (foxcore at gmail dot com)
author ben
date Mon, 10 Dec 2007 19:27:46 +0000
parents a124f3abc1ec
children e2fb1ad9b2b4
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 /*
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
2 * vesa_lvo.c
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
3 *
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
4 * Copyright (C) Nick Kurshev <nickols_k@mail.ru> - Oct 2001
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
5 *
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
6 * You can redistribute this file under terms and conditions
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
7 * of GNU General Public licence v2.
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
8 *
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
9 * This file contains vo_vesa interface to Linux Video Overlay.
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
10 * (Partly based on vo_mga.c from mplayer's package)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
11 */
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
12
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
13 #include <inttypes.h>
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
14 #include <sys/ioctl.h>
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
15 #include <unistd.h>
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
16 #include <fcntl.h>
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
17 #include <sys/mman.h>
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
18 #include <stdio.h>
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
19 #include <stdlib.h>
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
20 #include <string.h>
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
21
3205
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
22 #include "config.h"
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
23 #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
24 #include "help_mp.h"
3205
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
25
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
26 #include "vesa_lvo.h"
19431
ac69ba536915 Explicitly include libmpcodecs/img_format.h and libvo/fastmemcpy.h.
diego
parents: 18234
diff changeset
27 #include "libmpcodecs/img_format.h"
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 6817
diff changeset
28 #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
29 #include "fastmemcpy.h"
3205
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
30 #include "osd.h"
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
31 #include "video_out.h"
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13787
diff changeset
32 #include "libmpcodecs/vfcap.h"
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
33
3165
c9f140f5a34e Direct i420 support for Radeons
nick
parents: 3020
diff changeset
34 #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
35 #define NUM_FRAMES 10
3205
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
36 #define UNUSED(x) ((void)(x)) /**< Removes warning about unused arguments */
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
37
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
38 static uint8_t *frames[NUM_FRAMES];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
39
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
40 static int lvo_handler = -1;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
41 static uint8_t *lvo_mem = NULL;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
42 static uint8_t next_frame;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
43 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
44 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
45 uint32_t vlvo_control(uint32_t request, void *data, ...);
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
46
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
47 #define PIXEL_SIZE() ((video_mode_info.BitsPerPixel+7)/8)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
48 #define SCREEN_LINE_SIZE(pixel_size) (video_mode_info.XResolution*(pixel_size) )
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
49 #define IMAGE_LINE_SIZE(pixel_size) (image_width*(pixel_size))
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
50
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
51 extern vo_functions_t video_out_vesa;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
52
2971
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
53 int vlvo_preinit(const char *drvname)
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
54 {
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
55 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_VESA_ThisBranchIsNoLongerSupported);
4493
be41ab8c8918 code cleanup
nick
parents: 4372
diff changeset
56 return -1;
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
57 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
58 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
59 lvo_handler = open(drvname,O_RDWR);
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
60 if(lvo_handler == -1)
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
61 {
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
62 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_VESA_CouldntOpen,drvname);
2971
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
63 return -1;
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
64 }
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
65 /* we are able to tune up this stuff depend on fourcc format */
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
66 video_out_vesa.draw_slice=vlvo_draw_slice;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
67 video_out_vesa.draw_frame=vlvo_draw_frame;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
68 video_out_vesa.flip_page=vlvo_flip_page;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
69 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
70 video_out_vesa.control=vlvo_control;
2971
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
71 return 0;
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
72 }
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
73
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
74 int vlvo_init(unsigned src_width,unsigned src_height,
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
75 unsigned x_org,unsigned y_org,unsigned dst_width,
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
76 unsigned dst_height,unsigned format,unsigned dest_bpp)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
77 {
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
78 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
79 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_VESA_ThisBranchIsNoLongerSupported);
4493
be41ab8c8918 code cleanup
nick
parents: 4372
diff changeset
80 return -1;
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
81 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
82 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
83 image_width = src_width;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
84 image_height = src_height;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
85 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
86 src_format = mga_vid_config.format=format;
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
87 awidth = (src_width + (WIDTH_ALIGN-1)) & ~(WIDTH_ALIGN-1);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
88 switch(format){
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
89 case IMGFMT_YV12:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
90 case IMGFMT_I420:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
91 case IMGFMT_IYUV:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
92 image_bpp=16;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
93 mga_vid_config.frame_size = awidth*src_height+(awidth*src_height)/2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
94 break;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
95 case IMGFMT_YUY2:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
96 case IMGFMT_UYVY:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
97 image_bpp=16;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
98 mga_vid_config.frame_size = awidth*src_height*2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
99 break;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
100 case IMGFMT_RGB15:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
101 case IMGFMT_BGR15:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
102 case IMGFMT_RGB16:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
103 case IMGFMT_BGR16:
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*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_RGB24:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
108 case IMGFMT_BGR24:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
109 image_bpp=24;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
110 mga_vid_config.frame_size = awidth*src_height*3;
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_RGB32:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
113 case IMGFMT_BGR32:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
114 image_bpp=32;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
115 mga_vid_config.frame_size = awidth*src_height*4;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
116 break;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
117 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
118 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
119 return -1;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
120 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
121 mga_vid_config.colkey_on=0;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
122 mga_vid_config.src_width = src_width;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
123 mga_vid_config.src_height= src_height;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
124 mga_vid_config.dest_width = dst_width;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
125 mga_vid_config.dest_height= dst_height;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
126 mga_vid_config.x_org=x_org;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
127 mga_vid_config.y_org=y_org;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
128 mga_vid_config.num_frames=NUM_FRAMES;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
129 if (ioctl(lvo_handler,MGA_VID_CONFIG,&mga_vid_config))
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
130 {
2971
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
131 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
132 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_VESA_IncompatibleDriverVersion);
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
133 return -1;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
134 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
135 ioctl(lvo_handler,MGA_VID_ON,0);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
136
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
137 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
138 for(i=1;i<NUM_FRAMES;i++)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
139 frames[i] = frames[i-1] + mga_vid_config.frame_size;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
140 next_frame = 0;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
141 lvo_mem = frames[next_frame];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
142
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
143 /*clear the buffer*/
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
144 memset(frames[0],0x80,mga_vid_config.frame_size*mga_vid_config.num_frames);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
145 return 0;
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
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
148 void vlvo_term( void )
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
149 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
150 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
151 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
152 ioctl( lvo_handler,MGA_VID_OFF,0 );
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
153 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
154 if(lvo_handler != -1) close(lvo_handler);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
155 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
156
3165
c9f140f5a34e Direct i420 support for Radeons
nick
parents: 3020
diff changeset
157 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
158 {
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
159 uint8_t *src;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
160 uint8_t *dest;
3020
e5ebde3ebdd6 Minor fixes with the same results
nick
parents: 3019
diff changeset
161 uint32_t bespitch,bespitch2;
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
162 int i;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
163
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
164 bespitch = (mga_vid_config.src_width + (WIDTH_ALIGN-1)) & ~(WIDTH_ALIGN-1);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
165 bespitch2 = bespitch/2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
166
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
167 dest = lvo_mem + bespitch * y + x;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
168 src = image[0];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
169 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
170 fast_memcpy(dest,src,w);
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
171 src+=stride[0];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
172 dest += bespitch;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
173 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
174
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
175 w/=2;h/=2;x/=2;y/=2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
176
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
177 dest = lvo_mem + bespitch*mga_vid_config.src_height + bespitch2 * y + x;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
178 src = image[1];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
179 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
180 fast_memcpy(dest,src,w);
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
181 src+=stride[1];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
182 dest += bespitch2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
183 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
184
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
185 dest = lvo_mem + bespitch*mga_vid_config.src_height
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
186 + bespitch*mga_vid_config.src_height / 4
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
187 + bespitch2 * y + x;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
188 src = image[2];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
189 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
190 fast_memcpy(dest,src,w);
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
191 src+=stride[2];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
192 dest += bespitch2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
193 }
3020
e5ebde3ebdd6 Minor fixes with the same results
nick
parents: 3019
diff changeset
194 return 0;
e5ebde3ebdd6 Minor fixes with the same results
nick
parents: 3019
diff changeset
195 }
e5ebde3ebdd6 Minor fixes with the same results
nick
parents: 3019
diff changeset
196
e5ebde3ebdd6 Minor fixes with the same results
nick
parents: 3019
diff changeset
197 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
198 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
199 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
200 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
201 if(src_format == IMGFMT_YV12 || src_format == IMGFMT_I420 || src_format == IMGFMT_IYUV)
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
202 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
203 else
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
204 {
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
205 uint8_t *dst;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
206 uint8_t bytpp;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
207 bytpp = (image_bpp+7)/8;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
208 dst = lvo_mem + (image_width * y + x)*bytpp;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
209 /* 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
210 fast_memcpy(dst,image[0],mga_vid_config.frame_size);
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
211 }
2924
8350b8c25c02 Xv stuff
nick
parents: 2869
diff changeset
212 return 0;
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
213 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
214
3017
fb792e58aac5 Verbosing and minor optimization
nick
parents: 2974
diff changeset
215 uint32_t vlvo_draw_frame(uint8_t *image[])
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
216 {
3017
fb792e58aac5 Verbosing and minor optimization
nick
parents: 2974
diff changeset
217 /* 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
218 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
219 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
220 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
221 return 0;
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
222 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
223
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
224 void vlvo_flip_page(void)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
225 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
226 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
227 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
228 if(vo_doublebuffering)
ff90589b635f Fixed single buffering problems and -vo mga compatibility by number of buffers
nick
parents: 3205
diff changeset
229 {
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
230 ioctl(lvo_handler,MGA_VID_FSEL,&next_frame);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
231 next_frame=(next_frame+1)%mga_vid_config.num_frames;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
232 lvo_mem=frames[next_frame];
3266
ff90589b635f Fixed single buffering problems and -vo mga compatibility by number of buffers
nick
parents: 3205
diff changeset
233 }
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
3205
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
236 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
237 {
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
238 UNUSED(x0);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
239 UNUSED(y0);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
240 UNUSED(w);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
241 UNUSED(h);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
242 UNUSED(src);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
243 UNUSED(srca);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
244 UNUSED(stride);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
245 }
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
246
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
247 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
248 {
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
249 uint32_t bespitch = /*(*/mga_vid_config.src_width;// + 15) & ~15;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
250 switch(mga_vid_config.format){
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
251 case IMGFMT_BGR15:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
252 case IMGFMT_RGB15:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
253 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
254 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
255 case IMGFMT_BGR16:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
256 case IMGFMT_RGB16:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
257 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
258 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
259 case IMGFMT_BGR24:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
260 case IMGFMT_RGB24:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
261 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
262 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
263 case IMGFMT_BGR32:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
264 case IMGFMT_RGB32:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
265 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
266 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
267 case IMGFMT_YV12:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
268 case IMGFMT_IYUV:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
269 case IMGFMT_I420:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
270 vo_draw_alpha_yv12(w,h,src,srca,stride,lvo_mem+bespitch*y0+x0,bespitch);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
271 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
272 case IMGFMT_YUY2:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
273 vo_draw_alpha_yuy2(w,h,src,srca,stride,lvo_mem+2*(bespitch*y0+x0),bespitch);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
274 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
275 case IMGFMT_UYVY:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
276 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
277 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
278 default:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
279 draw_alpha_null(x0,y0,w,h,src,srca,stride);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
280 }
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
281 }
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
282
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
283 void vlvo_draw_osd(void)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
284 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
285 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
286 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
287 /* TODO: hw support */
3205
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
288 #if 0
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
289 /* disable this stuff until new fbvid.h interface will be implemented
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
290 because in different fourcc radeon_vid and rage128_vid have different
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
291 width alignment */
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
292 vo_draw_text(mga_vid_config.src_width,mga_vid_config.src_height,draw_alpha);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
293 #endif
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
294 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
295
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
296 uint32_t vlvo_query_info(uint32_t format)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
297 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
298 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
299 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
300 return VFCAP_CSP_SUPPORTED;
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
301 }
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
302
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
303 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
304 {
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
305 switch (request) {
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
306 case VOCTRL_QUERY_FORMAT:
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
307 return vlvo_query_info(*((uint32_t*)data));
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
308 }
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
309 return VO_NOTIMPL;
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
310 }