Example #1
0
static bool resize_tmp(ASS_SynthPriv *priv, int w, int h)
{
    if (w >= INT_MAX || (w + 1) > SIZE_MAX / 2 / sizeof(unsigned) / FFMAX(h, 1))
        return false;
    size_t needed = sizeof(unsigned) * (w + 1) * h;
    if (priv->tmp && priv->tmp_allocated >= needed)
        return true;

    ass_aligned_free(priv->tmp);
    priv->tmp_allocated = FFMAX(needed, priv->tmp_allocated * 2);
    priv->tmp = ass_aligned_alloc(32, priv->tmp_allocated);
    return !!priv->tmp;
}
Example #2
0
Bitmap *alloc_bitmap(int w, int h)
{
    Bitmap *bm;

    unsigned align = (w >= 32) ? 32 : ((w >= 16) ? 16 : 1);
    unsigned s = ass_align(align, w);
    bm = malloc(sizeof(Bitmap));
    bm->buffer = ass_aligned_alloc(align, s * h + 32);
    memset(bm->buffer, 0, s * h + 32);
    bm->w = w;
    bm->h = h;
    bm->stride = s;
    bm->left = bm->top = 0;
    return bm;
}
Example #3
0
void resize_tmp(ASS_SynthPriv *priv, int w, int h)
{
    if (priv->tmp_w >= w && priv->tmp_h >= h)
        return;
    if (priv->tmp_w == 0)
        priv->tmp_w = 64;
    if (priv->tmp_h == 0)
        priv->tmp_h = 64;
    while (priv->tmp_w < w)
        priv->tmp_w *= 2;
    while (priv->tmp_h < h)
        priv->tmp_h *= 2;
    ass_aligned_free(priv->tmp);
    priv->tmp =
        ass_aligned_alloc(32, (priv->tmp_w + 1) * priv->tmp_h * sizeof(unsigned));
}
Example #4
0
static Bitmap *alloc_bitmap_raw(int w, int h)
{
    Bitmap *bm;

    unsigned align = (w >= 32) ? 32 : ((w >= 16) ? 16 : 1);
    size_t s = ass_align(align, w);
    // Too often we use ints as offset for bitmaps => use INT_MAX.
    if (s > (INT_MAX - 32) / FFMAX(h, 1))
        return NULL;
    bm = malloc(sizeof(Bitmap));
    if (!bm)
        return NULL;
    bm->buffer = ass_aligned_alloc(align, s * h + 32);
    if (!bm->buffer) {
        free(bm);
        return NULL;
    }
    bm->w = w;
    bm->h = h;
    bm->stride = s;
    bm->left = bm->top = 0;
    return bm;
}