static av_cold int init(AVFilterContext *ctx) { AssContext *ass = ctx->priv; if (!ass->filename) { av_log(ctx, AV_LOG_ERROR, "No filename provided!\n"); return AVERROR(EINVAL); } ass->library = ass_library_init(); if (!ass->library) { av_log(ctx, AV_LOG_ERROR, "Could not initialize libass.\n"); return AVERROR(EINVAL); } ass_set_message_cb(ass->library, ass_log, ctx); ass_set_fonts_dir(ass->library, ass->fontsdir); ass->renderer = ass_renderer_init(ass->library); if (!ass->renderer) { av_log(ctx, AV_LOG_ERROR, "Could not initialize libass renderer.\n"); return AVERROR(EINVAL); } return 0; }
void ass_library_done(ASS_Library *priv) { if (priv) { ass_set_fonts_dir(priv, NULL); ass_set_style_overrides(priv, NULL); ass_clear_fonts(priv); free(priv); } }
ASS_Library* ass_init(void) { ASS_Library* priv; char* path = get_path("fonts"); priv = ass_library_init(); ass_set_message_cb(priv, message_callback, NULL); ass_set_fonts_dir(priv, path); ass_mp_reset_config(priv); free(path); return priv; }
ass_library_t* ass_init(void) { ass_library_t* priv; char* path = get_path("fonts"); priv = ass_library_init(); ass_set_fonts_dir(priv, path); ass_set_extract_fonts(priv, extract_embedded_fonts); ass_set_style_overrides(priv, ass_force_style_list); free(path); return priv; }
csri_rend *csri_renderer_default() { csri_libass.ass_library = ass_library_init(); if (!csri_libass.ass_library) return NULL; ass_set_fonts_dir(csri_libass.ass_library, ""); ass_set_extract_fonts(csri_libass.ass_library, 0); ass_set_style_overrides(csri_libass.ass_library, NULL); return &csri_libass; }
ASS_Library* ass_init(void) { ASS_Library* priv; char* path = get_path("fonts"); priv = ass_library_init(); ass_set_message_cb(priv, message_callback, NULL); ass_set_fonts_dir(priv, path); ass_set_extract_fonts(priv, extract_embedded_fonts); ass_set_style_overrides(priv, ass_force_style_list); free(path); return priv; }
CDVDSubtitlesLibass::CDVDSubtitlesLibass() { //Setting the font directory to the temp dir(where mkv fonts are extracted to) std::string strPath = "special://temp/fonts/"; CLog::Log(LOGINFO, "CDVDSubtitlesLibass: Creating ASS library structure"); m_library = ass_library_init(); if(!m_library) return; ass_set_message_cb(m_library, libass_log, this); CLog::Log(LOGINFO, "CDVDSubtitlesLibass: Initializing ASS library font settings"); // libass uses fontconfig (system lib) which is not wrapped // so translate the path before calling into libass ass_set_fonts_dir(m_library, CSpecialProtocol::TranslatePath(strPath).c_str()); ass_set_extract_fonts(m_library, 1); ass_set_style_overrides(m_library, NULL); CLog::Log(LOGINFO, "CDVDSubtitlesLibass: Initializing ASS Renderer"); m_renderer = ass_renderer_init(m_library); if(!m_renderer) return; //Setting default font to the Arial in \media\fonts (used if FontConfig fails) const std::shared_ptr<CSettings> settings = CServiceBroker::GetSettingsComponent()->GetSettings(); strPath = URIUtils::AddFileToFolder("special://home/media/Fonts/", settings->GetString(CSettings::SETTING_SUBTITLES_FONT)); if (!XFILE::CFile::Exists(strPath)) strPath = URIUtils::AddFileToFolder("special://xbmc/media/Fonts/", settings->GetString(CSettings::SETTING_SUBTITLES_FONT)); int fc = !settings->GetBool(CSettings::SETTING_SUBTITLES_OVERRIDEASSFONTS); ass_set_margins(m_renderer, 0, 0, 0, 0); ass_set_use_margins(m_renderer, 0); ass_set_font_scale(m_renderer, 1); // libass uses fontconfig (system lib) which is not wrapped // so translate the path before calling into libass ass_set_fonts(m_renderer, CSpecialProtocol::TranslatePath(strPath).c_str(), "Arial", fc, NULL, 1); }
void LibASS::clearFonts() { ass_clear_fonts(ass); ass_set_fonts_dir(ass, NULL); }
static void VS_CC assInit(VSMap *in, VSMap *out, void **instanceData, VSNode *node, VSCore *core, const VSAPI *vsapi) { AssData *d = (AssData *) * instanceData; vsapi->setVideoInfo(d->vi, 2, node); d->ass_library = ass_library_init(); if(!d->ass_library) { vsapi->setError(out, "failed to initialize ASS library"); return; } ass_set_message_cb(d->ass_library, assDebugCallback, (void *)d->debuglevel); ass_set_extract_fonts(d->ass_library, 0); ass_set_style_overrides(d->ass_library, 0); d->ass_renderer = ass_renderer_init(d->ass_library); if(!d->ass_renderer) { vsapi->setError(out, "failed to initialize ASS renderer"); return; } ass_set_font_scale(d->ass_renderer, d->scale); ass_set_frame_size(d->ass_renderer, d->vi[0].width, d->vi[0].height); ass_set_margins(d->ass_renderer, d->margins[0], d->margins[1], d->margins[2], d->margins[3]); ass_set_use_margins(d->ass_renderer, 1); if(d->linespacing) ass_set_line_spacing(d->ass_renderer, d->linespacing); if(d->sar) { ass_set_aspect_ratio(d->ass_renderer, (double)d->vi[0].width / d->vi[0].height * d->sar, 1); } if(d->fontdir) ass_set_fonts_dir(d->ass_library, d->fontdir); ass_set_fonts(d->ass_renderer, NULL, NULL, 1, NULL, 1); if(d->file == NULL) { char *str, *text, x[16], y[16]; size_t siz; const char *fmt = "[Script Info]\n" "ScriptType: v4.00+\n" "PlayResX: %s\n" "PlayResY: %s\n" "[V4+ Styles]\n" "Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding\n" "Style: Default,%s\n" "[Events]\n" "Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\n" "Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,%s\n"; sprintf(x, "%d", d->vi[0].width); sprintf(y, "%d", d->vi[0].height); text = strrepl(d->text, "\n", "\\N"); siz = (strlen(fmt) + strlen(x) + strlen(y) + strlen(d->style) + strlen(text)) * sizeof(char); str = malloc(siz); sprintf(str, fmt, x, y, d->style, text); free(text); d->ass = ass_new_track(d->ass_library); ass_process_data(d->ass, str, strlen(str)); free(str); } else { d->ass = ass_read_file(d->ass_library, (char *)d->file, (char *)d->charset); } if(!d->ass) { vsapi->setError(out, "unable to parse input file"); return; } }
/***************************************************************************** * Create: Open libass decoder. *****************************************************************************/ static int Create( vlc_object_t *p_this ) { decoder_t *p_dec = (decoder_t *)p_this; decoder_sys_t *p_sys; if( p_dec->fmt_in.i_codec != VLC_CODEC_SSA ) return VLC_EGENERIC; p_dec->pf_decode_sub = DecodeBlock; p_dec->p_sys = p_sys = malloc( sizeof( decoder_sys_t ) ); if( !p_sys ) return VLC_ENOMEM; /* */ vlc_mutex_init( &p_sys->lock ); p_sys->i_refcount = 1; memset( &p_sys->fmt, 0, sizeof(p_sys->fmt) ); p_sys->i_max_stop = VLC_TS_INVALID; p_sys->p_library = NULL; p_sys->p_renderer = NULL; p_sys->p_track = NULL; /* Create libass library */ ASS_Library *p_library = p_sys->p_library = ass_library_init(); if( !p_library ) { msg_Warn( p_dec, "Libass library creation failed" ); DecSysRelease( p_sys ); return VLC_EGENERIC; } /* load attachments */ input_attachment_t **pp_attachments; int i_attachments; if( decoder_GetInputAttachments( p_dec, &pp_attachments, &i_attachments )) { i_attachments = 0; pp_attachments = NULL; } for( int k = 0; k < i_attachments; k++ ) { input_attachment_t *p_attach = pp_attachments[k]; if( !strcasecmp( p_attach->psz_mime, "application/x-truetype-font" ) ) { msg_Dbg( p_dec, "adding embedded font %s", p_attach->psz_name ); ass_add_font( p_sys->p_library, p_attach->psz_name, p_attach->p_data, p_attach->i_data ); } vlc_input_attachment_Delete( p_attach ); } free( pp_attachments ); ass_set_extract_fonts( p_library, true ); ass_set_style_overrides( p_library, NULL ); /* Create the renderer */ ASS_Renderer *p_renderer = p_sys->p_renderer = ass_renderer_init( p_library ); if( !p_renderer ) { msg_Warn( p_dec, "Libass renderer creation failed" ); DecSysRelease( p_sys ); return VLC_EGENERIC; } ass_set_use_margins( p_renderer, false); //if( false ) // ass_set_margins( p_renderer, int t, int b, int l, int r); ass_set_hinting( p_renderer, ASS_HINTING_LIGHT ); ass_set_font_scale( p_renderer, 1.0 ); ass_set_line_spacing( p_renderer, 0.0 ); const char *psz_font = NULL; /* We don't ship a default font with VLC */ const char *psz_family = "Arial"; /* Use Arial if we can't find anything more suitable */ #ifdef ANDROID /* is this useful? */ ass_set_fonts_dir( p_library, "/system/fonts" ); /* don't crash libass */ psz_font = "/system/fonts/DroidSansFallback.ttf"; #endif #ifdef HAVE_FONTCONFIG #if defined(WIN32) dialog_progress_bar_t *p_dialog = dialog_ProgressCreate( p_dec, _("Building font cache"), _( "Please wait while your font cache is rebuilt.\n" "This should take less than a minute." ), NULL ); if( p_dialog ) dialog_ProgressSet( p_dialog, NULL, 0.2 ); #endif ass_set_fonts( p_renderer, psz_font, psz_family, true, NULL, 1 ); // setup default font/family #ifdef WIN32 if( p_dialog ) { dialog_ProgressSet( p_dialog, NULL, 1.0 ); dialog_ProgressDestroy( p_dialog ); } #endif #else /* FIXME you HAVE to give him a font if no fontconfig */ ass_set_fonts( p_renderer, psz_font, psz_family, false, NULL, 1 ); #endif /* Add a track */ ASS_Track *p_track = p_sys->p_track = ass_new_track( p_sys->p_library ); if( !p_track ) { DecSysRelease( p_sys ); return VLC_EGENERIC; } ass_process_codec_private( p_track, p_dec->fmt_in.p_extra, p_dec->fmt_in.i_extra ); p_dec->fmt_out.i_cat = SPU_ES; p_dec->fmt_out.i_codec = VLC_CODEC_RGBA; return VLC_SUCCESS; }