1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
/*
* Copyright (C) 2000-2001 the xine project
*
* This file is part of xine, a unix video player.
*
* xine is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* xine is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
* $Id: dxr3_video_out.h,v 1.6 2001/11/19 17:07:15 mlampard Exp $
*
*/
/*
* Globals for dxr3 videoout plugins
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <math.h>
#include <linux/em8300.h>
#include "video_out.h"
#include "xine_internal.h"
/* for fast_memcpy: */
#include "xineutils.h"
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <X11/Xutil.h>
#ifdef HAVE_XINERAMA
#include <X11/extensions/Xinerama.h>
#endif
#include "../video_out/video_out_x11.h"
#define LOOKUP_DEV "dxr3.devicename"
#define DEFAULT_DEV "/dev/em8300"
struct coeff {
float k,m;
};
typedef struct {
int fd_control;
int xoffset;
int yoffset;
int xcorr;
int jitter;
int stability;
int colorkey;
float color_interval;
int screen_xres;
int screen_yres;
int screen_depth;
struct coeff colcal_upper[3];
struct coeff colcal_lower[3];
} dxr3_overlay_t;
typedef struct dxr3_driver_s {
vo_driver_t vo_driver;
config_values_t *config;
int fd_control;
int fd_video;
int aspectratio;
int tv_mode;
em8300_bcs_t bcs;
/* for encoder plugin */
uint8_t *out[3]; /* aligned buffer for YV12 data, copied from frames */
uint8_t *buf[3]; /* unaligned YV12 buffer */
int oheight; /* height after adding black bars to correct a.r. */
int video_iheight; /* input height (before adding black bars) */
int video_height; /* output height (after adding bars) */
/* for overlay */
dxr3_overlay_t overlay;
Display *display;
Drawable win;
GC gc;
XColor color;
int xpos, ypos;
int width, height;
int overlay_enabled;
int tv_switchable; /* can switch from overlay<->tvout */
float desired_ratio;
int zoom_enabled; /* zoomed 16:9 mode */
int video_width;
int video_aspect;
char *user_data;
void (*request_dest_size) (char *userdata, int video_width, int video_height, int *dest_x,
int *dest_y, int *dest_height, int *dest_width);
} dxr3_driver_t;
typedef struct dxr3_frame_s {
vo_frame_t vo_frame;
int width, height;
uint8_t *mem[3]; /* allocated for YV12 or YUY2 buffers */
uint8_t *real_base[3]; /* same buffers alligned on 16 bytes */
int format;
dxr3_driver_t *vo_instance; /* points to self, for use in dxr3_frame_copy */
int copy_calls; /* counts calls to dxr3_frame_copy function */
#if USE_MPEG_BUFFER
unsigned char *mpeg; /* encoded mpeg data */
unsigned int mpeg_size; /* length of data */
#endif
}dxr3_frame_t;
static char *devname;
/* func definitions */
/* Overlay functions */
int dxr3_overlay_set_mode(dxr3_overlay_t *this, int mode);
int dxr3_overlay_set_attributes(dxr3_overlay_t *this);
int dxr3_overlay_set_screen(dxr3_overlay_t *this);
int dxr3_overlay_set_window(dxr3_overlay_t *this,
int xpos, int ypos, int width, int height);
void dxr3_overlay_buggy_preinit(dxr3_overlay_t *this, int fd);
int dxr3_overlay_read_state(dxr3_overlay_t *this);
void dxr3_get_keycolor(dxr3_driver_t *this);
void dxr3_read_config(dxr3_driver_t *this);
void *malloc_aligned (size_t alignment, size_t size, void **mem);
void gather_screen_vars(dxr3_driver_t *this, x11_visual_t *vis);
/* xine accessable functions */
int dxr3_get_property (vo_driver_t *this_gen, int property);
int dxr3_set_property (vo_driver_t *this_gen, int property, int value);
void dxr3_get_property_min_max (vo_driver_t *this_gen, int property, int *min, int *max);
int dxr3_gui_data_exchange (vo_driver_t *this_gen, int data_type, void *data);
|