annotate libvo/sub.c @ 7743:a280cc3087ea

All right: The patch adresses two issues which I found, when I analyzed the input from some DVDs with known subtitle-dropouts: 1. The packet-size at the beginning of the packet, which is used to check, whether we got all fragments, is sometimes one byte too long. It seems to be always padded to an even number, while the actual size can be odd. 2. The original algorythm used to assemble the fragments relies on the timestamps to check, whether a new packet begins. This has proven to be unrelieable on some disks. So instead, I use the timestamp only to check, whether it's been too long (defined as 0,01sec) since the last fragment, which is probably indicating a broken packet, and normaly starting a new packet when the last one has been finished. patch by Christof Buergi <christof@buergi.lugs.ch>
author arpi
date Tue, 15 Oct 2002 00:47:17 +0000
parents d6608342591d
children 9fc45fe0d444
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5503
a531a579f005 #include cleanup
arpi
parents: 5294
diff changeset
1
a531a579f005 #include cleanup
arpi
parents: 5294
diff changeset
2 #include <stdio.h>
a531a579f005 #include cleanup
arpi
parents: 5294
diff changeset
3 #include <stdlib.h>
7003
60a473935d7d warning fixes by Sylvain Petreolle <spetreolle@yahoo.fr>
arpi
parents: 6190
diff changeset
4 #include <string.h>
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
5
4088
4435dc3b8bef Add DVD subtitles to menoder
kmkaplan
parents: 4087
diff changeset
6 #include "config.h"
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
7 #include "mp_msg.h"
4088
4435dc3b8bef Add DVD subtitles to menoder
kmkaplan
parents: 4087
diff changeset
8 #include "video_out.h"
5294
4e64fca268e9 moved font_laod.h
arpi
parents: 4807
diff changeset
9 #include "font_load.h"
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
10 #include "sub.h"
7003
60a473935d7d warning fixes by Sylvain Petreolle <spetreolle@yahoo.fr>
arpi
parents: 6190
diff changeset
11 #include "../spudec.h"
202
6ad0715dfac8 grey+alpha rendering support (for .sub)
arpi_esp
parents:
diff changeset
12
2498
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
13 char * __sub_osd_names[]={
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
14 "Seekbar",
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
15 "Play",
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
16 "Pause",
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
17 "Stop",
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
18 "Rewind",
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
19 "Forward",
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
20 "Clock",
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
21 "Contrast",
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
22 "Saturation",
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
23 "Volume",
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
24 "Brightness",
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
25 "Hue"
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
26 };
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
27 char * __sub_osd_names_short[] ={ "", "|>", "||", "[]", "<<" , ">>", "", "", "", "", "", ""};
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
28
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents: 202
diff changeset
29 //static int vo_font_loaded=-1;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents: 202
diff changeset
30 font_desc_t* vo_font=NULL;
202
6ad0715dfac8 grey+alpha rendering support (for .sub)
arpi_esp
parents:
diff changeset
31
1991
dee4b2ea5e5b add gui support to config scripts, and fixed some warning.
pontscho
parents: 1878
diff changeset
32 unsigned char* vo_osd_text=NULL;
803
b25a887b6054 sub splitting patch applied by Vlada V.Dubsky@sh.cvut.cz
arpi_esp
parents: 726
diff changeset
33 int sub_unicode=0;
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
34 int sub_utf8=0;
4773
976bf6a9ded5 subtitle positioning patch by Jiri Svoboda
atmos4
parents: 4088
diff changeset
35 int sub_pos=100;
7628
d6608342591d This patch adds the functionality to disable/enable subtitles while playing
arpi
parents: 7121
diff changeset
36 int sub_visibility=1;
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents: 202
diff changeset
37
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
38 // return the real height of a char:
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
39 static inline int get_height(int c,int h){
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
40 int font;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
41 if ((font=vo_font->font[c])>=0)
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
42 if(h<vo_font->pic_a[font]->h) h=vo_font->pic_a[font]->h;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
43 return h;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
44 }
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
45
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
46 // renders char to a big per-object buffer where alpha and bitmap are separated
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
47 static void draw_alpha_buf(mp_osd_obj_t* obj, int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
48 {
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
49 int dststride = obj->stride;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
50 int dstskip = obj->stride-w;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
51 int srcskip = stride-w;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
52 int i, j;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
53 unsigned char *b = obj->bitmap_buffer + (y0-obj->bbox.y1)*dststride + (x0-obj->bbox.x1);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
54 unsigned char *a = obj->alpha_buffer + (y0-obj->bbox.y1)*dststride + (x0-obj->bbox.x1);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
55 unsigned char *bs = src;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
56 unsigned char *as = srca;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
57
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
58 if (x0 < obj->bbox.x1 || x0+w > obj->bbox.x2 || y0 < obj->bbox.y1 || y0+h > obj->bbox.y2) {
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
59 fprintf(stderr, "osd text out of range: bbox [%d %d %d %d], txt [%d %d %d %d]\n",
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
60 obj->bbox.x1, obj->bbox.x2, obj->bbox.y1, obj->bbox.y2,
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
61 x0, x0+w, y0, y0+h);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
62 return;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
63 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
64
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
65 for (i = 0; i < h; i++) {
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
66 for (j = 0; j < w; j++, b++, a++, bs++, as++) {
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
67 if (*b < *bs) *b = *bs;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
68 if (*as) {
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
69 if (*a == 0 || *a > *as) *a = *as;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
70 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
71 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
72 b+= dstskip;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
73 a+= dstskip;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
74 bs+= srcskip;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
75 as+= srcskip;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
76 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
77 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
78
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
79 // allocates/enlarges the alpha/bitmap buffer
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
80 static void alloc_buf(mp_osd_obj_t* obj)
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
81 {
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
82 int len;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
83 if (obj->bbox.x2 < obj->bbox.x1) obj->bbox.x2 = obj->bbox.x1;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
84 if (obj->bbox.y2 < obj->bbox.y1) obj->bbox.y2 = obj->bbox.y1;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
85 obj->stride = ((obj->bbox.x2-obj->bbox.x1)+7)&(~7);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
86 len = obj->stride*(obj->bbox.y2-obj->bbox.y1);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
87 if (obj->allocated<len) {
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
88 obj->allocated = len;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
89 free(obj->bitmap_buffer);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
90 free(obj->alpha_buffer);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
91 obj->bitmap_buffer = (unsigned char *)memalign(16, len);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
92 obj->alpha_buffer = (unsigned char *)memalign(16, len);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
93 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
94 memset(obj->bitmap_buffer, 0, len);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
95 memset(obj->alpha_buffer, 0, len);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
96 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
97
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
98 // renders the buffer
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
99 inline static void vo_draw_text_from_buffer(mp_osd_obj_t* obj,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)){
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
100 if (obj->allocated > 0) {
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
101 draw_alpha(obj->bbox.x1,obj->bbox.y1,
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
102 obj->bbox.x2-obj->bbox.x1,
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
103 obj->bbox.y2-obj->bbox.y1,
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
104 obj->bitmap_buffer,
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
105 obj->alpha_buffer,
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
106 obj->stride);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
107 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
108 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
109
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
110 inline static void vo_update_text_osd(mp_osd_obj_t* obj,int dxs,int dys){
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
111 unsigned char *cp=vo_osd_text;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
112 int x=20;
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
113 int h=0;
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
114 int font;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
115
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
116 obj->bbox.x1=obj->x=x;
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
117 obj->bbox.y1=obj->y=10;
202
6ad0715dfac8 grey+alpha rendering support (for .sub)
arpi_esp
parents:
diff changeset
118
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
119 while (*cp){
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
120 int c=*cp++;
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
121 render_one_glyph(vo_font, c);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
122 x+=vo_font->width[c]+vo_font->charspace;
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
123 h=get_height(c,h);
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
124 }
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
125
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
126 obj->bbox.x2=x-vo_font->charspace;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
127 obj->bbox.y2=obj->bbox.y1+h;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
128 obj->flags|=OSDFLAG_BBOX;
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
129
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
130 alloc_buf(obj);
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
131
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
132 cp=vo_osd_text;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
133 x = obj->x;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
134 while (*cp){
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
135 int c=*cp++;
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
136 if ((font=vo_font->font[c])>=0)
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
137 draw_alpha_buf(obj,x,obj->y,
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
138 vo_font->width[c],
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
139 vo_font->pic_a[font]->h,
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
140 vo_font->pic_b[font]->bmp+vo_font->start[c],
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
141 vo_font->pic_a[font]->bmp+vo_font->start[c],
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
142 vo_font->pic_a[font]->w);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents: 202
diff changeset
143 x+=vo_font->width[c]+vo_font->charspace;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents: 202
diff changeset
144 }
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
145 }
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
146
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
147 int vo_osd_progbar_type=-1;
1726
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
148 int vo_osd_progbar_value=100; // 0..256
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
149
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
150 // if we have n=256 bars then OSD progbar looks like below
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
151 //
1878
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
152 // 0 1 2 3 ... 256 <= vo_osd_progbar_value
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
153 // | | | | |
1726
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
154 // [ === === === ... === ]
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
155 //
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
156 // the above schema is rescalled to n=elems bars
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
157
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
158 inline static void vo_update_text_progbar(mp_osd_obj_t* obj,int dxs,int dys){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
159
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
160 obj->flags|=OSDFLAG_CHANGED|OSDFLAG_VISIBLE;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
161
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
162 if(vo_osd_progbar_type<0 || !vo_font){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
163 obj->flags&=~OSDFLAG_VISIBLE;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
164 return;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
165 }
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
166
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
167 render_one_glyph(vo_font, OSD_PB_START);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
168 render_one_glyph(vo_font, OSD_PB_END);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
169 render_one_glyph(vo_font, OSD_PB_0);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
170 render_one_glyph(vo_font, OSD_PB_1);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
171 render_one_glyph(vo_font, vo_osd_progbar_type);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
172
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
173 // calculate bbox corners:
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
174 { int h=0;
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
175 int y=(dys-vo_font->height)/2;
1548
eee7951a23af changes according to proper subfont bar positioning and char spaceing - sub.c
atlka
parents: 1524
diff changeset
176 int delimw=vo_font->width[OSD_PB_START]
1549
787c053b314c minor changes in sub.c
atlka
parents: 1548
diff changeset
177 +vo_font->width[OSD_PB_END]
787c053b314c minor changes in sub.c
atlka
parents: 1548
diff changeset
178 +vo_font->charspace;
1548
eee7951a23af changes according to proper subfont bar positioning and char spaceing - sub.c
atlka
parents: 1524
diff changeset
179 int width=(2*dxs-3*delimw)/3;
1549
787c053b314c minor changes in sub.c
atlka
parents: 1548
diff changeset
180 int charw=vo_font->width[OSD_PB_0]+vo_font->charspace;
1548
eee7951a23af changes according to proper subfont bar positioning and char spaceing - sub.c
atlka
parents: 1524
diff changeset
181 int elems=width/charw;
1549
787c053b314c minor changes in sub.c
atlka
parents: 1548
diff changeset
182 int x=(dxs-elems*charw-delimw)/2;
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
183 int delta = 0;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
184 if (vo_osd_progbar_type>0 && vo_font->font[vo_osd_progbar_type]>=0){
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
185 delta = vo_font->width[vo_osd_progbar_type]+vo_font->spacewidth;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
186 delta = (x-delta > 0) ? delta : x;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
187 }
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
188 h=get_height(OSD_PB_START,h);
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
189 h=get_height(OSD_PB_END,h);
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
190 h=get_height(OSD_PB_0,h);
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
191 h=get_height(OSD_PB_1,h);
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
192 obj->bbox.x1=obj->x=x;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
193 obj->bbox.y1=obj->y=y;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
194 obj->bbox.x2=x+width+delimw;
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
195 obj->bbox.y2=y+h; //vo_font->height;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
196 obj->flags|=OSDFLAG_BBOX;
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
197 obj->params.progbar.elems=elems;
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
198 obj->bbox.x1-=delta; // space for an icon
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
199 }
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
200
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
201 alloc_buf(obj);
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
202
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
203 // render it:
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
204 { unsigned char *s;
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
205 unsigned char *sa;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
206 int i,w,h,st,mark;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
207 int x=obj->x;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
208 int y=obj->y;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
209 int c,font;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
210 int charw=vo_font->width[OSD_PB_0]+vo_font->charspace;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
211 int elems=obj->params.progbar.elems;
1548
eee7951a23af changes according to proper subfont bar positioning and char spaceing - sub.c
atlka
parents: 1524
diff changeset
212
1726
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
213 if (vo_osd_progbar_value<=0)
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
214 mark=0;
1878
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
215 else {
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
216 int ev=vo_osd_progbar_value*elems;
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
217 mark=ev>>8;
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
218 if (ev & 0xFF) mark++;
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
219 if (mark>elems) mark=elems;
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
220 }
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
221
1727
9da2b587b029 changes according to OSD calculations
atlka
parents: 1726
diff changeset
222
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
223 // printf("osd.progbar width=%d xpos=%d\n",width,x);
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
224
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
225 c=vo_osd_progbar_type;
1569
fcbfc99cf8e6 skip lines with negative y position if there is too many lines to display
atlka
parents: 1549
diff changeset
226 if(vo_osd_progbar_type>0 && (font=vo_font->font[c])>=0) {
fcbfc99cf8e6 skip lines with negative y position if there is too many lines to display
atlka
parents: 1549
diff changeset
227 int xp=x-vo_font->width[c]-vo_font->spacewidth;
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
228 draw_alpha_buf(obj,(xp<0?0:xp),y,
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
229 vo_font->width[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
230 vo_font->pic_a[font]->h,
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
231 vo_font->pic_b[font]->bmp+vo_font->start[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
232 vo_font->pic_a[font]->bmp+vo_font->start[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
233 vo_font->pic_a[font]->w);
1569
fcbfc99cf8e6 skip lines with negative y position if there is too many lines to display
atlka
parents: 1549
diff changeset
234 }
fcbfc99cf8e6 skip lines with negative y position if there is too many lines to display
atlka
parents: 1549
diff changeset
235
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
236 c=OSD_PB_START;
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
237 if ((font=vo_font->font[c])>=0)
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
238 draw_alpha_buf(obj,x,y,
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
239 vo_font->width[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
240 vo_font->pic_a[font]->h,
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
241 vo_font->pic_b[font]->bmp+vo_font->start[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
242 vo_font->pic_a[font]->bmp+vo_font->start[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
243 vo_font->pic_a[font]->w);
1548
eee7951a23af changes according to proper subfont bar positioning and char spaceing - sub.c
atlka
parents: 1524
diff changeset
244 x+=vo_font->width[c]+vo_font->charspace;
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
245
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
246 c=OSD_PB_0;
1602
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
247 if ((font=vo_font->font[c])>=0){
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
248 w=vo_font->width[c];
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
249 h=vo_font->pic_a[font]->h;
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
250 s=vo_font->pic_b[font]->bmp+vo_font->start[c];
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
251 sa=vo_font->pic_a[font]->bmp+vo_font->start[c];
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
252 st=vo_font->pic_a[font]->w;
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
253 if ((i=mark)) do {
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
254 draw_alpha_buf(obj,x,y,w,h,s,sa,st);
1548
eee7951a23af changes according to proper subfont bar positioning and char spaceing - sub.c
atlka
parents: 1524
diff changeset
255 x+=charw;
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
256 } while(--i);
1602
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
257 }
202
6ad0715dfac8 grey+alpha rendering support (for .sub)
arpi_esp
parents:
diff changeset
258
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
259 c=OSD_PB_1;
1602
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
260 if ((font=vo_font->font[c])>=0){
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
261 w=vo_font->width[c];
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
262 h=vo_font->pic_a[font]->h;
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
263 s =vo_font->pic_b[font]->bmp+vo_font->start[c];
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
264 sa=vo_font->pic_a[font]->bmp+vo_font->start[c];
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
265 st=vo_font->pic_a[font]->w;
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
266 if ((i=elems-mark)) do {
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
267 draw_alpha_buf(obj,x,y,w,h,s,sa,st);
1548
eee7951a23af changes according to proper subfont bar positioning and char spaceing - sub.c
atlka
parents: 1524
diff changeset
268 x+=charw;
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
269 } while(--i);
1602
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
270 }
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
271
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
272 c=OSD_PB_END;
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
273 if ((font=vo_font->font[c])>=0)
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
274 draw_alpha_buf(obj,x,y,
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
275 vo_font->width[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
276 vo_font->pic_a[font]->h,
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
277 vo_font->pic_b[font]->bmp+vo_font->start[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
278 vo_font->pic_a[font]->bmp+vo_font->start[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
279 vo_font->pic_a[font]->w);
1548
eee7951a23af changes according to proper subfont bar positioning and char spaceing - sub.c
atlka
parents: 1524
diff changeset
280 // x+=vo_font->width[c]+vo_font->charspace;
803
b25a887b6054 sub splitting patch applied by Vlada V.Dubsky@sh.cvut.cz
arpi_esp
parents: 726
diff changeset
281
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
282 }
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
283 // vo_osd_progbar_value=(vo_osd_progbar_value+1)&0xFF;
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
284
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
285 }
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
286
254
57f0156416e3 use subreader's sub struct
arpi_esp
parents: 218
diff changeset
287 subtitle* vo_sub=NULL;
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
288
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
289 // vo_draw_text_sub(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride))
1591
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
290
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
291 inline static void vo_update_text_sub(mp_osd_obj_t* obj,int dxs,int dys){
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
292 unsigned char *t;
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
293 int c,i,j,l,x,y,font,prevc;
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
294 int len;
1591
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
295 int k,lastk;
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
296 int lastStripPosition;
1591
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
297 int xsize,lastxsize;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
298 int xmin=dxs,xmax=0;
1591
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
299 int h,lasth;
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
300
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
301 obj->flags|=OSDFLAG_CHANGED|OSDFLAG_VISIBLE;
7628
d6608342591d This patch adds the functionality to disable/enable subtitles while playing
arpi
parents: 7121
diff changeset
302
d6608342591d This patch adds the functionality to disable/enable subtitles while playing
arpi
parents: 7121
diff changeset
303 if(!vo_sub || !vo_font || !sub_visibility){
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
304 obj->flags&=~OSDFLAG_VISIBLE;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
305 return;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
306 }
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
307
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
308 obj->bbox.y2=obj->y=dys;
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
309 obj->params.subtitle.lines=0;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
310
1602
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
311 // too long lines divide into a smaller ones
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
312 i=k=lasth=0;
1591
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
313 h=vo_font->height;
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
314 xsize=-vo_font->charspace;
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
315 lastStripPosition=-1;
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
316 l=vo_sub->lines;
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
317
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
318 while (l) {
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
319 l--;
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
320 t=vo_sub->text[i++];
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
321 len=strlen(t)-1;
1824
33035a1d897e small fixes, and Y check put back to avoid sig11
arpi
parents: 1822
diff changeset
322
1852
58dd326fcc4a fix xshape, mixer, fullscreen, etc
pontscho
parents: 1824
diff changeset
323 // printf("sub(%d) '%s'\n",len,t);
1824
33035a1d897e small fixes, and Y check put back to avoid sig11
arpi
parents: 1822
diff changeset
324 // if(len<0) memy -=h; // according to max of vo_font->pic_a[font]->h
33035a1d897e small fixes, and Y check put back to avoid sig11
arpi
parents: 1822
diff changeset
325 // else
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
326
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
327 prevc = -1;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
328
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
329 for (j=0;j<=len;j++){
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
330 if ((c=t[j])>=0x80){
2176
1ae16a34f055 speed improvements
atlka
parents: 1991
diff changeset
331 if (sub_utf8){
1ae16a34f055 speed improvements
atlka
parents: 1991
diff changeset
332 if ((c & 0xe0) == 0xc0) /* 2 bytes U+00080..U+0007FF*/
1ae16a34f055 speed improvements
atlka
parents: 1991
diff changeset
333 c = (c & 0x1f)<<6 | (t[++j] & 0x3f);
1ae16a34f055 speed improvements
atlka
parents: 1991
diff changeset
334 else if((c & 0xf0) == 0xe0)/* 3 bytes U+00800..U+00FFFF*/
1ae16a34f055 speed improvements
atlka
parents: 1991
diff changeset
335 c = ((c & 0x0f)<<6 |
1ae16a34f055 speed improvements
atlka
parents: 1991
diff changeset
336 (t[++j] & 0x3f))<<6 | (t[++j] & 0x3f);
1ae16a34f055 speed improvements
atlka
parents: 1991
diff changeset
337 } else if (sub_unicode)
1ae16a34f055 speed improvements
atlka
parents: 1991
diff changeset
338 c = (c<<8) + t[++j];
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
339 }
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
340 if (k==MAX_UCS){
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
341 len=j; // end here
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
342 mp_msg(MSGT_OSD,MSGL_WARN,"\nMAX_UCS exceeded!\n");
1591
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
343 }
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
344 if (!c) c++; // avoid UCS 0
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
345 render_one_glyph(vo_font, c);
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
346 if (c==' '){
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
347 lastk=k;
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
348 lastStripPosition=j;
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
349 lastxsize=xsize;
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
350 } else if ((font=vo_font->font[c])>=0){
1591
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
351 if (vo_font->pic_a[font]->h > h){
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
352 h=vo_font->pic_a[font]->h;
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
353 }
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
354 }
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
355 obj->params.subtitle.utbl[k++]=c;
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
356 xsize+=vo_font->width[c]+vo_font->charspace+kerning(vo_font,prevc,c);
1591
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
357 if (dxs<xsize){
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
358 prevc = -1;
1591
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
359 if (lastStripPosition>0){
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
360 j=lastStripPosition;
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
361 xsize=lastxsize;
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
362 k=lastk;
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
363 } else {
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
364 xsize -=vo_font->width[c]+vo_font->charspace+kerning(vo_font,prevc,c);; // go back
1591
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
365 k--; // cut line here
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
366 while (t[j] && t[j]!=' ') j++; // jump to the nearest space
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
367 }
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
368 } else if (j<len) {
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
369 prevc = c;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
370 continue;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
371 }
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
372 if (h>obj->y){ // out of the screen so end parsing
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
373 obj->y -= lasth - vo_font->height; // correct the y position
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
374 l=0;
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
375 break;
1591
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
376 }
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
377 obj->params.subtitle.utbl[k++]=0;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
378 obj->params.subtitle.xtbl[obj->params.subtitle.lines++]=(dxs-xsize)/2;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
379 if(xmin>(dxs-xsize)/2) xmin=(dxs-xsize)/2;
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
380 if(xmax<(dxs+xsize)/2) xmax=(dxs+xsize)/2;
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
381 if (obj->params.subtitle.lines==MAX_UCSLINES||k>MAX_UCS){
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
382 l=0; len=j; // end parsing
1602
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
383 } else if(l || j<len){ // not the last line or not the last char
1591
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
384 lastStripPosition=-1;
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
385 xsize=-vo_font->charspace;
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
386 lasth=h;
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
387 h=vo_font->height;
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
388 }
2176
1ae16a34f055 speed improvements
atlka
parents: 1991
diff changeset
389 // printf("h: %d -> %d \n",vo_font->height,h);
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
390 obj->y -=h; // according to max of vo_font->pic_a[font]->h
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
391 prevc = -1;
1591
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
392 }
1573
c394d04d6b30 changes according to max of vo_font->pic_a[font]->h for the last line of subs
atlka
parents: 1569
diff changeset
393 }
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
394
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
395 if (obj->y >= (dys * sub_pos / 100)){
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
396 int old=obj->y;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
397 obj->y = dys * sub_pos /100;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
398 obj->bbox.y2-=old-obj->y;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
399 }
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
400
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
401 // calculate bbox:
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
402 obj->bbox.x1=xmin;
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
403 obj->bbox.x2=xmax;
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
404 obj->bbox.y1=obj->y;
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
405 // obj->bbox.y2=obj->y+obj->params.subtitle.lines*vo_font->height;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
406 obj->flags|=OSDFLAG_BBOX;
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
407
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
408 alloc_buf(obj);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
409
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
410 y = obj->y;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
411
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
412 i=j=0;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
413 if ((l=obj->params.subtitle.lines)) for (;;) {
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
414 x=obj->params.subtitle.xtbl[i++];
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
415 prevc = -1;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
416 while ((c=obj->params.subtitle.utbl[j++])){
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
417 x += kerning(vo_font,prevc,c);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
418 if ((font=vo_font->font[c])>=0)
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
419 draw_alpha_buf(obj,x,y,
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
420 vo_font->width[c],
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
421 vo_font->pic_a[font]->h+y<obj->dys ? vo_font->pic_a[font]->h : obj->dys-y,
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
422 vo_font->pic_b[font]->bmp+vo_font->start[c],
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
423 vo_font->pic_a[font]->bmp+vo_font->start[c],
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
424 vo_font->pic_a[font]->w);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
425 x+=vo_font->width[c]+vo_font->charspace;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
426 prevc = c;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
427 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
428 if (!--l) break;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
429 y+=vo_font->height;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
430 }
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
431
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
432 }
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
433
6190
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
434 inline static void vo_update_spudec_sub(mp_osd_obj_t* obj, int dxs, int dys)
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
435 {
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
436 unsigned int bbox[4];
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
437 int i;
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
438 spudec_calc_bbox(vo_spudec, dxs, dys, bbox);
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
439 obj->bbox.x1 = bbox[0];
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
440 obj->bbox.x2 = bbox[1];
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
441 obj->bbox.y1 = bbox[2];
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
442 obj->bbox.y2 = bbox[3];
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
443 obj->flags |= OSDFLAG_BBOX;
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
444 }
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
445
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
446 inline static void vo_draw_spudec_sub(mp_osd_obj_t* obj, void (*draw_alpha)(int x0, int y0, int w, int h, unsigned char* src, unsigned char* srca, int stride))
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
447 {
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
448 spudec_draw_scaled(vo_spudec, obj->dxs, obj->dys, draw_alpha);
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
449 }
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
450
3034
24d3dca4e813 DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents: 2498
diff changeset
451 void *vo_spudec=NULL;
4081
9e581ab5e54b Add vobsub support, suppress conditionnal on USE_DVDREAD.
kmkaplan
parents: 3180
diff changeset
452 void *vo_vobsub=NULL;
3034
24d3dca4e813 DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents: 2498
diff changeset
453
947
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 865
diff changeset
454 static int draw_alpha_init_flag=0;
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
455
1109
a013b2124f05 -Wall like fixes
al3x
parents: 947
diff changeset
456 extern void vo_draw_alpha_init();
a013b2124f05 -Wall like fixes
al3x
parents: 947
diff changeset
457
7067
b395b1240954 fix dxr3 subtitle handling and add some optimizations
pontscho
parents: 7003
diff changeset
458 mp_osd_obj_t* vo_osd_list=NULL;
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
459
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
460 mp_osd_obj_t* new_osd_obj(int type){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
461 mp_osd_obj_t* osd=malloc(sizeof(mp_osd_obj_t));
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
462 memset(osd,0,sizeof(mp_osd_obj_t));
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
463 osd->next=vo_osd_list;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
464 vo_osd_list=osd;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
465 osd->type=type;
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
466 osd->alpha_buffer = NULL;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
467 osd->bitmap_buffer = NULL;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
468 osd->allocated = -1;
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
469 return osd;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
470 }
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
471
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
472 void free_osd_list(){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
473 mp_osd_obj_t* obj=vo_osd_list;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
474 while(obj){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
475 mp_osd_obj_t* next=obj->next;
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
476 if (obj->alpha_buffer) free(obj->alpha_buffer);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
477 if (obj->bitmap_buffer) free(obj->bitmap_buffer);
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
478 free(obj);
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
479 obj=next;
4081
9e581ab5e54b Add vobsub support, suppress conditionnal on USE_DVDREAD.
kmkaplan
parents: 3180
diff changeset
480 }
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
481 vo_osd_list=NULL;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
482 }
4081
9e581ab5e54b Add vobsub support, suppress conditionnal on USE_DVDREAD.
kmkaplan
parents: 3180
diff changeset
483
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
484 int vo_update_osd(int dxs,int dys){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
485 mp_osd_obj_t* obj=vo_osd_list;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
486 int chg=0;
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
487
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
488 #ifdef HAVE_FREETYPE
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
489 // here is the right place to get screen dimensions
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
490 if (force_load_font) {
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
491 force_load_font = 0;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
492 load_font(dxs, dys);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
493 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
494 #endif
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
495
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
496 while(obj){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
497 if(dxs!=obj->dxs || dys!=obj->dys || obj->flags&OSDFLAG_FORCE_UPDATE){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
498 int vis=obj->flags&OSDFLAG_VISIBLE;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
499 obj->flags&=~OSDFLAG_BBOX;
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
500 switch(obj->type){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
501 case OSDTYPE_SUBTITLE:
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
502 vo_update_text_sub(obj,dxs,dys);
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
503 break;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
504 case OSDTYPE_PROGBAR:
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
505 vo_update_text_progbar(obj,dxs,dys);
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
506 break;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
507 case OSDTYPE_SPU:
7628
d6608342591d This patch adds the functionality to disable/enable subtitles while playing
arpi
parents: 7121
diff changeset
508 if(sub_visibility && vo_spudec && spudec_visible(vo_spudec)){
6190
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
509 vo_update_spudec_sub(obj, dxs, dys);
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
510 obj->flags|=OSDFLAG_VISIBLE|OSDFLAG_CHANGED;
6190
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
511 }
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
512 else
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
513 obj->flags&=~OSDFLAG_VISIBLE;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
514 break;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
515 case OSDTYPE_OSD:
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
516 if(vo_font && vo_osd_text && vo_osd_text[0]){
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
517 vo_update_text_osd(obj,dxs,dys); // update bbox
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
518 obj->flags|=OSDFLAG_VISIBLE|OSDFLAG_CHANGED;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
519 } else
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
520 obj->flags&=~OSDFLAG_VISIBLE;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
521 break;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
522 }
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
523 // check bbox:
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
524 if(!(obj->flags&OSDFLAG_BBOX)){
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
525 // we don't know, so assume the whole screen changed :(
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
526 obj->bbox.x1=obj->bbox.y1=0;
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
527 obj->bbox.x2=dxs;
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
528 obj->bbox.y2=dys;
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
529 obj->flags|=OSDFLAG_BBOX;
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
530 } else {
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
531 // check bbox, reduce it if it's out of bounds (corners):
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
532 if(obj->bbox.x1<0) obj->bbox.x1=0;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
533 if(obj->bbox.y1<0) obj->bbox.y1=0;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
534 if(obj->bbox.x2>dxs) obj->bbox.x2=dxs;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
535 if(obj->bbox.y2>dys) obj->bbox.y2=dys;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
536 if(obj->flags&OSDFLAG_VISIBLE)
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
537 // debug:
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
538 mp_msg(MSGT_OSD,MSGL_DBG2,"OSD update: %d;%d %dx%d \n",
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
539 obj->bbox.x1,obj->bbox.y1,obj->bbox.x2-obj->bbox.x1,
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
540 obj->bbox.y2-obj->bbox.y1);
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
541 }
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
542 // check if visibility changed:
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
543 if(vis != (obj->flags&OSDFLAG_VISIBLE) ) obj->flags|=OSDFLAG_CHANGED;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
544 // remove the cause of automatic update:
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
545 obj->dxs=dxs; obj->dys=dys;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
546 obj->flags&=~OSDFLAG_FORCE_UPDATE;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
547 }
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
548 if(obj->flags&OSDFLAG_CHANGED){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
549 chg|=1<<obj->type;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
550 mp_msg(MSGT_OSD,MSGL_DBG2,"OSD chg: %d V: %s pb:%d \n",obj->type,(obj->flags&OSDFLAG_VISIBLE)?"yes":"no",vo_osd_progbar_type);
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
551 }
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
552 obj=obj->next;
4081
9e581ab5e54b Add vobsub support, suppress conditionnal on USE_DVDREAD.
kmkaplan
parents: 3180
diff changeset
553 }
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
554 return chg;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
555 }
4081
9e581ab5e54b Add vobsub support, suppress conditionnal on USE_DVDREAD.
kmkaplan
parents: 3180
diff changeset
556
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
557 void vo_init_osd(){
947
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 865
diff changeset
558 if(!draw_alpha_init_flag){
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 865
diff changeset
559 draw_alpha_init_flag=1;
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 865
diff changeset
560 vo_draw_alpha_init();
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 865
diff changeset
561 }
6110
7bea806b9c5f Improvment for spu subtitles.
albeu
parents: 5664
diff changeset
562 if(vo_osd_list) free_osd_list();
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
563 // temp hack, should be moved to mplayer/mencoder later
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
564 new_osd_obj(OSDTYPE_OSD);
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
565 new_osd_obj(OSDTYPE_SUBTITLE);
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
566 new_osd_obj(OSDTYPE_PROGBAR);
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
567 new_osd_obj(OSDTYPE_SPU);
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
568 #ifdef HAVE_FREETYPE
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
569 force_load_font = 1;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
570 #endif
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
571 }
947
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 865
diff changeset
572
5642
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
573 int vo_osd_changed_flag=0;
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
574
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
575 void vo_remove_text(int dxs,int dys,void (*remove)(int x0,int y0, int w,int h)){
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
576 mp_osd_obj_t* obj=vo_osd_list;
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
577 vo_update_osd(dxs,dys);
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
578 while(obj){
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
579 if(((obj->flags&OSDFLAG_CHANGED) || (obj->flags&OSDFLAG_VISIBLE)) &&
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
580 (obj->flags&OSDFLAG_OLD_BBOX)){
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
581 int w=obj->old_bbox.x2-obj->old_bbox.x1;
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
582 int h=obj->old_bbox.y2-obj->old_bbox.y1;
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
583 if(w>0 && h>0){
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
584 vo_osd_changed_flag=obj->flags&OSDFLAG_CHANGED; // temp hack
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
585 remove(obj->old_bbox.x1,obj->old_bbox.y1,w,h);
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
586 }
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
587 // obj->flags&=~OSDFLAG_OLD_BBOX;
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
588 }
5645
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
589 obj=obj->next;
5642
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
590 }
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
591 }
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
592
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
593 void vo_draw_text(int dxs,int dys,void (*draw_alpha)(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride)){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
594 mp_osd_obj_t* obj=vo_osd_list;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
595 vo_update_osd(dxs,dys);
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
596 while(obj){
5642
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
597 if(obj->flags&OSDFLAG_VISIBLE){
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
598 vo_osd_changed_flag=obj->flags&OSDFLAG_CHANGED; // temp hack
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
599 switch(obj->type){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
600 case OSDTYPE_SPU:
6190
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
601 vo_draw_spudec_sub(obj, draw_alpha); // FIXME
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
602 break;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
603 case OSDTYPE_OSD:
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
604 case OSDTYPE_SUBTITLE:
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
605 case OSDTYPE_PROGBAR:
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
606 vo_draw_text_from_buffer(obj,draw_alpha);
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
607 break;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
608 }
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
609 obj->old_bbox=obj->bbox;
5642
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
610 obj->flags|=OSDFLAG_OLD_BBOX;
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
611 }
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
612 obj->flags&=~OSDFLAG_CHANGED;
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
613 obj=obj->next;
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
614 }
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
615 }
3034
24d3dca4e813 DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents: 2498
diff changeset
616
4807
156482788caf osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents: 4773
diff changeset
617 static int vo_osd_changed_status = 0;
156482788caf osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents: 4773
diff changeset
618
156482788caf osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents: 4773
diff changeset
619 int vo_osd_changed(int new_value)
156482788caf osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents: 4773
diff changeset
620 {
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
621 mp_osd_obj_t* obj=vo_osd_list;
4807
156482788caf osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents: 4773
diff changeset
622 int ret = vo_osd_changed_status;
156482788caf osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents: 4773
diff changeset
623 vo_osd_changed_status = new_value;
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
624
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
625 while(obj){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
626 if(obj->type==new_value) obj->flags|=OSDFLAG_FORCE_UPDATE;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
627 obj=obj->next;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
628 }
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
629
4807
156482788caf osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents: 4773
diff changeset
630 return ret;
156482788caf osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents: 4773
diff changeset
631 }
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
632
5645
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
633 // BBBBBBBBBBBB AAAAAAAAAAAAA BBBBBBBBBBB
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
634 // BBBBBBBBBBBB BBBBBBBBBBBBB
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
635 // BBBBBBB
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
636
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
637 // return TRUE if we have osd in the specified rectangular area:
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
638 int vo_osd_check_range_update(int x1,int y1,int x2,int y2){
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
639 mp_osd_obj_t* obj=vo_osd_list;
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
640 while(obj){
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
641 if(obj->flags&OSDFLAG_VISIBLE){
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
642 if( (obj->bbox.x1<=x2 && obj->bbox.x2>=x1) &&
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
643 (obj->bbox.y1<=y2 && obj->bbox.y2>=y1) ) return 1;
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
644 }
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
645 obj=obj->next;
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
646 }
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
647 return 0;
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
648 }