annotate DOCS/tech/osd.txt @ 27409:e2de11109139

If (has outline) blur(outline) else blur(glyph). If there is an outline, the glyph itself should not be blurred. Keeps the border between glyph and outline clear (unblurred), which is probably how it should be. Patch by Diogo Franco (diogomfranco gmail com).
author eugeni
date Thu, 07 Aug 2008 22:20:58 +0000
parents 527c1561a0ad
children 32725ca88fed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16835
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
1 draft of new OSD engine:
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
2 ========================
5581
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
3 written by A'rpi
16835
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
4 including ideas from mailing list from Jiri Svoboda, Tobias Diedrich,
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
5 Artur Zaprzala, Michael Niedermayer, Felix Buenemann, LGB
5581
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
6
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
7 requirements:
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
8 - be able to do partial rendering, within a given bounding box
16835
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
9 useful when parts of the OSD are outside of the image and has to be
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
10 updated only when OSD changes, or even has different colorspace
5581
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
11
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
12 - text should be rendered in 2-pass way: 1. alpha 2. pixels
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
13 so char's alpha won't overwrite previous char, and may be faster
16835
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
14
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
15 - OSD elements should be cached - so rendering once into the cache and
5581
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
16 reuse this while it's unchanged
16835
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
17
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
18 - color support (colorspace could be YA, YUVA, RGB)
5581
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
19
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
20 - change brightness, saturation, hue of chars ???
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
21
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
22 - way to disable alphablending, and use black outline (FAST_OSD now)
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
23
16835
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
24 - respect movie and monitor aspect, so OSD is rendered/scaled correctly
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
25 eg. for SVCD/anamorphic DVD with hardware scaling (now OSD is squashed)
5591
9243e8988e0f Added aspect considerations.
atmos4
parents: 5581
diff changeset
26
5581
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
27 - develop some text-based apps: osdterm, osdzilla etc ;)
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
28
16835
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
29 Ok. The basic idea of my design is using 'OSD objects', a data structure
5581
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
30 in a 1 (or 2?) way linked list.
16835
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
31 There would be different object types, sharing type-dependent data in a
5581
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
32 union. The basic types: box, text, symbol, progressbar, group.
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
33
16835
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
34 Group would be a special type, grouping other OSD objects together,
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
35 with a common x,y and boundingbox. Useful for grouping symbol+progrbar
5581
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
36 or multiline subtitle text.
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
37
16835
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
38 Each object could have flags, for example:
5581
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
39 - visible (set if we should display it)
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
40 - color (set if it's YUVA not YA)
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
41 - cached (set when there is a cached rendered variant)
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
42 - bbox updated (should be set when recalc bbox, reset when change params)
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
43 - several flags to control positioning. for example, x;y could be
16835
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
44 absolute coordinates, or percent. flags to set left/center/right alignment...
5581
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
45 - start and end timestamp, to automagically set/reset visible flag
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
46
16835
527c1561a0ad spelling/grammar/wording
diego
parents: 11000
diff changeset
47 OK, my first draft:
5581
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
48
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
49 typedef struct mp_osd_obj_s {
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
50 struct mp_osd_obj_s* next;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
51 unsigned char type;
11000
6e35326c742f many small typo and grammar fixes
gabucino
parents: 5591
diff changeset
52 unsigned char alignment; // 2 bits: x;y percentages, 2 bits: x;y relative to parent; 2 bits: alignment left/right/center
5581
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
53 unsigned short flags;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
54 int x,y; // coords
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
55 unsigned char color[4]; // YUVA
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
56 mp_osd_bbox_t bbox; // bounding box
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
57 unsigned int start,duration; // PTS
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
58 union {
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
59 struct {
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
60 int x1,y1,x2,y2;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
61 } line;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
62 struct {
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
63 int x,y,w,h;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
64 } rect;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
65 struct {
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
66 char* text;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
67 mp_font_t* font;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
68 } text;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
69 struct {
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
70 int symbol; // unicode
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
71 mp_font_t* font;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
72 } symbol;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
73 struct {
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
74 float value;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
75 mp_font_t* font;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
76 } pbar;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
77 struct {
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
78 int w,h;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
79 unsigned char* image;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
80 unsigned int* palette;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
81 } spu; // FIXME!
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
82 struct {
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
83 struct mp_osd_obj_s* children;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
84 } group;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
85 } params;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
86 } mp_osd_obj_t;
1f231091fb54 draft v0.1
arpi
parents:
diff changeset
87