diff options
author | eugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-09-03 17:42:31 +0000 |
---|---|---|
committer | eugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2006-09-03 17:42:31 +0000 |
commit | 9d3ed04d47732deccce6ea74932a96ccc290fead (patch) | |
tree | 3a574e128b8730ef77131a132b5e9624c66a9a93 /libass/ass.c | |
parent | 8ed46df92fd8ba6d687db6bbac2dde36dff67a5c (diff) | |
download | mpv-9d3ed04d47732deccce6ea74932a96ccc290fead.tar.bz2 mpv-9d3ed04d47732deccce6ea74932a96ccc290fead.tar.xz |
Add -ass-styles option. It allows to load styles from a file and use them
for plain text subtitles rendering.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@19658 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libass/ass.c')
-rw-r--r-- | libass/ass.c | 53 |
1 files changed, 43 insertions, 10 deletions
diff --git a/libass/ass.c b/libass/ass.c index 0425989f0a..0107a44e29 100644 --- a/libass/ass.c +++ b/libass/ass.c @@ -28,8 +28,10 @@ extern char** ass_force_style_list; char *get_path(char *); +typedef enum {PST_UNKNOWN = 0, PST_INFO, PST_STYLES, PST_EVENTS, PST_FONTS} parser_state_t; + struct parser_priv_s { - enum {PST_UNKNOWN = 0, PST_INFO, PST_STYLES, PST_EVENTS, PST_FONTS} state; + parser_state_t state; char* fontname; char* fontdata; int fontdata_size; @@ -844,18 +846,15 @@ static char* sub_recode(char* data, size_t size) #endif // ICONV /** - * \brief Read subtitles from file. - * \param fname file name - * \return newly allocated track -*/ -ass_track_t* ass_read_file(char* fname) + * \brief read file contents into newly allocated buffer, recoding to utf-8 + */ +static char* read_file(char* fname) { int res; long sz; long bytes_read; char* buf; - ass_track_t* track; - + FILE* fp = fopen(fname, "rb"); if (!fp) { mp_msg(MSGT_GLOBAL, MSGL_WARN, "ass_read_file(%s): fopen failed\n", fname); @@ -899,11 +898,25 @@ ass_track_t* ass_read_file(char* fname) if (sub_cp) { char* tmpbuf = sub_recode(buf, sz); free(buf); - if (!tmpbuf) - return 0; buf = tmpbuf; } #endif + return buf; +} + +/** + * \brief Read subtitles from file. + * \param fname file name + * \return newly allocated track +*/ +ass_track_t* ass_read_file(char* fname) +{ + char* buf; + ass_track_t* track; + + buf = read_file(fname); + if (!buf) + return 0; track = ass_new_track(); track->name = strdup(fname); @@ -930,6 +943,26 @@ ass_track_t* ass_read_file(char* fname) return track; } +/** + * \brief read styles from file into already initialized track + */ +int ass_read_styles(ass_track_t* track, char* fname) +{ + char* buf; + parser_state_t old_state; + + buf = read_file(fname); + if (!buf) + return 1; + + old_state = track->parser_priv->state; + track->parser_priv->state = PST_STYLES; + process_text(track, buf); + track->parser_priv->state = old_state; + + return 0; +} + static char* validate_fname(char* name) { char* fname; |