annotate libvo/vo_xvmc.c @ 28063:a318969a4f45

Set the base size window manager hint, otherwise some subtract the minimum size of 4x4 from the numbers displayed to the user which might be confusing. Based on patch by Bert Wesarg [bert wesarg googlemail com].
author reimar
date Fri, 05 Dec 2008 19:01:49 +0000
parents 94bab93a8d17
children b2e17894b4d0
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"
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
10 #include "osdep/timer.h"
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
11
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
12 #include <X11/Xlib.h>
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
13 #include <X11/Xutil.h>
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
14 #include <X11/Xatom.h>
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
15
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
16 #ifdef HAVE_SHM
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
17 #include <sys/ipc.h>
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
18 #include <sys/shm.h>
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
19 #include <X11/extensions/XShm.h>
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
20 #endif
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
21
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
22 #include <X11/extensions/Xv.h>
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
23 #include <X11/extensions/Xvlib.h>
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
24 #include <X11/extensions/XvMClib.h>
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
25
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
26 #include "x11_common.h"
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
27 #include "xvmc_render.h"
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
28
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
29 #include "sub.h"
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
30 #include "aspect.h"
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
31
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
32 #include "subopt-helper.h"
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
33
27343
5fe6a8adf569 Rename two GUI-related preprocessor directives:
diego
parents: 26755
diff changeset
34 #ifdef CONFIG_GUI
23077
17bf4f4b0715 Gui --> gui
diego
parents: 22813
diff changeset
35 #include "gui/interface.h"
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
36 #endif
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
37
22461
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
38 #include "libavutil/common.h"
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
39
24595
85f669a84e7a cosmetics: misc typo fixes
diego
parents: 23656
diff changeset
40 //no chance for xinerama to be supported in the near future
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 27343
diff changeset
41 #undef CONFIG_XINERAMA
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
42
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
43 #undef NDEBUG
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
44 #include <assert.h>
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
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
47 #define UNUSED(x) ((void)(x))
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
48
22813
acfb17bdb671 prevent building xvmc with the old api.
iive
parents: 22468
diff changeset
49 #include "libavcodec/avcodec.h"
acfb17bdb671 prevent building xvmc with the old api.
iive
parents: 22468
diff changeset
50 #if LIBAVCODEC_BUILD < ((51<<16)+(40<<8)+2)
acfb17bdb671 prevent building xvmc with the old api.
iive
parents: 22468
diff changeset
51 #error You need at least libavcodecs v51.40.2
acfb17bdb671 prevent building xvmc with the old api.
iive
parents: 22468
diff changeset
52 #endif
acfb17bdb671 prevent building xvmc with the old api.
iive
parents: 22468
diff changeset
53
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
54
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
55 static int benchmark;
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
56 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
57 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
58 static int use_queue;
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
59 static int xv_port_request = 0;
26730
41794a5fb100 Add a new suboption to -vo xv and -vo xvmc that allows selection
ben
parents: 25220
diff changeset
60 static int xv_adaptor = -1;
20244
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
61 static int bob_deinterlace;
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
62 static int top_field_first;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
63
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
64 static int image_width,image_height;
22257
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
65 static int image_format;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
66 static uint32_t drwX,drwY;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
67
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
68 #define NO_SUBPICTURE 0
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
69 #define OVERLAY_SUBPICTURE 1
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
70 #define BLEND_SUBPICTURE 2
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
71 #define BACKEND_SUBPICTURE 3
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
72
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
73 static int subpicture_mode;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
74 static int subpicture_alloc;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
75 static XvMCSubpicture subpicture;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
76 static XvImageFormatValues subpicture_info;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
77 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
78
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
79 static XvMCSurfaceInfo surface_info;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
80 static XvMCContext ctx;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
81 static XvMCBlockArray data_blocks;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
82 static XvMCMacroBlockArray mv_blocks;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
83
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
84 #define MAX_SURFACES 8
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
85 static int number_of_surfaces=0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
86 static XvMCSurface surface_array[MAX_SURFACES];
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
87 static xvmc_render_state_t * surface_render;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
88
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
89 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
90 static xvmc_render_state_t * p_render_surface_visible=NULL;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
91
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
92 //display queue, kinda render ahead
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
93 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
94 static int free_element;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
95
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
96
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
97 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
98 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
99 static void (*init_osd_fnc)(void);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
100
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
101 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
102 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
103 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
104 static void init_osd_yuv_pal(void);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
105
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
106
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
107 static const struct{
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
108 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
109 void (* init_func_ptr)();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
110 void (* draw_func_ptr)();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
111 void (* clear_func_ptr)();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
112 } osd_render[]={
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
113 {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
114 {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
115 {0,NULL,NULL,NULL}
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
116 };
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
117
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
118 static void xvmc_free(void);
22257
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
119 static void xvmc_clean_surfaces(void);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
120 static int count_free_surfaces();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
121 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
122
25216
3aee342be929 Make vo info structs const
reimar
parents: 24595
diff changeset
123 static const vo_info_t info = {
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
124 "XVideo Motion Compensation",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
125 "xvmc",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
126 "Ivan Kalvachev <iive@users.sf.net>",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
127 ""
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
128 };
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
129
25220
c9e9ac2008c2 Mark the vo_functions_t definitions as const where possible.
reimar
parents: 25216
diff changeset
130 const LIBVO_EXTERN(xvmc);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
131
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
132 //shm stuff from vo_xv
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
133 #ifdef HAVE_SHM
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
134 static XShmSegmentInfo Shminfo;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
135 static int Shmem_Flag;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
136 #endif
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
137 XvImage * xvimage;
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
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
140 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
141 {
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 * allocate XvImages. FIXME: no error checking, without
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
144 * 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
145 */
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
146 #ifdef HAVE_SHM
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
147 if ( mLocalDisplay && XShmQueryExtension( mDisplay ) ) Shmem_Flag = 1;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
148 else
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
149 {
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
150 Shmem_Flag = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
151 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
152 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
153 if ( Shmem_Flag )
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 = (XvImage *) XvShmCreateImage(mDisplay, xv_port, xv_format,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
156 NULL, xvimage_width, xvimage_height, &Shminfo);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
157
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
158 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
159 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
160 Shminfo.readOnly = False;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
161
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
162 xvimage->data = Shminfo.shmaddr;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
163 XShmAttach(mDisplay, &Shminfo);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
164 XSync(mDisplay, False);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
165 shmctl(Shminfo.shmid, IPC_RMID, 0);
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 else
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
168 #endif
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 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
171 xvimage->data = malloc(xvimage->data_size);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
172 XSync(mDisplay,False);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
173 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
174 // memset(xvimage->data,128,xvimage->data_size);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
175 return;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
176 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
177
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
178 static void deallocate_xvimage()
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
179 {
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
180 #ifdef HAVE_SHM
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
181 if ( Shmem_Flag )
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
182 {
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
183 XShmDetach( mDisplay,&Shminfo );
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
184 shmdt( Shminfo.shmaddr );
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 else
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
187 #endif
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 free(xvimage->data);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
190 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
191 XFree(xvimage);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
192
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
193 XSync(mDisplay, False);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
194 return;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
195 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
196 //end of vo_xv shm/xvimage code
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
197
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
198 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
199 if ( format == IMGFMT_XVMC_IDCT_MPEG2 ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
200 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
201 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
202 return 0;
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 if ( format == IMGFMT_XVMC_MOCO_MPEG2 ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
205 if(surf_info->mc_type != XVMC_MPEG_2) return -1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
206 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
207 return 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
208 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
209 return -1;//fail
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
210 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
211
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
212 //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
213 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
214 int i;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
215 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
216
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
217 printf(" type = ");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
218 if(xifv->type == XvRGB) printf("RGB\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
219 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
220 else printf("Unknown\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
221
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
222 printf(" byte_order = ");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
223 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
224 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
225 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
226
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
227 printf(" guid = ");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
228 for(i=0;i<16;i++)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
229 printf("%02X ",(unsigned char)xifv->guid[i]);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
230 printf("\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(" 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
233
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
234 printf(" format = ");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
235 if(xifv->format == XvPacked) printf("XvPacked\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
236 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
237 else printf("Unknown\n");
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 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
240
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
241 if(xifv->type == XvRGB){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
242 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
243 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
244 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
245 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
246 if(xifv->type == XvYUV){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
247 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
248 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
249 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
250 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
251 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
252 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
253
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
254 printf(" component_order = ");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
255 for(i=0;i<32;i++)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
256 if(xifv->component_order[i]>=32)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
257 printf("%c",xifv->component_order[i]);
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 printf(" scanline = ");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
261 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
262 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
263 else printf("Unknown\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
264 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
265 printf("\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
266 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
267
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
268 // 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
269 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
270 XvMCSurfaceInfo * surf_info,int query){
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
271 int rez;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
272 XvAdaptorInfo * ai;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
273 int num_adaptors,i;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
274 unsigned long p;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
275 int s,mc_surf_num;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
276 XvMCSurfaceInfo * mc_surf_list;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
277
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
278 rez = XvQueryAdaptors(mDisplay,DefaultRootWindow(mDisplay),&num_adaptors,&ai);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
279 if( rez != Success ) return -1;
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
280 if( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
281 printf("vo_xvmc: Querying %d adaptors\n",num_adaptors); }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
282 for(i=0; i<num_adaptors; i++)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
283 {
26730
41794a5fb100 Add a new suboption to -vo xv and -vo xvmc that allows selection
ben
parents: 25220
diff changeset
284 /* check if adaptor number has been specified */
41794a5fb100 Add a new suboption to -vo xv and -vo xvmc that allows selection
ben
parents: 25220
diff changeset
285 if (xv_adaptor != -1 && xv_adaptor != i)
41794a5fb100 Add a new suboption to -vo xv and -vo xvmc that allows selection
ben
parents: 25220
diff changeset
286 continue;
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: Quering adaptor #%d\n",i); }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
289 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
290 //probing ports
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
291 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
292 {
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
293 if( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
294 printf("vo_xvmc: probing port #%ld\n",p); }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
295 mc_surf_list = XvMCListSurfaceTypes(mDisplay,p,&mc_surf_num);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
296 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
297 if( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
298 printf("vo_xvmc: No XvMC supported. \n"); }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
299 continue;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
300 }
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
301 if( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
302 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
303 //we have XvMC list!
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
304 for(s=0; s<mc_surf_num; s++)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
305 {
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
306 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
307 if( height > mc_surf_list[s].max_height ) continue;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
308 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
309 //we have match!
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
310 /* respect the users wish */
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
311 if ( xv_port_request != 0 && xv_port_request != p )
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
312 {
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
313 continue;
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
314 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
315
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
316 if(!query){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
317 rez = XvGrabPort(mDisplay,p,CurrentTime);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
318 if(rez != Success){
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
319 if ( mp_msg_test(MSGT_VO,MSGL_DBG3) ) {
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
320 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
321 continue;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
322 }
26730
41794a5fb100 Add a new suboption to -vo xv and -vo xvmc that allows selection
ben
parents: 25220
diff changeset
323 printf("vo_xvmc: Using Xv Adaptor #%d (%s)\n", i, ai[i].name);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
324 printf("vo_xvmc: Port %ld grabed\n",p);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
325 xv_port = p;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
326 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
327 goto surface_found;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
328 }//for mc surf
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
329 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
330 }//for ports
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
331 }//for adaptors
22203
009a79fb0bf4 Fix two 10l memleaks in vo_xvmc.c
reimar
parents: 22135
diff changeset
332 XvFreeAdaptorInfo(ai);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
333
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
334 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
335 return 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
336
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
337 // somebody know cleaner way to escape from 3 internal loops?
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
338 surface_found:
22203
009a79fb0bf4 Fix two 10l memleaks in vo_xvmc.c
reimar
parents: 22135
diff changeset
339 XvFreeAdaptorInfo(ai);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
340
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
341 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
342 if( mp_msg_test(MSGT_VO,MSGL_DBG3) || !query)
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
343 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
344 mc_surf_list[s].surface_type_id,p,i);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
345 return mc_surf_list[s].surface_type_id;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
346 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
347
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
348 static uint32_t xvmc_draw_image(mp_image_t *mpi){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
349 xvmc_render_state_t * rndr;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
350
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
351 assert(mpi!=NULL);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
352 assert(mpi->flags &MP_IMGFLAG_DIRECT);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
353 // assert(mpi->flags &MP_IMGFLAGS_DRAWBACK);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
354
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
355 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
356 assert( rndr != NULL );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
357 assert( rndr->magic == MP_XVMC_RENDER_MAGIC );
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
358 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
359 printf("vo_xvmc: draw_image(show rndr=%p)\n",rndr);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
360 // 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
361 rndr->state |= MP_XVMC_STATE_DISPLAY_PENDING;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
362 p_render_surface_to_show = rndr;
20244
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
363 top_field_first = mpi->fields & MP_IMGFIELD_TOP_FIRST;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
364 return VO_TRUE;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
365 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
366
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15866
diff changeset
367 static int preinit(const char *arg){
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
368 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
369 int mc_eventBase,mc_errorBase;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
370 int mc_ver,mc_rev;
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
371 strarg_t ck_src_arg = { 0, NULL };
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
372 strarg_t ck_method_arg = { 0, NULL };
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
373 opt_t subopts [] =
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
374 {
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
375 /* name arg type arg var test */
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
376 { "port", OPT_ARG_INT, &xv_port_request, (opt_test_f)int_pos },
26730
41794a5fb100 Add a new suboption to -vo xv and -vo xvmc that allows selection
ben
parents: 25220
diff changeset
377 { "adaptor", OPT_ARG_INT, &xv_adaptor, (opt_test_f)int_non_neg },
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
378 { "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
379 { "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
380 { "benchmark", OPT_ARG_BOOL, &benchmark, NULL },
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
381 { "sleep", OPT_ARG_BOOL, &use_sleep, NULL },
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
382 { "queue", OPT_ARG_BOOL, &use_queue, NULL },
20244
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
383 { "bobdeint", OPT_ARG_BOOL, &bob_deinterlace, NULL },
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
384 { NULL }
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
385 };
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
386
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
387 //Obtain display handler
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
388 if (!vo_init()) return -1;//vo_xv
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 //XvMC is subdivision of XVideo
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
391 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
392 &xv_event_base,&xv_error_base) ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
393 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
394 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
395 return -1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
396 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
397 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
398
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
399 if( True != XvMCQueryExtension(mDisplay,&mc_eventBase,&mc_errorBase) ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
400 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
401 XDisplayName(NULL));
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
402 return -1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
403 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
404
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
405 if(Success == XvMCQueryVersion(mDisplay, &mc_ver, &mc_rev) ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
406 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
407 mc_ver,mc_rev);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
408 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
409 else{
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
410 printf("vo_xvmc: Error querying version info!\n");
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
411 return -1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
412 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
413 surface_render = NULL;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
414 xv_port = 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
415 number_of_surfaces = 0;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
416 subpicture_alloc = 0;
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
417
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
418 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
419 use_sleep = 0;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
420 use_queue = 0;
20244
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
421 bob_deinterlace = 0;
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
422
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
423 /* parse suboptions */
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
424 if ( subopt_parse( arg, subopts ) != 0 )
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
425 {
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
426 return -1;
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
427 }
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
428
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
429 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
430
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
431 return 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
432 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
433
22461
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
434 static void calc_drwXY(uint32_t *drwX, uint32_t *drwY) {
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
435 *drwX = *drwY = 0;
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
436 if (vo_fs) {
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
437 aspect(&vo_dwidth, &vo_dheight, A_ZOOM);
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
438 vo_dwidth = FFMIN(vo_dwidth, vo_screenwidth);
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
439 vo_dheight = FFMIN(vo_dheight, vo_screenheight);
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
440 *drwX = (vo_screenwidth - vo_dwidth) / 2;
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
441 *drwY = (vo_screenheight - vo_dheight) / 2;
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
442 mp_msg(MSGT_VO, MSGL_V, "[xvmc-fs] dx: %d dy: %d dw: %d dh: %d\n",
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
443 *drwX, *drwY, vo_dwidth, vo_dheight);
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
444 } else if (WinID == 0) {
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
445 *drwX = vo_dx;
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
446 *drwY = vo_dy;
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
447 }
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
448 }
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
449
22246
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
450 static int config(uint32_t width, uint32_t height,
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
451 uint32_t d_width, uint32_t d_height,
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
452 uint32_t flags, char *title, uint32_t format){
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
453 int i,mode_id,rez;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
454 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
455
22246
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
456 //from vo_xv
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
457 XVisualInfo vinfo;
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
458 XSetWindowAttributes xswa;
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
459 XWindowAttributes attribs;
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
460 unsigned long xswamask;
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
461 int depth;
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 27343
diff changeset
462 #ifdef CONFIG_XF86VM
27952
94bab93a8d17 Simplify handling of VOFLAG_MODESWITCHNG, merge assignment and declaration
reimar
parents: 27946
diff changeset
463 int vm = flags & VOFLAG_MODESWITCHING;
22246
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
464 #endif
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
465 //end of vo_xv
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
466
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
467 if( !IMGFMT_IS_XVMC(format) )
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
468 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
469 assert(0);//should never happen, abort on debug or
22246
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
470 return 1;//return error on relese
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
471 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
472
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
473 // Find free port that supports MC, by querying adaptors
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
474 if( xv_port != 0 || number_of_surfaces != 0 ){
22257
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
475 if( height==image_height && width==image_width && image_format==format){
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
476 xvmc_clean_surfaces();
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
477 goto skip_surface_allocation;
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
478 }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
479 xvmc_free();
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
480 };
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
481 numblocks=((width+15)/16)*((height+15)/16);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
482 // Find Supported Surface Type
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
483 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
484 if ( mode_id == 0 )
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
485 {
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
486 return -1;
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
487 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
488
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
489 rez = XvMCCreateContext(mDisplay, xv_port,mode_id,width,height,XVMC_DIRECT,&ctx);
17228
717430668496 Print some error message,
iive
parents: 16280
diff changeset
490 if( rez != Success ){
717430668496 Print some error message,
iive
parents: 16280
diff changeset
491 printf("vo_xvmc: XvMCCreateContext failed with error %d\n",rez);
717430668496 Print some error message,
iive
parents: 16280
diff changeset
492 return -1;
717430668496 Print some error message,
iive
parents: 16280
diff changeset
493 }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
494 if( ctx.flags & XVMC_DIRECT ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
495 printf("vo_xvmc: Allocated Direct Context\n");
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
496 }else{
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
497 printf("vo_xvmc: Allocated Indirect Context!\n");
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
498 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
499
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
500
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
501 blocks_per_macroblock = 6;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
502 if(surface_info.chroma_format == XVMC_CHROMA_FORMAT_422)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
503 blocks_per_macroblock = 8;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
504 if(surface_info.chroma_format == XVMC_CHROMA_FORMAT_444)
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
505 blocks_per_macroblock = 12;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
506
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
507 rez = XvMCCreateBlocks(mDisplay,&ctx,numblocks*blocks_per_macroblock,&data_blocks);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
508 if( rez != Success ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
509 XvMCDestroyContext(mDisplay,&ctx);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
510 return -1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
511 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
512 printf("vo_xvmc: data_blocks allocated\n");
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
513
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
514 rez = XvMCCreateMacroBlocks(mDisplay,&ctx,numblocks,&mv_blocks);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
515 if( rez != Success ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
516 XvMCDestroyBlocks(mDisplay,&data_blocks);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
517 XvMCDestroyContext(mDisplay,&ctx);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
518 return -1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
519 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
520 printf("vo_xvmc: mv_blocks allocated\n");
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
521
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
522 if(surface_render==NULL)
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
523 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
524 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
525
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
526 for(i=0; i<MAX_SURFACES; i++){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
527 rez=XvMCCreateSurface(mDisplay,&ctx,&surface_array[i]);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
528 if( rez != Success )
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
529 break;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
530 surface_render[i].magic = MP_XVMC_RENDER_MAGIC;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
531 surface_render[i].data_blocks = data_blocks.blocks;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
532 surface_render[i].mv_blocks = mv_blocks.macro_blocks;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
533 surface_render[i].total_number_of_mv_blocks = numblocks;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
534 surface_render[i].total_number_of_data_blocks = numblocks*blocks_per_macroblock;;
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
535 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
536 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
537 surface_render[i].chroma_format = surface_info.chroma_format;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
538 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
539 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
540 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
541 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
542 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
543 number_of_surfaces = i;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
544 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
545 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
546 uninit();
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
547 return -1;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
548 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
549 printf("vo_xvmc: Motion Compensation context allocated - %d surfaces\n",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
550 number_of_surfaces);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
551
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
552 //debug
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
553 printf("vo_xvmc: idct=%d unsigned_intra=%d\n",
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
554 (surface_info.mc_type & XVMC_IDCT) == XVMC_IDCT,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
555 (surface_info.flags & XVMC_INTRA_UNSIGNED) == XVMC_INTRA_UNSIGNED);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
556
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
557 // Find way to display OSD & subtitle
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
558 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
559 subpicture_mode = NO_SUBPICTURE;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
560 if(surface_info.flags & XVMC_OVERLAID_SURFACE)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
561 subpicture_mode = OVERLAY_SUBPICTURE;
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 if(surface_info.subpicture_max_width != 0 &&
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
564 surface_info.subpicture_max_height != 0 ){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
565 int s,k,num_subpic;
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 XvImageFormatValues * xvfmv;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
568 xvfmv = XvMCListSubpictureTypes(mDisplay, xv_port,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
569 surface_info.surface_type_id, &num_subpic);
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 if(num_subpic != 0 && xvfmv != NULL){
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
572 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
573 for(s=0;s<num_subpic;s++)
11415
da41bbc78e3d verbosity changes, zero the whole surface_render[]
iive
parents: 10714
diff changeset
574 print_xvimage_format_values(&xvfmv[s]);
10698
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
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
577 for(s=0;s<num_subpic;s++){
10714
iive
parents: 10698
diff changeset
578 for(k=0;osd_render[k].draw_func_ptr!=NULL;k++){
iive
parents: 10698
diff changeset
579 if(xvfmv[s].id == osd_render[k].id)
iive
parents: 10698
diff changeset
580 {
iive
parents: 10698
diff changeset
581 init_osd_fnc = osd_render[k].init_func_ptr;
iive
parents: 10698
diff changeset
582 draw_osd_fnc = osd_render[k].draw_func_ptr;
iive
parents: 10698
diff changeset
583 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
584
10714
iive
parents: 10698
diff changeset
585 subpicture_mode = BLEND_SUBPICTURE;
iive
parents: 10698
diff changeset
586 subpicture_info = xvfmv[s];
11415
da41bbc78e3d verbosity changes, zero the whole surface_render[]
iive
parents: 10714
diff changeset
587 printf(" Subpicture id 0x%08X\n",subpicture_info.id);
10714
iive
parents: 10698
diff changeset
588 goto found_subpic;
iive
parents: 10698
diff changeset
589 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
590 }
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 found_subpic:
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
593 XFree(xvfmv);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
594 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
595 //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
596 if( (subpicture_mode == BLEND_SUBPICTURE) &&
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
597 (surface_info.flags & XVMC_BACKEND_SUBPICTURE) )
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
598 {
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
599 subpicture_mode = BACKEND_SUBPICTURE;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
600 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
601
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
602 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
603
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
604 switch(subpicture_mode){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
605 case NO_SUBPICTURE:
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
606 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
607 break;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
608 case OVERLAY_SUBPICTURE:
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
609 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
610 printf("vo_xvmc: not yet implemented:(\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
611 break;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
612 case BLEND_SUBPICTURE:
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
613 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
614 break;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
615 case BACKEND_SUBPICTURE:
22129
32a28daf0cf4 beckend -> backend typo fix in printf
reimar
parents: 21874
diff changeset
616 printf("vo_xvmc: OSD support by backend rendering (fast)\n");
22135
4eb3867eadee typo fixes
kraymer
parents: 22129
diff changeset
617 printf("vo_xvmc: Please send feedback to confirm that it works,otherwise send bugreport!\n");
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
618 break;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
619 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
620
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
621 //take keycolor value and choose method for handling it
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
622 if ( !vo_xv_init_colorkey() )
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
623 {
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
624 return -1; // bail out, colorkey setup failed
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
625 }
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
626
15866
47fa825a5018 add vo_xv_enable_vsync() to xvmc
iive
parents: 15540
diff changeset
627 vo_xv_enable_vsync();//it won't break anything
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
628
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
629 //taken from vo_xv
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
630 image_height = height;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
631 image_width = width;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
632
22257
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
633 skip_surface_allocation:
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
634
27343
5fe6a8adf569 Rename two GUI-related preprocessor directives:
diego
parents: 26755
diff changeset
635 #ifdef CONFIG_GUI
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
636 if(use_gui)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
637 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
638 else
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
639 #endif
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
640 {
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 27343
diff changeset
641 #ifdef CONFIG_XF86VM
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
642 if ( vm )
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
643 {
27890
a4e2700e9381 Simplify vo_vm_switch and vo_vm_close, everyone was using the (almost) same
reimar
parents: 27412
diff changeset
644 vo_vm_switch();
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
645 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
646 else
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
647 #endif
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
648 XGetWindowAttributes(mDisplay, DefaultRootWindow(mDisplay), &attribs);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
649 depth=attribs.depth;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
650 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
651 XMatchVisualInfo(mDisplay, mScreen, depth, TrueColor, &vinfo);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
652
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
653 xswa.background_pixel = 0;
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
654 if (xv_ck_info.method == CK_METHOD_BACKGROUND)
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
655 xswa.background_pixel = xv_colorkey;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
656 xswa.border_pixel = 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
657 xswamask = CWBackPixel | CWBorderPixel;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
658
23655
00aa61cde84a Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents: 23376
diff changeset
659 vo_x11_create_vo_window(&vinfo, vo_dx, vo_dy, d_width, d_height, flags,
00aa61cde84a Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents: 23376
diff changeset
660 CopyFromParent, "xvmc", title);
00aa61cde84a Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents: 23376
diff changeset
661 XChangeWindowAttributes(mDisplay, vo_window, xswamask, &xswa);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
662
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 27343
diff changeset
663 #ifdef CONFIG_XF86VM
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
664 if ( vm )
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
665 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
666 /* Grab the mouse pointer in our window */
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
667 if(vo_grabpointer)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
668 XGrabPointer(mDisplay, vo_window, True, 0,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
669 GrabModeAsync, GrabModeAsync,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
670 vo_window, None, CurrentTime );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
671 XSetInputFocus(mDisplay, vo_window, RevertToNone, CurrentTime);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
672 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
673 #endif
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
674 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
675
22461
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
676 if ((flags & VOFLAG_FULLSCREEN) && WinID <= 0) vo_fs = 1;
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
677 calc_drwXY(&drwX, &drwY);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
678
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
679 panscan_calc();
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
680
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
681 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
682
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
683 //end vo_xv
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
684
22246
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
685 /* store image dimesions for displaying */
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
686 p_render_surface_visible = NULL;
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
687 p_render_surface_to_show = NULL;
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
688
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
689 free_element = 0;
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
690 first_frame = 1;
cd659496eafd Revert r22255 on iive's request.
reimar
parents: 22237
diff changeset
691
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
692 vo_directrendering = 1;//ugly hack, coz xvmc works only with direct rendering
22257
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
693 image_format=format;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
694 return 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
695 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
696
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15866
diff changeset
697 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
698 UNUSED(srcp);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
699 assert(0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
700 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
701
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
702 static void init_osd_yuv_pal(){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
703 char * palette;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
704 int rez;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
705 int i,j;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
706 int snum,seb;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
707 int Y,U,V;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
708
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
709 subpicture_clear_color = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
710
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
711 if(subpicture.num_palette_entries > 0){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
712
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
713 snum = subpicture.num_palette_entries;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
714 seb = subpicture.entry_bytes;
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18715
diff changeset
715 palette = malloc(snum*seb);//check fail
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
716 if(palette == NULL) return;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
717 for(i=0; i<snum; i++){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
718 // 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
719 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
720 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
721 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
722 for(j=0; j<seb; j++)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
723 switch(subpicture.component_order[j]){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
724 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
725 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
726 case 'Y':
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
727 default:
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
728 palette[i*seb+j] = Y; break;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
729 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
730 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
731 rez = XvMCSetSubpicturePalette(mDisplay, &subpicture, palette);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
732 if(rez!=Success){
21874
9338a0782bc3 cosmetics: typo pallete --> palette
diego
parents: 21002
diff changeset
733 printf("vo_xvmc: Setting palette failed.\n");
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
734 }
22203
009a79fb0bf4 Fix two 10l memleaks in vo_xvmc.c
reimar
parents: 22135
diff changeset
735 free(palette);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
736 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
737 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
738
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
739 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
740 int rez;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
741 rez=XvMCClearSubpicture(mDisplay, &subpicture,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
742 x0, y0, w,h,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
743 subpicture_clear_color);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
744 if(rez != Success)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
745 printf("vo_xvmc: XvMCClearSubpicture failed!\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
746 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
747
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
748 static void OSD_init(){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
749 unsigned short osd_height, osd_width;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
750 int rez;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
751
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
752 if(subpicture_alloc){
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
753 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
754 printf("vo_xvmc: destroying subpicture\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
755 XvMCDestroySubpicture(mDisplay,&subpicture);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
756 deallocate_xvimage();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
757 subpicture_alloc = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
758 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
759
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
760 /* 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
761 osd_width = vo_dwidth;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
762 osd_height = vo_dheight;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
763 }else*/
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
764 {
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
765 osd_width = image_width;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
766 osd_height = image_height;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
767 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
768
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
769 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
770 osd_width = surface_info.subpicture_max_width;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
771 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
772 osd_height = surface_info.subpicture_max_height;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
773 if(osd_width == 0 || osd_height == 0)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
774 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
775
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
776 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
777 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
778 osd_width,osd_height,subpicture_info.id);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
779
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
780 rez = XvMCCreateSubpicture(mDisplay,&ctx,&subpicture,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
781 osd_width,osd_height,subpicture_info.id);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
782 if(rez != Success){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
783 subpicture_mode = NO_SUBPICTURE;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
784 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
785 return;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
786 }
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
787 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
788 int i;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
789 printf("vo_xvmc: Created Subpicture:\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
790 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
791 printf(" width=%d\n",subpicture.width);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
792 printf(" height=%d\n",subpicture.height);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
793 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
794 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
795
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
796 printf(" component_order=\"");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
797 for(i=0; i<4; i++)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
798 if(subpicture.component_order[i] >= 32)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
799 printf("%c", subpicture.component_order[i]);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
800 printf("\"\n");
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 //call init for the surface type
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
804 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
805 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
806 printf("vo_xvmc: clearing subpicture\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
807 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
808
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
809 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
810 subpicture_alloc = 1;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
811 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
812
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
813 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
814 int ox,oy;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
815 int rez;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
816
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
817 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
818 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
819
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
820 for(ox=0; ox<w; ox++){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
821 for(oy=0; oy<h; oy++){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
822 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
823 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
824 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
825 rez = XvMCCompositeSubpicture(mDisplay, &subpicture, xvimage, 0, 0,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
826 w,h,x0,y0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
827 if(rez != Success){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
828 printf("vo_xvmc: composite subpicture failed\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
829 assert(0);
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 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
832
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
833 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
834 int ox,oy;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
835 int rez;
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
836 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
837 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
838
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
839 for(ox=0; ox<w; ox++){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
840 for(oy=0; oy<h; oy++){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
841 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
842 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
843 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
844 rez = XvMCCompositeSubpicture(mDisplay, &subpicture, xvimage, 0, 0,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
845 w,h,x0,y0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
846 if(rez != Success){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
847 printf("vo_xvmc: composite subpicture failed\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
848 assert(0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
849 }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
850 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
851
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
852 static void draw_osd(void){
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
853 xvmc_render_state_t * osd_rndr;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
854 int osd_has_changed;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
855 int have_osd_to_draw;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
856 int rez;
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 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
860 subpicture_mode,p_render_surface_to_show);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
861
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
862 if(subpicture_mode == BLEND_SUBPICTURE ||
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
863 subpicture_mode == BACKEND_SUBPICTURE ){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
864
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
865 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
866 OSD_init();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
867 if(!subpicture_alloc)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
868 return;//dimensions still unknown.
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
869
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
870 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
871 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
872 subpicture.height);
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 if(!have_osd_to_draw)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
875 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
876
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
877 if(osd_has_changed){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
878 //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
879 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
880 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
881 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
882 XvMCSyncSubpicture(mDisplay,&subpicture);//todo usleeep wait!
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 if(subpicture_mode == BLEND_SUBPICTURE){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
885 osd_rndr = find_free_surface();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
886 if(osd_rndr == NULL)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
887 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
888
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
889 rez = XvMCBlendSubpicture2(mDisplay,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
890 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
891 &subpicture,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
892 0, 0, subpicture.width, subpicture.height,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
893 0, 0, image_width, image_height);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
894 if(rez!=Success){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
895 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
896 assert(0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
897 return;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
898 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
899 // 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
900
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
901 //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
902 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
903 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
904 //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
905
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
906 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
907 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
908 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
909
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
910 p_render_surface_to_show = osd_rndr;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
911 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
912
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
913 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
914 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
915 }//endof if(BLEND)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
916 if(subpicture_mode == BACKEND_SUBPICTURE){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
917 rez = XvMCBlendSubpicture(mDisplay,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
918 p_render_surface_to_show->p_surface,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
919 &subpicture,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
920 0, 0, subpicture.width, subpicture.height,
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
921 0, 0, image_width, image_height);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
922
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
923 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
924
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
925 }//if(BLEND||BACKEND)
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
926 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
927
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
928 static void xvmc_sync_surface(XvMCSurface * srf){
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
929 int status,rez;
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
930 rez = XvMCGetSurfaceStatus(mDisplay,srf,&status);
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
931 assert(rez==Success);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
932 if((status & XVMC_RENDERING) == 0)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
933 return;//surface is already complete
14742
76d461a061df Unified colorkey code for vo xv and vo xvmc.
al
parents: 14635
diff changeset
934 if(use_sleep){
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
935 rez = XvMCFlushSurface(mDisplay, srf);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
936 assert(rez==Success);
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
937
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
938 do{
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
939 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
940 XvMCGetSurfaceStatus(mDisplay,srf,&status);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
941 } while (status & XVMC_RENDERING);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
942 return;//done
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
943 }
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 XvMCSyncSurface(mDisplay, srf);
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
946 }
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
947
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
948 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
949 int rez;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
950 int clipX,clipY,clipW,clipH;
20244
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
951 int i;
15060
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
952
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
953 if(p_render_surface == NULL)
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
954 return;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
955
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
956 clipX = drwX-(vo_panscan_x>>1);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
957 clipY = drwY-(vo_panscan_y>>1);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
958 clipW = vo_dwidth+vo_panscan_x;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
959 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
960
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
961 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
962 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
963
1d3ba9fb75cd incorporate all image drawing in single function and use fixed vo_xv_draw_colorkey() for proper key drawing.
iive
parents: 15060
diff changeset
964 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
965 return;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
966
20244
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
967 for (i = 1; i <= bob_deinterlace + 1; i++) {
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
968 int field = top_field_first ? i : i ^ 3;
15060
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
969 rez = XvMCPutSurface(mDisplay, p_render_surface->p_surface,
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
970 vo_window,
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
971 0, 0, image_width, image_height,
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
972 clipX, clipY, clipW, clipH,
20244
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
973 bob_deinterlace ? field : 3);
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
974 //p_render_surface_to_show->display_flags);
15060
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
975 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
976 printf("vo_xvmc: PutSurface failer, critical error %d!\n",rez);
15060
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
977 assert(0);
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
978 }
20244
81a514f118d2 Implement bob (pseudo?) deinterlacing for xvmc.
reimar
parents: 18878
diff changeset
979 }
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
980 XFlush(mDisplay);
15060
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
981 }
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
982
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
983 static void flip_page(void){
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
984 int i,cfs;
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
985
30289c5f3cc6 fix blackscreen when changing panscan.
iive
parents: 14742
diff changeset
986
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
987 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
988 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
989
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
990 if(p_render_surface_to_show == NULL) return;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
991 assert( p_render_surface_to_show->magic == MP_XVMC_RENDER_MAGIC );
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
992 //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
993
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
994 if(use_queue){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
995 // 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
996 // after that start displaying
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
997 cfs = count_free_surfaces();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
998 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
999 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
1000 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
1001 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
1002 return;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1003 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1004 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
1005 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
1006 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
1007 free_element--;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1008 for(i=0; i<free_element; i++){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1009 show_queue[i] = show_queue[i+1];
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1010 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1011 show_queue[free_element] = NULL;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1012 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1013
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1014 // make sure the rendering is done
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
1015 xvmc_sync_surface(p_render_surface_to_show->p_surface);
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
1016
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1017 //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
1018 if(p_render_surface_visible != NULL)
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1019 p_render_surface_visible->state &= ~MP_XVMC_STATE_DISPLAY_PENDING;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1020
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
1021 //!!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
1022
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1023 //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
1024 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
1025 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
1026
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1027 p_render_surface_visible = p_render_surface_to_show;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1028 p_render_surface_to_show = NULL;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1029 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1030
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1031 static void check_events(void){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1032 int e=vo_x11_check_events(mDisplay);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1033 if(e&VO_EVENT_RESIZE)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1034 {
10497
9e6becbd5c8a draw rectangle with color key, avoid blue bars. avoid PutSurface before 1'st image
iive
parents: 10452
diff changeset
1035 e |= VO_EVENT_EXPOSE;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1036
22461
c54ad95f852a Factor out some duplicated code in vo_xv and vo_xvmc
reimar
parents: 22257
diff changeset
1037 calc_drwXY(&drwX, &drwY);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1038 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1039 if ( e & VO_EVENT_EXPOSE )
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1040 {
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
1041 put_xvmc_image(p_render_surface_visible,1);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1042 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1043 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1044
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1045 static void xvmc_free(void){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1046 int i;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1047 if( subpicture_alloc ){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1048
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1049 XvMCDestroySubpicture(mDisplay,&subpicture);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1050 deallocate_xvimage();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1051
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1052 subpicture_alloc = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1053
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1054 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
1055 printf("vo_xvmc: subpicture destroyed\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1056 }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1057
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1058 if( number_of_surfaces ){
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1059
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1060 XvMCDestroyMacroBlocks(mDisplay,&mv_blocks);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1061 XvMCDestroyBlocks(mDisplay,&data_blocks);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1062
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1063 for(i=0; i<number_of_surfaces; i++)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1064 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1065 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
1066 XvMCDestroySurface(mDisplay,&surface_array[i]);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1067
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1068 if( (surface_render[i].state != 0) &&
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1069 (p_render_surface_visible != &surface_render[i]) )
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1070 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
1071 surface_render[i].state);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1072 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1073
11415
da41bbc78e3d verbosity changes, zero the whole surface_render[]
iive
parents: 10714
diff changeset
1074 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
1075 free(surface_render);surface_render=NULL;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1076
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1077 XvMCDestroyContext(mDisplay,&ctx);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1078 number_of_surfaces = 0;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1079
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1080 if( mp_msg_test(MSGT_VO,MSGL_DBG4) ) {
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1081 printf("vo_xvmc: Context sucessfuly freed\n"); }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1082 }
10698
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 if( xv_port !=0 ){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1086 XvUngrabPort(mDisplay,xv_port,CurrentTime);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1087 xv_port = 0;
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1088 if( mp_msg_test(MSGT_VO,MSGL_DBG4) ) {
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1089 printf("vo_xvmc: xv_port sucessfuly ungrabed\n"); }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1090 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1091 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1092
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1093 static void uninit(void){
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1094 if( mp_msg_test(MSGT_VO,MSGL_DBG4) ) {
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1095 printf("vo_xvmc: uninit called\n"); }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1096 xvmc_free();
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1097 //from vo_xv
27377
d58d06eafe83 Change a bunch of X11-specific preprocessor directives.
diego
parents: 27343
diff changeset
1098 #ifdef CONFIG_XF86VM
27890
a4e2700e9381 Simplify vo_vm_switch and vo_vm_close, everyone was using the (almost) same
reimar
parents: 27412
diff changeset
1099 vo_vm_close();
15211
d42f22a1503b Compile fix when XF86VM is not defined
iive
parents: 15151
diff changeset
1100 #endif
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1101 vo_x11_uninit();
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1102 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1103
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15866
diff changeset
1104 static int query_format(uint32_t format){
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1105 uint32_t flags;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1106 XvMCSurfaceInfo qsurface_info;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1107 int mode_id;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1108
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1109 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1110 printf("vo_xvmc: query_format=%X\n",format);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1111
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1112 if(!IMGFMT_IS_XVMC(format)) return 0;// no caps supported
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1113 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
1114
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1115 if( mode_id == 0 ) return 0;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1116
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1117 flags = VFCAP_CSP_SUPPORTED |
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1118 VFCAP_CSP_SUPPORTED_BY_HW |
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1119 VFCAP_ACCEPT_STRIDE;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1120
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1121 if( (qsurface_info.subpicture_max_width != 0) &&
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1122 (qsurface_info.subpicture_max_height != 0) )
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1123 flags|=VFCAP_OSD;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1124 return flags;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1125 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1126
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1127
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15866
diff changeset
1128 static int draw_slice(uint8_t *image[], int stride[],
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1129 int w, int h, int x, int y){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1130 xvmc_render_state_t * rndr;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1131 int rez;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1132
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1133 if( mp_msg_test(MSGT_VO,MSGL_DBG4) )
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1134 printf("vo_xvmc: draw_slice y=%d\n",y);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1135
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1136 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
1137 assert( rndr != NULL );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1138 assert( rndr->magic == MP_XVMC_RENDER_MAGIC );
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1139
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1140 rez = XvMCRenderSurface(mDisplay,&ctx,rndr->picture_structure,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1141 rndr->p_surface,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1142 rndr->p_past_surface,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1143 rndr->p_future_surface,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1144 rndr->flags,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1145 rndr->filled_mv_blocks_num,rndr->start_mv_blocks_num,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1146 &mv_blocks,&data_blocks);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1147 #if 1
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1148 if(rez != Success)
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1149 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1150 int i;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1151 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
1152
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1153 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
1154 rndr->picture_structure,rndr->flags,rndr->start_mv_blocks_num,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1155 rndr->filled_mv_blocks_num);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1156 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
1157 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
1158
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1159 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
1160 XvMCMacroBlock* testblock;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1161 testblock = &mv_blocks.macro_blocks[i];
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1162
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1163 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
1164 testblock->x,testblock->y,testblock->macroblock_type,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1165 testblock->motion_type,testblock->motion_vertical_field_select);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1166 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
1167 testblock->dct_type,testblock->index,testblock->coded_block_pattern,
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1168 testblock->pad0);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1169 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
1170 testblock->PMV[0][0][0],testblock->PMV[0][0][1]);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1171 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1172 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1173 #endif
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1174 assert(rez==Success);
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1175 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
1176 rez = XvMCFlushSurface(mDisplay, rndr->p_surface);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1177 assert(rez==Success);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1178
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1179 // rndr->start_mv_blocks_num += rndr->filled_mv_blocks_num;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1180 rndr->start_mv_blocks_num = 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1181 rndr->filled_mv_blocks_num = 0;
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 rndr->next_free_data_block_num = 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1184
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1185 return VO_TRUE;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1186 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1187
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1188 //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
1189 //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
1190 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
1191 xvmc_render_state_t * osd_rndr;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1192 int stat;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1193 //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
1194 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
1195 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
1196 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
1197 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
1198 XvMCGetSurfaceStatus(mDisplay, osd_rndr->p_surface, &stat);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1199 if(!(stat & XVMC_RENDERING))
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1200 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
1201 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1202 }
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1203 static int count_free_surfaces(){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1204 int i,num;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1205 num=0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1206 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
1207 check_osd_source(&surface_render[i]);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1208 if(surface_render[i].state == 0)
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1209 num++;
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 return num;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1212 }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1213
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1214 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
1215 int i,t;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1216 int stat;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1217 xvmc_render_state_t * visible_rndr;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1218
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1219 visible_rndr = NULL;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1220 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
1221
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1222 check_osd_source(&surface_render[i]);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1223 if( surface_render[i].state == 0){
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1224 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
1225 if( (stat & XVMC_DISPLAYING) == 0 )
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1226 return &surface_render[i];
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1227 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
1228 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1229 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1230
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1231 //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
1232 //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
1233 if(visible_rndr != NULL){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1234 printf("vo_xvmc: waiting retrace\n");
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1235 for(t=0;t<1000;t++){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1236 usec_sleep(1000);//1ms
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1237 XvMCGetSurfaceStatus(mDisplay, visible_rndr->p_surface,&stat);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1238 if( (stat & XVMC_DISPLAYING) == 0 )
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1239 return visible_rndr;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1240 }
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1241 }
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1242 //todo remove when stable
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1243 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
1244 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
1245 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
1246 return NULL;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1247 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1248
22257
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
1249 static void xvmc_clean_surfaces(void){
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
1250 int i;
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
1251
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
1252 for(i=0; i<number_of_surfaces; i++){
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
1253
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
1254 surface_render[i].state&=!( MP_XVMC_STATE_DISPLAY_PENDING |
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
1255 MP_XVMC_STATE_OSD_SOURCE |
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
1256 0);
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
1257 surface_render[i].p_osd_target_surface_render=NULL;
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
1258 if(surface_render[i].state != 0){
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
1259 mp_msg(MSGT_VO,MSGL_WARN,"vo_xvmc: surface[%d].state=%d\n",
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
1260 i,surface_render[i].state);
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
1261 }
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
1262 }
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
1263 free_element=0;//clean up the queue
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
1264 }
f979aa12d8cc Don't free and then allocate surfaces when config() is called again with same resolution and format.
iive
parents: 22246
diff changeset
1265
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1266 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
1267 xvmc_render_state_t * rndr;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1268
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1269 rndr = find_free_surface();
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1270
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1271 if(rndr == NULL){
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1272 printf("vo_xvmc: get_image failed\n");
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1273 return VO_FALSE;
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
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1276 assert(rndr->start_mv_blocks_num == 0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1277 assert(rndr->filled_mv_blocks_num == 0);
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1278 assert(rndr->next_free_data_block_num == 0);
10452
4eaf6fa120b1 sync to ffmpeg, updates, cleanups
iive
parents: 10360
diff changeset
1279
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1280 mpi->flags |= MP_IMGFLAG_DIRECT;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1281 //keep strides 0 to avoid field manipulations
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1282 mpi->stride[0] = 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1283 mpi->stride[1] = 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1284 mpi->stride[2] = 0;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1285
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1286 // these are shared!! so watch out
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1287 // do call RenderSurface before overwriting
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1288 mpi->planes[0] = (char*)data_blocks.blocks;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1289 mpi->planes[1] = (char*)mv_blocks.macro_blocks;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1290 mpi->priv =
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1291 mpi->planes[2] = (char*)rndr;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1292
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1293 rndr->picture_structure = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1294 rndr->flags = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1295 rndr->state = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1296 rndr->start_mv_blocks_num = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1297 rndr->filled_mv_blocks_num = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1298 rndr->next_free_data_block_num = 0;
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1299
17932
3fe3b2b3a6ce Convert all if(verbose>X) to mp_msg_test calls.
diego
parents: 17228
diff changeset
1300 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
1301 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
1302 rndr,rndr->p_surface);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1303 return VO_TRUE;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1304 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1305
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15866
diff changeset
1306 static int control(uint32_t request, void *data, ... )
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1307 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1308 switch (request){
20973
c0bcec5150a3 Add deinterlace property, patch by Carl Eugen Hoyos
reimar
parents: 20244
diff changeset
1309 case VOCTRL_GET_DEINTERLACE:
c0bcec5150a3 Add deinterlace property, patch by Carl Eugen Hoyos
reimar
parents: 20244
diff changeset
1310 *(int*)data = bob_deinterlace;
c0bcec5150a3 Add deinterlace property, patch by Carl Eugen Hoyos
reimar
parents: 20244
diff changeset
1311 return VO_TRUE;
c0bcec5150a3 Add deinterlace property, patch by Carl Eugen Hoyos
reimar
parents: 20244
diff changeset
1312 case VOCTRL_SET_DEINTERLACE:
21002
1de63b07a353 more mp_property_deinterlace simplification, patch by
reimar
parents: 20973
diff changeset
1313 bob_deinterlace = *(int*)data;
20973
c0bcec5150a3 Add deinterlace property, patch by Carl Eugen Hoyos
reimar
parents: 20244
diff changeset
1314 return VO_TRUE;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1315 case VOCTRL_QUERY_FORMAT:
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1316 return query_format(*((uint32_t*)data));
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1317 case VOCTRL_DRAW_IMAGE:
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1318 return xvmc_draw_image((mp_image_t *)data);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1319 case VOCTRL_GET_IMAGE:
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1320 return get_image((mp_image_t *)data);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1321 //vo_xv
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1322 case VOCTRL_GUISUPPORT:
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1323 return VO_TRUE;
11542
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11415
diff changeset
1324 case VOCTRL_ONTOP:
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11415
diff changeset
1325 vo_x11_ontop();
85e503ddf65f runtime 'stay-on-top' functionality
joey
parents: 11415
diff changeset
1326 return VO_TRUE;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1327 case VOCTRL_FULLSCREEN:
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1328 vo_x11_fullscreen();
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1329 // indended, fallthrough to update panscan on fullscreen/windowed switch
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1330 case VOCTRL_SET_PANSCAN:
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1331 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
1332 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1333 int old_y = vo_panscan_y;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1334 panscan_calc();
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1335
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1336 if(old_y != vo_panscan_y)
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1337 {
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
1338 //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
1339 put_xvmc_image(p_render_surface_visible,1);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1340 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1341 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1342 return VO_TRUE;
15151
1edaf17d5205 messed ordering of switch branches, 10l for Ivan
henry
parents: 15102
diff changeset
1343 case VOCTRL_GET_PANSCAN:
1edaf17d5205 messed ordering of switch branches, 10l for Ivan
henry
parents: 15102
diff changeset
1344 if ( !vo_config_count || !vo_fs ) return VO_FALSE;
1edaf17d5205 messed ordering of switch branches, 10l for Ivan
henry
parents: 15102
diff changeset
1345 return VO_TRUE;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1346 case VOCTRL_SET_EQUALIZER:
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 va_list ap;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1349 int value;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1350
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1351 va_start(ap, data);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1352 value = va_arg(ap, int);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1353 va_end(ap);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1354
26755
46f0b4d34fa1 cosmetics: Remove useless parentheses from from return statements.
diego
parents: 26730
diff changeset
1355 return vo_xv_set_eq(xv_port, data, value);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1356 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1357
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1358 case VOCTRL_GET_EQUALIZER:
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1359 {
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1360 va_list ap;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1361 int *value;
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1362
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1363 va_start(ap, data);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1364 value = va_arg(ap, int*);
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1365 va_end(ap);
10698
7ab88b24cb81 OSD support, optinal queue, optional use of sleep(), and benchmark mode
iive
parents: 10608
diff changeset
1366
26755
46f0b4d34fa1 cosmetics: Remove useless parentheses from from return statements.
diego
parents: 26730
diff changeset
1367 return vo_xv_get_eq(xv_port, data, value);
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1368 }
22232
d0b60d14d8d7 Move common vo initialization code to video_out.c
reimar
parents: 22203
diff changeset
1369 case VOCTRL_UPDATE_SCREENINFO:
d0b60d14d8d7 Move common vo initialization code to video_out.c
reimar
parents: 22203
diff changeset
1370 update_xinerama_info();
d0b60d14d8d7 Move common vo initialization code to video_out.c
reimar
parents: 22203
diff changeset
1371 return VO_TRUE;
10360
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1372 }
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1373 return VO_NOTIMPL;
b79a4c15d081 Initial version of XVideo Motion Compensation video driver/render
iive
parents:
diff changeset
1374 }