summaryrefslogtreecommitdiffstats
path: root/libass/ass.c
diff options
context:
space:
mode:
authorOneric <oneric@oneric.stub>2021-09-26 00:22:06 +0200
committerOneric <oneric@oneric.stub>2021-12-14 20:54:05 +0100
commit7732119e53ef235942b9f4820f70a72c1d6045c2 (patch)
treede402c9dec3b71548c41b3aaa18c19ef74d37828 /libass/ass.c
parentc75017b4e7ad686009c0ac14b7d9b22db4811aa1 (diff)
downloadlibass-7732119e53ef235942b9f4820f70a72c1d6045c2.tar.bz2
libass-7732119e53ef235942b9f4820f70a72c1d6045c2.tar.xz
Refactor track features to bitflags
This is purely an internal refactor. With the existing and currently planned boolean features, a bit flag will scale better.
Diffstat (limited to 'libass/ass.c')
-rw-r--r--libass/ass.c30
1 files changed, 23 insertions, 7 deletions
diff --git a/libass/ass.c b/libass/ass.c
index 8581141..79a3532 100644
--- a/libass/ass.c
+++ b/libass/ass.c
@@ -1535,17 +1535,33 @@ fail:
int ass_track_set_feature(ASS_Track *track, ASS_Feature feature, int enable)
{
- switch (feature) {
- case ASS_FEATURE_INCOMPATIBLE_EXTENSIONS:
- //-fallthrough
+ if (feature >= sizeof(track->parser_priv->feature_flags) * CHAR_BIT || feature < 0)
+ return -1;
+
+ // all supported non-meta features
+ static const uint32_t supported =
#ifdef USE_FRIBIDI_EX_API
- case ASS_FEATURE_BIDI_BRACKETS:
- track->parser_priv->bidi_brackets = !!enable;
+ FEATURE_MASK(ASS_FEATURE_BIDI_BRACKETS) |
#endif
- return 0;
+ 0;
+ uint32_t requested = 0;
+
+ switch (feature) {
+ case ASS_FEATURE_INCOMPATIBLE_EXTENSIONS:
+ requested = supported;
+ break;
default:
- return -1;
+ if (!(FEATURE_MASK(feature) & supported))
+ return -1;
+ requested = FEATURE_MASK(feature);
}
+
+ if (enable)
+ track->parser_priv->feature_flags |= requested;
+ else
+ track->parser_priv->feature_flags &= ~requested;
+
+ return 0;
}
/**