annotate DOCS/tech/libvo.txt @ 5679:30f196ff3bec

This patch replaces vo_svga.c with an improved version that does not use vgagl library, supports direct rendering and page flipping, and is generally a lot faster. - by Matan Ziv-Av <matan@svgalib.org>
author arpi
date Thu, 18 Apr 2002 15:41:33 +0000
parents 6ce9c6231bdd
children bdd6735a8d83
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5586
6ce9c6231bdd updated
arpi
parents:
diff changeset
1 libvo --- the library to handle video output by A'rpi, 2002.04
6ce9c6231bdd updated
arpi
parents:
diff changeset
2 ============================================
6ce9c6231bdd updated
arpi
parents:
diff changeset
3
6ce9c6231bdd updated
arpi
parents:
diff changeset
4 Note: before start on this, read colorspaces.txt !
6ce9c6231bdd updated
arpi
parents:
diff changeset
5
6ce9c6231bdd updated
arpi
parents:
diff changeset
6 The constants for different pixelformats are defined in img_format.h,
6ce9c6231bdd updated
arpi
parents:
diff changeset
7 their usage is mandatory.
6ce9c6231bdd updated
arpi
parents:
diff changeset
8
6ce9c6231bdd updated
arpi
parents:
diff changeset
9 Each vo driver _has_ to implement these:
6ce9c6231bdd updated
arpi
parents:
diff changeset
10
6ce9c6231bdd updated
arpi
parents:
diff changeset
11 preinit():
6ce9c6231bdd updated
arpi
parents:
diff changeset
12 init the video system (to support querying for supported formats)
6ce9c6231bdd updated
arpi
parents:
diff changeset
13
6ce9c6231bdd updated
arpi
parents:
diff changeset
14 uninit():
6ce9c6231bdd updated
arpi
parents:
diff changeset
15 Uninit the whole system, this is on the same "level" as preinit.
6ce9c6231bdd updated
arpi
parents:
diff changeset
16
6ce9c6231bdd updated
arpi
parents:
diff changeset
17 control():
6ce9c6231bdd updated
arpi
parents:
diff changeset
18 Current controls:
6ce9c6231bdd updated
arpi
parents:
diff changeset
19 VOCTRL_QUERY_FORMAT - queries if a given pixelformat is supported.
6ce9c6231bdd updated
arpi
parents:
diff changeset
20 It also returns various flags decsirbing the capabilities
6ce9c6231bdd updated
arpi
parents:
diff changeset
21 of the driver with teh given mode. for the flags, see
6ce9c6231bdd updated
arpi
parents:
diff changeset
22 file vfcaps.h !
6ce9c6231bdd updated
arpi
parents:
diff changeset
23 the most important flags, every driver must properly report
6ce9c6231bdd updated
arpi
parents:
diff changeset
24 these:
6ce9c6231bdd updated
arpi
parents:
diff changeset
25 0x1 - supported (with or without conversion)
6ce9c6231bdd updated
arpi
parents:
diff changeset
26 0x2 - supported without conversion (define 0x1 too!)
6ce9c6231bdd updated
arpi
parents:
diff changeset
27 0x100 - driver/hardware handles timing (blocking)
6ce9c6231bdd updated
arpi
parents:
diff changeset
28 also SET sw/hw scaling and osd support flags, and flip,
6ce9c6231bdd updated
arpi
parents:
diff changeset
29 and accept_stride if you implement put_image (see vfcaps.h)
6ce9c6231bdd updated
arpi
parents:
diff changeset
30 NOTE: VOCTRL_QUERY_FORMAT may be called _before_ first config()
6ce9c6231bdd updated
arpi
parents:
diff changeset
31 but is always called between preinit() and uninit()
6ce9c6231bdd updated
arpi
parents:
diff changeset
32 VOCTRL_GET_IMAGE
6ce9c6231bdd updated
arpi
parents:
diff changeset
33 libmpcodecs Direct Rendering interface
6ce9c6231bdd updated
arpi
parents:
diff changeset
34 You need to update mpi (mp_image.h) structure, for example,
6ce9c6231bdd updated
arpi
parents:
diff changeset
35 look at vo_x11, vo_sdl, vo_xv or mga_common.
6ce9c6231bdd updated
arpi
parents:
diff changeset
36 VOCTRL_PUT_IMAGE
6ce9c6231bdd updated
arpi
parents:
diff changeset
37 replacement for the current draw_slice/draw_frame way of
6ce9c6231bdd updated
arpi
parents:
diff changeset
38 passing video frames. by implementing SET_IMAGE, you'll get
6ce9c6231bdd updated
arpi
parents:
diff changeset
39 image in mp_image struct instead of by calling draw_*.
6ce9c6231bdd updated
arpi
parents:
diff changeset
40 unless you return VO_TRUE for VOCTRL_PUT_IMAGE call, the
6ce9c6231bdd updated
arpi
parents:
diff changeset
41 old-style draw_* functils will be called!
6ce9c6231bdd updated
arpi
parents:
diff changeset
42 Note: draw_slice is still mandatory, for per-slice rendering!
6ce9c6231bdd updated
arpi
parents:
diff changeset
43 VOCTRL_RESET - reset the video device
6ce9c6231bdd updated
arpi
parents:
diff changeset
44 This is sent on seeking and similar and is useful if you are
6ce9c6231bdd updated
arpi
parents:
diff changeset
45 using a device which prebuffers frames that need to flush them
6ce9c6231bdd updated
arpi
parents:
diff changeset
46 before refilling audio/video buffers.
6ce9c6231bdd updated
arpi
parents:
diff changeset
47 VOCTRL_PAUSE
6ce9c6231bdd updated
arpi
parents:
diff changeset
48 VOCTRL_RESUME
6ce9c6231bdd updated
arpi
parents:
diff changeset
49 VOCTRL_GUISUPPORT
6ce9c6231bdd updated
arpi
parents:
diff changeset
50 return true only if driver supports co-operation with
6ce9c6231bdd updated
arpi
parents:
diff changeset
51 MPlayer's GUI (not yet used by GUI)
6ce9c6231bdd updated
arpi
parents:
diff changeset
52 VOCTRL_QUERY_VAA - this is used by the vidix extension
6ce9c6231bdd updated
arpi
parents:
diff changeset
53 this is used by the vidix extension to fill a vo_vaa_t struct,
6ce9c6231bdd updated
arpi
parents:
diff changeset
54 I do not know how this works since I'm not the author of this
6ce9c6231bdd updated
arpi
parents:
diff changeset
55
6ce9c6231bdd updated
arpi
parents:
diff changeset
56 config():
6ce9c6231bdd updated
arpi
parents:
diff changeset
57 Set up the video system. You get the dimensions and flags.
6ce9c6231bdd updated
arpi
parents:
diff changeset
58 width, height: size of the source image
6ce9c6231bdd updated
arpi
parents:
diff changeset
59 d_width, d_height: wanted scaled/display size (it's a hint)
6ce9c6231bdd updated
arpi
parents:
diff changeset
60 Flags:
6ce9c6231bdd updated
arpi
parents:
diff changeset
61 0x01 - force fullscreen (-fs)
6ce9c6231bdd updated
arpi
parents:
diff changeset
62 0x02 - allow mode switching (-vm)
6ce9c6231bdd updated
arpi
parents:
diff changeset
63 0x04 - allow software scaling (-zoom)
6ce9c6231bdd updated
arpi
parents:
diff changeset
64 0x08 - flipping (-flip)
6ce9c6231bdd updated
arpi
parents:
diff changeset
65 They're defined as VOFLAG_* (see libvo/video_out.h)
6ce9c6231bdd updated
arpi
parents:
diff changeset
66
6ce9c6231bdd updated
arpi
parents:
diff changeset
67 IMPORTAMT NOTE: config() may be called 0 (zero), 1 or more (2,3...)
6ce9c6231bdd updated
arpi
parents:
diff changeset
68 times between preinit() and uninit() calls. You MUST handle it, and
6ce9c6231bdd updated
arpi
parents:
diff changeset
69 you shouldn't crash at second config() call or at uninit() without
6ce9c6231bdd updated
arpi
parents:
diff changeset
70 any config() call! To make your life easier, vo_config_count is
6ce9c6231bdd updated
arpi
parents:
diff changeset
71 set to the number of previous config() call, counted from preinit().
6ce9c6231bdd updated
arpi
parents:
diff changeset
72 It's set by the caller (vf_vo.c), you don't have to increase it!
6ce9c6231bdd updated
arpi
parents:
diff changeset
73 So, you can check for vo_config_count>0 in uninit() when freeing
6ce9c6231bdd updated
arpi
parents:
diff changeset
74 resources allocated in config() to avoid crash!
6ce9c6231bdd updated
arpi
parents:
diff changeset
75
6ce9c6231bdd updated
arpi
parents:
diff changeset
76 draw_slice(): this displays YV12 pictures (3 planes, one full sized that
6ce9c6231bdd updated
arpi
parents:
diff changeset
77 contains brightness (Y), and 2 quarter-sized which the colour-info
6ce9c6231bdd updated
arpi
parents:
diff changeset
78 (U,V). MPEG codecs (libmpeg2, opendivx) use this. This doesn't have
6ce9c6231bdd updated
arpi
parents:
diff changeset
79 to display the whole frame, only update small parts of it.
6ce9c6231bdd updated
arpi
parents:
diff changeset
80
6ce9c6231bdd updated
arpi
parents:
diff changeset
81 draw_frame(): this is the older interface, this displays only complete
6ce9c6231bdd updated
arpi
parents:
diff changeset
82 frames, and can do only packed format (YUY2, RGB/BGR).
6ce9c6231bdd updated
arpi
parents:
diff changeset
83 Win32 codecs use this (DivX, Indeo, etc).
6ce9c6231bdd updated
arpi
parents:
diff changeset
84 If you implement VOCTRL_PUT_IMAGE, you can left draw_frame.
6ce9c6231bdd updated
arpi
parents:
diff changeset
85
6ce9c6231bdd updated
arpi
parents:
diff changeset
86 draw_osd(): this displays subtitles and OSD.
6ce9c6231bdd updated
arpi
parents:
diff changeset
87 It's a bit tricky to use it, since it's a callback-style stuff.
6ce9c6231bdd updated
arpi
parents:
diff changeset
88 It should call vo_draw_text() with screen dimension and your
6ce9c6231bdd updated
arpi
parents:
diff changeset
89 draw_alpha implementation for the pixelformat (function pointer).
6ce9c6231bdd updated
arpi
parents:
diff changeset
90 The vo_draw_text() checks the characters to draw, and calls
6ce9c6231bdd updated
arpi
parents:
diff changeset
91 draw_alpha() for each. As a help, osd.c contains draw_alpha for
6ce9c6231bdd updated
arpi
parents:
diff changeset
92 each pixelformats, use this if possible!
6ce9c6231bdd updated
arpi
parents:
diff changeset
93
6ce9c6231bdd updated
arpi
parents:
diff changeset
94 NOTE: this one will be obsolete soon! But it's still usefull when
6ce9c6231bdd updated
arpi
parents:
diff changeset
95 you want to do tricks, like rendering osd _after_ hardware scaling
6ce9c6231bdd updated
arpi
parents:
diff changeset
96 (tdfxfb) or render subtitles under of the image (vo_mpegpes, sdl)
6ce9c6231bdd updated
arpi
parents:
diff changeset
97
6ce9c6231bdd updated
arpi
parents:
diff changeset
98 flip_page(): this is called after each frame, this diplays the buffer for
6ce9c6231bdd updated
arpi
parents:
diff changeset
99 real. This is 'swapbuffers' when double-buffering.
6ce9c6231bdd updated
arpi
parents:
diff changeset
100