Exemplo n.º 1
0
static int
font_tag(uint32_t *output, int olen, const char *attrib, const char *value)
{
  if(!strcasecmp(attrib, "size"))
    return add_one_code(TR_CODE_FONT_SIZE |
			MAX(MIN(atoi(value), 7), 1), output, olen);
  if(!strcasecmp(attrib, "face"))
    return add_one_code(TR_CODE_FONT_FAMILY |
			freetype_family_id(value), output, olen);
  if(!strcasecmp(attrib, "color"))
    return add_one_code(TR_CODE_COLOR |
			makecolor(value), output, olen);
  return olen;
}
Exemplo n.º 2
0
video_overlay_t *
video_overlay_render_cleartext(const char *txt, int64_t start, int64_t stop,
			       int tags, int fontdomain)
{
  uint32_t *uc;
  int len, txt_len;
  video_overlay_t *vo;
  
  txt_len = strlen(txt);
  
  if(txt_len == 0) {
    vo = calloc(1, sizeof(video_overlay_t));
  } else {

    uint32_t pfx[6];

    pfx[0] = TR_CODE_COLOR | subtitle_settings.color;
    pfx[1] = TR_CODE_SHADOW | subtitle_settings.shadow_displacement;
    pfx[2] = TR_CODE_SHADOW_COLOR | subtitle_settings.shadow_color;
    pfx[3] = TR_CODE_OUTLINE | subtitle_settings.outline_size;
    pfx[4] = TR_CODE_OUTLINE_COLOR | subtitle_settings.outline_color;
    int pfxlen = 5;

    if(font_subs[0])
      pfx[pfxlen++] = TR_CODE_FONT_FAMILY |
	freetype_family_id(font_subs, fontdomain);

    uc = text_parse(txt, &len, tags, pfx, pfxlen, fontdomain);
    if(uc == NULL)
      return NULL;

    vo = calloc(1, sizeof(video_overlay_t));
    vo->vo_type = VO_TEXT;
    vo->vo_text = uc;
    vo->vo_text_length = len;
    vo->vo_padding_left = -1;  // auto padding
  }

  if(stop == PTS_UNSET) {
    stop = start + calculate_subtitle_duration(txt_len) * 1000000;
    vo->vo_stop_estimated = 1;
  }
  
  vo->vo_start = start;
  vo->vo_stop = stop;
  return vo;
}