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; }
void video_overlay_render_cleartext(video_decoder_t *vd, const char *txt, int64_t start, int64_t stop, int tags) { uint32_t *uc; int len; video_overlay_t *vo; if(strlen(txt) == 0) { vo = calloc(1, sizeof(video_overlay_t)); } else { uint32_t pfx[5]; 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; uc = text_parse(txt, &len, tags ? (TEXT_PARSE_TAGS | TEXT_PARSE_HTML_ENTETIES) : 0, pfx, 5); if(uc == NULL) return; 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 } vo->vo_start = start; vo->vo_stop = stop; video_overlay_enqueue(vd, vo); }
static int vtxt_create (sqlite3 * db, void *pAux, int argc, const char *const *argv, sqlite3_vtab ** ppVTab, char **pzErr) { /* creates the virtual table connected to some TEXT file */ char path[2048]; char encoding[128]; const char *vtable; const char *pEncoding = NULL; int len; struct text_buffer *text = NULL; const char *pPath = NULL; char field_separator = '\t'; char text_separator = '"'; char decimal_separator = '.'; char first_line_titles = 1; int i; char sql[4096]; int seed; int dup; int idup; char dummyName[4096]; char **col_name = NULL; VirtualTextPtr p_vt; /* checking for TEXTfile PATH */ if (argc >= 5 && argc <= 9) { vtable = argv[1]; pPath = argv[3]; len = strlen (pPath); if (*(pPath + 0) == '\'' || *(pPath + 0) == '"' && *(pPath + len - 1) == '\'' || *(pPath + len - 1) == '"') { /* the path is enclosed between quotes - we need to dequote it */ strcpy (path, pPath + 1); len = strlen (path); *(path + len - 1) = '\0'; } else strcpy (path, pPath); pEncoding = argv[4]; len = strlen (pEncoding); if (*(pEncoding + 0) == '\'' || *(pEncoding + 0) == '"' && *(pEncoding + len - 1) == '\'' || *(pEncoding + len - 1) == '"') { /* the charset-name is enclosed between quotes - we need to dequote it */ strcpy (encoding, pEncoding + 1); len = strlen (encoding); *(encoding + len - 1) = '\0'; } else strcpy (encoding, pEncoding); if (argc >= 6) { if (*(argv[5]) == '0' || *(argv[5]) == 'n' || *(argv[5]) == 'N') first_line_titles = 0; } if (argc >= 7) { if (strcasecmp (argv[6], "COMMA") == 0) decimal_separator = ','; } if (argc >= 8) { if (strcasecmp (argv[7], "SINGLEQUOTE") == 0) text_separator = '\''; } if (argc == 9) { if (strlen (argv[8]) == 3) { if (strcasecmp(argv[8], "TAB") == 0) field_separator = '\t'; if (*(argv[8] + 0) == '\'' && *(argv[8] + 2) == '\'') field_separator = *(argv[8] + 1); } } } else { *pzErr = sqlite3_mprintf ("[VirtualText module] CREATE VIRTUAL: illegal arg list\n" "\t\t{ text_path, encoding [, titles [, [decimal_separator [, text_separator, [field_separator] ] ] ] }\n"); return SQLITE_ERROR; } p_vt = (VirtualTextPtr) sqlite3_malloc (sizeof (VirtualText)); if (!p_vt) return SQLITE_NOMEM; p_vt->pModule = &virtualtext_module; p_vt->nRef = 0; p_vt->zErrMsg = NULL; p_vt->db = db; text = text_parse (path, encoding, first_line_titles, field_separator, text_separator, decimal_separator); if (!text) { /* something is going the wrong way; creating a stupid default table */ sprintf (sql, "CREATE TABLE %s (ROWNO INTEGER)", vtable); if (sqlite3_declare_vtab (db, sql) != SQLITE_OK) { *pzErr = sqlite3_mprintf ("[VirtualText module] cannot build a table from TEXT file\n"); return SQLITE_ERROR; } p_vt->buffer = NULL; *ppVTab = (sqlite3_vtab *) p_vt; return SQLITE_OK; } p_vt->buffer = text; /* preparing the COLUMNs for this VIRTUAL TABLE */ sprintf (sql, "CREATE TABLE %s (ROWNO INTEGER", vtable); col_name = malloc (sizeof (char *) * text->max_n_cells); seed = 0; for (i = 0; i < text->max_n_cells; i++) { strcat (sql, ", "); /* if (illegalSqlName (*(text->titles + i)) || isReservedSqlName (*(text->titles + i)) || isReservedSqliteName (*(text->titles + i))) sprintf (dummyName, "COL_%d", seed++); else strcpy (dummyName, *(text->titles + i)); */ sprintf (dummyName, "\"%s\"", *(text->titles + i)); dup = 0; for (idup = 0; idup < i; idup++) { if (strcasecmp (dummyName, *(col_name + idup)) == 0) dup = 1; } if (strcasecmp (dummyName, "PKUID") == 0) dup = 1; if (strcasecmp (dummyName, "Geometry") == 0) dup = 1; if (dup) sprintf (dummyName, "COL_%d", seed++); len = strlen (dummyName); *(col_name + i) = malloc (len + 1); strcpy (*(col_name + i), dummyName); strcat (sql, dummyName); if (*(text->types + i) == VRTTXT_INTEGER) strcat (sql, " INTEGER"); else if (*(text->types + i) == VRTTXT_DOUBLE) strcat (sql, " DOUBLE"); else strcat (sql, " TEXT"); } strcat (sql, ")"); if (col_name) { /* releasing memory allocation for column names */ for (i = 0; i < text->max_n_cells; i++) free (*(col_name + i)); free (col_name); } if (sqlite3_declare_vtab (db, sql) != SQLITE_OK) { *pzErr = sqlite3_mprintf ("[VirtualText module] CREATE VIRTUAL: invalid SQL statement \"%s\"", sql); return SQLITE_ERROR; } *ppVTab = (sqlite3_vtab *) p_vt; return SQLITE_OK; }