comparison libass/ass_parse.c @ 34011:88eebbbbd6a0

Update included libass copy to 0.9.13 release. Besides a license change to BSD license and other (minor?) fixes, this fixes possible crashes with the latest (2.4.6?) freetype release.
author reimar
date Sun, 11 Sep 2011 10:33:13 +0000
parents ac6e48baa03d
children 6e7f60f6f9d4
comparison
equal deleted inserted replaced
34010:1930c0a745df 34011:88eebbbbd6a0
357 if (mystrtod(&p, &val)) 357 if (mystrtod(&p, &val))
358 render_priv->state.hspacing = 358 render_priv->state.hspacing =
359 render_priv->state.hspacing * (1 - pwr) + val * pwr; 359 render_priv->state.hspacing * (1 - pwr) + val * pwr;
360 else 360 else
361 render_priv->state.hspacing = render_priv->state.style->Spacing; 361 render_priv->state.hspacing = render_priv->state.style->Spacing;
362 } else if (mystrcmp(&p, "fs+")) {
363 double val;
364 if (mystrtod(&p, &val)) {
365 val = render_priv->state.font_size + pwr * val;
366 } else
367 val = render_priv->state.style->FontSize;
368 if (render_priv->state.font)
369 change_font_size(render_priv, val);
370 } else if (mystrcmp(&p, "fs-")) {
371 double val;
372 if (mystrtod(&p, &val))
373 val = render_priv->state.font_size - pwr * val;
374 else
375 val = render_priv->state.style->FontSize;
376 if (render_priv->state.font)
377 change_font_size(render_priv, val);
362 } else if (mystrcmp(&p, "fs")) { 378 } else if (mystrcmp(&p, "fs")) {
363 double val; 379 double val;
364 if (mystrtod(&p, &val)) 380 if (mystrtod(&p, &val))
365 val = render_priv->state.font_size * (1 - pwr) + val * pwr; 381 val = render_priv->state.font_size * (1 - pwr) + val * pwr;
366 else 382 else
485 if (v != 0) 501 if (v != 0)
486 v = 3 - v; 502 v = 3 - v;
487 val = ((val - 1) % 3) + 1; // horizontal alignment 503 val = ((val - 1) % 3) + 1; // horizontal alignment
488 val += v * 4; 504 val += v * 4;
489 ass_msg(render_priv->library, MSGL_DBG2, "align %d", val); 505 ass_msg(render_priv->library, MSGL_DBG2, "align %d", val);
490 render_priv->state.alignment = val; 506 if ((render_priv->state.parsed_tags & PARSED_A) == 0) {
507 render_priv->state.alignment = val;
508 render_priv->state.parsed_tags |= PARSED_A;
509 }
491 } else 510 } else
492 render_priv->state.alignment = 511 render_priv->state.alignment =
493 render_priv->state.style->Alignment; 512 render_priv->state.style->Alignment;
494 } else if (mystrcmp(&p, "a")) { 513 } else if (mystrcmp(&p, "a")) {
495 int val; 514 int val;
496 if (mystrtoi(&p, &val) && val) 515 if (mystrtoi(&p, &val) && val) {
497 // take care of a vsfilter quirk: handle illegal \a8 like \a5 516 if ((render_priv->state.parsed_tags & PARSED_A) == 0) {
498 render_priv->state.alignment = (val == 8) ? 5 : val; 517 // take care of a vsfilter quirk: handle illegal \a8 like \a5
499 else 518 render_priv->state.alignment = (val == 8) ? 5 : val;
519 render_priv->state.parsed_tags |= PARSED_A;
520 }
521 } else
500 render_priv->state.alignment = 522 render_priv->state.alignment =
501 render_priv->state.style->Alignment; 523 render_priv->state.style->Alignment;
502 } else if (mystrcmp(&p, "pos")) { 524 } else if (mystrcmp(&p, "pos")) {
503 double v1, v2; 525 double v1, v2;
504 skip('('); 526 skip('(');
548 mystrtoll(&p, &t3); 570 mystrtoll(&p, &t3);
549 skip(','); 571 skip(',');
550 mystrtoll(&p, &t4); 572 mystrtoll(&p, &t4);
551 } 573 }
552 skip(')'); 574 skip(')');
553 render_priv->state.fade = 575 if ((render_priv->state.parsed_tags & PARSED_FADE) == 0) {
554 interpolate_alpha(render_priv->time - 576 render_priv->state.fade =
555 render_priv->state.event->Start, t1, t2, 577 interpolate_alpha(render_priv->time -
556 t3, t4, a1, a2, a3); 578 render_priv->state.event->Start, t1, t2,
579 t3, t4, a1, a2, a3);
580 render_priv->state.parsed_tags |= PARSED_FADE;
581 }
557 } else if (mystrcmp(&p, "org")) { 582 } else if (mystrcmp(&p, "org")) {
558 int v1, v2; 583 int v1, v2;
559 skip('('); 584 skip('(');
560 mystrtoi(&p, &v1); 585 mystrtoi(&p, &v1);
561 skip(','); 586 skip(',');