summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libass/ass_render.c6
-rw-r--r--libass/ass_utils.h15
2 files changed, 18 insertions, 3 deletions
diff --git a/libass/ass_render.c b/libass/ass_render.c
index 1dc347f..22edce8 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 f5c68e9..ad8574c 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