Mercurial > mplayer.hg
annotate libass/ass_utils.h @ 32439:2f1ccd169a7f
Improve vd_ffmpeg aspect handling to respect container aspect if possible
(i.e. until the first resolution or aspect change) and to use correct
aspect if only resolution changes but not the pixel aspect.
author | reimar |
---|---|
date | Fri, 22 Oct 2010 17:36:11 +0000 |
parents | 48d020c5ceca |
children | 88eebbbbd6a0 |
rev | line source |
---|---|
20008
fa122b7c71c6
Add copyright notice and vim/emacs comments to libass and vf_ass.c.
eugeni
parents:
18937
diff
changeset
|
1 /* |
26723 | 2 * Copyright (C) 2006 Evgeniy Stepanov <eugeni.stepanov@gmail.com> |
3 * | |
26738
588ce97b44f2
Speak of libass instead of MPlayer in the libass license headers.
diego
parents:
26723
diff
changeset
|
4 * This file is part of libass. |
26723 | 5 * |
26738
588ce97b44f2
Speak of libass instead of MPlayer in the libass license headers.
diego
parents:
26723
diff
changeset
|
6 * libass is free software; you can redistribute it and/or modify |
26723 | 7 * it under the terms of the GNU General Public License as published by |
8 * the Free Software Foundation; either version 2 of the License, or | |
9 * (at your option) any later version. | |
10 * | |
26738
588ce97b44f2
Speak of libass instead of MPlayer in the libass license headers.
diego
parents:
26723
diff
changeset
|
11 * libass is distributed in the hope that it will be useful, |
26723 | 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 * GNU General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License along | |
26738
588ce97b44f2
Speak of libass instead of MPlayer in the libass license headers.
diego
parents:
26723
diff
changeset
|
17 * with libass; if not, write to the Free Software Foundation, Inc., |
26723 | 18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
19 */ | |
20008
fa122b7c71c6
Add copyright notice and vim/emacs comments to libass and vf_ass.c.
eugeni
parents:
18937
diff
changeset
|
20 |
25897
aaebaf255b23
Consistently give all libass multiple inclusion guards a LIBASS_ prefix.
diego
parents:
25535
diff
changeset
|
21 #ifndef LIBASS_UTILS_H |
aaebaf255b23
Consistently give all libass multiple inclusion guards a LIBASS_ prefix.
diego
parents:
25535
diff
changeset
|
22 #define LIBASS_UTILS_H |
18937 | 23 |
30200 | 24 #include <stdio.h> |
25 #include <stdarg.h> | |
26138
74055622161d
Add missing header #includes to fix 'make checkheaders'.
diego
parents:
26036
diff
changeset
|
26 #include <stdint.h> |
30200 | 27 #include <stdlib.h> |
28 #include <string.h> | |
29 #include <assert.h> | |
26138
74055622161d
Add missing header #includes to fix 'make checkheaders'.
diego
parents:
26036
diff
changeset
|
30 |
30200 | 31 #ifdef CONFIG_ENCA |
32 #include <enca.h> | |
33 #endif | |
34 | |
35 #include "ass.h" | |
36 | |
37 #define MSGL_FATAL 0 | |
38 #define MSGL_ERR 1 | |
39 #define MSGL_WARN 2 | |
40 #define MSGL_INFO 4 | |
41 #define MSGL_V 6 | |
42 #define MSGL_DBG2 7 | |
22213
66abe12ad374
Move conversions between 16.16, 26.6 fixed point and int, double to separate
eugeni
parents:
20503
diff
changeset
|
43 |
30200 | 44 #define FFMAX(a,b) ((a) > (b) ? (a) : (b)) |
45 #define FFMIN(a,b) ((a) > (b) ? (b) : (a)) | |
46 #define FFMINMAX(c,a,b) FFMIN(FFMAX(c, a), b) | |
47 | |
48 int mystrtoi(char **p, int *res); | |
49 int mystrtoll(char **p, long long *res); | |
50 int mystrtou32(char **p, int base, uint32_t *res); | |
51 int mystrtod(char **p, double *res); | |
52 int strtocolor(ASS_Library *library, char **q, uint32_t *res, int hex); | |
53 char parse_bool(char *str); | |
54 unsigned ass_utf8_get_char(char **str); | |
55 void ass_msg(ASS_Library *priv, int lvl, char *fmt, ...); | |
56 #ifdef CONFIG_ENCA | |
57 void *ass_guess_buffer_cp(ASS_Library *library, unsigned char *buffer, | |
58 int buflen, char *preferred_language, | |
59 char *fallback); | |
60 #endif | |
61 | |
62 /* defined in ass_strtod.c */ | |
63 double ass_strtod(const char *string, char **endPtr); | |
64 | |
65 static inline int d6_to_int(int x) | |
66 { | |
67 return (x + 32) >> 6; | |
22213
66abe12ad374
Move conversions between 16.16, 26.6 fixed point and int, double to separate
eugeni
parents:
20503
diff
changeset
|
68 } |
30200 | 69 static inline int d16_to_int(int x) |
70 { | |
71 return (x + 32768) >> 16; | |
72 } | |
73 static inline int int_to_d6(int x) | |
74 { | |
75 return x << 6; | |
22213
66abe12ad374
Move conversions between 16.16, 26.6 fixed point and int, double to separate
eugeni
parents:
20503
diff
changeset
|
76 } |
30200 | 77 static inline int int_to_d16(int x) |
78 { | |
79 return x << 16; | |
22213
66abe12ad374
Move conversions between 16.16, 26.6 fixed point and int, double to separate
eugeni
parents:
20503
diff
changeset
|
80 } |
30200 | 81 static inline int d16_to_d6(int x) |
82 { | |
83 return (x + 512) >> 10; | |
84 } | |
85 static inline int d6_to_d16(int x) | |
86 { | |
87 return x << 10; | |
22213
66abe12ad374
Move conversions between 16.16, 26.6 fixed point and int, double to separate
eugeni
parents:
20503
diff
changeset
|
88 } |
30200 | 89 static inline double d6_to_double(int x) |
90 { | |
91 return x / 64.; | |
22213
66abe12ad374
Move conversions between 16.16, 26.6 fixed point and int, double to separate
eugeni
parents:
20503
diff
changeset
|
92 } |
30200 | 93 static inline int double_to_d6(double x) |
94 { | |
95 return (int) (x * 64); | |
96 } | |
97 static inline double d16_to_double(int x) | |
98 { | |
99 return ((double) x) / 0x10000; | |
22213
66abe12ad374
Move conversions between 16.16, 26.6 fixed point and int, double to separate
eugeni
parents:
20503
diff
changeset
|
100 } |
30200 | 101 static inline int double_to_d16(double x) |
102 { | |
103 return (int) (x * 0x10000); | |
23299
0ee56ec36a40
Limit ass_font_set_transform to nonrotating transformations.
eugeni
parents:
22213
diff
changeset
|
104 } |
30200 | 105 static inline double d22_to_double(int x) |
106 { | |
107 return ((double) x) / 0x400000; | |
108 } | |
109 static inline int double_to_d22(double x) | |
110 { | |
111 return (int) (x * 0x400000); | |
23299
0ee56ec36a40
Limit ass_font_set_transform to nonrotating transformations.
eugeni
parents:
22213
diff
changeset
|
112 } |
22213
66abe12ad374
Move conversions between 16.16, 26.6 fixed point and int, double to separate
eugeni
parents:
20503
diff
changeset
|
113 |
30200 | 114 // Calculate cache key for a rotational angle in degrees |
115 static inline int rot_key(double a) | |
116 { | |
117 const int m = double_to_d22(360.0); | |
118 return double_to_d22(a) % m; | |
119 } | |
120 | |
121 #define FNV1_32A_INIT (unsigned)0x811c9dc5 | |
122 | |
123 static inline unsigned fnv_32a_buf(void *buf, size_t len, unsigned hval) | |
124 { | |
125 unsigned char *bp = buf; | |
126 unsigned char *be = bp + len; | |
127 while (bp < be) { | |
128 hval ^= (unsigned) *bp++; | |
129 hval += | |
130 (hval << 1) + (hval << 4) + (hval << 7) + (hval << 8) + | |
131 (hval << 24); | |
132 } | |
133 return hval; | |
134 } | |
135 static inline unsigned fnv_32a_str(char *str, unsigned hval) | |
136 { | |
137 unsigned char *s = (unsigned char *) str; | |
138 while (*s) { | |
139 hval ^= (unsigned) *s++; | |
140 hval += | |
141 (hval << 1) + (hval << 4) + (hval << 7) + (hval << 8) + | |
142 (hval << 24); | |
143 } | |
144 return hval; | |
145 } | |
146 | |
147 #endif /* LIBASS_UTILS_H */ |