Mercurial > mplayer.hg
changeset 5581:1f231091fb54
draft v0.1
author | arpi |
---|---|
date | Sat, 13 Apr 2002 00:47:54 +0000 |
parents | 6366586083bb |
children | 21bd4b32abb4 |
files | DOCS/tech/osd.txt |
diffstat | 1 files changed, 84 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DOCS/tech/osd.txt Sat Apr 13 00:47:54 2002 +0000 @@ -0,0 +1,84 @@ +some draft of new osd engine: +============================= +written by A'rpi +including ideas from maillist from Jiri Svoboda, Tobias Diedrich, Artur Zaprzala +Michael Niedermayer, Felix Buenemann, LGB + +requirements: +- be able to do partial rendering, within a given bounding box + usefull, when parts of osd are outside of teh image and has to be + updated only when osd changes, or even has different colorspace + +- text should be rendered in 2-pass way: 1. alpha 2. pixels + so char's alpha won't overwrite previous char, and may be faster + +- osd elements should be cached - so rendering once into the cache and + reuse this while it's unchanged + +- colors support (csp could be YA, YUVA, RGB ) + +- change brightness, saturation, hue of chars ??? + +- way to disable alphablending, and use black outline (FAST_OSD now) + +- develop some text-based apps: osdterm, osdzilla etc ;) + +Ok. The basic idea of my design is using 'osd objects', a data structure +in a 1 (or 2?) way linked list. +There would be different object types, sharing type-dependent data in an +union. The basic types: box, text, symbol, progressbar, group. + +Group would be a special type, grouping other osd objects together, +with a common x,y and boundingbox. usefull for grouping symbol+progrbar +or multiline subtitle text. + +Each obj could have flags, for example: +- visible (set if we should display it) +- color (set if it's YUVA not YA) +- cached (set when there is a cached rendered variant) +- bbox updated (should be set when recalc bbox, reset when change params) +- several flags to control positioning. for example, x;y could be + absolute coord, or percent. flags to set left/center/right alignment... +- start and end timestamp, to automagically set/reset visible flag + +ok, my first draft: + +typedef struct mp_osd_obj_s { + struct mp_osd_obj_s* next; + unsigned char type; + unsigned char alignment; // 2 bits: x;y percents, 2 bits: x;y relative to parent; 2 bits: alignment left/right/center + unsigned short flags; + int x,y; // coords + unsigned char color[4]; // YUVA + mp_osd_bbox_t bbox; // bounding box + unsigned int start,duration; // PTS + union { + struct { + int x1,y1,x2,y2; + } line; + struct { + int x,y,w,h; + } rect; + struct { + char* text; + mp_font_t* font; + } text; + struct { + int symbol; // unicode + mp_font_t* font; + } symbol; + struct { + float value; + mp_font_t* font; + } pbar; + struct { + int w,h; + unsigned char* image; + unsigned int* palette; + } spu; // FIXME! + struct { + struct mp_osd_obj_s* children; + } group; + } params; +} mp_osd_obj_t; +