summaryrefslogtreecommitdiffstats
path: root/libass/ass_utils.h
diff options
context:
space:
mode:
authoreugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-02-16 17:49:35 +0000
committereugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>2007-02-16 17:49:35 +0000
commit9801dc05977c9fef203dacee72ded221c7c36f1a (patch)
tree877815d2310389f509827c61bd1607e33bfa4ab8 /libass/ass_utils.h
parent5769ecba8ee5552c4fb08db52753942757a06cb1 (diff)
downloadlibass-9801dc05977c9fef203dacee72ded221c7c36f1a.tar.bz2
libass-9801dc05977c9fef203dacee72ded221c7c36f1a.tar.xz
Move conversions between 16.16, 26.6 fixed point and int, double to separate
functions. Some rounding errors are fixed along the way. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@22231 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libass/ass_utils.h')
-rw-r--r--libass/ass_utils.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/libass/ass_utils.h b/libass/ass_utils.h
index c445390..6c4ecce 100644
--- a/libass/ass_utils.h
+++ b/libass/ass_utils.h
@@ -25,5 +25,31 @@ int mystrtoi(char** p, int base, int* res);
int mystrtou32(char** p, int base, uint32_t* res);
int mystrtod(char** p, double* res);
int strtocolor(char** q, uint32_t* res);
+
+static inline int d6_to_int(int x) {
+ return (x + 32) >> 6;
+}
+static inline int d16_to_int(int x) {
+ return (x + 32768) >> 16;
+}
+static inline int int_to_d6(int x) {
+ return x << 6;
+}
+static inline int int_to_d16(int x) {
+ return x << 16;
+}
+static inline int d16_to_d6(int x) {
+ return (x + 512) >> 10;
+}
+static inline int d6_to_d16(int x) {
+ return x << 10;
+}
+static inline double d6_to_double(int x) {
+ return x / 64.;
+}
+static inline int double_to_d6(double x) {
+ return (int)(x * 64);
+}
+
#endif