Mercurial > mplayer.hg
comparison DOCS/tech/vidix.txt @ 4103:917aff165995
Documentation
author | nick |
---|---|
date | Sat, 12 Jan 2002 10:47:43 +0000 |
parents | |
children | b086b94ec244 |
comparison
equal
deleted
inserted
replaced
4102:7b85e545cfb9 | 4103:917aff165995 |
---|---|
1 VIDIX - VIDeo Interface for *niX | |
2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
3 | |
4 This interface was designed and introduced as interface to userspace drivers | |
5 to provide DGA everywhere where it's possible (unline X11). | |
6 I hope that these drivers will be portable same as X11 (not only on *nix). | |
7 | |
8 What is it: | |
9 - It's portable successor of mga_vid technology which is located in user-space. | |
10 - Unlikely X11 it's provides DGA everywhere where it's possible. | |
11 - Unlikely v4l it provides interface for video playback | |
12 - Unlikely linux's drivers it uses mathematics library. | |
13 | |
14 Why it was developed: | |
15 As said Vladimir Dergachev | |
16 (http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/gatos/km/km.rfc.txt): | |
17 "0) Motivation | |
18 v4l, v4l2 and Xv are all suffering from the same problem: attempt to fit | |
19 existing multimedia devices into a fixed scheme." | |
20 Well - I tried to implement something similar by motivation. | |
21 | |
22 How it works: | |
23 ~~~~~~~~~~~~~ | |
24 | |
25 This interface is almost finished. But I guess it can be expanded by developer's | |
26 requests. | |
27 So any suggestions, reports, criticism are gladly accepted. | |
28 | |
29 1) APP calls vixGetVersion to check age of driver ;) | |
30 2) APP calls vixProbe. Driver should return 0 if it can handle something in PC. | |
31 3) APP calls vixGetCapability. Driver should return filled | |
32 vidix_capability_t.type field at least. | |
33 4) If above calls were succesful then APP calls vixInit function | |
34 (Driver can have not exported this function in this case call will be | |
35 skiped). | |
36 5) After initializing of driver APP calls vixGetCapability again | |
37 (In this case driver must fill every field of struct) | |
38 6) APP calls vixQueryFourcc. Driver should answer - can it configure | |
39 video memory for given fourcc or not. | |
40 7) APP calls vixConfigPlayback. Driver should prepare BES on this call. | |
41 APP pass to driver following info: | |
42 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
43 vidix_playback_t.fourcc - contains fourcc of movie | |
44 vidix_playback_t.capability - currently contsinas copy of vidix_capability_t.flags | |
45 vidix_playback_t.blend_factor- currently unused | |
46 vidix_playback_t.src - currently only x,y,w,h fields are used. | |
47 contain original movie size (in pixels) | |
48 x and y often are nulls. | |
49 vidix_playback_t.dest - x,y,w,h fields contains destinition rectange | |
50 on the screen in pixels. | |
51 vidix_playback_t.num_frames - maximal # of frames which can be used by APP. | |
52 (Currently 10). | |
53 Driver should fill following fields: | |
54 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
55 vidix_playback_t.num_frames - real # of frames which will be used by driver. | |
56 (Should be less or equal to app's num_frames). | |
57 | |
58 vidix_playback_t.dest.pitch.y These fields should contain alignment | |
59 vidix_playback_t.dest.pitch.u - for each Y,U,V plane in bytes. | |
60 vidix_playback_t.dest.pitch.v (For packed fourcc only Y value is used) | |
61 | |
62 vidix_playback_t.frame_size - Driver should tell to app which size of | |
63 source frame (src.w and src.h) should | |
64 use APP (according to pitches and offsets) | |
65 | |
66 vidix_playback_t.offsets - offsets from begin of BES memory for each frame | |
67 | |
68 vidix_playback_t.offset.y These field should contain offset | |
69 vidix_playback_t.offset.u - for each Y,U,V plane within frame. | |
70 vidix_playback_t.offset.v (For packed fourcc only Y value is used) | |
71 | |
72 vidix_playback_t.dga_addr - Address of BES memory. | |
73 | |
74 Also see this picture: | |
75 | |
76 VIDEO MEMORY layout: | |
77 +----------- It's begin of video memory End of video memory--------------+ | |
78 | | | |
79 v v | |
80 [ RGB memory | YUV memory | UNDEF ] | |
81 ^ | |
82 | | |
83 +---- begin of BES memory | |
84 | |
85 BES MEMORY layout: | |
86 +-------- begin of BES memory | |
87 | | |
88 v | |
89 [ | | | | | | |
90 ^ ^ ^ ^ ^ | |
91 | | | | + BEGIN of second frame | |
92 | | | + BEGIN of V plane | |
93 | | + BEGIN of U plane | |
94 | +------- BEGIN of Y plane | |
95 | | |
96 +--------- BEGIN of first frame | |
97 | |
98 This means that in general case: | |
99 offset of frame != offset of BES | |
100 offset of Y plane != offset of first frame | |
101 | |
102 But often: vidix_playback_t.offsets[0] = vidix_playback_t.offset.y = 0; | |
103 | |
104 Formula: (For Y plane) copy source to: | |
105 vidix_playback_t.dga_addr + | |
106 vidix_playback_t.offsets[i] + | |
107 vidix_playback_t.offset.y | |
108 | |
109 8) APP calls vixPlaybackOn. Driver should activate BES on this call. | |
110 9) PLAYBACK. Driver should sleep here ;) | |
111 But during playback can be called: | |
112 vixFrameSelect (if this function is exported) | |
113 Driver should prepare and activate corresponded frame. | |
114 This function is used only for double and trilpe buffering and | |
115 never used for single buffering playback. | |
116 vixGet(Set)GrKeys (if this function is exported) | |
117 This interface should be tuned but intriduced for overlapped playback | |
118 and video effects (TYPE_FX) | |
119 vixPlaybackGet(Set)Eq (if this function is exported) | |
120 For color correction. | |
121 10) APP calls vixPlaybackOff. Driver should deactivate BES on this call. | |
122 11) If vixDestroy is defined APP calls this function before unloading driver | |
123 from memory. | |
124 | |
125 | |
126 What functions are mandatory: | |
127 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
128 vixGetVersion | |
129 vixProbe | |
130 vixGetCapability | |
131 vixQueryFourcc | |
132 vixConfigPlayback | |
133 vixPlaybackOn | |
134 vixPlaybackOff | |
135 | |
136 All other functions are optionaly. | |
137 | |
138 Please send your suggestions, reports, feedback to mplayer-dev-eng@mplayerhq.hu | |
139 Best regards! Nick Kurshev. |