annotate libvo/sub.c @ 18188:2a3ee651bba7

Make the sse CPU flag imply mmxext, Intel CPUs with SSE support mmxext without reporting it in the list of CPU flags.
author diego
date Sat, 22 Apr 2006 14:13:14 +0000
parents f580a7755ac5
children e75ab7767078
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"
8123
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 7628
diff changeset
7 #ifdef HAVE_MALLOC_H
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 7628
diff changeset
8 #include <malloc.h>
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 7628
diff changeset
9 #endif
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 7628
diff changeset
10
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
11 #include "mp_msg.h"
16923
a6a03ff1ddef Added translatable messages for OSD localization to help/help_mp-en.h
ptt
parents: 16839
diff changeset
12 #include "help_mp.h"
4088
4435dc3b8bef Add DVD subtitles to menoder
kmkaplan
parents: 4087
diff changeset
13 #include "video_out.h"
5294
4e64fca268e9 moved font_laod.h
arpi
parents: 4807
diff changeset
14 #include "font_load.h"
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
15 #include "sub.h"
13787
e047e70a9767 Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents: 13343
diff changeset
16 #include "spudec.h"
202
6ad0715dfac8 grey+alpha rendering support (for .sub)
arpi_esp
parents:
diff changeset
17
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
18 #define NEW_SPLITTING
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
19
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
20
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
21 // Structures needed for the new splitting algorithm.
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
22 // osd_text_t contains the single subtitle word.
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
23 // osd_text_p is used to mark the lines of subtitles
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
24 struct osd_text_t {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
25 int osd_kerning, //kerning with the previous word
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
26 osd_length, //orizontal length inside the bbox
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
27 text_length, //number of characters
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
28 *text; //characters
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
29 struct osd_text_t *prev,
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
30 *next;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
31 };
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
32
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
33 struct osd_text_p {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
34 int value;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
35 struct osd_text_t *ott;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
36 struct osd_text_p *prev,
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
37 *next;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
38 };
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
39 //^
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
40
2498
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
41 char * __sub_osd_names[]={
16923
a6a03ff1ddef Added translatable messages for OSD localization to help/help_mp-en.h
ptt
parents: 16839
diff changeset
42 MSGTR_VO_SUB_Seekbar,
a6a03ff1ddef Added translatable messages for OSD localization to help/help_mp-en.h
ptt
parents: 16839
diff changeset
43 MSGTR_VO_SUB_Play,
a6a03ff1ddef Added translatable messages for OSD localization to help/help_mp-en.h
ptt
parents: 16839
diff changeset
44 MSGTR_VO_SUB_Pause,
a6a03ff1ddef Added translatable messages for OSD localization to help/help_mp-en.h
ptt
parents: 16839
diff changeset
45 MSGTR_VO_SUB_Stop,
a6a03ff1ddef Added translatable messages for OSD localization to help/help_mp-en.h
ptt
parents: 16839
diff changeset
46 MSGTR_VO_SUB_Rewind,
a6a03ff1ddef Added translatable messages for OSD localization to help/help_mp-en.h
ptt
parents: 16839
diff changeset
47 MSGTR_VO_SUB_Forward,
a6a03ff1ddef Added translatable messages for OSD localization to help/help_mp-en.h
ptt
parents: 16839
diff changeset
48 MSGTR_VO_SUB_Clock,
a6a03ff1ddef Added translatable messages for OSD localization to help/help_mp-en.h
ptt
parents: 16839
diff changeset
49 MSGTR_VO_SUB_Contrast,
a6a03ff1ddef Added translatable messages for OSD localization to help/help_mp-en.h
ptt
parents: 16839
diff changeset
50 MSGTR_VO_SUB_Saturation,
a6a03ff1ddef Added translatable messages for OSD localization to help/help_mp-en.h
ptt
parents: 16839
diff changeset
51 MSGTR_VO_SUB_Volume,
a6a03ff1ddef Added translatable messages for OSD localization to help/help_mp-en.h
ptt
parents: 16839
diff changeset
52 MSGTR_VO_SUB_Brightness,
a6a03ff1ddef Added translatable messages for OSD localization to help/help_mp-en.h
ptt
parents: 16839
diff changeset
53 MSGTR_VO_SUB_Hue
2498
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
54 };
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
55 char * __sub_osd_names_short[] ={ "", "|>", "||", "[]", "<<" , ">>", "", "", "", "", "", ""};
38bb41c48d1f never declare variables in *.h files, pls
nick
parents: 2205
diff changeset
56
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents: 202
diff changeset
57 //static int vo_font_loaded=-1;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents: 202
diff changeset
58 font_desc_t* vo_font=NULL;
202
6ad0715dfac8 grey+alpha rendering support (for .sub)
arpi_esp
parents:
diff changeset
59
1991
dee4b2ea5e5b add gui support to config scripts, and fixed some warning.
pontscho
parents: 1878
diff changeset
60 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
61 int sub_unicode=0;
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
62 int sub_utf8=0;
4773
976bf6a9ded5 subtitle positioning patch by Jiri Svoboda
atmos4
parents: 4088
diff changeset
63 int sub_pos=100;
8583
4c18c4e7f34e -subwidth
arpi
parents: 8578
diff changeset
64 int sub_width_p=100;
16839
1b1b59b160ab make bottom alignment the default since it's the only sane mode when sub_pos is near bottom (default)
rfelker
parents: 16838
diff changeset
65 int sub_alignment=2; /* 0=top, 1=center, 2=bottom */
7628
d6608342591d This patch adds the functionality to disable/enable subtitles while playing
arpi
parents: 7121
diff changeset
66 int sub_visibility=1;
8617
6ffbe7608013 Me: -sub-bg-* would be nicer. "Background" is usually shortened as "bg", not "bkg".
rathann
parents: 8601
diff changeset
67 int sub_bg_color=0; /* subtitles background color */
6ffbe7608013 Me: -sub-bg-* would be nicer. "Background" is usually shortened as "bg", not "bkg".
rathann
parents: 8601
diff changeset
68 int sub_bg_alpha=0;
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents: 9036
diff changeset
69 int sub_justify=0;
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents: 202
diff changeset
70
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
71 // return the real height of a char:
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
72 static inline int get_height(int c,int h){
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
73 int font;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
74 if ((font=vo_font->font[c])>=0)
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
75 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
76 return h;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
77 }
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
78
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
79 // 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
80 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
81 {
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
82 int dststride = obj->stride;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
83 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
84 int srcskip = stride-w;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
85 int i, j;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
86 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
87 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
88 unsigned char *bs = src;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
89 unsigned char *as = srca;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
90
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
91 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
92 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
93 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
94 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
95 return;
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 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
99 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
100 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
101 if (*as) {
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
102 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
103 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
104 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
105 b+= dstskip;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
106 a+= dstskip;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
107 bs+= srcskip;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
108 as+= srcskip;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
109 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
110 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
111
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
112 // 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
113 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
114 {
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
115 int len;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
116 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
117 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
118 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
119 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
120 if (obj->allocated<len) {
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
121 obj->allocated = len;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
122 free(obj->bitmap_buffer);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
123 free(obj->alpha_buffer);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
124 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
125 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
126 }
8617
6ffbe7608013 Me: -sub-bg-* would be nicer. "Background" is usually shortened as "bg", not "bkg".
rathann
parents: 8601
diff changeset
127 memset(obj->bitmap_buffer, sub_bg_color, len);
6ffbe7608013 Me: -sub-bg-* would be nicer. "Background" is usually shortened as "bg", not "bkg".
rathann
parents: 8601
diff changeset
128 memset(obj->alpha_buffer, sub_bg_alpha, len);
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
129 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
130
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
131 // renders the buffer
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
132 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
133 if (obj->allocated > 0) {
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
134 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
135 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
136 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
137 obj->bitmap_buffer,
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
138 obj->alpha_buffer,
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
139 obj->stride);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
140 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
141 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
142
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
143 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
144 unsigned char *cp=vo_osd_text;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
145 int x=20;
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
146 int h=0;
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
147 int font;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
148
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
149 obj->bbox.x1=obj->x=x;
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
150 obj->bbox.y1=obj->y=10;
202
6ad0715dfac8 grey+alpha rendering support (for .sub)
arpi_esp
parents:
diff changeset
151
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
152 while (*cp){
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
153 int c=*cp++;
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
154 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
155 x+=vo_font->width[c]+vo_font->charspace;
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
156 h=get_height(c,h);
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
157 }
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
158
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
159 obj->bbox.x2=x-vo_font->charspace;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
160 obj->bbox.y2=obj->bbox.y1+h;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
161 obj->flags|=OSDFLAG_BBOX;
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
162
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
163 alloc_buf(obj);
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
164
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
165 cp=vo_osd_text;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
166 x = obj->x;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
167 while (*cp){
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
168 int c=*cp++;
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
169 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
170 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
171 vo_font->width[c],
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
172 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
173 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
174 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
175 vo_font->pic_a[font]->w);
213
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents: 202
diff changeset
176 x+=vo_font->width[c]+vo_font->charspace;
6ec8f6ab6cb1 subtitle+OSD font support
arpi_esp
parents: 202
diff changeset
177 }
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
178 }
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
179
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
180 int vo_osd_progbar_type=-1;
1726
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
181 int vo_osd_progbar_value=100; // 0..256
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
182
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
183 // if we have n=256 bars then OSD progbar looks like below
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
184 //
1878
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
185 // 0 1 2 3 ... 256 <= vo_osd_progbar_value
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
186 // | | | | |
1726
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
187 // [ === === === ... === ]
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
188 //
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
189 // the above schema is rescalled to n=elems bars
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
190
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
191 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
192
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
193 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
194
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
195 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
196 obj->flags&=~OSDFLAG_VISIBLE;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
197 return;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
198 }
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 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
201 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
202 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
203 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
204 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
205
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
206 // calculate bbox corners:
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
207 { int h=0;
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
208 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
209 int delimw=vo_font->width[OSD_PB_START]
1549
787c053b314c minor changes in sub.c
atlka
parents: 1548
diff changeset
210 +vo_font->width[OSD_PB_END]
787c053b314c minor changes in sub.c
atlka
parents: 1548
diff changeset
211 +vo_font->charspace;
1548
eee7951a23af changes according to proper subfont bar positioning and char spaceing - sub.c
atlka
parents: 1524
diff changeset
212 int width=(2*dxs-3*delimw)/3;
1549
787c053b314c minor changes in sub.c
atlka
parents: 1548
diff changeset
213 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
214 int elems=width/charw;
1549
787c053b314c minor changes in sub.c
atlka
parents: 1548
diff changeset
215 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
216 int delta = 0;
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
217 h=get_height(OSD_PB_START,h);
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
218 h=get_height(OSD_PB_END,h);
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
219 h=get_height(OSD_PB_0,h);
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
220 h=get_height(OSD_PB_1,h);
8422
1f1cc58e8e65 progbar osd buffer height adjustment fix
henry
parents: 8361
diff changeset
221 if (vo_osd_progbar_type>0 && vo_font->font[vo_osd_progbar_type]>=0){
1f1cc58e8e65 progbar osd buffer height adjustment fix
henry
parents: 8361
diff changeset
222 delta = vo_font->width[vo_osd_progbar_type]+vo_font->spacewidth;
1f1cc58e8e65 progbar osd buffer height adjustment fix
henry
parents: 8361
diff changeset
223 delta = (x-delta > 0) ? delta : x;
1f1cc58e8e65 progbar osd buffer height adjustment fix
henry
parents: 8361
diff changeset
224 h=get_height(vo_osd_progbar_type,h);
1f1cc58e8e65 progbar osd buffer height adjustment fix
henry
parents: 8361
diff changeset
225 }
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
226 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
227 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
228 obj->bbox.x2=x+width+delimw;
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
229 obj->bbox.y2=y+h; //vo_font->height;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
230 obj->flags|=OSDFLAG_BBOX;
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
231 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
232 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
233 }
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
234
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
235 alloc_buf(obj);
8794
056fc0a8b3d2 sanity check
henry
parents: 8635
diff changeset
236
056fc0a8b3d2 sanity check
henry
parents: 8635
diff changeset
237 {
056fc0a8b3d2 sanity check
henry
parents: 8635
diff changeset
238 int minw = vo_font->width[OSD_PB_START]+vo_font->width[OSD_PB_END]+vo_font->width[OSD_PB_0];
056fc0a8b3d2 sanity check
henry
parents: 8635
diff changeset
239 if (vo_osd_progbar_type>0 && vo_font->font[vo_osd_progbar_type]>=0){
056fc0a8b3d2 sanity check
henry
parents: 8635
diff changeset
240 minw += vo_font->width[vo_osd_progbar_type]+vo_font->charspace+vo_font->spacewidth;
056fc0a8b3d2 sanity check
henry
parents: 8635
diff changeset
241 }
056fc0a8b3d2 sanity check
henry
parents: 8635
diff changeset
242 if (obj->bbox.x2 - obj->bbox.x1 < minw) return; // space too small, don't render anything
056fc0a8b3d2 sanity check
henry
parents: 8635
diff changeset
243 }
056fc0a8b3d2 sanity check
henry
parents: 8635
diff changeset
244
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
245 // render it:
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
246 { unsigned char *s;
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
247 unsigned char *sa;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
248 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
249 int x=obj->x;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
250 int y=obj->y;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
251 int c,font;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
252 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
253 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
254
1726
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
255 if (vo_osd_progbar_value<=0)
38871427a131 corrections to OSD progbar position calculations
atlka
parents: 1602
diff changeset
256 mark=0;
1878
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
257 else {
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
258 int ev=vo_osd_progbar_value*elems;
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
259 mark=ev>>8;
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
260 if (ev & 0xFF) mark++;
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
261 if (mark>elems) mark=elems;
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
262 }
96ae64356ea0 corrections to OSD mark position
atlka
parents: 1852
diff changeset
263
1727
9da2b587b029 changes according to OSD calculations
atlka
parents: 1726
diff changeset
264
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
265 // printf("osd.progbar width=%d xpos=%d\n",width,x);
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
266
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
267 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
268 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
269 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
270 draw_alpha_buf(obj,(xp<0?0:xp),y,
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
271 vo_font->width[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
272 vo_font->pic_a[font]->h,
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
273 vo_font->pic_b[font]->bmp+vo_font->start[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
274 vo_font->pic_a[font]->bmp+vo_font->start[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
275 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
276 }
fcbfc99cf8e6 skip lines with negative y position if there is too many lines to display
atlka
parents: 1549
diff changeset
277
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
278 c=OSD_PB_START;
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
279 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
280 draw_alpha_buf(obj,x,y,
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
281 vo_font->width[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
282 vo_font->pic_a[font]->h,
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
283 vo_font->pic_b[font]->bmp+vo_font->start[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
284 vo_font->pic_a[font]->bmp+vo_font->start[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
285 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
286 x+=vo_font->width[c]+vo_font->charspace;
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
287
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
288 c=OSD_PB_0;
1602
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
289 if ((font=vo_font->font[c])>=0){
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
290 w=vo_font->width[c];
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
291 h=vo_font->pic_a[font]->h;
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
292 s=vo_font->pic_b[font]->bmp+vo_font->start[c];
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
293 sa=vo_font->pic_a[font]->bmp+vo_font->start[c];
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
294 st=vo_font->pic_a[font]->w;
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
295 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
296 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
297 x+=charw;
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
298 } while(--i);
1602
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
299 }
202
6ad0715dfac8 grey+alpha rendering support (for .sub)
arpi_esp
parents:
diff changeset
300
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
301 c=OSD_PB_1;
1602
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
302 if ((font=vo_font->font[c])>=0){
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
303 w=vo_font->width[c];
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
304 h=vo_font->pic_a[font]->h;
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
305 s =vo_font->pic_b[font]->bmp+vo_font->start[c];
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
306 sa=vo_font->pic_a[font]->bmp+vo_font->start[c];
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
307 st=vo_font->pic_a[font]->w;
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
308 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
309 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
310 x+=charw;
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
311 } while(--i);
1602
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
312 }
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
313
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
314 c=OSD_PB_END;
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
315 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
316 draw_alpha_buf(obj,x,y,
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
317 vo_font->width[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
318 vo_font->pic_a[font]->h,
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
319 vo_font->pic_b[font]->bmp+vo_font->start[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
320 vo_font->pic_a[font]->bmp+vo_font->start[c],
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
321 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
322 // 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
323
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
324 }
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
325 // vo_osd_progbar_value=(vo_osd_progbar_value+1)&0xFF;
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
326
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
327 }
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
328
254
57f0156416e3 use subreader's sub struct
arpi_esp
parents: 218
diff changeset
329 subtitle* vo_sub=NULL;
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
330
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
331 // 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
332
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
333 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
334 unsigned char *t;
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
335 int c,i,j,l,x,y,font,prevc,counter;
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
336 int len;
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
337 int k;
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
338 int lastStripPosition;
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
339 int xsize;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
340 int xmin=dxs,xmax=0;
1591
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
341 int h,lasth;
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
342 int xtblc, utblc;
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
343
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
344 obj->flags|=OSDFLAG_CHANGED|OSDFLAG_VISIBLE;
7628
d6608342591d This patch adds the functionality to disable/enable subtitles while playing
arpi
parents: 7121
diff changeset
345
12794
0d17f2b4292c don't use uninitialized font descriptions
faust3
parents: 11297
diff changeset
346 if(!vo_sub || !vo_font || !sub_visibility || (vo_font->font[40]<0)){
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
347 obj->flags&=~OSDFLAG_VISIBLE;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
348 return;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
349 }
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
350
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
351 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
352 obj->params.subtitle.lines=0;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
353
1602
48f589cf639b minor changes according to OSD
atlka
parents: 1591
diff changeset
354 // 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
355 i=k=lasth=0;
1591
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
356 h=vo_font->height;
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
357 lastStripPosition=-1;
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
358 l=vo_sub->lines;
86a192179276 draw speedups, cut text if too many lines
atlka
parents: 1574
diff changeset
359
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
360 {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
361 struct osd_text_t *osl, *cp_ott, *tmp_ott, *tmp;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
362 struct osd_text_p *otp_sub = NULL, *otp_sub_tmp, // these are used to store the whole sub text osd
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
363 *otp, *tmp_otp, *pmt; // these are used to manage sub text osd coming from a single sub line
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
364 int *char_seq, char_position, xlimit = dxs * sub_width_p / 100, counter;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
365
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
366 while (l) {
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
367 xsize = -vo_font->charspace;
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
368 l--;
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
369 t=vo_sub->text[i++];
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
370 len=strlen(t)-1;
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
371 char_position = 0;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
372 char_seq = (int *) malloc((len + 1) * sizeof(int));
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
373
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
374 prevc = -1;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
375
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
376 otp = NULL;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
377 osl = NULL;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
378 x = 1;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
379
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
380 // reading the subtitle words from vo_sub->text[]
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
381 for (j=0;j<=len;j++){
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
382 if ((c=t[j])>=0x80){
2176
1ae16a34f055 speed improvements
atlka
parents: 1991
diff changeset
383 if (sub_utf8){
1ae16a34f055 speed improvements
atlka
parents: 1991
diff changeset
384 if ((c & 0xe0) == 0xc0) /* 2 bytes U+00080..U+0007FF*/
1ae16a34f055 speed improvements
atlka
parents: 1991
diff changeset
385 c = (c & 0x1f)<<6 | (t[++j] & 0x3f);
8451
fb88ccbc5ccc compiler warning fixes
arpi
parents: 8422
diff changeset
386 else if((c & 0xf0) == 0xe0){ /* 3 bytes U+00800..U+00FFFF*/
fb88ccbc5ccc compiler warning fixes
arpi
parents: 8422
diff changeset
387 c = (((c & 0x0f)<<6) | (t[++j] & 0x3f))<<6;
fb88ccbc5ccc compiler warning fixes
arpi
parents: 8422
diff changeset
388 c |= (t[++j] & 0x3f);
fb88ccbc5ccc compiler warning fixes
arpi
parents: 8422
diff changeset
389 }
2176
1ae16a34f055 speed improvements
atlka
parents: 1991
diff changeset
390 } else if (sub_unicode)
1ae16a34f055 speed improvements
atlka
parents: 1991
diff changeset
391 c = (c<<8) + t[++j];
1501
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
392 }
d40f2b686846 changes according to -utf8 option, draw_osd() function added
atlka
parents: 1109
diff changeset
393 if (k==MAX_UCS){
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
394 len=j; // end here
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
395 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
396 }
2204
28901a4122c8 optimizations and corrections
atlka
parents: 2176
diff changeset
397 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
398 render_one_glyph(vo_font, c);
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
399
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
400 if (c == ' ') {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
401 struct osd_text_t *tmp_ott = (struct osd_text_t *) calloc(1, sizeof(struct osd_text_t));
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
402
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
403 if (osl == NULL) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
404 osl = cp_ott = tmp_ott;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
405 } else {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
406 tmp_ott->prev = cp_ott;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
407 cp_ott->next = tmp_ott;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
408 tmp_ott->osd_kerning =
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
409 vo_font->charspace + vo_font->width[' '];
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
410 cp_ott = tmp_ott;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
411 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
412 tmp_ott->osd_length = xsize;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
413 tmp_ott->text_length = char_position;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
414 tmp_ott->text = (int *) malloc(char_position * sizeof(int));
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
415 for (counter = 0; counter < char_position; ++counter)
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
416 tmp_ott->text[counter] = char_seq[counter];
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
417 char_position = 0;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
418 xsize = 0;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
419 prevc = c;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
420 } else {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
421 int delta_xsize = vo_font->width[c] + vo_font->charspace + kerning(vo_font, prevc, c);
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
422
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
423 if (xsize + delta_xsize <= dxs) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
424 if (!x) x = 1;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
425 prevc = c;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
426 char_seq[char_position++] = c;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
427 xsize += delta_xsize;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
428 if ((!suboverlap_enabled) && ((font = vo_font->font[c]) >= 0)) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
429 if (vo_font->pic_a[font]->h > h) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
430 h = vo_font->pic_a[font]->h;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
431 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
432 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
433 } else {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
434 if (x) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
435 mp_msg(MSGT_OSD, MSGL_WARN, "\nSubtitle word '%s' too long!\n", t);
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
436 x = 0;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
437 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
438 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
439 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
440 }// for len (all words from subtitle line read)
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
441
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
442 // osl holds an ordered (as they appear in the lines) chain of the subtitle words
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
443 {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
444 struct osd_text_t *tmp_ott = (struct osd_text_t *) calloc(1, sizeof(struct osd_text_t));
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
445
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
446 if (osl == NULL) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
447 osl = cp_ott = tmp_ott;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
448 } else {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
449 tmp_ott->prev = cp_ott;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
450 cp_ott->next = tmp_ott;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
451 tmp_ott->osd_kerning =
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
452 vo_font->charspace + vo_font->width[' '];
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
453 cp_ott = tmp_ott;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
454 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
455 tmp_ott->osd_length = xsize;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
456 tmp_ott->text_length = char_position;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
457 tmp_ott->text = (int *) malloc(char_position * sizeof(int));
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
458 for (counter = 0; counter < char_position; ++counter)
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
459 tmp_ott->text[counter] = char_seq[counter];
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
460 char_position = 0;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
461 xsize = -vo_font->charspace;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
462 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
463
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
464 if (osl != NULL) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
465 int value = 0, exit = 0, minimum = 0;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
466
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
467 // otp will contain the chain of the osd subtitle lines coming from the single vo_sub line.
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
468 otp = tmp_otp = (struct osd_text_p *) calloc(1, sizeof(struct osd_text_p));
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
469 tmp_otp->ott = osl;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
470 for (tmp_ott = tmp_otp->ott; exit == 0; ) {
11297
b4c7de4cfbf2 prevent lockups on words which do not fit on the screen - temporary fix
henry
parents: 11201
diff changeset
471 do {
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
472 value += tmp_ott->osd_kerning + tmp_ott->osd_length;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
473 tmp_ott = tmp_ott->next;
11297
b4c7de4cfbf2 prevent lockups on words which do not fit on the screen - temporary fix
henry
parents: 11201
diff changeset
474 } while ((tmp_ott != NULL) && (value + tmp_ott->osd_kerning + tmp_ott->osd_length <= xlimit));
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
475 if (tmp_ott != NULL) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
476 struct osd_text_p *tmp = (struct osd_text_p *) calloc(1, sizeof(struct osd_text_p));
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
477
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
478 tmp_otp->value = value;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
479 tmp_otp->next = tmp;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
480 tmp->prev = tmp_otp;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
481 tmp_otp = tmp;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
482 tmp_otp->ott = tmp_ott;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
483 value = -2 * vo_font->charspace - vo_font->width[' '];
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
484 } else {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
485 tmp_otp->value = value;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
486 exit = 1;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
487 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
488 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
489
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
490
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
491 #ifdef NEW_SPLITTING
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
492 // minimum holds the 'sum of the differences in lenght among the lines',
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
493 // a measure of the eveness of the lenghts of the lines
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
494 for (tmp_otp = otp; tmp_otp->next != NULL; tmp_otp = tmp_otp->next) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
495 pmt = tmp_otp->next;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
496 while (pmt != NULL) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
497 minimum += abs(tmp_otp->value - pmt->value);
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
498 pmt = pmt->next;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
499 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
500 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
501
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
502 if (otp->next != NULL) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
503 int mem1, mem2;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
504 struct osd_text_p *mem, *hold;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
505
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
506 exit = 0;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
507 // until the last word of a line can be moved to the beginning of following line
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
508 // reducing the 'sum of the differences in lenght among the lines', it is done
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
509 while (exit == 0) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
510 hold = NULL;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
511 exit = 1;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
512 for (tmp_otp = otp; tmp_otp->next != NULL; tmp_otp = tmp_otp->next) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
513 pmt = tmp_otp->next;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
514 for (tmp = tmp_otp->ott; tmp->next != pmt->ott; tmp = tmp->next);
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
515 if (pmt->value + tmp->osd_length + pmt->ott->osd_kerning <= xlimit) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
516 mem1 = tmp_otp->value;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
517 mem2 = pmt->value;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
518 tmp_otp->value = mem1 - tmp->osd_length - tmp->osd_kerning;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
519 pmt->value = mem2 + tmp->osd_length + pmt->ott->osd_kerning;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
520
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
521 value = 0;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
522 for (mem = otp; mem->next != NULL; mem = mem->next) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
523 pmt = mem->next;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
524 while (pmt != NULL) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
525 value += abs(mem->value - pmt->value);
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
526 pmt = pmt->next;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
527 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
528 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
529 if (value < minimum) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
530 minimum = value;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
531 hold = tmp_otp;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
532 exit = 0;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
533 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
534 tmp_otp->value = mem1;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
535 tmp_otp->next->value = mem2;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
536 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
537 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
538 // merging
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
539 if (exit == 0) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
540 tmp_otp = hold;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
541 pmt = tmp_otp->next;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
542 for (tmp = tmp_otp->ott; tmp->next != pmt->ott; tmp = tmp->next);
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
543 mem1 = tmp_otp->value;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
544 mem2 = pmt->value;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
545 tmp_otp->value = mem1 - tmp->osd_length - tmp->osd_kerning;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
546 pmt->value = mem2 + tmp->osd_length + pmt->ott->osd_kerning;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
547 pmt->ott = tmp;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
548 }//~merging
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
549 }//~while(exit == 0)
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
550 }//~if(otp->next!=NULL)
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
551 #endif
8534
922ce27eb683 This patch adds support for vertical subtitle alignment
arpi
parents: 8451
diff changeset
552
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
553 // adding otp (containing splitted lines) to otp chain
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
554 if (otp_sub == NULL) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
555 otp_sub = otp;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
556 for (otp_sub_tmp = otp_sub; otp_sub_tmp->next != NULL; otp_sub_tmp = otp_sub_tmp->next);
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
557 } else {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
558 //updating ott chain
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
559 tmp = otp_sub->ott;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
560 while (tmp->next != NULL) tmp = tmp->next;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
561 tmp->next = otp->ott;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
562 otp->ott->prev = tmp;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
563 //attaching new subtitle line at the end
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
564 otp_sub_tmp->next = otp;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
565 otp->prev = otp_sub_tmp;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
566 do
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
567 otp_sub_tmp = otp_sub_tmp->next;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
568 while (otp_sub_tmp->next != NULL);
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
569 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
570 }//~ if(osl != NULL)
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
571 } // while
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
572
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
573 // write lines into utbl
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
574 xtblc = 0;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
575 utblc = 0;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
576 obj->y = dys;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
577 obj->params.subtitle.lines = 0;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
578 for (tmp_otp = otp_sub; tmp_otp != NULL; tmp_otp = tmp_otp->next) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
579
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
580 if ((obj->params.subtitle.lines++) >= MAX_UCSLINES)
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
581 break;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
582
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
583 if (h > obj->y) { // out of the screen so end parsing
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
584 obj->y -= lasth - vo_font->height; // correct the y position
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
585 break;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
586 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
587 xsize = tmp_otp->value;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
588 obj->params.subtitle.xtbl[xtblc++] = (dxs - xsize) / 2;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
589 if (xmin > (dxs - xsize) / 2)
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
590 xmin = (dxs - xsize) / 2;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
591 if (xmax < (dxs + xsize) / 2)
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
592 xmax = (dxs + xsize) / 2;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
593
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
594 tmp = (tmp_otp->next == NULL) ? NULL : tmp_otp->next->ott;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
595 for (tmp_ott = tmp_otp->ott; tmp_ott != tmp; tmp_ott = tmp_ott->next) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
596 for (counter = 0; counter < tmp_ott->text_length; ++counter) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
597 if (utblc > MAX_UCS) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
598 break;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
599 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
600 c = tmp_ott->text[counter];
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
601 render_one_glyph(vo_font, c);
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
602 obj->params.subtitle.utbl[utblc++] = c;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
603 k++;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
604 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
605 obj->params.subtitle.utbl[utblc++] = ' ';
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
606 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
607 obj->params.subtitle.utbl[utblc - 1] = 0;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
608 obj->y -= vo_font->height;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
609 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
610 if(obj->params.subtitle.lines)
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
611 obj->y = dys - ((obj->params.subtitle.lines - 1) * vo_font->height + vo_font->pic_a[vo_font->font[40]]->h);
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
612
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
613 // free memory
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
614 if (otp_sub != NULL) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
615 for (tmp = otp_sub->ott; tmp->next != NULL; free(tmp->prev)) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
616 free(tmp->text);
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
617 tmp = tmp->next;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
618 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
619 free(tmp->text);
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
620 free(tmp);
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
621
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
622 for(pmt = otp_sub; pmt->next != NULL; free(pmt->prev)) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
623 pmt = pmt->next;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
624 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
625 free(pmt);
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
626 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
627
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
628 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
629 /// vertical alignment
8534
922ce27eb683 This patch adds support for vertical subtitle alignment
arpi
parents: 8451
diff changeset
630 h = dys - obj->y;
16838
fb79161e09f4 reverse incorrect sub alignment change, ok'd by diego
rfelker
parents: 16834
diff changeset
631 if (sub_alignment == 2)
8534
922ce27eb683 This patch adds support for vertical subtitle alignment
arpi
parents: 8451
diff changeset
632 obj->y = dys * sub_pos / 100 - h;
922ce27eb683 This patch adds support for vertical subtitle alignment
arpi
parents: 8451
diff changeset
633 else if (sub_alignment == 1)
922ce27eb683 This patch adds support for vertical subtitle alignment
arpi
parents: 8451
diff changeset
634 obj->y = dys * sub_pos / 100 - h / 2;
922ce27eb683 This patch adds support for vertical subtitle alignment
arpi
parents: 8451
diff changeset
635 else
922ce27eb683 This patch adds support for vertical subtitle alignment
arpi
parents: 8451
diff changeset
636 obj->y = dys * sub_pos / 100;
922ce27eb683 This patch adds support for vertical subtitle alignment
arpi
parents: 8451
diff changeset
637
922ce27eb683 This patch adds support for vertical subtitle alignment
arpi
parents: 8451
diff changeset
638 if (obj->y < 0)
922ce27eb683 This patch adds support for vertical subtitle alignment
arpi
parents: 8451
diff changeset
639 obj->y = 0;
922ce27eb683 This patch adds support for vertical subtitle alignment
arpi
parents: 8451
diff changeset
640 if (obj->y > dys - h)
922ce27eb683 This patch adds support for vertical subtitle alignment
arpi
parents: 8451
diff changeset
641 obj->y = dys - h;
922ce27eb683 This patch adds support for vertical subtitle alignment
arpi
parents: 8451
diff changeset
642
922ce27eb683 This patch adds support for vertical subtitle alignment
arpi
parents: 8451
diff changeset
643 obj->bbox.y2 = obj->y + h;
922ce27eb683 This patch adds support for vertical subtitle alignment
arpi
parents: 8451
diff changeset
644
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
645 // calculate bbox:
10263
0df8816f4665 TiVo demuxer and sub-cc/osd decoder
arpi
parents: 9036
diff changeset
646 if (sub_justify) xmin = 10;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
647 obj->bbox.x1=xmin;
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
648 obj->bbox.x2=xmax;
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
649 obj->bbox.y1=obj->y;
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
650 // obj->bbox.y2=obj->y+obj->params.subtitle.lines*vo_font->height;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
651 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
652
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
653 alloc_buf(obj);
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
654
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
655 y = obj->y;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
656
13343
1a4b6e575484 This time is a patch to improve subtitle alignment management. It
faust3
parents: 12794
diff changeset
657 obj->alignment = 0;
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
658 switch(vo_sub->alignment) {
13343
1a4b6e575484 This time is a patch to improve subtitle alignment management. It
faust3
parents: 12794
diff changeset
659 case SUB_ALIGNMENT_BOTTOMLEFT:
1a4b6e575484 This time is a patch to improve subtitle alignment management. It
faust3
parents: 12794
diff changeset
660 case SUB_ALIGNMENT_MIDDLELEFT:
1a4b6e575484 This time is a patch to improve subtitle alignment management. It
faust3
parents: 12794
diff changeset
661 case SUB_ALIGNMENT_TOPLEFT:
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
662 obj->alignment |= 0x1;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
663 break;
13343
1a4b6e575484 This time is a patch to improve subtitle alignment management. It
faust3
parents: 12794
diff changeset
664 case SUB_ALIGNMENT_BOTTOMRIGHT:
1a4b6e575484 This time is a patch to improve subtitle alignment management. It
faust3
parents: 12794
diff changeset
665 case SUB_ALIGNMENT_MIDDLERIGHT:
1a4b6e575484 This time is a patch to improve subtitle alignment management. It
faust3
parents: 12794
diff changeset
666 case SUB_ALIGNMENT_TOPRIGHT:
1a4b6e575484 This time is a patch to improve subtitle alignment management. It
faust3
parents: 12794
diff changeset
667 obj->alignment |= 0x2;
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
668 break;
13343
1a4b6e575484 This time is a patch to improve subtitle alignment management. It
faust3
parents: 12794
diff changeset
669 case SUB_ALIGNMENT_BOTTOMCENTER:
1a4b6e575484 This time is a patch to improve subtitle alignment management. It
faust3
parents: 12794
diff changeset
670 case SUB_ALIGNMENT_MIDDLECENTER:
1a4b6e575484 This time is a patch to improve subtitle alignment management. It
faust3
parents: 12794
diff changeset
671 case SUB_ALIGNMENT_TOPCENTER:
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
672 default:
13343
1a4b6e575484 This time is a patch to improve subtitle alignment management. It
faust3
parents: 12794
diff changeset
673 obj->alignment |= 0x0;
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
674 }
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
675
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
676 i=j=0;
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
677 if ((l = obj->params.subtitle.lines)) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
678 for(counter = dxs; i < l; ++i)
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
679 if (obj->params.subtitle.xtbl[i] < counter) counter = obj->params.subtitle.xtbl[i];
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
680 for (i = 0; i < l; ++i) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
681 switch (obj->alignment&0x3) {
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
682 case 1:
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
683 // left
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
684 x = counter;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
685 break;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
686 case 2:
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
687 // right
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
688 x = 2 * obj->params.subtitle.xtbl[i] - counter - ((obj->params.subtitle.xtbl[i] == counter) ? 0 : 1);
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
689 break;
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
690 default:
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
691 //center
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
692 x = obj->params.subtitle.xtbl[i];
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
693 }
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
694 prevc = -1;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
695 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
696 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
697 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
698 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
699 vo_font->width[c],
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
700 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
701 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
702 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
703 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
704 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
705 prevc = c;
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
706 }
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
707 y+=vo_font->height;
10916
c36db88bfbc4 Subtitle alignment & smart splitting by Salvatore Falco
henry
parents: 10263
diff changeset
708 }
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
709 }
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
710
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
711 }
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
712
6190
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
713 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
714 {
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
715 unsigned int bbox[4];
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
716 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
717 obj->bbox.x1 = bbox[0];
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
718 obj->bbox.x2 = bbox[1];
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
719 obj->bbox.y1 = bbox[2];
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
720 obj->bbox.y2 = bbox[3];
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
721 obj->flags |= OSDFLAG_BBOX;
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
722 }
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
723
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
724 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
725 {
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
726 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
727 }
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
728
3034
24d3dca4e813 DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents: 2498
diff changeset
729 void *vo_spudec=NULL;
4081
9e581ab5e54b Add vobsub support, suppress conditionnal on USE_DVDREAD.
kmkaplan
parents: 3180
diff changeset
730 void *vo_vobsub=NULL;
3034
24d3dca4e813 DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents: 2498
diff changeset
731
947
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 865
diff changeset
732 static int draw_alpha_init_flag=0;
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
733
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 16923
diff changeset
734 extern void vo_draw_alpha_init(void);
1109
a013b2124f05 -Wall like fixes
al3x
parents: 947
diff changeset
735
7067
b395b1240954 fix dxr3 subtitle handling and add some optimizations
pontscho
parents: 7003
diff changeset
736 mp_osd_obj_t* vo_osd_list=NULL;
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
737
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
738 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
739 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
740 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
741 osd->next=vo_osd_list;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
742 vo_osd_list=osd;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
743 osd->type=type;
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
744 osd->alpha_buffer = NULL;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
745 osd->bitmap_buffer = NULL;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
746 osd->allocated = -1;
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
747 return osd;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
748 }
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
749
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 16923
diff changeset
750 void free_osd_list(void){
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
751 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
752 while(obj){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
753 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
754 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
755 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
756 free(obj);
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
757 obj=next;
4081
9e581ab5e54b Add vobsub support, suppress conditionnal on USE_DVDREAD.
kmkaplan
parents: 3180
diff changeset
758 }
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
759 vo_osd_list=NULL;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
760 }
4081
9e581ab5e54b Add vobsub support, suppress conditionnal on USE_DVDREAD.
kmkaplan
parents: 3180
diff changeset
761
15085
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
762 #define FONT_LOAD_DEFER 6
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
763
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
764 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
765 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
766 int chg=0;
15085
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
767 #ifdef HAVE_FREETYPE
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
768 static int defer_counter = 0, prev_dxs = 0, prev_dys = 0;
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
769 #endif
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
770
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
771 #ifdef HAVE_FREETYPE
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
772 // here is the right place to get screen dimensions
15085
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
773 if (((dxs != vo_image_width)
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
774 && (subtitle_autoscale == 2 || subtitle_autoscale == 3))
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
775 || ((dys != vo_image_height)
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
776 && (subtitle_autoscale == 1 || subtitle_autoscale == 3)))
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
777 {
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
778 // screen dimensions changed
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
779 // wait a while to avoid useless reloading of the font
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
780 if (dxs == prev_dxs || dys == prev_dys) {
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
781 defer_counter++;
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
782 } else {
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
783 prev_dxs = dxs;
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
784 prev_dys = dys;
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
785 defer_counter = 0;
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
786 }
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
787 if (defer_counter >= FONT_LOAD_DEFER) force_load_font = 1;
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
788 }
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
789
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
790 if (!vo_font || force_load_font) {
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
791 force_load_font = 0;
8635
81dbd28ef7c0 these patches let ,,oldstyle'' and freetype subtitle renderers live
arpi
parents: 8617
diff changeset
792 load_font_ft(dxs, dys);
15085
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
793 prev_dxs = dxs;
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
794 prev_dys = dys;
1f8a1de5585c defer loading of the font after display size change to avoid useless
henry
parents: 15078
diff changeset
795 defer_counter = 0;
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
796 }
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
797 #endif
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
798
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
799 while(obj){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
800 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
801 int vis=obj->flags&OSDFLAG_VISIBLE;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
802 obj->flags&=~OSDFLAG_BBOX;
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
803 switch(obj->type){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
804 case OSDTYPE_SUBTITLE:
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
805 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
806 break;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
807 case OSDTYPE_PROGBAR:
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
808 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
809 break;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
810 case OSDTYPE_SPU:
7628
d6608342591d This patch adds the functionality to disable/enable subtitles while playing
arpi
parents: 7121
diff changeset
811 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
812 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
813 obj->flags|=OSDFLAG_VISIBLE|OSDFLAG_CHANGED;
6190
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
814 }
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
815 else
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
816 obj->flags&=~OSDFLAG_VISIBLE;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
817 break;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
818 case OSDTYPE_OSD:
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
819 if(vo_font && vo_osd_text && vo_osd_text[0]){
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
820 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
821 obj->flags|=OSDFLAG_VISIBLE|OSDFLAG_CHANGED;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
822 } else
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
823 obj->flags&=~OSDFLAG_VISIBLE;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
824 break;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
825 }
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
826 // check bbox:
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
827 if(!(obj->flags&OSDFLAG_BBOX)){
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
828 // we don't know, so assume the whole screen changed :(
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
829 obj->bbox.x1=obj->bbox.y1=0;
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
830 obj->bbox.x2=dxs;
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
831 obj->bbox.y2=dys;
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
832 obj->flags|=OSDFLAG_BBOX;
5664
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
833 } else {
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
834 // check bbox, reduce it if it's out of bounds (corners):
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
835 if(obj->bbox.x1<0) obj->bbox.x1=0;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
836 if(obj->bbox.y1<0) obj->bbox.y1=0;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
837 if(obj->bbox.x2>dxs) obj->bbox.x2=dxs;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
838 if(obj->bbox.y2>dys) obj->bbox.y2=dys;
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
839 if(obj->flags&OSDFLAG_VISIBLE)
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
840 // debug:
ee6c9530729f bbox calculation fixed (font->height < real height)
arpi
parents: 5645
diff changeset
841 mp_msg(MSGT_OSD,MSGL_DBG2,"OSD update: %d;%d %dx%d \n",
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
842 obj->bbox.x1,obj->bbox.y1,obj->bbox.x2-obj->bbox.x1,
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
843 obj->bbox.y2-obj->bbox.y1);
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
844 }
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
845 // check if visibility changed:
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
846 if(vis != (obj->flags&OSDFLAG_VISIBLE) ) obj->flags|=OSDFLAG_CHANGED;
5640
a0cee3bb7f78 osd: calculating bbox
arpi
parents: 5638
diff changeset
847 // 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
848 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
849 obj->flags&=~OSDFLAG_FORCE_UPDATE;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
850 }
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
851 if(obj->flags&OSDFLAG_CHANGED){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
852 chg|=1<<obj->type;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
853 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
854 }
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
855 obj=obj->next;
4081
9e581ab5e54b Add vobsub support, suppress conditionnal on USE_DVDREAD.
kmkaplan
parents: 3180
diff changeset
856 }
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
857 return chg;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
858 }
4081
9e581ab5e54b Add vobsub support, suppress conditionnal on USE_DVDREAD.
kmkaplan
parents: 3180
diff changeset
859
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 16923
diff changeset
860 void vo_init_osd(void){
947
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 865
diff changeset
861 if(!draw_alpha_init_flag){
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 865
diff changeset
862 draw_alpha_init_flag=1;
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 865
diff changeset
863 vo_draw_alpha_init();
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 865
diff changeset
864 }
6110
7bea806b9c5f Improvment for spu subtitles.
albeu
parents: 5664
diff changeset
865 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
866 // 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
867 new_osd_obj(OSDTYPE_OSD);
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
868 new_osd_obj(OSDTYPE_SUBTITLE);
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
869 new_osd_obj(OSDTYPE_PROGBAR);
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
870 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
871 #ifdef HAVE_FREETYPE
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
872 force_load_font = 1;
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
873 #endif
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
874 }
947
76fd9463b9d3 FAST_OSD option to disable font outline antialiasing
arpi_esp
parents: 865
diff changeset
875
5642
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
876 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
877
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
878 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
879 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
880 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
881 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
882 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
883 (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
884 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
885 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
886 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
887 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
888 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
889 }
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
890 // 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
891 }
5645
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
892 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
893 }
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
894 }
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
895
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
896 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
897 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
898 vo_update_osd(dxs,dys);
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
899 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
900 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
901 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
902 switch(obj->type){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
903 case OSDTYPE_SPU:
6190
bd6748605681 Bounding box and partial update patch for vob/dvdsub by Hephooey.
atmos4
parents: 6110
diff changeset
904 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
905 break;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
906 case OSDTYPE_OSD:
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
907 case OSDTYPE_SUBTITLE:
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
908 case OSDTYPE_PROGBAR:
7121
6abc330b5b32 subtitle/osd cache - pre-render text to a buffer with alpha and bitmap separated
arpi
parents: 7067
diff changeset
909 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
910 break;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
911 }
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
912 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
913 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
914 }
eb0cb6185e6c osd: ok, now it's possible to do partial draw/clear of the buffer only if changed
arpi
parents: 5640
diff changeset
915 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
916 obj=obj->next;
218
fbfc2077ba72 sub/osd interface changes
arpi_esp
parents: 213
diff changeset
917 }
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
918 }
3034
24d3dca4e813 DVD sub patch by Kim Minh Kaplan <kmkaplan@selfoffice.com>
arpi
parents: 2498
diff changeset
919
4807
156482788caf osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents: 4773
diff changeset
920 static int vo_osd_changed_status = 0;
156482788caf osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents: 4773
diff changeset
921
156482788caf osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents: 4773
diff changeset
922 int vo_osd_changed(int new_value)
156482788caf osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents: 4773
diff changeset
923 {
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
924 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
925 int ret = vo_osd_changed_status;
156482788caf osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents: 4773
diff changeset
926 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
927
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
928 while(obj){
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
929 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
930 obj=obj->next;
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
931 }
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
932
4807
156482788caf osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents: 4773
diff changeset
933 return ret;
156482788caf osd outside movie support for vo_sdl, patch by Fredrik Kuivinen
atmos4
parents: 4773
diff changeset
934 }
5638
86663f1b9b00 new osd code, use osd objs to follow changes and do minimal updates
arpi
parents: 5503
diff changeset
935
5645
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
936 // BBBBBBBBBBBB AAAAAAAAAAAAA BBBBBBBBBBB
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
937 // BBBBBBBBBBBB BBBBBBBBBBBBB
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
938 // BBBBBBB
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
939
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
940 // 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
941 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
942 mp_osd_obj_t* obj=vo_osd_list;
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
943 while(obj){
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
944 if(obj->flags&OSDFLAG_VISIBLE){
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
945 if( (obj->bbox.x1<=x2 && obj->bbox.x2>=x1) &&
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
946 (obj->bbox.y1<=y2 && obj->bbox.y2>=y1) ) return 1;
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
947 }
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
948 obj=obj->next;
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
949 }
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
950 return 0;
bd5c0d8346f0 vo_osd_check_range_update() added + 10l fix
arpi
parents: 5642
diff changeset
951 }