annotate libvo/vo_xvmc.c @ 25317:7f3cb5408f28

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