Mercurial > mplayer.hg
view DOCS/tech/osd.txt @ 12334:eeddcef4fb08
"hard" frame duplication for mencoder. this finally makes it possible
to generate valid mpeg output from avi's that have duplicate frames in
them, or when using inverse telecine filters. to use it, put the
"harddup" filter at the end of your filter chain.
author | rfelker |
---|---|
date | Wed, 28 Apr 2004 04:02:46 +0000 |
parents | 6e35326c742f |
children | 527c1561a0ad |
line wrap: on
line source
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) - respect movie and monitor aspect, so osd is rendered/scaled correctly eg. for svcd/anamorphic dvd with hardware scaling (now OSD is squashed) - 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 percentages, 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;