annotate libvo/vesa_lvo.c @ 26730:41794a5fb100

Add a new suboption to -vo xv and -vo xvmc that allows selection of XVideo adaptor to be used (instead of default one, which is #0). This is useful for example if you'd rather like to use the original Overlay renderer of your GPU instead of the texture blitting engine (which is usually default), which is number one cause of nasty video tearing effects.
author ben
date Tue, 13 May 2008 17:52:25 +0000
parents 8911d4b81d78
children d97a607821f1
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
25527
8911d4b81d78 Relicense files written by Nick Kurshev and marked as "GPL v2" to
diego
parents: 25519
diff changeset
7 * of GNU General Public licence v2 or later.
2869
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"
25518
e2fb1ad9b2b4 Add missing #include for vo_draw_text.
diego
parents: 23457
diff changeset
32 #include "sub.h"
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 13787
diff changeset
33 #include "libmpcodecs/vfcap.h"
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
34
3165
c9f140f5a34e Direct i420 support for Radeons
nick
parents: 3020
diff changeset
35 #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
36 #define NUM_FRAMES 10
3205
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
37 #define UNUSED(x) ((void)(x)) /**< Removes warning about unused arguments */
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
38
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
39 static uint8_t *frames[NUM_FRAMES];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
40
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
41 static int lvo_handler = -1;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
42 static uint8_t *lvo_mem = NULL;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
43 static uint8_t next_frame;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
44 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
45 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
46 uint32_t vlvo_control(uint32_t request, void *data, ...);
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
47
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
48 #define PIXEL_SIZE() ((video_mode_info.BitsPerPixel+7)/8)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
49 #define SCREEN_LINE_SIZE(pixel_size) (video_mode_info.XResolution*(pixel_size) )
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
50 #define IMAGE_LINE_SIZE(pixel_size) (image_width*(pixel_size))
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
51
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
52 extern vo_functions_t video_out_vesa;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
53
2971
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
54 int vlvo_preinit(const char *drvname)
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
55 {
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
56 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_VESA_ThisBranchIsNoLongerSupported);
4493
be41ab8c8918 code cleanup
nick
parents: 4372
diff changeset
57 return -1;
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
58 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
59 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
60 lvo_handler = open(drvname,O_RDWR);
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
61 if(lvo_handler == -1)
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
62 {
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
63 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_VESA_CouldntOpen,drvname);
2971
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
64 return -1;
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
65 }
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
66 /* we are able to tune up this stuff depend on fourcc format */
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
67 video_out_vesa.draw_slice=vlvo_draw_slice;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
68 video_out_vesa.draw_frame=vlvo_draw_frame;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
69 video_out_vesa.flip_page=vlvo_flip_page;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
70 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
71 video_out_vesa.control=vlvo_control;
2971
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
72 return 0;
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
73 }
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
74
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
75 int vlvo_init(unsigned src_width,unsigned src_height,
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
76 unsigned x_org,unsigned y_org,unsigned dst_width,
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
77 unsigned dst_height,unsigned format,unsigned dest_bpp)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
78 {
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
79 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
80 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_VESA_ThisBranchIsNoLongerSupported);
4493
be41ab8c8918 code cleanup
nick
parents: 4372
diff changeset
81 return -1;
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
82 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
83 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
84 image_width = src_width;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
85 image_height = src_height;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
86 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
87 src_format = mga_vid_config.format=format;
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
88 awidth = (src_width + (WIDTH_ALIGN-1)) & ~(WIDTH_ALIGN-1);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
89 switch(format){
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
90 case IMGFMT_YV12:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
91 case IMGFMT_I420:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
92 case IMGFMT_IYUV:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
93 image_bpp=16;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
94 mga_vid_config.frame_size = awidth*src_height+(awidth*src_height)/2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
95 break;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
96 case IMGFMT_YUY2:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
97 case IMGFMT_UYVY:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
98 image_bpp=16;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
99 mga_vid_config.frame_size = awidth*src_height*2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
100 break;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
101 case IMGFMT_RGB15:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
102 case IMGFMT_BGR15:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
103 case IMGFMT_RGB16:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
104 case IMGFMT_BGR16:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
105 image_bpp=16;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
106 mga_vid_config.frame_size = awidth*src_height*2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
107 break;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
108 case IMGFMT_RGB24:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
109 case IMGFMT_BGR24:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
110 image_bpp=24;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
111 mga_vid_config.frame_size = awidth*src_height*3;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
112 break;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
113 case IMGFMT_RGB32:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
114 case IMGFMT_BGR32:
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
115 image_bpp=32;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
116 mga_vid_config.frame_size = awidth*src_height*4;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
117 break;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
118 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
119 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
120 return -1;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
121 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
122 mga_vid_config.colkey_on=0;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
123 mga_vid_config.src_width = src_width;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
124 mga_vid_config.src_height= src_height;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
125 mga_vid_config.dest_width = dst_width;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
126 mga_vid_config.dest_height= dst_height;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
127 mga_vid_config.x_org=x_org;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
128 mga_vid_config.y_org=y_org;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
129 mga_vid_config.num_frames=NUM_FRAMES;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
130 if (ioctl(lvo_handler,MGA_VID_CONFIG,&mga_vid_config))
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
131 {
2971
56faed773768 Added preinit of lvo stuff
nick
parents: 2964
diff changeset
132 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
133 mp_msg(MSGT_VO,MSGL_WARN, MSGTR_LIBVO_VESA_IncompatibleDriverVersion);
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
134 return -1;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
135 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
136 ioctl(lvo_handler,MGA_VID_ON,0);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
137
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
138 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
139 for(i=1;i<NUM_FRAMES;i++)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
140 frames[i] = frames[i-1] + mga_vid_config.frame_size;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
141 next_frame = 0;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
142 lvo_mem = frames[next_frame];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
143
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
144 /*clear the buffer*/
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
145 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
146 return 0;
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
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
149 void vlvo_term( void )
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
150 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
151 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
152 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
153 ioctl( lvo_handler,MGA_VID_OFF,0 );
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
154 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
155 if(lvo_handler != -1) close(lvo_handler);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
156 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
157
3165
c9f140f5a34e Direct i420 support for Radeons
nick
parents: 3020
diff changeset
158 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
159 {
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
160 uint8_t *src;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
161 uint8_t *dest;
3020
e5ebde3ebdd6 Minor fixes with the same results
nick
parents: 3019
diff changeset
162 uint32_t bespitch,bespitch2;
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
163 int i;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
164
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
165 bespitch = (mga_vid_config.src_width + (WIDTH_ALIGN-1)) & ~(WIDTH_ALIGN-1);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
166 bespitch2 = bespitch/2;
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 dest = lvo_mem + bespitch * y + x;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
169 src = image[0];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
170 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
171 fast_memcpy(dest,src,w);
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
172 src+=stride[0];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
173 dest += bespitch;
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
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
176 w/=2;h/=2;x/=2;y/=2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
177
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
178 dest = lvo_mem + bespitch*mga_vid_config.src_height + bespitch2 * y + x;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
179 src = image[1];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
180 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
181 fast_memcpy(dest,src,w);
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
182 src+=stride[1];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
183 dest += bespitch2;
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
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
186 dest = lvo_mem + bespitch*mga_vid_config.src_height
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
187 + bespitch*mga_vid_config.src_height / 4
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
188 + bespitch2 * y + x;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
189 src = image[2];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
190 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
191 fast_memcpy(dest,src,w);
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
192 src+=stride[2];
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
193 dest += bespitch2;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
194 }
3020
e5ebde3ebdd6 Minor fixes with the same results
nick
parents: 3019
diff changeset
195 return 0;
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
e5ebde3ebdd6 Minor fixes with the same results
nick
parents: 3019
diff changeset
198 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
199 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
200 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
201 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
202 if(src_format == IMGFMT_YV12 || src_format == IMGFMT_I420 || src_format == IMGFMT_IYUV)
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
203 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
204 else
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
205 {
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
206 uint8_t *dst;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
207 uint8_t bytpp;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
208 bytpp = (image_bpp+7)/8;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
209 dst = lvo_mem + (image_width * y + x)*bytpp;
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
210 /* 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
211 fast_memcpy(dst,image[0],mga_vid_config.frame_size);
3202
e9b18714e3dc Minor optimization
nick
parents: 3165
diff changeset
212 }
2924
8350b8c25c02 Xv stuff
nick
parents: 2869
diff changeset
213 return 0;
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
214 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
215
3017
fb792e58aac5 Verbosing and minor optimization
nick
parents: 2974
diff changeset
216 uint32_t vlvo_draw_frame(uint8_t *image[])
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
217 {
3017
fb792e58aac5 Verbosing and minor optimization
nick
parents: 2974
diff changeset
218 /* 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
219 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
220 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
221 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
222 return 0;
2869
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
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
225 void vlvo_flip_page(void)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
226 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
227 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
228 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
229 if(vo_doublebuffering)
ff90589b635f Fixed single buffering problems and -vo mga compatibility by number of buffers
nick
parents: 3205
diff changeset
230 {
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
231 ioctl(lvo_handler,MGA_VID_FSEL,&next_frame);
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
232 next_frame=(next_frame+1)%mga_vid_config.num_frames;
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
233 lvo_mem=frames[next_frame];
3266
ff90589b635f Fixed single buffering problems and -vo mga compatibility by number of buffers
nick
parents: 3205
diff changeset
234 }
2869
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
25519
9868224cba3c Disable unused code, fixes the warning:
diego
parents: 25518
diff changeset
237 #if 0
3205
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
238 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
239 {
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
240 UNUSED(x0);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
241 UNUSED(y0);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
242 UNUSED(w);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
243 UNUSED(h);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
244 UNUSED(src);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
245 UNUSED(srca);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
246 UNUSED(stride);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
247 }
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
248
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
249 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
250 {
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
251 uint32_t bespitch = /*(*/mga_vid_config.src_width;// + 15) & ~15;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
252 switch(mga_vid_config.format){
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
253 case IMGFMT_BGR15:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
254 case IMGFMT_RGB15:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
255 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
256 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
257 case IMGFMT_BGR16:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
258 case IMGFMT_RGB16:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
259 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
260 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
261 case IMGFMT_BGR24:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
262 case IMGFMT_RGB24:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
263 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
264 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
265 case IMGFMT_BGR32:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
266 case IMGFMT_RGB32:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
267 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
268 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
269 case IMGFMT_YV12:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
270 case IMGFMT_IYUV:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
271 case IMGFMT_I420:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
272 vo_draw_alpha_yv12(w,h,src,srca,stride,lvo_mem+bespitch*y0+x0,bespitch);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
273 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
274 case IMGFMT_YUY2:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
275 vo_draw_alpha_yuy2(w,h,src,srca,stride,lvo_mem+2*(bespitch*y0+x0),bespitch);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
276 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
277 case IMGFMT_UYVY:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
278 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
279 break;
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
280 default:
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
281 draw_alpha_null(x0,y0,w,h,src,srca,stride);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
282 }
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
283 }
25519
9868224cba3c Disable unused code, fixes the warning:
diego
parents: 25518
diff changeset
284 #endif
3205
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
285
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
286 void vlvo_draw_osd(void)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
287 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
288 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
289 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
290 /* TODO: hw support */
3205
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
291 #if 0
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
292 /* disable this stuff until new fbvid.h interface will be implemented
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
293 because in different fourcc radeon_vid and rage128_vid have different
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
294 width alignment */
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
295 vo_draw_text(mga_vid_config.src_width,mga_vid_config.src_height,draw_alpha);
1d2b2885bb8c Minor fixes
nick
parents: 3202
diff changeset
296 #endif
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
297 }
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
298
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
299 uint32_t vlvo_query_info(uint32_t format)
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
300 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 15212
diff changeset
301 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
302 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
303 return VFCAP_CSP_SUPPORTED;
2869
107d9e9e5bd1 New video output technique Linux Video Overlay:
nick
parents:
diff changeset
304 }
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
305
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
306 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
307 {
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
308 switch (request) {
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
309 case VOCTRL_QUERY_FORMAT:
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
310 return vlvo_query_info(*((uint32_t*)data));
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
311 }
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
312 return VO_NOTIMPL;
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4493
diff changeset
313 }