{"push_id":591710880,"size":7,"distinct_size":3,"ref":"refs/heads/alpha","head":"482c81d5b024ace99b7b14279728e99a805a003e","before":"252c76b4b05396a6c3f47284a9abc1ea56ee1404","commits":[{"sha":"ba3f5ef88997f22507f58a9cc44e94d2dc070566","author":{"email":"1e908b0db5ffa80234f1bf7f5675a22bc18ed9fb@gmail.com","name":"Rodger Combs"},"message":"Define _GNU_SOURCE\n\nFixes #161","distinct":false,"url":"https://api.github.com/repos/astiob/libass/commits/ba3f5ef88997f22507f58a9cc44e94d2dc070566"},{"sha":"4f43ff2ca3bed41dfd122d1a34e88c08c06ca795","author":{"email":"af2b84f09c8719e0f2b649c9464c0e4e09337b2e@nowhere","name":"wm4"},"message":"Always use the new style with \\r and style overrides\n\nI don't know why it was done this way, but some fields were always taken\nfrom the event's style, instead of the (possibly different) \\r style.\nUndo this, as it seems like an unnecessary complication.","distinct":false,"url":"https://api.github.com/repos/astiob/libass/commits/4f43ff2ca3bed41dfd122d1a34e88c08c06ca795"},{"sha":"230f855fd3a80a6acfefe753b778b422191be26f","author":{"email":"af2b84f09c8719e0f2b649c9464c0e4e09337b2e@nowhere","name":"wm4"},"message":"Change what fields are overridden with style override\n\n\"Bold\" should obviously be taken from the script's style, like it's done\nwith StrikeOut and Underline.\n\ntreat_fontname_as_pattern is specific to the font, and thus should be\ntaken from the same style as the font (the override style).","distinct":false,"url":"https://api.github.com/repos/astiob/libass/commits/230f855fd3a80a6acfefe753b778b422191be26f"},{"sha":"51a93b5571acf51d3c7fe841d3e1e34720524c23","author":{"email":"af2b84f09c8719e0f2b649c9464c0e4e09337b2e@nowhere","name":"wm4"},"message":"Allow more fine grained control over style overrides\n\nAdd tons of ASS_OVERRIDE_ flags, which control whether certain ASS_Style\nfields are copied when doing selective style overrides with\nass_set_selective_style_override_enabled().\n\nThis comes with some cleanup. It should be fully backwards-compatible.","distinct":false,"url":"https://api.github.com/repos/astiob/libass/commits/51a93b5571acf51d3c7fe841d3e1e34720524c23"},{"sha":"abb47e5a6bbae1c63de45c7bfc42e003706668d7","author":{"email":"128f98cf59b3e88da3b9e012fc9458775e76c986@inbox.lv","name":"Oleg Oshmyan"},"message":"Make fix_outline always produce the correct final color\n\nWhenever a glyph has a border, the original glyph's own ASS_Image\nis applied on top of the border's ASS_Image. Let's mathematically\ndevise such alpha values for the border image that the resulting\ncolors exactly match (modulo rounding) the colors produced by a\nhypothetical ASS_Image that contains both the glyph and the border.\n\nLet a_i be the opacity of a single pixel within an ASS_Image,\nwhere i is either g for glyph or o for outline (border). Further,\nlet A_i be the opacity and c_i the color of the entire ASS_Image.\n\nThink of a_i as the _area_ covered by the glyph/border,\nmeasured in pixels. We have 0 <= a_g <= a_o <= 1.\nWe also have 0 <= A_g, A_o <= 1.\n\nWe need a background color. Let's denote it as c_b. The background\ncolor includes any effects from applying the shadow of the glyph.\n\nThe final color we want to achieve is:\n  * on the area covered by the original glyph,\n                                       A_g c_g + (1 - A_g) c_b.\n  * on the area covered by the border, A_o c_o + (1 - A_o) c_b.\n  * on the remaining area,             c_b.\nAveraging the color over the pixel's area gives:\n           a_g  (A_g c_g + (1 - A_g) c_b) +\n    (a_o - a_g) (A_o c_o + (1 - A_o) c_b) +\n      (1 - a_o)  c_b\n\nThe color we actually get after blending the border with the\nbackground and then blending the original glyph with the result is:\n        (A_g a_g) c_g +\n    (1 - A_g a_g) ((A_o a_o) c_o + (1 - A_o a_o) c_b)\n\nWe want to replace a_o in the actual color's expression with a\nvalue that makes it match the expected color. Let's call this value\na_o'. Equating both expressions and solving for a_o' gives:\n       A_o (c_o - c_b) = 0 and a_o' does not matter\n    or A_g a_g = 1 and a_o' does not matter\n    or a_o' = (a_o - a_g) / (1 - A_g a_g)\n\nIn the A_o (c_o - c_b) = 0 case, we can always pick an a_o' that\nsatisfies one of the other two conditions. Effectively we can\nignore the first case altogether.\n\nA_g a_g can only equal 1 if A_g = a_g = 1. Since a_g <= a_o <= 1,\na_o must also be 1. As it happens, libass already handles this case\nseparately: as a precaution, it checks that a_g < a_o and sets a_o'\nto zero if this condition fails to hold. This works fine, so let's\nretain this behavior.\n\nThis commit makes libass use the solution formula from the third\ncase to calculate a_o'. To enable this, the opacity of the original\nglyph is passed to fix_outline and outline_to_bitmap3. Generated\nbitmaps depend on it, so glyphs with different primary color alpha\nare now distinguished by the bitmap cache. The calculation itself\nis performed exactly and rounded correctly (half towards +infinity)\nusing only integer arithmetic.","distinct":true,"url":"https://api.github.com/repos/astiob/libass/commits/abb47e5a6bbae1c63de45c7bfc42e003706668d7"},{"sha":"105e3b92ce6e2f8c1f36d4b9f33b06539c31e017","author":{"email":"128f98cf59b3e88da3b9e012fc9458775e76c986@inbox.lv","name":"Oleg Oshmyan"},"message":"Omit fully transparent glyphs from non-opaque-box shadows\n\nIf there is an outline around the transparent glyph,\nthe shadow is supposed to be a copy of this outline.\n\nThis completes the fix made in commit f9283004,\nwhich covered the case where there is no outline.\n\nFixes Google Code issue #70.","distinct":true,"url":"https://api.github.com/repos/astiob/libass/commits/105e3b92ce6e2f8c1f36d4b9f33b06539c31e017"},{"sha":"482c81d5b024ace99b7b14279728e99a805a003e","author":{"email":"128f98cf59b3e88da3b9e012fc9458775e76c986@inbox.lv","name":"Oleg Oshmyan"},"message":"Make fix_outline more correct in presence of blur\n\nBlurred alphas are not coverage values. The area that is not\ncovered by the original glyph is a mix of the border and the\nbackground, governed by the blurred border opacities. To get\nan exact result, we need to integrate the blurred opacities\non fragments of pixels that exclude the original glyph (or,\nequivalently, on fragments that are covered by it, as these\nfragments are complementary). Unfortunately, we are unable\nto do that.\n\nGive up on exact values and treat each border pixel\nas a uniform average that directly scales with area.\nIn fact, blur itself already does this.\n\nNote that we can now get non-zero opacities even when the\nglyph's coverage is larger than the border's uncorrected\nopacity.\n\nWriting and solving equations like before, we obtain:\n       A_o (c_o - c_b) = 0 and a_o' does not matter\n    or A_g a_g = 1 and a_o' does not matter\n    or a_o' = (a_o - a_g a_o) / (1 - A_g a_g)\nHandle the first case like the third,\nand handle the second case by setting a_o' = 0.\n\nThe observable difference for non-blurred bitmaps\nwas not large in my tests, but the code is simple,\nso the exact non-blurred calculations are retained.","distinct":true,"url":"https://api.github.com/repos/astiob/libass/commits/482c81d5b024ace99b7b14279728e99a805a003e"}]}