annotate libvo/vo_xvmc.c @ 21202:8ed444639678

spurious () like in ({code;}) probably is not valid C, icc 9, definitely will not compile it, and whatever it is supposed to be good for it does not seem to be needed.
author reimar
date Sat, 25 Nov 2006 13:39:21 +0000
parents 1de63b07a353
children 9338a0782bc3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1 #include <stdlib.h>
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
2 #include <stdio.h>
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
3 #include <string.h>
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
4 #include <unistd.h>
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
5
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
6 #include "config.h"
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
7 #include "mp_msg.h"
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
8 #include "video_out.h"
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
9 #include "video_out_internal.h"
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
10 #include "fastmemcpy.h"
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
11 #include "osdep/timer.h"
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
12
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
13 #include <X11/Xlib.h>
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
14 #include <X11/Xutil.h>
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
15 #include <X11/Xatom.h>
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
16
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
17 #ifdef HAVE_SHM
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
18 #include <sys/ipc.h>
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
19 #include <sys/shm.h>
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
20 #include <X11/extensions/XShm.h>
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
21 #endif
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
22
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
23 #include <X11/extensions/Xv.h>
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
24 #include <X11/extensions/Xvlib.h>
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
25 #include <X11/extensions/XvMClib.h>
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
26
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
27 #include "x11_common.h"
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
28 #include "xvmc_render.h"
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
29
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
30 #include "sub.h"
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
31 #include "aspect.h"
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
32
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
33 #include "subopt-helper.h"
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
34
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
35 #ifdef HAVE_NEW_GUI
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 13101
diff changeset
36 #include "Gui/interface.h"
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
37 #endif
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
38
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
39 //no chanse xinerama to be suported in near future
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
40 #undef HAVE_XINERAMA
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
41
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
42 #undef NDEBUG
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
43 #include <assert.h>
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
44
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
45
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
46 #define UNUSED(x) ((void)(x))
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
47
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
48
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
49 static int benchmark;
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
50 static int use_sleep;
15102
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
51 static int first_frame;//draw colorkey on first frame
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
52 static int use_queue;
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
53 static int xv_port_request = 0;
20244
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
54 static int bob_deinterlace;
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
55 static int top_field_first;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
56
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
57 static int image_width,image_height;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
58 static uint32_t drwX,drwY;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
59
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
60 #define NO_SUBPICTURE 0
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
61 #define OVERLAY_SUBPICTURE 1
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
62 #define BLEND_SUBPICTURE 2
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
63 #define BACKEND_SUBPICTURE 3
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
64
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
65 static int subpicture_mode;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
66 static int subpicture_alloc;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
67 static XvMCSubpicture subpicture;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
68 static XvImageFormatValues subpicture_info;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
69 static int subpicture_clear_color;//transparent color for the subpicture or color key for overlay
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
70
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
71 static XvMCSurfaceInfo surface_info;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
72 static XvMCContext ctx;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
73 static XvMCBlockArray data_blocks;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
74 static XvMCMacroBlockArray mv_blocks;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
75
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
76 #define MAX_SURFACES 8
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
77 static int number_of_surfaces=0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
78 static XvMCSurface surface_array[MAX_SURFACES];
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
79 static xvmc_render_state_t * surface_render;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
80
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
81 static xvmc_render_state_t * p_render_surface_to_show=NULL;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
82 static xvmc_render_state_t * p_render_surface_visible=NULL;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
83
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
84 //display queue, kinda render ahead
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
85 static xvmc_render_state_t * show_queue[MAX_SURFACES];
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
86 static int free_element;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
87
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
88
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
89 static void (*draw_osd_fnc)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
90 static void (*clear_osd_fnc)(int x0,int y0, int w,int h);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
91 static void (*init_osd_fnc)(void);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
92
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
93 static void draw_osd_AI44(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
94 static void draw_osd_IA44(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
95 static void clear_osd_subpic(int x0,int y0, int w,int h);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
96 static void init_osd_yuv_pal(void);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
97
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
98
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
99 static const struct{
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
100 int id;//id as xvimages or as mplayer RGB|{8,15,16,24,32}
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
101 void (* init_func_ptr)();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
102 void (* draw_func_ptr)();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
103 void (* clear_func_ptr)();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
104 } osd_render[]={
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
105 {0x34344149,init_osd_yuv_pal,draw_osd_AI44,clear_osd_subpic},
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
106 {0x34344941,init_osd_yuv_pal,draw_osd_IA44,clear_osd_subpic},
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
107 {0,NULL,NULL,NULL}
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
108 };
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
109
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
110 static void xvmc_free(void);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
111 static int count_free_surfaces();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
112 static xvmc_render_state_t * find_free_surface();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
113
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
114 static vo_info_t info = {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
115 "XVideo Motion Compensation",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
116 "xvmc",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
117 "Ivan Kalvachev <iive@users.sf.net>",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
118 ""
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
119 };
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
120
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
121 LIBVO_EXTERN(xvmc);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
122
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
123 //shm stuff from vo_xv
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
124 #ifdef HAVE_SHM
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
125 /* since it doesn't seem to be defined on some platforms */
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
126 int XShmGetEventBase(Display*);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
127 static XShmSegmentInfo Shminfo;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
128 static int Shmem_Flag;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
129 #endif
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
130 XvImage * xvimage;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
131
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
132
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
133 static void allocate_xvimage(int xvimage_width,int xvimage_height,int xv_format)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
134 {
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
135 /*
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
136 * allocate XvImages. FIXME: no error checking, without
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
137 * mit-shm this will bomb... trzing to fix ::atmos
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
138 */
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
139 #ifdef HAVE_SHM
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
140 if ( mLocalDisplay && XShmQueryExtension( mDisplay ) ) Shmem_Flag = 1;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
141 else
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
142 {
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
143 Shmem_Flag = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
144 mp_msg(MSGT_VO,MSGL_INFO, "Shared memory not supported\nReverting to normal Xv\n" );
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
145 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
146 if ( Shmem_Flag )
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
147 {
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
148 xvimage = (XvImage *) XvShmCreateImage(mDisplay, xv_port, xv_format,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
149 NULL, xvimage_width, xvimage_height, &Shminfo);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
150
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
151 Shminfo.shmid = shmget(IPC_PRIVATE, xvimage->data_size, IPC_CREAT | 0777);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
152 Shminfo.shmaddr = (char *) shmat(Shminfo.shmid, 0, 0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
153 Shminfo.readOnly = False;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
154
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
155 xvimage->data = Shminfo.shmaddr;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
156 XShmAttach(mDisplay, &Shminfo);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
157 XSync(mDisplay, False);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
158 shmctl(Shminfo.shmid, IPC_RMID, 0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
159 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
160 else
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
161 #endif
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
162 {
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
163 xvimage = (XvImage *) XvCreateImage(mDisplay, xv_port, xv_format, NULL, xvimage_width, xvimage_height);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
164 xvimage->data = malloc(xvimage->data_size);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
165 XSync(mDisplay,False);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
166 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
167 // memset(xvimage->data,128,xvimage->data_size);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
168 return;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
169 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
170
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
171 static void deallocate_xvimage()
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
172 {
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
173 #ifdef HAVE_SHM
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
174 if ( Shmem_Flag )
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
175 {
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
176 XShmDetach( mDisplay,&Shminfo );
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
177 shmdt( Shminfo.shmaddr );
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
178 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
179 else
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
180 #endif
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
181 {
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
182 free(xvimage->data);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
183 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
184 XFree(xvimage);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
185
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
186 XSync(mDisplay, False);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
187 return;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
188 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
189 //end of vo_xv shm/xvimage code
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
190
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
191 static int xvmc_check_surface_format(uint32_t format, XvMCSurfaceInfo * surf_info){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
192 if ( format == IMGFMT_XVMC_IDCT_MPEG2 ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
193 if( surf_info->mc_type != (XVMC_IDCT|XVMC_MPEG_2) ) return -1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
194 if( surf_info->chroma_format != XVMC_CHROMA_FORMAT_420 ) return -1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
195 return 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
196 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
197 if ( format == IMGFMT_XVMC_MOCO_MPEG2 ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
198 if(surf_info->mc_type != XVMC_MPEG_2) return -1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
199 if(surf_info->chroma_format != XVMC_CHROMA_FORMAT_420) return -1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
200 return 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
201 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
202 return -1;//fail
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
203 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
204
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
205 //print all info needed to add new format
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
206 static void print_xvimage_format_values(XvImageFormatValues *xifv){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
207 int i;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
208 printf("Format_ID = 0x%X\n",xifv->id);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
209
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
210 printf(" type = ");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
211 if(xifv->type == XvRGB) printf("RGB\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
212 else if(xifv->type == XvYUV) printf("YUV\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
213 else printf("Unknown\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
214
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
215 printf(" byte_order = ");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
216 if(xifv->byte_order == LSBFirst) printf("LSB First\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
217 else if(xifv->type == MSBFirst) printf("MSB First\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
218 else printf("Unknown\n");//yes Linux support other types too
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
219
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
220 printf(" guid = ");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
221 for(i=0;i<16;i++)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
222 printf("%02X ",(unsigned char)xifv->guid[i]);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
223 printf("\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
224
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
225 printf(" bits_per_pixel = %d\n",xifv->bits_per_pixel);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
226
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
227 printf(" format = ");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
228 if(xifv->format == XvPacked) printf("XvPacked\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
229 else if(xifv->format == XvPlanar) printf("XvPlanar\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
230 else printf("Unknown\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
231
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
232 printf(" num_planes = %d\n",xifv->num_planes);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
233
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
234 if(xifv->type == XvRGB){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
235 printf(" red_mask = %0X\n", xifv->red_mask);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
236 printf(" green_mask = %0X\n",xifv->green_mask);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
237 printf(" blue_mask = %0X\n", xifv->blue_mask);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
238 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
239 if(xifv->type == XvYUV){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
240 printf(" y_sample_bits = %d\n u_sample_bits = %d\n v_sample_bits = %d\n",
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
241 xifv->y_sample_bits,xifv->u_sample_bits,xifv->v_sample_bits);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
242 printf(" horz_y_period = %d\n horz_u_period = %d\n horz_v_period = %d\n",
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
243 xifv->horz_y_period,xifv->horz_u_period,xifv->horz_v_period);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
244 printf(" vert_y_period = %d\n vert_u_period = %d\n vert_v_period = %d\n",
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
245 xifv->vert_y_period,xifv->vert_u_period,xifv->vert_v_period);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
246
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
247 printf(" component_order = ");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
248 for(i=0;i<32;i++)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
249 if(xifv->component_order[i]>=32)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
250 printf("%c",xifv->component_order[i]);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
251 printf("\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
252
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
253 printf(" scanline = ");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
254 if(xifv->scanline_order == XvTopToBottom) printf("XvTopToBottom\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
255 else if(xifv->scanline_order == XvBottomToTop) printf("XvBottomToTop\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
256 else printf("Unknown\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
257 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
258 printf("\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
259 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
260
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
261 // WARNING This function may changes xv_port and surface_info!
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
262 static int xvmc_find_surface_by_format(int format,int width,int height,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
263 XvMCSurfaceInfo * surf_info,int query){
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
264 int rez;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
265 XvAdaptorInfo * ai;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
266 int num_adaptors,i;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
267 unsigned long p;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
268 int s,mc_surf_num;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
269 XvMCSurfaceInfo * mc_surf_list;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
270
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
271 rez = XvQueryAdaptors(mDisplay,DefaultRootWindow(mDisplay),&num_adaptors,&ai);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
272 if( rez != Success ) return -1;
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
273 if( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
274 printf("vo_xvmc: Querying %d adaptors\n",num_adaptors); }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
275 for(i=0; i<num_adaptors; i++)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
276 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
277 if( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
278 printf("vo_xvmc: Quering adaptor #%d\n",i); }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
279 if( ai[i].type == 0 ) continue;// we need at least dummy type!
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
280 //probing ports
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
281 for(p=ai[i].base_id; p<ai[i].base_id+ai[i].num_ports; p++)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
282 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
283 if( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
284 printf("vo_xvmc: probing port #%ld\n",p); }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
285 mc_surf_list = XvMCListSurfaceTypes(mDisplay,p,&mc_surf_num);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
286 if( mc_surf_list == NULL || mc_surf_num == 0){
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
287 if( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
288 printf("vo_xvmc: No XvMC supported. \n"); }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
289 continue;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
290 }
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
291 if( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
292 printf("vo_xvmc: XvMC list have %d surfaces\n",mc_surf_num); }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
293 //we have XvMC list!
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
294 for(s=0; s<mc_surf_num; s++)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
295 {
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
296 if( width > mc_surf_list[s].max_width ) continue;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
297 if( height > mc_surf_list[s].max_height ) continue;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
298 if( xvmc_check_surface_format(format,&mc_surf_list[s])<0 ) continue;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
299 //we have match!
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
300 /* respect the users wish */
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
301 if ( xv_port_request != 0 && xv_port_request != p )
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
302 {
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
303 continue;
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
304 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
305
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
306 if(!query){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
307 rez = XvGrabPort(mDisplay,p,CurrentTime);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
308 if(rez != Success){
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
309 if ( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
310 printf("vo_xvmc: Fail to grab port %ld\n",p); }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
311 continue;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
312 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
313 printf("vo_xvmc: Port %ld grabed\n",p);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
314 xv_port = p;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
315 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
316 goto surface_found;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
317 }//for mc surf
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
318 XFree(mc_surf_list);//if mc_surf_num==0 is list==NULL ?
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
319 }//for ports
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
320 }//for adaptors
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
321
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
322 if(!query) printf("vo_xvmc: Could not find free matching surface. Sorry.\n");
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
323 return 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
324
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
325 // somebody know cleaner way to escape from 3 internal loops?
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
326 surface_found:
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
327
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
328 memcpy(surf_info,&mc_surf_list[s],sizeof(XvMCSurfaceInfo));
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
329 if( mp_msg_test(MSGT_VO,MSGL_DBG3) || !query)
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
330 printf("vo_xvmc: Found matching surface with id=%X on %ld port at %d adapter\n",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
331 mc_surf_list[s].surface_type_id,p,i);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
332 return mc_surf_list[s].surface_type_id;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
333 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
334
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
335 static uint32_t xvmc_draw_image(mp_image_t *mpi){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
336 xvmc_render_state_t * rndr;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
337
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
338 assert(mpi!=NULL);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
339 assert(mpi->flags &MP_IMGFLAG_DIRECT);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
340 // assert(mpi->flags &MP_IMGFLAGS_DRAWBACK);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
341
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
342 rndr = (xvmc_render_state_t*)mpi->priv;//there is copy in plane[2]
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
343 assert( rndr != NULL );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
344 assert( rndr->magic == MP_XVMC_RENDER_MAGIC );
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
345 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
346 printf("vo_xvmc: draw_image(show rndr=%p)\n",rndr);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
347 // the surface have passed vf system without been skiped, it will be displayed
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
348 rndr->state |= MP_XVMC_STATE_DISPLAY_PENDING;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
349 p_render_surface_to_show = rndr;
20244
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
350 top_field_first = mpi->fields & MP_IMGFIELD_TOP_FIRST;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
351 return VO_TRUE;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
352 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
353
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15866
diff changeset
354 static int preinit(const char *arg){
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
355 int xv_version,xv_release,xv_request_base,xv_event_base,xv_error_base;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
356 int mc_eventBase,mc_errorBase;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
357 int mc_ver,mc_rev;
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
358 strarg_t ck_src_arg = { 0, NULL };
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
359 strarg_t ck_method_arg = { 0, NULL };
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
360 opt_t subopts [] =
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
361 {
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
362 /* name arg type arg var test */
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
363 { "port", OPT_ARG_INT, &xv_port_request, (opt_test_f)int_pos },
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
364 { "ck", OPT_ARG_STR, &ck_src_arg, xv_test_ck },
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
365 { "ck-method", OPT_ARG_STR, &ck_method_arg, xv_test_ckm },
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
366 { "benchmark", OPT_ARG_BOOL, &benchmark, NULL },
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
367 { "sleep", OPT_ARG_BOOL, &use_sleep, NULL },
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
368 { "queue", OPT_ARG_BOOL, &use_queue, NULL },
20244
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
369 { "bobdeint", OPT_ARG_BOOL, &bob_deinterlace, NULL },
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
370 { NULL }
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
371 };
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
372
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
373 //Obtain display handler
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
374 if (!vo_init()) return -1;//vo_xv
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
375
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
376 //XvMC is subdivision of XVideo
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
377 if (Success != XvQueryExtension(mDisplay,&xv_version,&xv_release,&xv_request_base,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
378 &xv_event_base,&xv_error_base) ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
379 mp_msg(MSGT_VO,MSGL_ERR,"Sorry, Xv(MC) not supported by this X11 version/driver\n");
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
380 mp_msg(MSGT_VO,MSGL_ERR,"********** Try with -vo x11 or -vo sdl ***********\n");
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
381 return -1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
382 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
383 printf("vo_xvmc: X-Video extension %d.%d\n",xv_version,xv_release);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
384
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
385 if( True != XvMCQueryExtension(mDisplay,&mc_eventBase,&mc_errorBase) ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
386 printf("vo_xvmc: No X-Video MotionCompensation Extension on %s\n",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
387 XDisplayName(NULL));
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
388 return -1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
389 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
390
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
391 if(Success == XvMCQueryVersion(mDisplay, &mc_ver, &mc_rev) ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
392 printf("vo_xvmc: X-Video MotionCompensation Extension version %i.%i\n",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
393 mc_ver,mc_rev);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
394 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
395 else{
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
396 printf("vo_xvmc: Error querying version info!\n");
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
397 return -1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
398 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
399 surface_render = NULL;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
400 xv_port = 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
401 number_of_surfaces = 0;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
402 subpicture_alloc = 0;
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
403
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
404 benchmark = 0; //disable PutImageto allow faster display than screen refresh
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
405 use_sleep = 0;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
406 use_queue = 0;
20244
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
407 bob_deinterlace = 0;
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
408
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
409 /* parse suboptions */
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
410 if ( subopt_parse( arg, subopts ) != 0 )
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
411 {
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
412 return -1;
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
413 }
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
414
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
415 xv_setup_colorkeyhandling( ck_method_arg.str, ck_src_arg.str );
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
416
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
417 return 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
418 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
419
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15866
diff changeset
420 static int config(uint32_t width, uint32_t height,
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
421 uint32_t d_width, uint32_t d_height,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
422 uint32_t flags, char *title, uint32_t format){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
423 int i,mode_id,rez;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
424 int numblocks,blocks_per_macroblock;//bpmb we have 6,8,12
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
425
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
426 //from vo_xv
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
427 char *hello = (title == NULL) ? "XvMC render" : title;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
428 XSizeHints hint;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
429 XVisualInfo vinfo;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
430 XGCValues xgcv;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
431 XSetWindowAttributes xswa;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
432 XWindowAttributes attribs;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
433 unsigned long xswamask;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
434 int depth;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
435 #ifdef HAVE_XF86VM
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
436 int vm=0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
437 unsigned int modeline_width, modeline_height;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
438 static uint32_t vm_width;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
439 static uint32_t vm_height;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
440 #endif
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
441 //end of vo_xv
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
442
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
443 if( !IMGFMT_IS_XVMC(format) )
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
444 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
445 assert(0);//should never happen, abort on debug or
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
446 return 1;//return error on relese
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
447 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
448
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
449 // Find free port that supports MC, by querying adaptors
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
450 if( xv_port != 0 || number_of_surfaces != 0 ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
451 xvmc_free();
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
452 };
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
453 numblocks=((width+15)/16)*((height+15)/16);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
454 // Find Supported Surface Type
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
455 mode_id = xvmc_find_surface_by_format(format,width,height,&surface_info,0);//false=1 to grab port, not query
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
456 if ( mode_id == 0 )
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
457 {
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
458 return -1;
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
459 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
460
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
461 rez = XvMCCreateContext(mDisplay, xv_port,mode_id,width,height,XVMC_DIRECT,&ctx);
17228
717430668496 Print some error message,
iive
parents: 16280
diff changeset
462 if( rez != Success ){
717430668496 Print some error message,
iive
parents: 16280
diff changeset
463 printf("vo_xvmc: XvMCCreateContext failed with error %d\n",rez);
717430668496 Print some error message,
iive
parents: 16280
diff changeset
464 return -1;
717430668496 Print some error message,
iive
parents: 16280
diff changeset
465 }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
466 if( ctx.flags & XVMC_DIRECT ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
467 printf("vo_xvmc: Allocated Direct Context\n");
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
468 }else{
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
469 printf("vo_xvmc: Allocated Indirect Context!\n");
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
470 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
471
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
472
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
473 blocks_per_macroblock = 6;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
474 if(surface_info.chroma_format == XVMC_CHROMA_FORMAT_422)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
475 blocks_per_macroblock = 8;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
476 if(surface_info.chroma_format == XVMC_CHROMA_FORMAT_444)
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
477 blocks_per_macroblock = 12;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
478
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
479 rez = XvMCCreateBlocks(mDisplay,&ctx,numblocks*blocks_per_macroblock,&data_blocks);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
480 if( rez != Success ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
481 XvMCDestroyContext(mDisplay,&ctx);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
482 return -1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
483 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
484 printf("vo_xvmc: data_blocks allocated\n");
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
485
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
486 rez = XvMCCreateMacroBlocks(mDisplay,&ctx,numblocks,&mv_blocks);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
487 if( rez != Success ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
488 XvMCDestroyBlocks(mDisplay,&data_blocks);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
489 XvMCDestroyContext(mDisplay,&ctx);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
490 return -1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
491 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
492 printf("vo_xvmc: mv_blocks allocated\n");
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
493
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
494 if(surface_render==NULL)
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
495 surface_render=malloc(MAX_SURFACES*sizeof(xvmc_render_state_t));//easy mem debug
11415
da41bbc78e3d verbosity changes, zero the whole surface_render[]
iive
parents: 10714
diff changeset
496 memset(surface_render,0,MAX_SURFACES*sizeof(xvmc_render_state_t));
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
497
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
498 for(i=0; i<MAX_SURFACES; i++){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
499 rez=XvMCCreateSurface(mDisplay,&ctx,&surface_array[i]);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
500 if( rez != Success )
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
501 break;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
502 surface_render[i].magic = MP_XVMC_RENDER_MAGIC;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
503 surface_render[i].data_blocks = data_blocks.blocks;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
504 surface_render[i].mv_blocks = mv_blocks.macro_blocks;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
505 surface_render[i].total_number_of_mv_blocks = numblocks;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
506 surface_render[i].total_number_of_data_blocks = numblocks*blocks_per_macroblock;;
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
507 surface_render[i].mc_type = surface_info.mc_type & (~XVMC_IDCT);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
508 surface_render[i].idct = (surface_info.mc_type & XVMC_IDCT) == XVMC_IDCT;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
509 surface_render[i].chroma_format = surface_info.chroma_format;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
510 surface_render[i].unsigned_intra = (surface_info.flags & XVMC_INTRA_UNSIGNED) == XVMC_INTRA_UNSIGNED;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
511 surface_render[i].p_surface = &surface_array[i];
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
512 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
513 printf("vo_xvmc: surface[%d] = %p .rndr=%p\n",i,&surface_array[i], &surface_render[i]);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
514 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
515 number_of_surfaces = i;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
516 if( number_of_surfaces < 4 ){// +2 I or P and +2 for B (to avoid visible motion drawing)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
517 printf("vo_xvmc: Unable to allocate at least 4 Surfaces\n");
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
518 uninit();
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
519 return -1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
520 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
521 printf("vo_xvmc: Motion Compensation context allocated - %d surfaces\n",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
522 number_of_surfaces);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
523
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
524 //debug
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
525 printf("vo_xvmc: idct=%d unsigned_intra=%d\n",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
526 (surface_info.mc_type & XVMC_IDCT) == XVMC_IDCT,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
527 (surface_info.flags & XVMC_INTRA_UNSIGNED) == XVMC_INTRA_UNSIGNED);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
528
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
529 // Find way to display OSD & subtitle
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
530 printf("vo_xvmc: looking for OSD support\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
531 subpicture_mode = NO_SUBPICTURE;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
532 if(surface_info.flags & XVMC_OVERLAID_SURFACE)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
533 subpicture_mode = OVERLAY_SUBPICTURE;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
534
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
535 if(surface_info.subpicture_max_width != 0 &&
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
536 surface_info.subpicture_max_height != 0 ){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
537 int s,k,num_subpic;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
538
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
539 XvImageFormatValues * xvfmv;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
540 xvfmv = XvMCListSubpictureTypes(mDisplay, xv_port,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
541 surface_info.surface_type_id, &num_subpic);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
542
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
543 if(num_subpic != 0 && xvfmv != NULL){
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
544 if( mp_msg_test(MSGT_VO,MSGL_DBG4) ){//Print all subpicture types for debug
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
545 for(s=0;s<num_subpic;s++)
11415
da41bbc78e3d verbosity changes, zero the whole surface_render[]
iive
parents: 10714
diff changeset
546 print_xvimage_format_values(&xvfmv[s]);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
547 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
548
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
549 for(s=0;s<num_subpic;s++){
10714
iive
parents: 10698
diff changeset
550 for(k=0;osd_render[k].draw_func_ptr!=NULL;k++){
iive
parents: 10698
diff changeset
551 if(xvfmv[s].id == osd_render[k].id)
iive
parents: 10698
diff changeset
552 {
iive
parents: 10698
diff changeset
553 init_osd_fnc = osd_render[k].init_func_ptr;
iive
parents: 10698
diff changeset
554 draw_osd_fnc = osd_render[k].draw_func_ptr;
iive
parents: 10698
diff changeset
555 clear_osd_fnc = osd_render[k].clear_func_ptr;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
556
10714
iive
parents: 10698
diff changeset
557 subpicture_mode = BLEND_SUBPICTURE;
iive
parents: 10698
diff changeset
558 subpicture_info = xvfmv[s];
11415
da41bbc78e3d verbosity changes, zero the whole surface_render[]
iive
parents: 10714
diff changeset
559 printf(" Subpicture id 0x%08X\n",subpicture_info.id);
10714
iive
parents: 10698
diff changeset
560 goto found_subpic;
iive
parents: 10698
diff changeset
561 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
562 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
563 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
564 found_subpic:
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
565 XFree(xvfmv);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
566 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
567 //Blend2 supicture is always possible, blend1 only at backend
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
568 if( (subpicture_mode == BLEND_SUBPICTURE) &&
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
569 (surface_info.flags & XVMC_BACKEND_SUBPICTURE) )
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
570 {
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
571 subpicture_mode = BACKEND_SUBPICTURE;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
572 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
573
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
574 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
575
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
576 switch(subpicture_mode){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
577 case NO_SUBPICTURE:
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
578 printf("vo_xvmc: No OSD support for this mode\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
579 break;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
580 case OVERLAY_SUBPICTURE:
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
581 printf("vo_xvmc: OSD support via color key tricks\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
582 printf("vo_xvmc: not yet implemented:(\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
583 break;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
584 case BLEND_SUBPICTURE:
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
585 printf("vo_xvmc: OSD support by additional frontend rendering\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
586 break;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
587 case BACKEND_SUBPICTURE:
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
588 printf("vo_xvmc: OSD support by beckend rendering (fast)\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
589 printf("vo_xvmc: Pleace send feedback to configrm that it work,otherwise send bugreport!\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
590 break;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
591 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
592
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
593 //take keycolor value and choose method for handling it
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
594 if ( !vo_xv_init_colorkey() )
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
595 {
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
596 return -1; // bail out, colorkey setup failed
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
597 }
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
598
15866
47fa825a5018 add vo_xv_enable_vsync() to xvmc
iive
parents: 15540
diff changeset
599 vo_xv_enable_vsync();//it won't break anything
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
600
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
601 //taken from vo_xv
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
602 panscan_init();
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
603
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
604 aspect_save_orig(width,height);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
605 aspect_save_prescale(d_width,d_height);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
606
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
607 image_height = height;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
608 image_width = width;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
609
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
610 vo_mouse_autohide = 1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
611
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 17932
diff changeset
612 update_xinerama_info();
18509
94965d83e2b6 do aspect correction of video size before calculating vo_dx and vo_dy.
reimar
parents: 18116
diff changeset
613 aspect(&d_width,&d_height,A_NOZOOM);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
614 vo_dx=( vo_screenwidth - d_width ) / 2; vo_dy=( vo_screenheight - d_height ) / 2;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
615 geometry(&vo_dx, &vo_dy, &d_width, &d_height, vo_screenwidth, vo_screenheight);
18116
d75953576ae4 Fix and improve xinerama support
reimar
parents: 17932
diff changeset
616 vo_dx += xinerama_x;
d75953576ae4 Fix and improve xinerama support
reimar
parents: 17932
diff changeset
617 vo_dy += xinerama_y;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
618 vo_dwidth=d_width; vo_dheight=d_height;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
619
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
620 #ifdef HAVE_XF86VM
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 15211
diff changeset
621 if( flags&VOFLAG_MODESWITCHING ) vm = 1;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
622 #endif
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
623
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
624 #ifdef HAVE_NEW_GUI
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
625 if(use_gui)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
626 guiGetEvent( guiSetShVideo,0 ); // let the GUI to setup/resize our window
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
627 else
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
628 #endif
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
629 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
630 hint.x = vo_dx;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
631 hint.y = vo_dy;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
632 hint.width = d_width;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
633 hint.height = d_height;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
634 #ifdef HAVE_XF86VM
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
635 if ( vm )
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
636 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
637 if ((d_width==0) && (d_height==0))
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
638 { vm_width=image_width; vm_height=image_height; }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
639 else
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
640 { vm_width=d_width; vm_height=d_height; }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
641 vo_vm_switch(vm_width, vm_height,&modeline_width, &modeline_height);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
642 hint.x=(vo_screenwidth-modeline_width)/2;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
643 hint.y=(vo_screenheight-modeline_height)/2;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
644 hint.width=modeline_width;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
645 hint.height=modeline_height;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
646 aspect_save_screenres(modeline_width,modeline_height);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
647 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
648 else
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
649 #endif
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
650 if ( vo_fs )
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
651 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
652 #ifdef X11_FULLSCREEN
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
653 /* this code replaces X11_FULLSCREEN hack in mplayer.c
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
654 * aspect() is available through aspect.h for all vos.
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
655 * besides zooming should only be done with -zoom,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
656 * but I leave the old -fs behaviour so users don't get
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
657 * irritated for now (and send lots o' mails ;) ::atmos
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
658 */
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
659
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
660 aspect(&d_width,&d_height,A_ZOOM);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
661 #endif
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
662
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
663 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
664 vo_dwidth=d_width; vo_dheight=d_height;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
665 hint.flags = PPosition | PSize /* | PBaseSize */;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
666 hint.base_width = hint.width; hint.base_height = hint.height;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
667 XGetWindowAttributes(mDisplay, DefaultRootWindow(mDisplay), &attribs);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
668 depth=attribs.depth;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
669 if (depth != 15 && depth != 16 && depth != 24 && depth != 32) depth = 24;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
670 XMatchVisualInfo(mDisplay, mScreen, depth, TrueColor, &vinfo);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
671
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
672 xswa.background_pixel = 0;
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
673 if (xv_ck_info.method == CK_METHOD_BACKGROUND)
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
674 xswa.background_pixel = xv_colorkey;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
675 xswa.border_pixel = 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
676 xswamask = CWBackPixel | CWBorderPixel;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
677
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
678 if ( WinID>=0 ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
679 vo_window = WinID ? ((Window)WinID) : mRootWin;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
680 if ( WinID )
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
681 {
15540
91d210e8a19c Make -wid behave more consistent.
al
parents: 15212
diff changeset
682 Window mRoot;
91d210e8a19c Make -wid behave more consistent.
al
parents: 15212
diff changeset
683 uint32_t drwBorderWidth, drwDepth;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
684 XUnmapWindow( mDisplay,vo_window );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
685 XChangeWindowAttributes( mDisplay,vo_window,xswamask,&xswa );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
686 vo_x11_selectinput_witherr( mDisplay,vo_window,StructureNotifyMask | KeyPressMask | PropertyChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ExposureMask );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
687 XMapWindow( mDisplay,vo_window );
15540
91d210e8a19c Make -wid behave more consistent.
al
parents: 15212
diff changeset
688 XGetGeometry(mDisplay, vo_window, &mRoot,
91d210e8a19c Make -wid behave more consistent.
al
parents: 15212
diff changeset
689 &drwX, &drwY, &vo_dwidth, &vo_dheight,
91d210e8a19c Make -wid behave more consistent.
al
parents: 15212
diff changeset
690 &drwBorderWidth, &drwDepth);
91d210e8a19c Make -wid behave more consistent.
al
parents: 15212
diff changeset
691 drwX = drwY = 0; // coordinates need to be local to the window
91d210e8a19c Make -wid behave more consistent.
al
parents: 15212
diff changeset
692 aspect_save_prescale(vo_dwidth, vo_dheight);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
693 } else { drwX=vo_dx; drwY=vo_dy; }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
694 } else
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
695 if ( vo_window == None ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
696 vo_window = XCreateWindow(mDisplay, mRootWin,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
697 hint.x, hint.y, hint.width, hint.height,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
698 0, depth,CopyFromParent,vinfo.visual,xswamask,&xswa);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
699
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
700 vo_x11_classhint( mDisplay,vo_window,"xvmc" );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
701 vo_hidecursor(mDisplay,vo_window);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
702
10497
9e6becbd5c8a draw rectangle with color key, avoid blue bars. avoid PutSurface before 1'st image
iive
parents: 10452
diff changeset
703 vo_x11_selectinput_witherr(mDisplay, vo_window, StructureNotifyMask | KeyPressMask | PropertyChangeMask | ExposureMask |
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
704 ((WinID==0) ? 0 : (PointerMotionMask
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
705 | ButtonPressMask | ButtonReleaseMask)) );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
706 XSetStandardProperties(mDisplay, vo_window, hello, hello, None, NULL, 0, &hint);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
707 XSetWMNormalHints( mDisplay,vo_window,&hint );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
708 XMapWindow(mDisplay, vo_window);
18715
30d7ddf08889 Fix window position when changing videos while in fullscreen and for
reimar
parents: 18509
diff changeset
709 vo_x11_nofs_sizepos(hint.x, hint.y, hint.width, hint.height);
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 15211
diff changeset
710 if ( flags&VOFLAG_FULLSCREEN ) vo_x11_fullscreen();
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
711 else {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
712 vo_x11_sizehint( hint.x, hint.y, hint.width, hint.height,0 );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
713 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
714 } else {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
715 // vo_fs set means we were already at fullscreen
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
716 vo_x11_sizehint( hint.x, hint.y, hint.width, hint.height,0 );
18715
30d7ddf08889 Fix window position when changing videos while in fullscreen and for
reimar
parents: 18509
diff changeset
717 vo_x11_nofs_sizepos(hint.x, hint.y, hint.width, hint.height);
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 15211
diff changeset
718 if ( flags&VOFLAG_FULLSCREEN && !vo_fs ) vo_x11_fullscreen(); // handle -fs on non-first file
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
719 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
720
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
721 // vo_x11_sizehint( hint.x, hint.y, hint.width, hint.height,0 );
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
722
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
723 if ( vo_gc != None ) XFreeGC( mDisplay,vo_gc );
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
724 vo_gc = XCreateGC(mDisplay, vo_window, GCForeground, &xgcv);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
725 XSync(mDisplay, False);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
726 #ifdef HAVE_XF86VM
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
727 if ( vm )
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
728 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
729 /* Grab the mouse pointer in our window */
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
730 if(vo_grabpointer)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
731 XGrabPointer(mDisplay, vo_window, True, 0,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
732 GrabModeAsync, GrabModeAsync,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
733 vo_window, None, CurrentTime );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
734 XSetInputFocus(mDisplay, vo_window, RevertToNone, CurrentTime);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
735 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
736 #endif
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
737 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
738
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
739 aspect(&vo_dwidth,&vo_dheight,A_NOZOOM);
15212
05aa13cdf92f replace VO and VF numeric flags with #defined identifiers
henry
parents: 15211
diff changeset
740 if ( (( flags&VOFLAG_FULLSCREEN )&&( WinID <= 0 )) || vo_fs )
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
741 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
742 aspect(&vo_dwidth,&vo_dheight,A_ZOOM);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
743 drwX=( vo_screenwidth - (vo_dwidth > vo_screenwidth?vo_screenwidth:vo_dwidth) ) / 2;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
744 drwY=( vo_screenheight - (vo_dheight > vo_screenheight?vo_screenheight:vo_dheight) ) / 2;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
745 vo_dwidth=(vo_dwidth > vo_screenwidth?vo_screenwidth:vo_dwidth);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
746 vo_dheight=(vo_dheight > vo_screenheight?vo_screenheight:vo_dheight);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
747 mp_msg(MSGT_VO,MSGL_V, "[xvmc-fs] dx: %d dy: %d dw: %d dh: %d\n",drwX,drwY,vo_dwidth,vo_dheight );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
748 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
749
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
750 panscan_calc();
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
751
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
752 mp_msg(MSGT_VO,MSGL_V, "[xvmc] dx: %d dy: %d dw: %d dh: %d\n",drwX,drwY,vo_dwidth,vo_dheight );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
753
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11415
diff changeset
754 if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11415
diff changeset
755
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
756 //end vo_xv
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
757
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
758 /* store image dimesions for displaying */
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
759 p_render_surface_visible = NULL;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
760 p_render_surface_to_show = NULL;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
761
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
762 free_element = 0;
15102
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
763 first_frame = 1;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
764
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
765 vo_directrendering = 1;//ugly hack, coz xvmc works only with direct rendering
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
766 return 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
767 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
768
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15866
diff changeset
769 static int draw_frame(uint8_t *srcp[]){
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
770 UNUSED(srcp);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
771 assert(0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
772 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
773
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
774 static void init_osd_yuv_pal(){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
775 char * palette;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
776 int rez;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
777 int i,j;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
778 int snum,seb;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
779 int Y,U,V;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
780
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
781 subpicture_clear_color = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
782
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
783 if(subpicture.num_palette_entries > 0){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
784
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
785 snum = subpicture.num_palette_entries;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
786 seb = subpicture.entry_bytes;
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18715
diff changeset
787 palette = malloc(snum*seb);//check fail
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
788 if(palette == NULL) return;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
789 for(i=0; i<snum; i++){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
790 // 0-black max-white the other are gradients
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
791 Y = i*(1 << subpicture_info.y_sample_bits)/snum;//snum=2;->(0),(1*(1<<1)/2)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
792 U = 1 << (subpicture_info.u_sample_bits - 1);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
793 V = 1 << (subpicture_info.v_sample_bits - 1);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
794 for(j=0; j<seb; j++)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
795 switch(subpicture.component_order[j]){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
796 case 'U': palette[i*seb+j] = U; break;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
797 case 'V': palette[i*seb+j] = V; break;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
798 case 'Y':
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
799 default:
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
800 palette[i*seb+j] = Y; break;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
801 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
802 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
803 rez = XvMCSetSubpicturePalette(mDisplay, &subpicture, palette);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
804 if(rez!=Success){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
805 printf("vo_xvmc: set pallete fail\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
806 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
807 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
808 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
809
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
810 static void clear_osd_subpic(int x0, int y0, int w, int h){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
811 int rez;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
812 rez=XvMCClearSubpicture(mDisplay, &subpicture,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
813 x0, y0, w,h,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
814 subpicture_clear_color);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
815 if(rez != Success)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
816 printf("vo_xvmc: XvMCClearSubpicture failed!\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
817 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
818
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
819 static void OSD_init(){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
820 unsigned short osd_height, osd_width;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
821 int rez;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
822
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
823 if(subpicture_alloc){
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
824 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
825 printf("vo_xvmc: destroying subpicture\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
826 XvMCDestroySubpicture(mDisplay,&subpicture);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
827 deallocate_xvimage();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
828 subpicture_alloc = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
829 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
830
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
831 /* if(surface_info.flags & XVMC_SUBPICTURE_INDEPENDENT_SCALING){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
832 osd_width = vo_dwidth;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
833 osd_height = vo_dheight;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
834 }else*/
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
835 {
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
836 osd_width = image_width;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
837 osd_height = image_height;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
838 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
839
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
840 if(osd_width > surface_info.subpicture_max_width)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
841 osd_width = surface_info.subpicture_max_width;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
842 if(osd_height > surface_info.subpicture_max_height)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
843 osd_height = surface_info.subpicture_max_height;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
844 if(osd_width == 0 || osd_height == 0)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
845 return;//if called before window size is known
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
846
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
847 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
848 printf("vo_xvmc: creating subpicture (%d,%d) format %X\n",
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
849 osd_width,osd_height,subpicture_info.id);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
850
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
851 rez = XvMCCreateSubpicture(mDisplay,&ctx,&subpicture,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
852 osd_width,osd_height,subpicture_info.id);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
853 if(rez != Success){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
854 subpicture_mode = NO_SUBPICTURE;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
855 printf("vo_xvmc: Create Subpicture failed, OSD disabled\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
856 return;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
857 }
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
858 if( mp_msg_test(MSGT_VO,MSGL_DBG4) ){
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
859 int i;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
860 printf("vo_xvmc: Created Subpicture:\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
861 printf(" xvimage_id=0x%X\n",subpicture.xvimage_id);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
862 printf(" width=%d\n",subpicture.width);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
863 printf(" height=%d\n",subpicture.height);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
864 printf(" num_palette_entries=0x%X\n",subpicture.num_palette_entries);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
865 printf(" entry_bytes=0x%X\n",subpicture.entry_bytes);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
866
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
867 printf(" component_order=\"");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
868 for(i=0; i<4; i++)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
869 if(subpicture.component_order[i] >= 32)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
870 printf("%c", subpicture.component_order[i]);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
871 printf("\"\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
872 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
873
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
874 //call init for the surface type
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
875 init_osd_fnc();//init palete,clear color etc ...
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
876 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
877 printf("vo_xvmc: clearing subpicture\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
878 clear_osd_fnc(0, 0, subpicture.width, subpicture.height);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
879
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
880 allocate_xvimage(subpicture.width, subpicture.height, subpicture_info.id);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
881 subpicture_alloc = 1;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
882 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
883
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
884 static void draw_osd_IA44(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
885 int ox,oy;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
886 int rez;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
887
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
888 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
889 printf("vo_xvmc:composite AI44 subpicture (%d,%d - %d,%d)\n",x0,y0,w,h);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
890
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
891 for(ox=0; ox<w; ox++){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
892 for(oy=0; oy<h; oy++){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
893 xvimage->data[oy*xvimage->width+ox] = (src[oy*stride+ox]>>4) | ((0-srca[oy*stride+ox])&0xf0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
894 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
895 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
896 rez = XvMCCompositeSubpicture(mDisplay, &subpicture, xvimage, 0, 0,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
897 w,h,x0,y0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
898 if(rez != Success){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
899 printf("vo_xvmc: composite subpicture failed\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
900 assert(0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
901 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
902 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
903
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
904 static void draw_osd_AI44(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
905 int ox,oy;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
906 int rez;
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
907 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
908 printf("vo_xvmc:composite AI44 subpicture (%d,%d - %d,%d)\n",x0,y0,w,h);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
909
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
910 for(ox=0; ox<w; ox++){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
911 for(oy=0; oy<h; oy++){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
912 xvimage->data[oy*xvimage->width+ox] = (src[oy*stride+ox]&0xf0) | (((0-srca[oy*stride+ox])>>4)&0xf);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
913 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
914 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
915 rez = XvMCCompositeSubpicture(mDisplay, &subpicture, xvimage, 0, 0,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
916 w,h,x0,y0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
917 if(rez != Success){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
918 printf("vo_xvmc: composite subpicture failed\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
919 assert(0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
920 }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
921 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
922
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
923 static void draw_osd(void){
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
924 xvmc_render_state_t * osd_rndr;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
925 int osd_has_changed;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
926 int have_osd_to_draw;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
927 int rez;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
928
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
929 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
930 printf("vo_xvmc: draw_osd ,OSD_mode=%d, surface_to_show=%p\n",
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
931 subpicture_mode,p_render_surface_to_show);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
932
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
933 if(subpicture_mode == BLEND_SUBPICTURE ||
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
934 subpicture_mode == BACKEND_SUBPICTURE ){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
935
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
936 if(!subpicture_alloc) //allocate subpicture when dimensions are known
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
937 OSD_init();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
938 if(!subpicture_alloc)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
939 return;//dimensions still unknown.
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
940
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
941 osd_has_changed = vo_update_osd(subpicture.width, subpicture.height);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
942 have_osd_to_draw = vo_osd_check_range_update(0, 0, subpicture.width,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
943 subpicture.height);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
944
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
945 if(!have_osd_to_draw)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
946 return;//nothing to draw,no subpic, no blend
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
947
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
948 if(osd_has_changed){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
949 //vo_remove_text(subpicture.width, subpicture.height,clear_osd_fnc)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
950 clear_osd_fnc(0,0,subpicture.width,subpicture.height);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
951 vo_draw_text(subpicture.width, subpicture.height, draw_osd_fnc);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
952 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
953 XvMCSyncSubpicture(mDisplay,&subpicture);//todo usleeep wait!
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
954
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
955 if(subpicture_mode == BLEND_SUBPICTURE){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
956 osd_rndr = find_free_surface();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
957 if(osd_rndr == NULL)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
958 return;// no free surface to draw OSD in
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
959
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
960 rez = XvMCBlendSubpicture2(mDisplay,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
961 p_render_surface_to_show->p_surface, osd_rndr->p_surface,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
962 &subpicture,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
963 0, 0, subpicture.width, subpicture.height,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
964 0, 0, image_width, image_height);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
965 if(rez!=Success){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
966 printf("vo_xvmc: BlendSubpicture failed rez=%d\n",rez);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
967 assert(0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
968 return;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
969 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
970 // XvMCFlushSurface(mDisplay,osd_rndr->p_surface);//fixme- should I?
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
971
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
972 //When replaceing the surface with osd one, save the flags too!
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
973 osd_rndr->picture_structure = p_render_surface_to_show->picture_structure;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
974 osd_rndr->display_flags = p_render_surface_to_show->display_flags;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
975 //add more if needed osd_rndr-> = p_render_surface_to_show->;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
976
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
977 p_render_surface_to_show->state &= ~MP_XVMC_STATE_DISPLAY_PENDING;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
978 p_render_surface_to_show->state |= MP_XVMC_STATE_OSD_SOURCE;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
979 p_render_surface_to_show->p_osd_target_surface_render = osd_rndr;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
980
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
981 p_render_surface_to_show = osd_rndr;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
982 p_render_surface_to_show->state = MP_XVMC_STATE_DISPLAY_PENDING;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
983
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
984 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
985 printf("vo_xvmc:draw_osd: surface_to_show changed to %p\n",osd_rndr);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
986 }//endof if(BLEND)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
987 if(subpicture_mode == BACKEND_SUBPICTURE){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
988 rez = XvMCBlendSubpicture(mDisplay,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
989 p_render_surface_to_show->p_surface,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
990 &subpicture,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
991 0, 0, subpicture.width, subpicture.height,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
992 0, 0, image_width, image_height);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
993
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
994 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
995
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
996 }//if(BLEND||BACKEND)
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
997 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
998
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
999 static void xvmc_sync_surface(XvMCSurface * srf){
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
1000 int status,rez;
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
1001 rez = XvMCGetSurfaceStatus(mDisplay,srf,&status);
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
1002 assert(rez==Success);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1003 if((status & XVMC_RENDERING) == 0)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1004 return;//surface is already complete
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
1005 if(use_sleep){
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1006 rez = XvMCFlushSurface(mDisplay, srf);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1007 assert(rez==Success);
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
1008
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1009 do{
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1010 usec_sleep(1000);//1ms (may be 20ms on linux)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1011 XvMCGetSurfaceStatus(mDisplay,srf,&status);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1012 } while (status & XVMC_RENDERING);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1013 return;//done
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1014 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1015
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1016 XvMCSyncSurface(mDisplay, srf);
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
1017 }
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
1018
15102
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
1019 static void put_xvmc_image(xvmc_render_state_t * p_render_surface, int draw_ck){
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1020 int rez;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1021 int clipX,clipY,clipW,clipH;
20244
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
1022 int i;
15060
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
1023
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
1024 if(p_render_surface == NULL)
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
1025 return;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1026
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1027 clipX = drwX-(vo_panscan_x>>1);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1028 clipY = drwY-(vo_panscan_y>>1);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1029 clipW = vo_dwidth+vo_panscan_x;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1030 clipH = vo_dheight+vo_panscan_y;
15102
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
1031
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
1032 if(draw_ck)
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
1033 vo_xv_draw_colorkey(clipX,clipY,clipW,clipH);
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
1034
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
1035 if(benchmark)
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
1036 return;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1037
20244
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
1038 for (i = 1; i <= bob_deinterlace + 1; i++) {
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
1039 int field = top_field_first ? i : i ^ 3;
15060
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
1040 rez = XvMCPutSurface(mDisplay, p_render_surface->p_surface,
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
1041 vo_window,
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
1042 0, 0, image_width, image_height,
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
1043 clipX, clipY, clipW, clipH,
20244
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
1044 bob_deinterlace ? field : 3);
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
1045 //p_render_surface_to_show->display_flags);
15060
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
1046 if(rez != Success){
15102
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
1047 printf("vo_xvmc: PutSurface failer, critical error %d!\n",rez);
15060
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
1048 assert(0);
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
1049 }
20244
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
1050 }
15102
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
1051 XFlush(mDisplay);
15060
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
1052 }
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
1053
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
1054 static void flip_page(void){
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
1055 int i,cfs;
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
1056
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
1057
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1058 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1059 printf("vo_xvmc: flip_page show(rndr=%p)\n\n",p_render_surface_to_show);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1060
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1061 if(p_render_surface_to_show == NULL) return;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1062 assert( p_render_surface_to_show->magic == MP_XVMC_RENDER_MAGIC );
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
1063 //fixme assert( p_render_surface_to_show != p_render_surface_visible);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1064
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1065 if(use_queue){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1066 // fill the queue until only n free surfaces remain
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1067 // after that start displaying
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1068 cfs = count_free_surfaces();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1069 show_queue[free_element++] = p_render_surface_to_show;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1070 if(cfs > 3){//well have 3 free surfaces after add queue
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1071 if(free_element > 1)//a little voodoo magic
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1072 xvmc_sync_surface(show_queue[0]->p_surface);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1073 return;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1074 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1075 p_render_surface_to_show=show_queue[0];
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1076 if( mp_msg_test(MSGT_VO,MSGL_DBG5) )
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1077 printf("vo_xvmc: flip_queue free_element=%d\n",free_element);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1078 free_element--;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1079 for(i=0; i<free_element; i++){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1080 show_queue[i] = show_queue[i+1];
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1081 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1082 show_queue[free_element] = NULL;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1083 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1084
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1085 // make sure the rendering is done
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
1086 xvmc_sync_surface(p_render_surface_to_show->p_surface);
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
1087
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1088 //the visible surface won't be displayed anymore, mark it as free
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1089 if(p_render_surface_visible != NULL)
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1090 p_render_surface_visible->state &= ~MP_XVMC_STATE_DISPLAY_PENDING;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1091
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
1092 //!!fixme assert(p_render_surface_to_show->state & MP_XVMC_STATE_DISPLAY_PENDING);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1093
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1094 //show it, displaying is always vsynced, so skip it for benchmark
15102
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
1095 put_xvmc_image(p_render_surface_to_show,first_frame);
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
1096 first_frame=0;//make sure we won't draw it anymore
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1097
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1098 p_render_surface_visible = p_render_surface_to_show;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1099 p_render_surface_to_show = NULL;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1100 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1101
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1102 static void check_events(void){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1103 int dwidth,dheight;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1104 Window mRoot;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1105 uint32_t drwBorderWidth,drwDepth;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1106
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1107 int e=vo_x11_check_events(mDisplay);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1108 if(e&VO_EVENT_RESIZE)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1109 {
10497
9e6becbd5c8a draw rectangle with color key, avoid blue bars. avoid PutSurface before 1'st image
iive
parents: 10452
diff changeset
1110 e |= VO_EVENT_EXPOSE;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1111
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1112 XGetGeometry( mDisplay,vo_window,&mRoot,&drwX,&drwY,&vo_dwidth,&vo_dheight,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1113 &drwBorderWidth,&drwDepth );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1114 drwX = drwY = 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1115 mp_msg(MSGT_VO,MSGL_V, "[xvmc] dx: %d dy: %d dw: %d dh: %d\n",drwX,drwY,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1116 vo_dwidth,vo_dheight );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1117
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1118 aspect(&dwidth,&dheight,A_NOZOOM);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1119 if ( vo_fs )
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1120 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1121 aspect(&dwidth,&dheight,A_ZOOM);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1122 drwX=( vo_screenwidth - (dwidth > vo_screenwidth?vo_screenwidth:dwidth) ) / 2;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1123 drwY=( vo_screenheight - (dheight > vo_screenheight?vo_screenheight:dheight) ) / 2;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1124 vo_dwidth=(dwidth > vo_screenwidth?vo_screenwidth:dwidth);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1125 vo_dheight=(dheight > vo_screenheight?vo_screenheight:dheight);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1126 mp_msg(MSGT_VO,MSGL_V, "[xvmc-fs] dx: %d dy: %d dw: %d dh: %d\n",drwX,drwY,vo_dwidth,vo_dheight );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1127 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1128 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1129 if ( e & VO_EVENT_EXPOSE )
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1130 {
15102
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
1131 put_xvmc_image(p_render_surface_visible,1);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1132 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1133 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1134
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1135 static void xvmc_free(void){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1136 int i;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1137 if( subpicture_alloc ){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1138
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1139 XvMCDestroySubpicture(mDisplay,&subpicture);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1140 deallocate_xvimage();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1141
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1142 subpicture_alloc = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1143
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1144 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1145 printf("vo_xvmc: subpicture destroyed\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1146 }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1147
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1148 if( number_of_surfaces ){
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1149
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1150 XvMCDestroyMacroBlocks(mDisplay,&mv_blocks);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1151 XvMCDestroyBlocks(mDisplay,&data_blocks);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1152
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1153 for(i=0; i<number_of_surfaces; i++)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1154 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1155 XvMCHideSurface(mDisplay,&surface_array[i]);//it doesn't hurt, I hope
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1156 XvMCDestroySurface(mDisplay,&surface_array[i]);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1157
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1158 if( (surface_render[i].state != 0) &&
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1159 (p_render_surface_visible != &surface_render[i]) )
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1160 printf("vo_xvmc::uninit surface_render[%d].status=%d\n",i,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1161 surface_render[i].state);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1162 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1163
11415
da41bbc78e3d verbosity changes, zero the whole surface_render[]
iive
parents: 10714
diff changeset
1164 memset(surface_render,0,MAX_SURFACES*sizeof(xvmc_render_state_t));//for debuging
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
1165 free(surface_render);surface_render=NULL;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1166
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1167 XvMCDestroyContext(mDisplay,&ctx);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1168 number_of_surfaces = 0;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1169
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1170 if( mp_msg_test(MSGT_VO,MSGL_DBG4) ) {
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1171 printf("vo_xvmc: Context sucessfuly freed\n"); }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1172 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1173
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1174
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1175 if( xv_port !=0 ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1176 XvUngrabPort(mDisplay,xv_port,CurrentTime);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1177 xv_port = 0;
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1178 if( mp_msg_test(MSGT_VO,MSGL_DBG4) ) {
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1179 printf("vo_xvmc: xv_port sucessfuly ungrabed\n"); }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1180 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1181 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1182
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1183 static void uninit(void){
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1184 if( mp_msg_test(MSGT_VO,MSGL_DBG4) ) {
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1185 printf("vo_xvmc: uninit called\n"); }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1186 xvmc_free();
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1187 //from vo_xv
15211
d42f22a1503b Compile fix when XF86VM is not defined
iive
parents: 15151
diff changeset
1188 #ifdef HAVE_XF86VM
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1189 vo_vm_close(mDisplay);
15211
d42f22a1503b Compile fix when XF86VM is not defined
iive
parents: 15151
diff changeset
1190 #endif
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1191 vo_x11_uninit();
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1192 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1193
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15866
diff changeset
1194 static int query_format(uint32_t format){
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1195 uint32_t flags;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1196 XvMCSurfaceInfo qsurface_info;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1197 int mode_id;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1198
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1199 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1200 printf("vo_xvmc: query_format=%X\n",format);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1201
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1202 if(!IMGFMT_IS_XVMC(format)) return 0;// no caps supported
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1203 mode_id = xvmc_find_surface_by_format(format, 16, 16, &qsurface_info, 1);//true=1 - quering
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1204
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1205 if( mode_id == 0 ) return 0;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1206
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1207 flags = VFCAP_CSP_SUPPORTED |
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1208 VFCAP_CSP_SUPPORTED_BY_HW |
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1209 VFCAP_ACCEPT_STRIDE;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1210
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1211 if( (qsurface_info.subpicture_max_width != 0) &&
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1212 (qsurface_info.subpicture_max_height != 0) )
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1213 flags|=VFCAP_OSD;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1214 return flags;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1215 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1216
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1217
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15866
diff changeset
1218 static int draw_slice(uint8_t *image[], int stride[],
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1219 int w, int h, int x, int y){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1220 xvmc_render_state_t * rndr;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1221 int rez;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1222
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1223 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1224 printf("vo_xvmc: draw_slice y=%d\n",y);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1225
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1226 rndr = (xvmc_render_state_t*)image[2];//this is copy of priv-ate
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1227 assert( rndr != NULL );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1228 assert( rndr->magic == MP_XVMC_RENDER_MAGIC );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1229
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1230 rez = XvMCRenderSurface(mDisplay,&ctx,rndr->picture_structure,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1231 rndr->p_surface,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1232 rndr->p_past_surface,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1233 rndr->p_future_surface,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1234 rndr->flags,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1235 rndr->filled_mv_blocks_num,rndr->start_mv_blocks_num,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1236 &mv_blocks,&data_blocks);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1237 #if 1
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1238 if(rez != Success)
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1239 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1240 int i;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1241 printf("vo_xvmc::slice: RenderSirface returned %d\n",rez);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1242
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1243 printf("vo_xvmc::slice: pict=%d,flags=%x,start_blocks=%d,num_blocks=%d\n",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1244 rndr->picture_structure,rndr->flags,rndr->start_mv_blocks_num,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1245 rndr->filled_mv_blocks_num);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1246 printf("vo_xvmc::slice: this_surf=%p, past_surf=%p, future_surf=%p\n",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1247 rndr->p_surface,rndr->p_past_surface,rndr->p_future_surface);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1248
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1249 for(i=0; i<rndr->filled_mv_blocks_num; i++){
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1250 XvMCMacroBlock* testblock;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1251 testblock = &mv_blocks.macro_blocks[i];
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1252
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1253 printf("vo_xvmc::slice: mv_block - x=%d,y=%d,mb_type=0x%x,mv_type=0x%x,mv_field_select=%d\n",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1254 testblock->x,testblock->y,testblock->macroblock_type,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1255 testblock->motion_type,testblock->motion_vertical_field_select);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1256 printf("vo_xvmc::slice: dct_type=%d,data_index=0x%x,cbp=%d,pad0=%d\n",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1257 testblock->dct_type,testblock->index,testblock->coded_block_pattern,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1258 testblock->pad0);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1259 printf("vo_xvmc::slice: PMV[0][0][0/1]=(%d,%d)\n",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1260 testblock->PMV[0][0][0],testblock->PMV[0][0][1]);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1261 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1262 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1263 #endif
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1264 assert(rez==Success);
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1265 if( mp_msg_test(MSGT_VO,MSGL_DBG4) ) printf("vo_xvmc: flush surface\n");
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1266 rez = XvMCFlushSurface(mDisplay, rndr->p_surface);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1267 assert(rez==Success);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1268
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1269 // rndr->start_mv_blocks_num += rndr->filled_mv_blocks_num;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1270 rndr->start_mv_blocks_num = 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1271 rndr->filled_mv_blocks_num = 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1272
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1273 rndr->next_free_data_block_num = 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1274
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1275 return VO_TRUE;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1276 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1277
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1278 //XvMCHide hides the surface on next retrace, so
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1279 //check if the surface is not still displaying
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1280 static void check_osd_source(xvmc_render_state_t * src_rndr){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1281 xvmc_render_state_t * osd_rndr;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1282 int stat;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1283 //If this is source surface, check does the OSD rendering is compleate
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1284 if(src_rndr->state & MP_XVMC_STATE_OSD_SOURCE){
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1285 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1286 printf("vo_xvmc: OSD surface=%p quering\n",src_rndr);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1287 osd_rndr = src_rndr->p_osd_target_surface_render;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1288 XvMCGetSurfaceStatus(mDisplay, osd_rndr->p_surface, &stat);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1289 if(!(stat & XVMC_RENDERING))
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1290 src_rndr->state &= ~MP_XVMC_STATE_OSD_SOURCE;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1291 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1292 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1293 static int count_free_surfaces(){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1294 int i,num;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1295 num=0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1296 for(i=0; i<number_of_surfaces; i++){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1297 check_osd_source(&surface_render[i]);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1298 if(surface_render[i].state == 0)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1299 num++;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1300 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1301 return num;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1302 }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1303
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1304 static xvmc_render_state_t * find_free_surface(){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1305 int i,t;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1306 int stat;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1307 xvmc_render_state_t * visible_rndr;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1308
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1309 visible_rndr = NULL;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1310 for(i=0; i<number_of_surfaces; i++){
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1311
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1312 check_osd_source(&surface_render[i]);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1313 if( surface_render[i].state == 0){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1314 XvMCGetSurfaceStatus(mDisplay, surface_render[i].p_surface,&stat);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1315 if( (stat & XVMC_DISPLAYING) == 0 )
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1316 return &surface_render[i];
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1317 visible_rndr = &surface_render[i];// remember it, use as last resort
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1318 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1319 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1320
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1321 //all surfaces are busy, but there is one that will be free
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1322 //on next monitor retrace, we just have to wait
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1323 if(visible_rndr != NULL){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1324 printf("vo_xvmc: waiting retrace\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1325 for(t=0;t<1000;t++){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1326 usec_sleep(1000);//1ms
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1327 XvMCGetSurfaceStatus(mDisplay, visible_rndr->p_surface,&stat);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1328 if( (stat & XVMC_DISPLAYING) == 0 )
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1329 return visible_rndr;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1330 }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1331 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1332 //todo remove when stable
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1333 printf("vo_xvmc: no free surfaces, this should not happen in g1\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1334 for(i=0;i<number_of_surfaces;i++)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1335 printf("vo_xvmc: surface[%d].state=%d\n",i,surface_render[i].state);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1336 return NULL;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1337 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1338
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1339 static uint32_t get_image(mp_image_t *mpi){
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1340 xvmc_render_state_t * rndr;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1341
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1342 rndr = find_free_surface();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1343
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1344 if(rndr == NULL){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1345 printf("vo_xvmc: get_image failed\n");
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1346 return VO_FALSE;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1347 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1348
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1349 assert(rndr->start_mv_blocks_num == 0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1350 assert(rndr->filled_mv_blocks_num == 0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1351 assert(rndr->next_free_data_block_num == 0);
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
1352
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1353 mpi->flags |= MP_IMGFLAG_DIRECT;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1354 //keep strides 0 to avoid field manipulations
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1355 mpi->stride[0] = 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1356 mpi->stride[1] = 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1357 mpi->stride[2] = 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1358
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1359 // these are shared!! so watch out
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1360 // do call RenderSurface before overwriting
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1361 mpi->planes[0] = (char*)data_blocks.blocks;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1362 mpi->planes[1] = (char*)mv_blocks.macro_blocks;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1363 mpi->priv =
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1364 mpi->planes[2] = (char*)rndr;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1365
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1366 rndr->picture_structure = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1367 rndr->flags = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1368 rndr->state = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1369 rndr->start_mv_blocks_num = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1370 rndr->filled_mv_blocks_num = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1371 rndr->next_free_data_block_num = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1372
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1373 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1374 printf("vo_xvmc: get_image: rndr=%p (surface=%p) \n",
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1375 rndr,rndr->p_surface);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1376 return VO_TRUE;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1377 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1378
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15866
diff changeset
1379 static int control(uint32_t request, void *data, ... )
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1380 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1381 switch (request){
20973
c0bcec5150a3 Add deinterlace property, patch by Carl Eugen Hoyos
reimar
parents: 20244
diff changeset
1382 case VOCTRL_GET_DEINTERLACE:
c0bcec5150a3 Add deinterlace property, patch by Carl Eugen Hoyos
reimar
parents: 20244
diff changeset
1383 *(int*)data = bob_deinterlace;
c0bcec5150a3 Add deinterlace property, patch by Carl Eugen Hoyos
reimar
parents: 20244
diff changeset
1384 return VO_TRUE;
c0bcec5150a3 Add deinterlace property, patch by Carl Eugen Hoyos
reimar
parents: 20244
diff changeset
1385 case VOCTRL_SET_DEINTERLACE:
21002
1de63b07a353 more mp_property_deinterlace simplification, patch by
reimar
parents: 20973
diff changeset
1386 bob_deinterlace = *(int*)data;
20973
c0bcec5150a3 Add deinterlace property, patch by Carl Eugen Hoyos
reimar
parents: 20244
diff changeset
1387 return VO_TRUE;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1388 case VOCTRL_QUERY_FORMAT:
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1389 return query_format(*((uint32_t*)data));
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1390 case VOCTRL_DRAW_IMAGE:
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1391 return xvmc_draw_image((mp_image_t *)data);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1392 case VOCTRL_GET_IMAGE:
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1393 return get_image((mp_image_t *)data);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1394 //vo_xv
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1395 case VOCTRL_GUISUPPORT:
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1396 return VO_TRUE;
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11415
diff changeset
1397 case VOCTRL_ONTOP:
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11415
diff changeset
1398 vo_x11_ontop();
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11415
diff changeset
1399 return VO_TRUE;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1400 case VOCTRL_FULLSCREEN:
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1401 vo_x11_fullscreen();
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1402 // indended, fallthrough to update panscan on fullscreen/windowed switch
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1403 case VOCTRL_SET_PANSCAN:
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1404 if ( ( vo_fs && ( vo_panscan != vo_panscan_amount ) ) || ( !vo_fs && vo_panscan_amount ) )
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1405 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1406 int old_y = vo_panscan_y;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1407 panscan_calc();
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1408
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1409 if(old_y != vo_panscan_y)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1410 {
15102
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
1411 //this also draws the colorkey
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
1412 put_xvmc_image(p_render_surface_visible,1);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1413 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1414 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1415 return VO_TRUE;
15151
1edaf17d5205 messed ordering of switch branches, 10l for Ivan
henry
parents: 15102
diff changeset
1416 case VOCTRL_GET_PANSCAN:
1edaf17d5205 messed ordering of switch branches, 10l for Ivan
henry
parents: 15102
diff changeset
1417 if ( !vo_config_count || !vo_fs ) return VO_FALSE;
1edaf17d5205 messed ordering of switch branches, 10l for Ivan
henry
parents: 15102
diff changeset
1418 return VO_TRUE;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1419 case VOCTRL_SET_EQUALIZER:
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1420 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1421 va_list ap;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1422 int value;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1423
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1424 va_start(ap, data);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1425 value = va_arg(ap, int);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1426 va_end(ap);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1427
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1428 return(vo_xv_set_eq(xv_port, data, value));
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1429 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1430
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1431 case VOCTRL_GET_EQUALIZER:
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1432 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1433 va_list ap;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1434 int *value;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1435
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1436 va_start(ap, data);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1437 value = va_arg(ap, int*);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1438 va_end(ap);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1439
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1440 return(vo_xv_get_eq(xv_port, data, value));
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1441 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1442 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1443 return VO_NOTIMPL;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1444 }