MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / ff_ass_split_override_codes

Function ff_ass_split_override_codes

libavcodec/ass_split.c:483–576  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

481
482
483int ff_ass_split_override_codes(const ASSCodesCallbacks *callbacks, void *priv,
484 const char *buf)
485{
486 const char *text = NULL;
487 char new_line[2];
488 int text_len = 0;
489
490 while (buf && *buf) {
491 if (text && callbacks->text &&
492 (sscanf(buf, "\\%1[nN]", new_line) == 1 ||
493 !strncmp(buf, "{\\", 2))) {
494 callbacks->text(priv, text, text_len);
495 text = NULL;
496 }
497 if (sscanf(buf, "\\%1[nN]", new_line) == 1) {
498 if (callbacks->new_line)
499 callbacks->new_line(priv, new_line[0] == 'N');
500 buf += 2;
501 } else if (!strncmp(buf, "{\\", 2)) {
502 buf++;
503 while (*buf == '\\') {
504 char style[2], c[2], sep[2], c_num[2] = "0", tmp[128] = {0};
505 unsigned int color = 0xFFFFFFFF;
506 int len, size = -1, an = -1, alpha = -1;
507 int x1, y1, x2, y2, t1 = -1, t2 = -1;
508 if (sscanf(buf, "\\%1[bisu]%1[01\\}]%n", style, c, &len) > 1) {
509 int close = c[0] == '0' ? 1 : c[0] == '1' ? 0 : -1;
510 len += close != -1;
511 if (callbacks->style)
512 callbacks->style(priv, style[0], close);
513 } else if (sscanf(buf, "\\c%1[\\}]%n", sep, &len) > 0 ||
514 sscanf(buf, "\\c&H%X&%1[\\}]%n", &color, sep, &len) > 1 ||
515 sscanf(buf, "\\%1[1234]c%1[\\}]%n", c_num, sep, &len) > 1 ||
516 sscanf(buf, "\\%1[1234]c&H%X&%1[\\}]%n", c_num, &color, sep, &len) > 2) {
517 if (callbacks->color)
518 callbacks->color(priv, color, c_num[0] - '0');
519 } else if (sscanf(buf, "\\alpha%1[\\}]%n", sep, &len) > 0 ||
520 sscanf(buf, "\\alpha&H%2X&%1[\\}]%n", &alpha, sep, &len) > 1 ||
521 sscanf(buf, "\\%1[1234]a%1[\\}]%n", c_num, sep, &len) > 1 ||
522 sscanf(buf, "\\%1[1234]a&H%2X&%1[\\}]%n", c_num, &alpha, sep, &len) > 2) {
523 if (callbacks->alpha)
524 callbacks->alpha(priv, alpha, c_num[0] - '0');
525 } else if (sscanf(buf, "\\fn%1[\\}]%n", sep, &len) > 0 ||
526 sscanf(buf, "\\fn%127[^\\}]%1[\\}]%n", tmp, sep, &len) > 1) {
527 if (callbacks->font_name)
528 callbacks->font_name(priv, tmp[0] ? tmp : NULL);
529 } else if (sscanf(buf, "\\fs%1[\\}]%n", sep, &len) > 0 ||
530 sscanf(buf, "\\fs%u%1[\\}]%n", &size, sep, &len) > 1) {
531 if (callbacks->font_size)
532 callbacks->font_size(priv, size);
533 } else if (sscanf(buf, "\\a%1[\\}]%n", sep, &len) > 0 ||
534 sscanf(buf, "\\a%2u%1[\\}]%n", &an, sep, &len) > 1 ||
535 sscanf(buf, "\\an%1[\\}]%n", sep, &len) > 0 ||
536 sscanf(buf, "\\an%1u%1[\\}]%n", &an, sep, &len) > 1) {
537 if (an != -1 && buf[2] != 'n')
538 an = (an&3) + (an&4 ? 6 : an&8 ? 3 : 0);
539 if (callbacks->alignment)
540 callbacks->alignment(priv, an);

Callers 4

webvtt_encode_frameFunction · 0.85
ttml_encode_frameFunction · 0.85
encode_frameFunction · 0.85
mov_text_encode_frameFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected