diff options
Diffstat (limited to 'libass')
-rw-r--r-- | libass/ass_render.c | 6 | ||||
-rw-r--r-- | libass/ass_utils.h | 15 |
2 files changed, 18 insertions, 3 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c index 1dc347f6..22edce81 100644 --- a/libass/ass_render.c +++ b/libass/ass_render.c @@ -1915,11 +1915,11 @@ ass_render_event(ASS_Renderer *render_priv, ASS_Event *event, text_info->glyphs[text_info->length].hash_key.scale_y = render_priv->state.scale_y * 0xFFFF; text_info->glyphs[text_info->length].hash_key.frx = - render_priv->state.frx * 0xFFFF; + rot_key(render_priv->state.frx); text_info->glyphs[text_info->length].hash_key.fry = - render_priv->state.fry * 0xFFFF; + rot_key(render_priv->state.fry); text_info->glyphs[text_info->length].hash_key.frz = - render_priv->state.frz * 0xFFFF; + rot_key(render_priv->state.frz); text_info->glyphs[text_info->length].hash_key.fax = render_priv->state.fax * 0xFFFF; text_info->glyphs[text_info->length].hash_key.fay = diff --git a/libass/ass_utils.h b/libass/ass_utils.h index f5c68e96..ad8574c1 100644 --- a/libass/ass_utils.h +++ b/libass/ass_utils.h @@ -102,6 +102,21 @@ static inline int double_to_d16(double x) { return (int) (x * 0x10000); } +static inline double d22_to_double(int x) +{ + return ((double) x) / 0x400000; +} +static inline int double_to_d22(double x) +{ + return (int) (x * 0x400000); +} + +// Calculate cache key for a rotational angle in degrees +static inline int rot_key(double a) +{ + const int m = double_to_d22(360.0); + return double_to_d22(a) % m; +} #define FNV1_32A_INIT (unsigned)0x811c9dc5 |